libmng-2.0.2/0000755000000000000000000000000012120336202011450 5ustar rootrootlibmng-2.0.2/libmng_callback_xs.c0000644000000000000000000011174212005307152015424 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_callback_xs.c copyright (c) 2000-2004 G.Juyn * */ /* * version : 1.0.9 * */ /* * * */ /* * purpose : callback get/set interface (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the callback get/set functions * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - fixed calling convention * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * * */ /* * 0.5.2 - 05/31/2000 - G.Juyn * */ /* * - fixed up punctuation (contribution by Tim Rowley) * */ /* * 0.5.2 - 06/02/2000 - G.Juyn * */ /* * - added getalphaline callback for RGB8_A8 canvasstyle * */ /* * * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - added callbacks for SAVE/SEEK processing * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - added support for nEED * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - added callback to process non-critical unknown chunks * */ /* * * */ /* * 1.0.1 - 02/08/2001 - G.Juyn * */ /* * - added MEND processing callback * */ /* * * */ /* * 1.0.2 - 06/23/2001 - G.Juyn * */ /* * - added processterm callback * */ /* * * */ /* * 1.0.6 - 07/07/2003 - G. R-P * */ /* * - added SKIPCHUNK feature * */ /* * * */ /* * 1.0.7 - 03/10/2004 - G.R-P * */ /* * - added conditionals around openstream/closestream * */ /* * 1.0.7 - 03/19/2004 - G.R-P * */ /* * - fixed typo (MNG_SKIPCHUNK_SAVE -> MNG_SKIPCHUNK_nEED * */ /* * * */ /* * 1.0.8 - 04/10/2004 - G.Juyn * */ /* * - added data-push mechanisms for specialized decoders * */ /* * * */ /* * 1.0.9 - 09/18/2004 - G.R-P. * */ /* * - added two SKIPCHUNK_TERM conditionals * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ /* * * */ /* * Callback set functions * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_INTERNAL_MEMMNGMT mng_retcode MNG_DECL mng_setcb_memalloc (mng_handle hHandle, mng_memalloc fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_MEMALLOC, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fMemalloc = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_MEMALLOC, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INTERNAL_MEMMNGMT */ /* ************************************************************************** */ #ifndef MNG_INTERNAL_MEMMNGMT mng_retcode MNG_DECL mng_setcb_memfree (mng_handle hHandle, mng_memfree fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_MEMFREE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fMemfree = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_MEMFREE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INTERNAL_MEMMNGMT */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_retcode MNG_DECL mng_setcb_releasedata (mng_handle hHandle, mng_releasedata fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_RELEASEDATA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fReleasedata = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_RELEASEDATA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) #ifndef MNG_NO_OPEN_CLOSE_STREAM mng_retcode MNG_DECL mng_setcb_openstream (mng_handle hHandle, mng_openstream fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_OPENSTREAM, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fOpenstream = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_OPENSTREAM, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) #ifndef MNG_NO_OPEN_CLOSE_STREAM mng_retcode MNG_DECL mng_setcb_closestream (mng_handle hHandle, mng_closestream fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_CLOSESTREAM, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fClosestream = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_CLOSESTREAM, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_retcode MNG_DECL mng_setcb_readdata (mng_handle hHandle, mng_readdata fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_READDATA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fReaddata = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_READDATA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_setcb_writedata (mng_handle hHandle, mng_writedata fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_WRITEDATA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fWritedata = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_WRITEDATA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ /* ************************************************************************** */ mng_retcode MNG_DECL mng_setcb_errorproc (mng_handle hHandle, mng_errorproc fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_ERRORPROC, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fErrorproc = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_ERRORPROC, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifdef MNG_SUPPORT_TRACE mng_retcode MNG_DECL mng_setcb_traceproc (mng_handle hHandle, mng_traceproc fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_TRACEPROC, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fTraceproc = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_TRACEPROC, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_TRACE */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_retcode MNG_DECL mng_setcb_processheader (mng_handle hHandle, mng_processheader fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSHEADER, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcessheader = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSHEADER, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ #ifndef MNG_SKIPCHUNK_tEXt mng_retcode MNG_DECL mng_setcb_processtext (mng_handle hHandle, mng_processtext fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSTEXT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcesstext = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSTEXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ #ifndef MNG_SKIPCHUNK_SAVE mng_retcode MNG_DECL mng_setcb_processsave (mng_handle hHandle, mng_processsave fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSSAVE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcesssave = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSSAVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ #ifndef MNG_SKIPCHUNK_SEEK mng_retcode MNG_DECL mng_setcb_processseek (mng_handle hHandle, mng_processseek fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSSEEK, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcessseek = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSSEEK, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ #ifndef MNG_SKIPCHUNK_nEED mng_retcode MNG_DECL mng_setcb_processneed (mng_handle hHandle, mng_processneed fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSNEED, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcessneed = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSNEED, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_retcode MNG_DECL mng_setcb_processmend (mng_handle hHandle, mng_processmend fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSMEND, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcessmend = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSMEND, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_retcode MNG_DECL mng_setcb_processunknown (mng_handle hHandle, mng_processunknown fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSUNKNOWN, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcessunknown = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSUNKNOWN, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ #ifndef MNG_SKIPCHUNK_TERM mng_retcode MNG_DECL mng_setcb_processterm (mng_handle hHandle, mng_processterm fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSTERM, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcessterm = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSTERM, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_setcb_getcanvasline (mng_handle hHandle, mng_getcanvasline fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_GETCANVASLINE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fGetcanvasline = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_GETCANVASLINE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_setcb_getbkgdline (mng_handle hHandle, mng_getbkgdline fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_GETBKGDLINE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fGetbkgdline = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_GETBKGDLINE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_setcb_getalphaline (mng_handle hHandle, mng_getalphaline fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_GETALPHALINE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fGetalphaline = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_GETALPHALINE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_setcb_refresh (mng_handle hHandle, mng_refresh fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_REFRESH, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fRefresh = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_REFRESH, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_setcb_gettickcount (mng_handle hHandle, mng_gettickcount fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_GETTICKCOUNT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fGettickcount = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_GETTICKCOUNT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_setcb_settimer (mng_handle hHandle, mng_settimer fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_SETTIMER, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fSettimer = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_SETTIMER, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_APP_CMS) mng_retcode MNG_DECL mng_setcb_processgamma (mng_handle hHandle, mng_processgamma fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSGAMA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcessgamma = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSGAMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY && MNG_APP_CMS */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_APP_CMS) #ifndef MNG_SKIPCHUNK_cHRM mng_retcode MNG_DECL mng_setcb_processchroma (mng_handle hHandle, mng_processchroma fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSCHROMA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcesschroma = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSCHROMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_DISPLAY && MNG_APP_CMS */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_APP_CMS) mng_retcode MNG_DECL mng_setcb_processsrgb (mng_handle hHandle, mng_processsrgb fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSSRGB, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcesssrgb = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSSRGB, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY && MNG_APP_CMS */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_APP_CMS) #ifndef MNG_SKIPCHUNK_iCCP mng_retcode MNG_DECL mng_setcb_processiccp (mng_handle hHandle, mng_processiccp fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSICCP, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcessiccp = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSICCP, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_DISPLAY && MNG_APP_CMS */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_APP_CMS) mng_retcode MNG_DECL mng_setcb_processarow (mng_handle hHandle, mng_processarow fProc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSAROW, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->fProcessarow = fProc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SETCB_PROCESSAROW, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY && MNG_APP_CMS */ /* ************************************************************************** */ /* * * */ /* * Callback get functions * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_INTERNAL_MEMMNGMT mng_memalloc MNG_DECL mng_getcb_memalloc (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_MEMALLOC, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_MEMALLOC, MNG_LC_END); #endif return ((mng_datap)hHandle)->fMemalloc; } #endif /* MNG_INTERNAL_MEMMNGMT */ /* ************************************************************************** */ #ifndef MNG_INTERNAL_MEMMNGMT mng_memfree MNG_DECL mng_getcb_memfree (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_MEMFREE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_MEMFREE, MNG_LC_END); #endif return ((mng_datap)hHandle)->fMemfree; } #endif /* MNG_INTERNAL_MEMMNGMT */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_releasedata MNG_DECL mng_getcb_releasedata (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_RELEASEDATA, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_RELEASEDATA, MNG_LC_END); #endif return ((mng_datap)hHandle)->fReleasedata; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_readdata MNG_DECL mng_getcb_readdata (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_READDATA, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_READDATA, MNG_LC_END); #endif return ((mng_datap)hHandle)->fReaddata; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) #ifndef MNG_NO_OPEN_CLOSE_STREAM mng_openstream MNG_DECL mng_getcb_openstream (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_OPENSTREAM, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_OPENSTREAM, MNG_LC_END); #endif return ((mng_datap)hHandle)->fOpenstream; } #endif #endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) #ifndef MNG_NO_OPEN_CLOSE_STREAM mng_closestream MNG_DECL mng_getcb_closestream (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_CLOSESTREAM, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_CLOSESTREAM, MNG_LC_END); #endif return ((mng_datap)hHandle)->fClosestream; } #endif #endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_WRITE mng_writedata MNG_DECL mng_getcb_writedata (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_WRITEDATA, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_WRITEDATA, MNG_LC_END); #endif return ((mng_datap)hHandle)->fWritedata; } #endif /* MNG_SUPPORT_WRITE */ /* ************************************************************************** */ mng_errorproc MNG_DECL mng_getcb_errorproc (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_ERRORPROC, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_ERRORPROC, MNG_LC_END); #endif return ((mng_datap)hHandle)->fErrorproc; } /* ************************************************************************** */ #ifdef MNG_SUPPORT_TRACE mng_traceproc MNG_DECL mng_getcb_traceproc (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_TRACEPROC, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_TRACEPROC, MNG_LC_END); #endif return ((mng_datap)hHandle)->fTraceproc; } #endif /* MNG_SUPPORT_TRACE */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_processheader MNG_DECL mng_getcb_processheader (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSHEADER, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSHEADER, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcessheader; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ #ifndef MNG_SKIPCHUNK_tEXt mng_processtext MNG_DECL mng_getcb_processtext (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSTEXT, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSTEXT, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcesstext; } #endif #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ #ifndef MNG_SKIPCHUNK_SAVE mng_processsave MNG_DECL mng_getcb_processsave (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSSAVE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSSAVE, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcesssave; } #endif #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ #ifndef MNG_SKIPCHUNK_SEEK mng_processseek MNG_DECL mng_getcb_processseek (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSSEEK, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSSEEK, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcessseek; } #endif #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ #ifndef MNG_SKIPCHUNK_nEED mng_processneed MNG_DECL mng_getcb_processneed (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSNEED, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSNEED, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcessneed; } #endif #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_processmend MNG_DECL mng_getcb_processmend (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSMEND, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSMEND, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcessmend; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_processunknown MNG_DECL mng_getcb_processunknown (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSUNKNOWN, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSUNKNOWN, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcessunknown; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ #ifndef MNG_SKIPCHUNK_TERM mng_processterm MNG_DECL mng_getcb_processterm (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSTERM, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSTERM, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcessterm; } #endif #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_getcanvasline MNG_DECL mng_getcb_getcanvasline (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_GETCANVASLINE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_GETCANVASLINE, MNG_LC_END); #endif return ((mng_datap)hHandle)->fGetcanvasline; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_getbkgdline MNG_DECL mng_getcb_getbkgdline (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_GETBKGDLINE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_GETBKGDLINE, MNG_LC_END); #endif return ((mng_datap)hHandle)->fGetbkgdline; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_getalphaline MNG_DECL mng_getcb_getalphaline (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_GETALPHALINE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_GETALPHALINE, MNG_LC_END); #endif return ((mng_datap)hHandle)->fGetalphaline; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_refresh MNG_DECL mng_getcb_refresh (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_REFRESH, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_REFRESH, MNG_LC_END); #endif return ((mng_datap)hHandle)->fRefresh; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_gettickcount MNG_DECL mng_getcb_gettickcount (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_GETTICKCOUNT, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_GETTICKCOUNT, MNG_LC_END); #endif return ((mng_datap)hHandle)->fGettickcount; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_settimer MNG_DECL mng_getcb_settimer (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_SETTIMER, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_SETTIMER, MNG_LC_END); #endif return ((mng_datap)hHandle)->fSettimer; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_APP_CMS) mng_processgamma MNG_DECL mng_getcb_processgamma (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSGAMMA, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcessgamma; } #endif /* MNG_SUPPORT_DISPLAY && MNG_APP_CMS */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_APP_CMS) #ifndef MNG_SKIPCHUNK_cHRM mng_processchroma MNG_DECL mng_getcb_processchroma (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSCHROMA, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSCHROMA, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcesschroma; } #endif #endif /* MNG_SUPPORT_DISPLAY && MNG_APP_CMS */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_APP_CMS) mng_processsrgb MNG_DECL mng_getcb_processsrgb (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSSRGB, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSSRGB, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcesssrgb; } #endif /* MNG_SUPPORT_DISPLAY && MNG_APP_CMS */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_APP_CMS) #ifndef MNG_SKIPCHUNK_iCCP mng_processiccp MNG_DECL mng_getcb_processiccp (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSICCP, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSICCP, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcessiccp; } #endif #endif /* MNG_SUPPORT_DISPLAY && MNG_APP_CMS */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_APP_CMS) mng_processarow MNG_DECL mng_getcb_processarow (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSAROW, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GETCB_PROCESSAROW, MNG_LC_END); #endif return ((mng_datap)hHandle)->fProcessarow; } #endif /* MNG_SUPPORT_DISPLAY && MNG_APP_CMS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_hlapi.c0000644000000000000000000033017412005307152014255 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_hlapi.c copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : high-level application API (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the high-level function interface * */ /* * for applications. * */ /* * * */ /* * changes : 0.5.1 - 05/06/2000 - G.Juyn * */ /* * - added init of iPLTEcount * */ /* * 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed calling-convention definition * */ /* * - changed status-handling of display-routines * */ /* * - added versioning-control routines * */ /* * - filled the write routine * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - added callback error-reporting support * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * 0.5.1 - 05/13/2000 - G.Juyn * */ /* * - added eMNGma hack (will be removed in 1.0.0 !!!) * */ /* * - added TERM animation object pointer (easier reference) * */ /* * 0.5.1 - 05/14/2000 - G.Juyn * */ /* * - added cleanup of saved-data (SAVE/SEEK processing) * */ /* * 0.5.1 - 05/16/2000 - G.Juyn * */ /* * - moved the actual write_graphic functionality from here * */ /* * to its appropriate function in the mng_write module * */ /* * * */ /* * 0.5.2 - 05/19/2000 - G.Juyn * */ /* * - cleaned up some code regarding mixed support * */ /* * - added JNG support * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - moved init of default zlib parms here from "mng_zlib.c" * */ /* * - added init of default IJG parms * */ /* * 0.5.2 - 05/29/2000 - G.Juyn * */ /* * - fixed inconsistancy with freeing global iCCP profile * */ /* * 0.5.2 - 05/30/2000 - G.Juyn * */ /* * - added delta-image field initialization * */ /* * 0.5.2 - 06/06/2000 - G.Juyn * */ /* * - added initialization of the buffer-suspend parameter * */ /* * * */ /* * 0.5.3 - 06/16/2000 - G.Juyn * */ /* * - added initialization of update-region for refresh * */ /* * - added initialization of Needrefresh parameter * */ /* * 0.5.3 - 06/17/2000 - G.Juyn * */ /* * - added initialization of Deltaimmediate * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - added initialization of Speed * */ /* * - added initialization of Imagelevel * */ /* * 0.5.3 - 06/26/2000 - G.Juyn * */ /* * - changed userdata variable to mng_ptr * */ /* * 0.5.3 - 06/29/2000 - G.Juyn * */ /* * - fixed initialization routine for new mng_handle type * */ /* * * */ /* * 0.9.1 - 07/06/2000 - G.Juyn * */ /* * - changed mng_display_resume to allow to be called after * */ /* * a suspension return with MNG_NEEDMOREDATA * */ /* * - added returncode MNG_NEEDTIMERWAIT for timer breaks * */ /* * 0.9.1 - 07/07/2000 - G.Juyn * */ /* * - implemented support for freeze/reset/resume & go_xxxx * */ /* * 0.9.1 - 07/08/2000 - G.Juyn * */ /* * - added support for improved timing * */ /* * - added support for improved I/O-suspension * */ /* * 0.9.1 - 07/14/2000 - G.Juyn * */ /* * - changed EOF processing behavior * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - added callbacks for SAVE/SEEK processing * */ /* * - added variable for NEEDSECTIONWAIT breaks * */ /* * - added variable for freeze & reset processing * */ /* * 0.9.1 - 07/17/2000 - G.Juyn * */ /* * - added error cleanup processing * */ /* * - fixed support for mng_display_reset() * */ /* * - fixed suspension-buffering for 32K+ chunks * */ /* * * */ /* * 0.9.2 - 07/29/2000 - G.Juyn * */ /* * - fixed small bugs in display processing * */ /* * 0.9.2 - 07/31/2000 - G.Juyn * */ /* * - fixed wrapping of suspension parameters * */ /* * 0.9.2 - 08/04/2000 - G.Juyn * */ /* * - B111096 - fixed large-buffer read-suspension * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 09/07/2000 - G.Juyn * */ /* * - added support for new filter_types * */ /* * 0.9.3 - 09/10/2000 - G.Juyn * */ /* * - fixed DEFI behavior * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - added support for nEED * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added optional support for bKGD for PNG images * */ /* * - raised initial maximum canvas size * */ /* * - added support for JDAA * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - added callback to process non-critical unknown chunks * */ /* * - fixed support for delta-images during read() / display() * */ /* * 0.9.3 - 10/18/2000 - G.Juyn * */ /* * - added closestream() processing for mng_cleanup() * */ /* * 0.9.3 - 10/27/2000 - G.Juyn * */ /* * - fixed separate read() & display() processing * */ /* * * */ /* * 0.9.4 - 11/20/2000 - G.Juyn * */ /* * - fixed unwanted repetition in mng_readdisplay() * */ /* * 0.9.4 - 11/24/2000 - G.Juyn * */ /* * - moved restore of object 0 to libmng_display * */ /* * * */ /* * 1.0.1 - 02/08/2001 - G.Juyn * */ /* * - added MEND processing callback * */ /* * 1.0.1 - 02/13/2001 - G.Juyn * */ /* * - fixed first FRAM_MODE=4 timing problem * */ /* * 1.0.1 - 04/21/2001 - G.Juyn * */ /* * - fixed bug with display_reset/display_resume (Thanks G!) * */ /* * 1.0.1 - 04/22/2001 - G.Juyn * */ /* * - fixed memory-leak (Thanks Gregg!) * */ /* * 1.0.1 - 04/23/2001 - G.Juyn * */ /* * - fixed reset_rundata to drop all objects * */ /* * 1.0.1 - 04/25/2001 - G.Juyn * */ /* * - moved mng_clear_cms to libmng_cms * */ /* * * */ /* * 1.0.2 - 06/23/2001 - G.Juyn * */ /* * - added optimization option for MNG-video playback * */ /* * - added processterm callback * */ /* * 1.0.2 - 06/25/2001 - G.Juyn * */ /* * - added option to turn off progressive refresh * */ /* * * */ /* * 1.0.5 - 07/08/2002 - G.Juyn * */ /* * - B578572 - removed eMNGma hack (thanks Dimitri!) * */ /* * 1.0.5 - 07/16/2002 - G.Juyn * */ /* * - B581625 - large chunks fail with suspension reads * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/15/2002 - G.Juyn * */ /* * - fixed LOOP iteration=0 special case * */ /* * 1.0.5 - 10/07/2002 - G.Juyn * */ /* * - added another fix for misplaced TERM chunk * */ /* * - completed support for condition=2 in TERM chunk * */ /* * - added beta version function & constant * */ /* * 1.0.5 - 10/11/2002 - G.Juyn * */ /* * - added mng_status_dynamic to supports function * */ /* * 1.0.5 - 11/04/2002 - G.Juyn * */ /* * - changed FRAMECOUNT/LAYERCOUNT/PLAYTIME error to warning * */ /* * 1.0.5 - 11/07/2002 - G.Juyn * */ /* * - added support to get totals after mng_read() * */ /* * 1.0.5 - 11/29/2002 - G.Juyn * */ /* * - fixed goxxxxx() support for zero values * */ /* * * */ /* * 1.0.6 - 05/25/2003 - G.R-P * */ /* * - added MNG_SKIPCHUNK_cHNK footprint optimizations * */ /* * 1.0.6 - 07/11/2003 - G.R-P * */ /* * - added conditionals zlib and jpeg property accessors * */ /* * 1.0.6 - 07/14/2003 - G.R-P * */ /* * - added conditionals around "mng_display_go*" and other * */ /* * unused functions * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditionals around PAST chunk support * */ /* * * */ /* * 1.0.7 - 03/07/2004 - G. Randers-Pehrson * */ /* * - put gamma, cms-related declarations inside #ifdef * */ /* * 1.0.7 - 03/10/2004 - G.R-P * */ /* * - added conditionals around openstream/closestream * */ /* * 1.0.7 - 03/24/2004 - G.R-P * */ /* * - fixed zTXT -> zTXt typo * */ /* * * */ /* * 1.0.8 - 04/02/2004 - G.Juyn * */ /* * - added CRC existence & checking flags * */ /* * 1.0.8 - 04/10/2004 - G.Juyn * */ /* * - added data-push mechanisms for specialized decoders * */ /* * 1.0.8 - 07/06/2004 - G.R-P * */ /* * - defend against using undefined openstream function * */ /* * 1.0.8 - 08/02/2004 - G.Juyn * */ /* * - added conditional to allow easier writing of large MNG's * */ /* * * */ /* * 1.0.9 - 08/17/2004 - G.R-P * */ /* * - added more SKIPCHUNK conditionals * */ /* * 1.0.9 - 09/25/2004 - G.Juyn * */ /* * - replaced MNG_TWEAK_LARGE_FILES with permanent solution * */ /* * 1.0.9 - 10/03/2004 - G.Juyn * */ /* * - added function to retrieve current FRAM delay * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* * 1.0.10 - 07/06/2005 - G.R-P * */ /* * - added more SKIPCHUNK conditionals * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * 1.0.10 - 07/06/2007 - G.R-P bugfix by Lucas Quintana * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_objects.h" #include "libmng_object_prc.h" #include "libmng_chunks.h" #include "libmng_memory.h" #include "libmng_read.h" #include "libmng_write.h" #include "libmng_display.h" #include "libmng_zlib.h" #include "libmng_jpeg.h" #include "libmng_cms.h" #include "libmng_pixels.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ /* * * */ /* * local routines * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY MNG_LOCAL mng_retcode mng_drop_objects (mng_datap pData, mng_bool bDropaniobj) { mng_objectp pObject; mng_objectp pNext; mng_cleanupobject fCleanup; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DROP_OBJECTS, MNG_LC_START); #endif pObject = pData->pFirstimgobj; /* get first stored image-object (if any) */ while (pObject) /* more objects to discard ? */ { pNext = ((mng_object_headerp)pObject)->pNext; /* call appropriate cleanup */ fCleanup = ((mng_object_headerp)pObject)->fCleanup; fCleanup (pData, pObject); pObject = pNext; /* neeeext */ } pData->pFirstimgobj = MNG_NULL; /* clean this up!!! */ pData->pLastimgobj = MNG_NULL; if (bDropaniobj) /* drop animation objects ? */ { pObject = pData->pFirstaniobj; /* get first stored animation-object (if any) */ while (pObject) /* more objects to discard ? */ { pNext = ((mng_object_headerp)pObject)->pNext; /* call appropriate cleanup */ fCleanup = ((mng_object_headerp)pObject)->fCleanup; fCleanup (pData, pObject); pObject = pNext; /* neeeext */ } pData->pFirstaniobj = MNG_NULL; /* clean this up!!! */ pData->pLastaniobj = MNG_NULL; #ifdef MNG_SUPPORT_DYNAMICMNG pObject = pData->pFirstevent; /* get first event-object (if any) */ while (pObject) /* more objects to discard ? */ { pNext = ((mng_object_headerp)pObject)->pNext; /* call appropriate cleanup */ fCleanup = ((mng_object_headerp)pObject)->fCleanup; fCleanup (pData, pObject); pObject = pNext; /* neeeext */ } pData->pFirstevent = MNG_NULL; /* clean this up!!! */ pData->pLastevent = MNG_NULL; #endif } #ifdef MNG_INCLUDE_MPNG_PROPOSAL if (pData->pMPNG) /* drop MPNG data (if any) */ { fCleanup = ((mng_object_headerp)pData->pMPNG)->fCleanup; fCleanup (pData, pData->pMPNG); pData->pMPNG = MNG_NULL; } #endif #ifdef MNG_INCLUDE_ANG_PROPOSAL if (pData->pANG) /* drop ANG data (if any) */ { fCleanup = ((mng_object_headerp)pData->pANG)->fCleanup; fCleanup (pData, pData->pANG); pData->pANG = MNG_NULL; } #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DROP_OBJECTS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_SKIPCHUNK_SAVE MNG_LOCAL mng_retcode mng_drop_savedata (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DROP_SAVEDATA, MNG_LC_START); #endif if (pData->pSavedata) /* sanity check */ { /* address it more directly */ mng_savedatap pSave = pData->pSavedata; if (pSave->iGlobalProfilesize) /* cleanup the profile ? */ MNG_FREEX (pData, pSave->pGlobalProfile, pSave->iGlobalProfilesize); /* cleanup the save structure */ MNG_FREE (pData, pData->pSavedata, sizeof (mng_savedata)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DROP_SAVEDATA, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY MNG_LOCAL mng_retcode mng_reset_rundata (mng_datap pData) { mng_drop_invalid_objects (pData); /* drop invalidly stored objects */ #ifndef MNG_SKIPCHUNK_SAVE mng_drop_savedata (pData); /* drop stored savedata */ #endif mng_reset_objzero (pData); /* reset object 0 */ /* drop stored objects (if any) */ mng_drop_objects (pData, MNG_FALSE); pData->bFramedone = MNG_FALSE; pData->iFrameseq = 0; /* reset counters & stuff */ pData->iLayerseq = 0; pData->iFrametime = 0; pData->bSkipping = MNG_FALSE; #ifdef MNG_SUPPORT_DYNAMICMNG pData->bRunningevent = MNG_FALSE; pData->bStopafterseek = MNG_FALSE; pData->iEventx = 0; pData->iEventy = 0; pData->pLastmousemove = MNG_NULL; #endif pData->iRequestframe = 0; pData->iRequestlayer = 0; pData->iRequesttime = 0; pData->bSearching = MNG_FALSE; pData->iRuntime = 0; pData->iSynctime = 0; pData->iStarttime = 0; pData->iEndtime = 0; pData->bRunning = MNG_FALSE; pData->bTimerset = MNG_FALSE; pData->iBreakpoint = 0; pData->bSectionwait = MNG_FALSE; pData->bFreezing = MNG_FALSE; pData->bResetting = MNG_FALSE; pData->bNeedrefresh = MNG_FALSE; pData->bOnlyfirstframe = MNG_FALSE; pData->iFramesafterTERM = 0; pData->iIterations = 0; /* start of animation objects! */ pData->pCurraniobj = MNG_NULL; pData->iUpdateleft = 0; /* reset region */ pData->iUpdateright = 0; pData->iUpdatetop = 0; pData->iUpdatebottom = 0; pData->iPLTEcount = 0; /* reset PLTE data */ #ifndef MNG_SKIPCHUNK_DEFI pData->iDEFIobjectid = 0; /* reset DEFI data */ pData->bDEFIhasdonotshow = MNG_FALSE; pData->iDEFIdonotshow = 0; pData->bDEFIhasconcrete = MNG_FALSE; pData->iDEFIconcrete = 0; pData->bDEFIhasloca = MNG_FALSE; pData->iDEFIlocax = 0; pData->iDEFIlocay = 0; pData->bDEFIhasclip = MNG_FALSE; pData->iDEFIclipl = 0; pData->iDEFIclipr = 0; pData->iDEFIclipt = 0; pData->iDEFIclipb = 0; #endif #ifndef MNG_SKIPCHUNK_BACK pData->iBACKred = 0; /* reset BACK data */ pData->iBACKgreen = 0; pData->iBACKblue = 0; pData->iBACKmandatory = 0; pData->iBACKimageid = 0; pData->iBACKtile = 0; #endif #ifndef MNG_SKIPCHUNK_FRAM pData->iFRAMmode = 1; /* default global FRAM variables */ pData->iFRAMdelay = 1; pData->iFRAMtimeout = 0x7fffffffl; pData->bFRAMclipping = MNG_FALSE; pData->iFRAMclipl = 0; pData->iFRAMclipr = 0; pData->iFRAMclipt = 0; pData->iFRAMclipb = 0; pData->iFramemode = 1; /* again for the current frame */ pData->iFramedelay = 1; pData->iFrametimeout = 0x7fffffffl; pData->bFrameclipping = MNG_FALSE; pData->iFrameclipl = 0; pData->iFrameclipr = 0; pData->iFrameclipt = 0; pData->iFrameclipb = 0; pData->iNextdelay = 1; #endif #ifndef MNG_SKIPCHUNK_SHOW pData->iSHOWmode = 0; /* reset SHOW data */ pData->iSHOWfromid = 0; pData->iSHOWtoid = 0; pData->iSHOWnextid = 0; pData->iSHOWskip = 0; #endif pData->iGlobalPLTEcount = 0; /* reset global PLTE data */ pData->iGlobalTRNSrawlen = 0; /* reset global tRNS data */ pData->iGlobalGamma = 0; /* reset global gAMA data */ #ifndef MNG_SKIPCHUNK_cHRM pData->iGlobalWhitepointx = 0; /* reset global cHRM data */ pData->iGlobalWhitepointy = 0; pData->iGlobalPrimaryredx = 0; pData->iGlobalPrimaryredy = 0; pData->iGlobalPrimarygreenx = 0; pData->iGlobalPrimarygreeny = 0; pData->iGlobalPrimarybluex = 0; pData->iGlobalPrimarybluey = 0; #endif #ifndef MNG_SKIPCHUNK_sRGB pData->iGlobalRendintent = 0; /* reset global sRGB data */ #endif #ifndef MNG_SKIPCHUNK_iCCP if (pData->iGlobalProfilesize) /* drop global profile (if any) */ MNG_FREE (pData, pData->pGlobalProfile, pData->iGlobalProfilesize); pData->iGlobalProfilesize = 0; #endif #ifndef MNG_SKIPCHUNK_bKGD pData->iGlobalBKGDred = 0; /* reset global bKGD data */ pData->iGlobalBKGDgreen = 0; pData->iGlobalBKGDblue = 0; #endif #ifndef MNG_NO_DELTA_PNG /* reset delta-image */ pData->pDeltaImage = MNG_NULL; pData->iDeltaImagetype = 0; pData->iDeltatype = 0; pData->iDeltaBlockwidth = 0; pData->iDeltaBlockheight = 0; pData->iDeltaBlockx = 0; pData->iDeltaBlocky = 0; pData->bDeltaimmediate = MNG_FALSE; pData->fDeltagetrow = MNG_NULL; pData->fDeltaaddrow = MNG_NULL; pData->fDeltareplacerow = MNG_NULL; pData->fDeltaputrow = MNG_NULL; pData->fPromoterow = MNG_NULL; pData->fPromBitdepth = MNG_NULL; pData->pPromBuf = MNG_NULL; pData->iPromColortype = 0; pData->iPromBitdepth = 0; pData->iPromFilltype = 0; pData->iPromWidth = 0; pData->pPromSrc = MNG_NULL; pData->pPromDst = MNG_NULL; #endif #ifndef MNG_SKIPCHUNK_MAGN pData->iMAGNfromid = 0; pData->iMAGNtoid = 0; #endif #ifndef MNG_SKIPCHUNK_PAST pData->iPastx = 0; pData->iPasty = 0; #endif pData->pLastseek = MNG_NULL; return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ MNG_LOCAL void cleanup_errors (mng_datap pData) { pData->iErrorcode = MNG_NOERROR; pData->iSeverity = 0; pData->iErrorx1 = 0; pData->iErrorx2 = 0; pData->zErrortext = MNG_NULL; return; } /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ MNG_LOCAL mng_retcode make_pushbuffer (mng_datap pData, mng_ptr pPushdata, mng_size_t iLength, mng_bool bTakeownership, mng_pushdatap * pPush) { mng_pushdatap pTemp; MNG_ALLOC (pData, pTemp, sizeof(mng_pushdata)); pTemp->pNext = MNG_NULL; if (bTakeownership) /* are we going to own the buffer? */ { /* then just copy the pointer */ pTemp->pData = (mng_uint8p)pPushdata; } else { /* otherwise create new buffer */ MNG_ALLOCX (pData, pTemp->pData, iLength); if (!pTemp->pData) /* succeeded? */ { MNG_FREEX (pData, pTemp, sizeof(mng_pushdata)); MNG_ERROR (pData, MNG_OUTOFMEMORY); } /* and copy the bytes across */ MNG_COPY (pTemp->pData, pPushdata, iLength); } pTemp->iLength = iLength; pTemp->bOwned = bTakeownership; pTemp->pDatanext = pTemp->pData; pTemp->iRemaining = iLength; *pPush = pTemp; /* return it */ return MNG_NOERROR; /* and all's well */ } #endif #ifdef MNG_VERSION_QUERY_SUPPORT /* ************************************************************************** */ /* * * */ /* * Versioning control * */ /* * * */ /* ************************************************************************** */ mng_pchar MNG_DECL mng_version_text (void) { return MNG_VERSION_TEXT; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_version_so (void) { return MNG_VERSION_SO; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_version_dll (void) { return MNG_VERSION_DLL; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_version_major (void) { return MNG_VERSION_MAJOR; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_version_minor (void) { return MNG_VERSION_MINOR; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_version_release (void) { return MNG_VERSION_RELEASE; } /* ************************************************************************** */ mng_bool MNG_DECL mng_version_beta (void) { return MNG_VERSION_BETA; } #endif /* ************************************************************************** */ /* * * */ /* * 'supports' function * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_FUNCQUERY typedef struct { mng_pchar zFunction; mng_uint8 iMajor; /* Major == 0 means not implemented ! */ mng_uint8 iMinor; mng_uint8 iRelease; } mng_func_entry; typedef mng_func_entry const * mng_func_entryp; MNG_LOCAL mng_func_entry const func_table [] = { /* keep it alphabetically sorted !!!!! */ {"mng_cleanup", 1, 0, 0}, {"mng_copy_chunk", 1, 0, 5}, {"mng_create", 1, 0, 0}, {"mng_display", 1, 0, 0}, {"mng_display_freeze", 1, 0, 0}, #ifndef MNG_NO_DISPLAY_GO_SUPPORTED {"mng_display_goframe", 1, 0, 0}, {"mng_display_golayer", 1, 0, 0}, {"mng_display_gotime", 1, 0, 0}, #endif {"mng_display_reset", 1, 0, 0}, {"mng_display_resume", 1, 0, 0}, {"mng_get_alphabitdepth", 1, 0, 0}, {"mng_get_alphacompression", 1, 0, 0}, {"mng_get_alphadepth", 1, 0, 0}, {"mng_get_alphafilter", 1, 0, 0}, {"mng_get_alphainterlace", 1, 0, 0}, {"mng_get_bgcolor", 1, 0, 0}, {"mng_get_bitdepth", 1, 0, 0}, {"mng_get_bkgdstyle", 1, 0, 0}, {"mng_get_cacheplayback", 1, 0, 2}, {"mng_get_canvasstyle", 1, 0, 0}, {"mng_get_colortype", 1, 0, 0}, {"mng_get_compression", 1, 0, 0}, #ifndef MNG_NO_CURRENT_INFO {"mng_get_currentframe", 1, 0, 0}, {"mng_get_currentlayer", 1, 0, 0}, {"mng_get_currentplaytime", 1, 0, 0}, #endif {"mng_get_currframdelay", 1, 0, 9}, #ifndef MNG_NO_DFLT_INFO {"mng_get_dfltimggamma", 1, 0, 0}, {"mng_get_dfltimggammaint", 1, 0, 0}, #endif {"mng_get_displaygamma", 1, 0, 0}, {"mng_get_displaygammaint", 1, 0, 0}, {"mng_get_doprogressive", 1, 0, 2}, {"mng_get_filter", 1, 0, 0}, {"mng_get_framecount", 1, 0, 0}, {"mng_get_imageheight", 1, 0, 0}, {"mng_get_imagelevel", 1, 0, 0}, {"mng_get_imagetype", 1, 0, 0}, {"mng_get_imagewidth", 1, 0, 0}, {"mng_get_interlace", 1, 0, 0}, #ifdef MNG_ACCESS_JPEG {"mng_get_jpeg_dctmethod", 1, 0, 0}, {"mng_get_jpeg_maxjdat", 1, 0, 0}, {"mng_get_jpeg_optimized", 1, 0, 0}, {"mng_get_jpeg_progressive", 1, 0, 0}, {"mng_get_jpeg_quality", 1, 0, 0}, {"mng_get_jpeg_smoothing", 1, 0, 0}, #endif {"mng_get_lastbackchunk", 1, 0, 3}, {"mng_get_lastseekname", 1, 0, 5}, {"mng_get_layercount", 1, 0, 0}, #ifndef MNG_SKIP_MAXCANVAS {"mng_get_maxcanvasheight", 1, 0, 0}, {"mng_get_maxcanvaswidth", 1, 0, 0}, #endif {"mng_get_playtime", 1, 0, 0}, {"mng_get_refreshpass", 1, 0, 0}, {"mng_get_runtime", 1, 0, 0}, {"mng_get_sectionbreaks", 1, 0, 0}, {"mng_get_sigtype", 1, 0, 0}, {"mng_get_simplicity", 1, 0, 0}, {"mng_get_speed", 1, 0, 0}, {"mng_get_srgb", 1, 0, 0}, {"mng_get_starttime", 1, 0, 0}, {"mng_get_storechunks", 1, 0, 0}, {"mng_get_suspensionmode", 1, 0, 0}, {"mng_get_ticks", 1, 0, 0}, #ifndef MNG_NO_CURRENT_INFO {"mng_get_totalframes", 1, 0, 5}, {"mng_get_totallayers", 1, 0, 5}, {"mng_get_totalplaytime", 1, 0, 5}, #endif {"mng_get_usebkgd", 1, 0, 0}, {"mng_get_userdata", 1, 0, 0}, #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) {"mng_get_viewgamma", 1, 0, 0}, {"mng_get_viewgammaint", 1, 0, 0}, #endif #ifdef MNG_ACCESS_ZLIB {"mng_get_zlib_level", 1, 0, 0}, {"mng_get_zlib_maxidat", 1, 0, 0}, {"mng_get_zlib_memlevel", 1, 0, 0}, {"mng_get_zlib_method", 1, 0, 0}, {"mng_get_zlib_strategy", 1, 0, 0}, {"mng_get_zlib_windowbits", 1, 0, 0}, #endif #ifndef MNG_NO_OPEN_CLOSE_STREAM {"mng_getcb_closestream", 1, 0, 0}, #endif {"mng_getcb_errorproc", 1, 0, 0}, {"mng_getcb_getalphaline", 1, 0, 0}, {"mng_getcb_getbkgdline", 1, 0, 0}, {"mng_getcb_getcanvasline", 1, 0, 0}, {"mng_getcb_gettickcount", 1, 0, 0}, {"mng_getcb_memalloc", 1, 0, 0}, {"mng_getcb_memfree", 1, 0, 0}, #ifndef MNG_NO_OPEN_CLOSE_STREAM {"mng_getcb_openstream", 1, 0, 0}, #endif {"mng_getcb_processarow", 1, 0, 0}, {"mng_getcb_processchroma", 1, 0, 0}, {"mng_getcb_processgamma", 1, 0, 0}, {"mng_getcb_processheader", 1, 0, 0}, {"mng_getcb_processiccp", 1, 0, 0}, {"mng_getcb_processmend", 1, 0, 1}, {"mng_getcb_processneed", 1, 0, 0}, {"mng_getcb_processsave", 1, 0, 0}, {"mng_getcb_processseek", 1, 0, 0}, {"mng_getcb_processsrgb", 1, 0, 0}, {"mng_getcb_processterm", 1, 0, 2}, {"mng_getcb_processtext", 1, 0, 0}, {"mng_getcb_processunknown", 1, 0, 0}, {"mng_getcb_readdata", 1, 0, 0}, {"mng_getcb_refresh", 1, 0, 0}, {"mng_getcb_releasedata", 1, 0, 8}, {"mng_getcb_settimer", 1, 0, 0}, {"mng_getcb_traceproc", 1, 0, 0}, {"mng_getcb_writedata", 1, 0, 0}, {"mng_getchunk_back", 1, 0, 0}, {"mng_getchunk_basi", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_bKGD {"mng_getchunk_bkgd", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_cHRM {"mng_getchunk_chrm", 1, 0, 0}, #endif {"mng_getchunk_clip", 1, 0, 0}, {"mng_getchunk_clon", 1, 0, 0}, #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_dBYK {"mng_getchunk_dbyk", 1, 0, 0}, #endif #endif {"mng_getchunk_defi", 1, 0, 0}, #ifndef MNG_NO_DELTA_PNG {"mng_getchunk_dhdr", 1, 0, 0}, #endif {"mng_getchunk_disc", 1, 0, 0}, #ifndef MNG_NO_DELTA_PNG {"mng_getchunk_drop", 1, 0, 0}, #endif {"mng_getchunk_endl", 1, 0, 0}, #ifdef MNG_INCLUDE_MPNG_PROPOSAL {"mng_getchunk_mpng", 1, 0, 10}, {"mng_getchunk_mpng_frame", 1, 0, 10}, #endif #ifndef MNG_SKIPCHUNK_evNT {"mng_getchunk_evnt", 1, 0, 5}, {"mng_getchunk_evnt_entry", 1, 0, 5}, #endif #ifndef MNG_SKIPCHUNK_eXPI {"mng_getchunk_expi", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_fPRI {"mng_getchunk_fpri", 1, 0, 0}, #endif {"mng_getchunk_fram", 1, 0, 0}, {"mng_getchunk_gama", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_hIST {"mng_getchunk_hist", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_iCCP {"mng_getchunk_iccp", 1, 0, 0}, #endif {"mng_getchunk_idat", 1, 0, 0}, {"mng_getchunk_iend", 1, 0, 0}, {"mng_getchunk_ihdr", 1, 0, 0}, #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG {"mng_getchunk_ijng", 1, 0, 0}, #endif {"mng_getchunk_ipng", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_iTXt {"mng_getchunk_itxt", 1, 0, 0}, #endif #ifdef MNG_INCLUDE_JNG {"mng_getchunk_jdaa", 1, 0, 0}, {"mng_getchunk_jdat", 1, 0, 0}, {"mng_getchunk_jhdr", 1, 0, 0}, {"mng_getchunk_jsep", 1, 0, 0}, #endif {"mng_getchunk_loop", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_MAGN {"mng_getchunk_magn", 1, 0, 0}, #endif {"mng_getchunk_mend", 1, 0, 0}, {"mng_getchunk_mhdr", 1, 0, 0}, {"mng_getchunk_move", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_nEED {"mng_getchunk_need", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_ORDR #ifndef MNG_NO_DELTA_PNG {"mng_getchunk_ordr", 1, 0, 0}, {"mng_getchunk_ordr_entry", 1, 0, 0}, #endif #endif #ifndef MNG_SKIPCHUNK_PAST {"mng_getchunk_past", 1, 0, 0}, {"mng_getchunk_past_src", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_pHYg {"mng_getchunk_phyg", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_pHYs {"mng_getchunk_phys", 1, 0, 0}, #endif #ifndef MNG_NO_DELTA_PNG {"mng_getchunk_plte", 1, 0, 0}, {"mng_getchunk_pplt", 1, 0, 0}, {"mng_getchunk_pplt_entry", 1, 0, 0}, {"mng_getchunk_prom", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_SAVE {"mng_getchunk_save", 1, 0, 0}, {"mng_getchunk_save_entry", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_sBIT {"mng_getchunk_sbit", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_SEEK {"mng_getchunk_seek", 1, 0, 0}, #endif {"mng_getchunk_show", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_sPLT {"mng_getchunk_splt", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_sRGB {"mng_getchunk_srgb", 1, 0, 0}, #endif {"mng_getchunk_term", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_tEXt {"mng_getchunk_text", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_tIME {"mng_getchunk_time", 1, 0, 0}, #endif {"mng_getchunk_trns", 1, 0, 0}, {"mng_getchunk_unkown", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_zTXt {"mng_getchunk_ztxt", 1, 0, 0}, #endif {"mng_getimgdata_chunk", 0, 0, 0}, {"mng_getimgdata_chunkseq", 0, 0, 0}, {"mng_getimgdata_seq", 0, 0, 0}, {"mng_getlasterror", 1, 0, 0}, {"mng_initialize", 1, 0, 0}, {"mng_iterate_chunks", 1, 0, 0}, {"mng_putchunk_back", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_BASI {"mng_putchunk_basi", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_bKGD {"mng_putchunk_bkgd", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_cHRM {"mng_putchunk_chrm", 1, 0, 0}, #endif {"mng_putchunk_clip", 1, 0, 0}, {"mng_putchunk_clon", 1, 0, 0}, #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK {"mng_putchunk_dbyk", 1, 0, 0}, #endif #endif {"mng_putchunk_defi", 1, 0, 0}, #ifndef MNG_NO_DELTA_PNG {"mng_putchunk_dhdr", 1, 0, 0}, #endif {"mng_putchunk_disc", 1, 0, 0}, #ifndef MNG_NO_DELTA_PNG {"mng_putchunk_drop", 1, 0, 0}, #endif {"mng_putchunk_endl", 1, 0, 0}, #ifdef MNG_INCLUDE_MPNG_PROPOSAL {"mng_putchunk_mpng", 1, 0, 10}, {"mng_putchunk_mpng_frame", 1, 0, 10}, #endif #ifndef MNG_SKIPCHUNK_evNT {"mng_putchunk_evnt", 1, 0, 5}, {"mng_putchunk_evnt_entry", 1, 0, 5}, #endif #ifndef MNG_SKIPCHUNK_eXPI {"mng_putchunk_expi", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_fPRI {"mng_putchunk_fpri", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_FRAM {"mng_putchunk_fram", 1, 0, 0}, #endif {"mng_putchunk_gama", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_hIST {"mng_putchunk_hist", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_iCCP {"mng_putchunk_iccp", 1, 0, 0}, #endif {"mng_putchunk_idat", 1, 0, 0}, {"mng_putchunk_iend", 1, 0, 0}, {"mng_putchunk_ihdr", 1, 0, 0}, #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG {"mng_putchunk_ijng", 1, 0, 0}, #endif {"mng_putchunk_ipng", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_iTXt {"mng_putchunk_itxt", 1, 0, 0}, #endif #ifdef MNG_INCLUDE_JNG {"mng_putchunk_jdaa", 1, 0, 0}, {"mng_putchunk_jdat", 1, 0, 0}, {"mng_putchunk_jhdr", 1, 0, 0}, {"mng_putchunk_jsep", 1, 0, 0}, #endif {"mng_putchunk_loop", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_MAGN {"mng_putchunk_magn", 1, 0, 0}, #endif {"mng_putchunk_mend", 1, 0, 0}, {"mng_putchunk_mhdr", 1, 0, 0}, {"mng_putchunk_move", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_nEED {"mng_putchunk_need", 1, 0, 0}, #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR {"mng_putchunk_ordr", 1, 0, 0}, {"mng_putchunk_ordr_entry", 1, 0, 0}, #endif #endif #ifndef MNG_SKIPCHUNK_PAST {"mng_putchunk_past", 1, 0, 0}, {"mng_putchunk_past_src", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_pHYg {"mng_putchunk_phyg", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_pHYs {"mng_putchunk_phys", 1, 0, 0}, #endif #ifndef MNG_NO_DELTA_PNG {"mng_putchunk_plte", 1, 0, 0}, {"mng_putchunk_pplt", 1, 0, 0}, {"mng_putchunk_pplt_entry", 1, 0, 0}, {"mng_putchunk_prom", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_SAVE {"mng_putchunk_save", 1, 0, 0}, {"mng_putchunk_save_entry", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_sBIT {"mng_putchunk_sbit", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_SEEK {"mng_putchunk_seek", 1, 0, 0}, #endif {"mng_putchunk_show", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_sPLT {"mng_putchunk_splt", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_sRGB {"mng_putchunk_srgb", 1, 0, 0}, #endif {"mng_putchunk_term", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_tEXt {"mng_putchunk_text", 1, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_tIME {"mng_putchunk_time", 1, 0, 0}, #endif {"mng_putchunk_trns", 1, 0, 0}, {"mng_putchunk_unkown", 1, 0, 0}, #ifndef MNG_SKIPCHUNK_zTXt {"mng_putchunk_ztxt", 1, 0, 0}, #endif {"mng_putimgdata_ihdr", 0, 0, 0}, {"mng_putimgdata_jhdr", 0, 0, 0}, {"mng_reset", 1, 0, 0}, {"mng_read", 1, 0, 0}, {"mng_read_pushchunk", 1, 0, 8}, {"mng_read_pushdata", 1, 0, 8}, {"mng_read_pushsig", 1, 0, 8}, {"mng_read_resume", 1, 0, 0}, {"mng_readdisplay", 1, 0, 0}, {"mng_set_bgcolor", 1, 0, 0}, {"mng_set_bkgdstyle", 1, 0, 0}, {"mng_set_cacheplayback", 1, 0, 2}, {"mng_set_canvasstyle", 1, 0, 0}, {"mng_set_dfltimggamma", 1, 0, 0}, #ifndef MNG_NO_DFLT_INFO {"mng_set_dfltimggammaint", 1, 0, 0}, #endif {"mng_set_displaygamma", 1, 0, 0}, {"mng_set_displaygammaint", 1, 0, 0}, {"mng_set_doprogressive", 1, 0, 2}, #ifdef MNG_ACCESS_JPEG {"mng_set_jpeg_dctmethod", 1, 0, 0}, {"mng_set_jpeg_maxjdat", 1, 0, 0}, {"mng_set_jpeg_optimized", 1, 0, 0}, {"mng_set_jpeg_progressive", 1, 0, 0}, {"mng_set_jpeg_quality", 1, 0, 0}, {"mng_set_jpeg_smoothing", 1, 0, 0}, #endif #ifndef MNG_SKIP_MAXCANVAS {"mng_set_maxcanvasheight", 1, 0, 0}, {"mng_set_maxcanvassize", 1, 0, 0}, {"mng_set_maxcanvaswidth", 1, 0, 0}, #endif {"mng_set_outputprofile", 1, 0, 0}, {"mng_set_outputprofile2", 1, 0, 0}, {"mng_set_outputsrgb", 1, 0, 1}, {"mng_set_sectionbreaks", 1, 0, 0}, {"mng_set_speed", 1, 0, 0}, {"mng_set_srgb", 1, 0, 0}, {"mng_set_srgbimplicit", 1, 0, 1}, {"mng_set_srgbprofile", 1, 0, 0}, {"mng_set_srgbprofile2", 1, 0, 0}, {"mng_set_storechunks", 1, 0, 0}, {"mng_set_suspensionmode", 1, 0, 0}, {"mng_set_usebkgd", 1, 0, 0}, {"mng_set_userdata", 1, 0, 0}, #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) {"mng_set_viewgamma", 1, 0, 0}, {"mng_set_viewgammaint", 1, 0, 0}, #endif #ifdef MNG_ACCESS_ZLIB {"mng_set_zlib_level", 1, 0, 0}, {"mng_set_zlib_maxidat", 1, 0, 0}, {"mng_set_zlib_memlevel", 1, 0, 0}, {"mng_set_zlib_method", 1, 0, 0}, {"mng_set_zlib_strategy", 1, 0, 0}, {"mng_set_zlib_windowbits", 1, 0, 0}, #endif #ifndef MNG_NO_OPEN_CLOSE_STREAM {"mng_setcb_closestream", 1, 0, 0}, #endif {"mng_setcb_errorproc", 1, 0, 0}, {"mng_setcb_getalphaline", 1, 0, 0}, {"mng_setcb_getbkgdline", 1, 0, 0}, {"mng_setcb_getcanvasline", 1, 0, 0}, {"mng_setcb_gettickcount", 1, 0, 0}, {"mng_setcb_memalloc", 1, 0, 0}, {"mng_setcb_memfree", 1, 0, 0}, #ifndef MNG_NO_OPEN_CLOSE_STREAM {"mng_setcb_openstream", 1, 0, 0}, #endif {"mng_setcb_processarow", 1, 0, 0}, {"mng_setcb_processchroma", 1, 0, 0}, {"mng_setcb_processgamma", 1, 0, 0}, {"mng_setcb_processheader", 1, 0, 0}, {"mng_setcb_processiccp", 1, 0, 0}, {"mng_setcb_processmend", 1, 0, 1}, {"mng_setcb_processneed", 1, 0, 0}, {"mng_setcb_processsave", 1, 0, 0}, {"mng_setcb_processseek", 1, 0, 0}, {"mng_setcb_processsrgb", 1, 0, 0}, {"mng_setcb_processterm", 1, 0, 2}, {"mng_setcb_processtext", 1, 0, 0}, {"mng_setcb_processunknown", 1, 0, 0}, {"mng_setcb_readdata", 1, 0, 0}, {"mng_setcb_refresh", 1, 0, 0}, {"mng_setcb_releasedata", 1, 0, 8}, {"mng_setcb_settimer", 1, 0, 0}, {"mng_setcb_traceproc", 1, 0, 0}, {"mng_setcb_writedata", 1, 0, 0}, {"mng_status_creating", 1, 0, 0}, {"mng_status_displaying", 1, 0, 0}, {"mng_status_dynamic", 1, 0, 5}, {"mng_status_error", 1, 0, 0}, {"mng_status_reading", 1, 0, 0}, {"mng_status_running", 1, 0, 0}, {"mng_status_runningevent", 1, 0, 5}, {"mng_status_suspendbreak", 1, 0, 0}, {"mng_status_timerbreak", 1, 0, 0}, {"mng_status_writing", 1, 0, 0}, {"mng_supports_func", 1, 0, 5}, {"mng_trapevent", 1, 0, 5}, {"mng_updatemngheader", 1, 0, 0}, {"mng_updatemngsimplicity", 1, 0, 0}, {"mng_version_beta", 1, 0, 5}, {"mng_version_dll", 1, 0, 0}, {"mng_version_major", 1, 0, 0}, {"mng_version_minor", 1, 0, 0}, {"mng_version_release", 1, 0, 0}, {"mng_version_so", 1, 0, 0}, {"mng_version_text", 1, 0, 0}, {"mng_write", 1, 0, 0}, }; mng_bool MNG_DECL mng_supports_func (mng_pchar zFunction, mng_uint8* iMajor, mng_uint8* iMinor, mng_uint8* iRelease) { mng_int32 iTop, iLower, iUpper, iMiddle; mng_func_entryp pEntry; /* pointer to found entry */ /* determine max index of table */ iTop = (sizeof (func_table) / sizeof (func_table [0])) - 1; iLower = 0; /* initialize binary search */ iMiddle = iTop >> 1; /* start in the middle */ iUpper = iTop; pEntry = 0; /* no goods yet! */ do /* the binary search itself */ { mng_int32 iRslt = strcmp(func_table [iMiddle].zFunction, zFunction); if (iRslt < 0) iLower = iMiddle + 1; else if (iRslt > 0) iUpper = iMiddle - 1; else { pEntry = &func_table [iMiddle]; break; }; iMiddle = (iLower + iUpper) >> 1; } while (iLower <= iUpper); if (pEntry) /* found it ? */ { *iMajor = pEntry->iMajor; *iMinor = pEntry->iMinor; *iRelease = pEntry->iRelease; return MNG_TRUE; } else { *iMajor = 0; *iMinor = 0; *iRelease = 0; return MNG_FALSE; } } #endif /* ************************************************************************** */ /* * * */ /* * HLAPI routines * */ /* * * */ /* ************************************************************************** */ mng_handle MNG_DECL mng_initialize (mng_ptr pUserdata, mng_memalloc fMemalloc, mng_memfree fMemfree, mng_traceproc fTraceproc) { mng_datap pData; #ifdef MNG_SUPPORT_DISPLAY mng_retcode iRetcode; mng_imagep pImage; #endif #ifdef MNG_INTERNAL_MEMMNGMT /* allocate the main datastruc */ pData = (mng_datap)calloc (1, sizeof (mng_data)); #else pData = (mng_datap)fMemalloc (sizeof (mng_data)); #endif if (!pData) return MNG_NULL; /* error: out of memory?? */ /* validate the structure */ pData->iMagic = MNG_MAGIC; /* save userdata field */ pData->pUserdata = pUserdata; /* remember trace callback */ pData->fTraceproc = fTraceproc; #ifdef MNG_SUPPORT_TRACE if (mng_trace (pData, MNG_FN_INITIALIZE, MNG_LC_INITIALIZE)) { MNG_FREEX (pData, pData, sizeof (mng_data)); return MNG_NULL; } #endif /* default canvas styles are 8-bit RGB */ pData->iCanvasstyle = MNG_CANVAS_RGB8; pData->iBkgdstyle = MNG_CANVAS_RGB8; pData->iBGred = 0; /* black */ pData->iBGgreen = 0; pData->iBGblue = 0; pData->bUseBKGD = MNG_TRUE; #ifdef MNG_FULL_CMS pData->bIssRGB = MNG_TRUE; pData->hProf1 = 0; /* no profiles yet */ pData->hProf2 = 0; pData->hProf3 = 0; pData->hTrans = 0; #endif pData->dViewgamma = 1.0; pData->dDisplaygamma = 2.2; pData->dDfltimggamma = 0.45455; /* initially remember chunks */ pData->bStorechunks = MNG_TRUE; /* no breaks at section-borders */ pData->bSectionbreaks = MNG_FALSE; /* initially cache playback info */ pData->bCacheplayback = MNG_TRUE; /* progressive refresh for large images */ pData->bDoProgressive = MNG_TRUE; /* crc exists; should check; error for critical chunks; warning for ancillery; generate crc for output */ pData->iCrcmode = MNG_CRC_DEFAULT; /* normal animation-speed ! */ pData->iSpeed = mng_st_normal; /* initial image limits */ pData->iMaxwidth = 10000; pData->iMaxheight = 10000; #ifdef MNG_INTERNAL_MEMMNGMT /* internal management */ pData->fMemalloc = MNG_NULL; pData->fMemfree = MNG_NULL; #else /* keep callbacks */ pData->fMemalloc = fMemalloc; pData->fMemfree = fMemfree; #endif /* no value (yet) */ pData->fReleasedata = MNG_NULL; #ifndef MNG_NO_OPEN_CLOSE_STREAM pData->fOpenstream = MNG_NULL; pData->fClosestream = MNG_NULL; #endif pData->fReaddata = MNG_NULL; pData->fWritedata = MNG_NULL; pData->fErrorproc = MNG_NULL; pData->fProcessheader = MNG_NULL; pData->fProcesstext = MNG_NULL; pData->fProcesssave = MNG_NULL; pData->fProcessseek = MNG_NULL; pData->fProcessneed = MNG_NULL; pData->fProcessmend = MNG_NULL; pData->fProcessunknown = MNG_NULL; pData->fProcessterm = MNG_NULL; pData->fGetcanvasline = MNG_NULL; pData->fGetbkgdline = MNG_NULL; pData->fGetalphaline = MNG_NULL; pData->fRefresh = MNG_NULL; pData->fGettickcount = MNG_NULL; pData->fSettimer = MNG_NULL; pData->fProcessgamma = MNG_NULL; pData->fProcesschroma = MNG_NULL; pData->fProcesssrgb = MNG_NULL; pData->fProcessiccp = MNG_NULL; pData->fProcessarow = MNG_NULL; #if defined(MNG_SUPPORT_DISPLAY) && (defined(MNG_GAMMA_ONLY) || defined(MNG_FULL_CMS)) pData->dLastgamma = 0; /* lookup table needs first-time calc */ #endif #ifdef MNG_SUPPORT_DISPLAY /* create object 0 */ iRetcode = mng_create_imageobject (pData, 0, MNG_TRUE, MNG_TRUE, MNG_TRUE, 0, 0, 0, 0, 0, 0, 0, 0, 0, MNG_FALSE, 0, 0, 0, 0, &pImage); if (iRetcode) /* on error drop out */ { MNG_FREEX (pData, pData, sizeof (mng_data)); return MNG_NULL; } pData->pObjzero = pImage; #endif #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_INCLUDE_LCMS) mnglcms_initlibrary (); /* init lcms particulars */ #endif #ifdef MNG_SUPPORT_READ pData->bSuspensionmode = MNG_FALSE; pData->iSuspendbufsize = 0; pData->pSuspendbuf = MNG_NULL; pData->pSuspendbufnext = MNG_NULL; pData->iSuspendbufleft = 0; pData->iChunklen = 0; pData->pReadbufnext = MNG_NULL; pData->pLargebufnext = MNG_NULL; pData->pFirstpushchunk = MNG_NULL; pData->pLastpushchunk = MNG_NULL; pData->pFirstpushdata = MNG_NULL; pData->pLastpushdata = MNG_NULL; #endif #ifdef MNG_INCLUDE_ZLIB mngzlib_initialize (pData); /* initialize zlib structures and such */ /* default zlib compression parameters */ pData->iZlevel = MNG_ZLIB_LEVEL; pData->iZmethod = MNG_ZLIB_METHOD; pData->iZwindowbits = MNG_ZLIB_WINDOWBITS; pData->iZmemlevel = MNG_ZLIB_MEMLEVEL; pData->iZstrategy = MNG_ZLIB_STRATEGY; /* default maximum IDAT data size */ pData->iMaxIDAT = MNG_MAX_IDAT_SIZE; #endif #ifdef MNG_INCLUDE_JNG /* default IJG compression parameters */ pData->eJPEGdctmethod = MNG_JPEG_DCT; pData->iJPEGquality = MNG_JPEG_QUALITY; pData->iJPEGsmoothing = MNG_JPEG_SMOOTHING; pData->bJPEGcompressprogr = MNG_JPEG_PROGRESSIVE; pData->bJPEGcompressopt = MNG_JPEG_OPTIMIZED; /* default maximum JDAT data size */ pData->iMaxJDAT = MNG_MAX_JDAT_SIZE; #endif mng_reset ((mng_handle)pData); #ifdef MNG_SUPPORT_TRACE if (mng_trace (pData, MNG_FN_INITIALIZE, MNG_LC_END)) { MNG_FREEX (pData, pData, sizeof (mng_data)); return MNG_NULL; } #endif return (mng_handle)pData; /* if we get here, we're in business */ } /* ************************************************************************** */ mng_retcode MNG_DECL mng_reset (mng_handle hHandle) { mng_datap pData; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_RESET, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)(hHandle)); /* address main structure */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_SKIPCHUNK_SAVE mng_drop_savedata (pData); /* cleanup saved-data from SAVE/SEEK */ #endif #endif #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_FULL_CMS) mng_clear_cms (pData); /* cleanup left-over cms stuff if any */ #endif #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_INCLUDE_JNG) mngjpeg_cleanup (pData); /* cleanup jpeg stuff */ #endif #ifdef MNG_INCLUDE_ZLIB if (pData->bInflating) /* if we've been inflating */ { #ifdef MNG_INCLUDE_DISPLAY_PROCS mng_cleanup_rowproc (pData); /* cleanup row-processing, */ #endif mngzlib_inflatefree (pData); /* cleanup inflate! */ } #endif /* MNG_INCLUDE_ZLIB */ #ifdef MNG_SUPPORT_READ if ((pData->bReading) && (!pData->bEOF)) mng_process_eof (pData); /* cleanup app streaming */ /* cleanup default read buffers */ MNG_FREE (pData, pData->pReadbuf, pData->iReadbufsize); MNG_FREE (pData, pData->pLargebuf, pData->iLargebufsize); MNG_FREE (pData, pData->pSuspendbuf, pData->iSuspendbufsize); while (pData->pFirstpushdata) /* release any pushed data & chunks */ mng_release_pushdata (pData); while (pData->pFirstpushchunk) mng_release_pushchunk (pData); #endif #ifdef MNG_SUPPORT_WRITE /* cleanup default write buffer */ MNG_FREE (pData, pData->pWritebuf, pData->iWritebufsize); #endif #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) mng_drop_chunks (pData); /* drop stored chunks (if any) */ #endif #ifdef MNG_SUPPORT_DISPLAY mng_drop_objects (pData, MNG_TRUE); /* drop stored objects (if any) */ #ifndef MNG_SKIPCHUNK_iCCP if (pData->iGlobalProfilesize) /* drop global profile (if any) */ MNG_FREEX (pData, pData->pGlobalProfile, pData->iGlobalProfilesize); #endif #endif pData->eSigtype = mng_it_unknown; pData->eImagetype = mng_it_unknown; pData->iWidth = 0; /* these are unknown yet */ pData->iHeight = 0; pData->iTicks = 0; pData->iLayercount = 0; pData->iFramecount = 0; pData->iPlaytime = 0; pData->iSimplicity = 0; pData->iAlphadepth = 16; /* assume the worst! */ pData->iImagelevel = 0; /* no image encountered */ pData->iMagnify = 0; /* 1-to-1 display */ pData->iOffsetx = 0; /* no offsets */ pData->iOffsety = 0; pData->iCanvaswidth = 0; /* let the app decide during processheader */ pData->iCanvasheight = 0; /* so far, so good */ pData->iErrorcode = MNG_NOERROR; pData->iSeverity = 0; pData->iErrorx1 = 0; pData->iErrorx2 = 0; pData->zErrortext = MNG_NULL; #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) /* let's assume the best scenario */ #ifndef MNG_NO_OLD_VERSIONS pData->bPreDraft48 = MNG_FALSE; #endif /* the unknown chunk */ pData->iChunkname = MNG_UINT_HUH; pData->iChunkseq = 0; pData->pFirstchunk = MNG_NULL; pData->pLastchunk = MNG_NULL; /* nothing processed yet */ pData->bHasheader = MNG_FALSE; pData->bHasMHDR = MNG_FALSE; pData->bHasIHDR = MNG_FALSE; pData->bHasBASI = MNG_FALSE; pData->bHasDHDR = MNG_FALSE; #ifdef MNG_INCLUDE_JNG pData->bHasJHDR = MNG_FALSE; pData->bHasJSEP = MNG_FALSE; pData->bHasJDAA = MNG_FALSE; pData->bHasJDAT = MNG_FALSE; #endif pData->bHasPLTE = MNG_FALSE; pData->bHasTRNS = MNG_FALSE; pData->bHasGAMA = MNG_FALSE; pData->bHasCHRM = MNG_FALSE; pData->bHasSRGB = MNG_FALSE; pData->bHasICCP = MNG_FALSE; pData->bHasBKGD = MNG_FALSE; pData->bHasIDAT = MNG_FALSE; pData->bHasSAVE = MNG_FALSE; pData->bHasBACK = MNG_FALSE; pData->bHasFRAM = MNG_FALSE; pData->bHasTERM = MNG_FALSE; pData->bHasLOOP = MNG_FALSE; /* there's no global stuff yet either */ pData->bHasglobalPLTE = MNG_FALSE; pData->bHasglobalTRNS = MNG_FALSE; pData->bHasglobalGAMA = MNG_FALSE; pData->bHasglobalCHRM = MNG_FALSE; pData->bHasglobalSRGB = MNG_FALSE; pData->bHasglobalICCP = MNG_FALSE; pData->iDatawidth = 0; /* no IHDR/BASI/DHDR done yet */ pData->iDataheight = 0; pData->iBitdepth = 0; pData->iColortype = 0; pData->iCompression = 0; pData->iFilter = 0; pData->iInterlace = 0; #ifdef MNG_INCLUDE_JNG pData->iJHDRcolortype = 0; /* no JHDR data */ pData->iJHDRimgbitdepth = 0; pData->iJHDRimgcompression = 0; pData->iJHDRimginterlace = 0; pData->iJHDRalphabitdepth = 0; pData->iJHDRalphacompression = 0; pData->iJHDRalphafilter = 0; pData->iJHDRalphainterlace = 0; #endif #endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */ #ifdef MNG_SUPPORT_READ /* no reading done */ pData->bReading = MNG_FALSE; pData->bHavesig = MNG_FALSE; pData->bEOF = MNG_FALSE; pData->iReadbufsize = 0; pData->pReadbuf = MNG_NULL; pData->iLargebufsize = 0; pData->pLargebuf = MNG_NULL; pData->iSuspendtime = 0; pData->bSuspended = MNG_FALSE; pData->iSuspendpoint = 0; pData->pSuspendbufnext = pData->pSuspendbuf; pData->iSuspendbufleft = 0; #endif /* MNG_SUPPORT_READ */ #ifdef MNG_SUPPORT_WRITE /* no creating/writing done */ pData->bCreating = MNG_FALSE; pData->bWriting = MNG_FALSE; pData->iFirstchunkadded = 0; pData->iWritebufsize = 0; pData->pWritebuf = MNG_NULL; #endif /* MNG_SUPPORT_WRITE */ #ifdef MNG_SUPPORT_DISPLAY /* done nuttin' yet */ pData->bDisplaying = MNG_FALSE; pData->iFrameseq = 0; pData->iLayerseq = 0; pData->iFrametime = 0; pData->iTotallayers = 0; pData->iTotalframes = 0; pData->iTotalplaytime = 0; pData->bSkipping = MNG_FALSE; #ifdef MNG_SUPPORT_DYNAMICMNG pData->bDynamic = MNG_FALSE; pData->bRunningevent = MNG_FALSE; pData->bStopafterseek = MNG_FALSE; pData->iEventx = 0; pData->iEventy = 0; pData->pLastmousemove = MNG_NULL; #endif pData->iRequestframe = 0; pData->iRequestlayer = 0; pData->iRequesttime = 0; pData->bSearching = MNG_FALSE; pData->bRestorebkgd = MNG_FALSE; pData->iRuntime = 0; pData->iSynctime = 0; pData->iStarttime = 0; pData->iEndtime = 0; pData->bRunning = MNG_FALSE; pData->bTimerset = MNG_FALSE; pData->iBreakpoint = 0; pData->bSectionwait = MNG_FALSE; pData->bFreezing = MNG_FALSE; pData->bResetting = MNG_FALSE; pData->bNeedrefresh = MNG_FALSE; pData->bMisplacedTERM = MNG_FALSE; pData->bOnlyfirstframe = MNG_FALSE; pData->iFramesafterTERM = 0; /* these don't exist yet */ pData->pCurrentobj = MNG_NULL; pData->pCurraniobj = MNG_NULL; pData->pTermaniobj = MNG_NULL; pData->pLastclone = MNG_NULL; pData->pStoreobj = MNG_NULL; pData->pStorebuf = MNG_NULL; pData->pRetrieveobj = MNG_NULL; /* no saved data ! */ pData->pSavedata = MNG_NULL; pData->iUpdateleft = 0; /* no region updated yet */ pData->iUpdateright = 0; pData->iUpdatetop = 0; pData->iUpdatebottom = 0; pData->iPass = -1; /* interlacing stuff and temp buffers */ pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = 0; pData->iSamplemul = 0; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = 0; pData->iRowmax = 0; pData->iFilterofs = 0; pData->iPixelofs = 1; pData->iLevel0 = 0; pData->iLevel1 = 0; pData->iLevel2 = 0; pData->iLevel3 = 0; pData->pWorkrow = MNG_NULL; pData->pPrevrow = MNG_NULL; pData->pRGBArow = MNG_NULL; pData->bIsRGBA16 = MNG_TRUE; pData->bIsOpaque = MNG_TRUE; pData->iFilterbpp = 1; pData->iSourcel = 0; /* always initialized just before */ pData->iSourcer = 0; /* compositing the next layer */ pData->iSourcet = 0; pData->iSourceb = 0; pData->iDestl = 0; pData->iDestr = 0; pData->iDestt = 0; pData->iDestb = 0; /* lists are empty */ pData->pFirstimgobj = MNG_NULL; pData->pLastimgobj = MNG_NULL; pData->pFirstaniobj = MNG_NULL; pData->pLastaniobj = MNG_NULL; #ifdef MNG_SUPPORT_DYNAMICMNG pData->pFirstevent = MNG_NULL; pData->pLastevent = MNG_NULL; #endif /* no processing callbacks */ pData->fDisplayrow = MNG_NULL; pData->fRestbkgdrow = MNG_NULL; pData->fCorrectrow = MNG_NULL; pData->fRetrieverow = MNG_NULL; pData->fStorerow = MNG_NULL; pData->fProcessrow = MNG_NULL; pData->fDifferrow = MNG_NULL; pData->fScalerow = MNG_NULL; pData->fDeltarow = MNG_NULL; #ifndef MNG_SKIPCHUNK_PAST pData->fFliprow = MNG_NULL; pData->fTilerow = MNG_NULL; #endif pData->fInitrowproc = MNG_NULL; pData->iPLTEcount = 0; /* no PLTE data */ #ifndef MNG_SKIPCHUNK_DEFI pData->iDEFIobjectid = 0; /* no DEFI data */ pData->bDEFIhasdonotshow = MNG_FALSE; pData->iDEFIdonotshow = 0; pData->bDEFIhasconcrete = MNG_FALSE; pData->iDEFIconcrete = 0; pData->bDEFIhasloca = MNG_FALSE; pData->iDEFIlocax = 0; pData->iDEFIlocay = 0; pData->bDEFIhasclip = MNG_FALSE; pData->iDEFIclipl = 0; pData->iDEFIclipr = 0; pData->iDEFIclipt = 0; pData->iDEFIclipb = 0; #endif #ifndef MNG_SKIPCHUNK_BACK pData->iBACKred = 0; /* no BACK data */ pData->iBACKgreen = 0; pData->iBACKblue = 0; pData->iBACKmandatory = 0; pData->iBACKimageid = 0; pData->iBACKtile = 0; #endif #ifndef MNG_SKIPCHUNK_FRAM pData->iFRAMmode = 1; /* default global FRAM variables */ pData->iFRAMdelay = 1; pData->iFRAMtimeout = 0x7fffffffl; pData->bFRAMclipping = MNG_FALSE; pData->iFRAMclipl = 0; pData->iFRAMclipr = 0; pData->iFRAMclipt = 0; pData->iFRAMclipb = 0; pData->iFramemode = 1; /* again for the current frame */ pData->iFramedelay = 1; pData->iFrametimeout = 0x7fffffffl; pData->bFrameclipping = MNG_FALSE; pData->iFrameclipl = 0; pData->iFrameclipr = 0; pData->iFrameclipt = 0; pData->iFrameclipb = 0; pData->iNextdelay = 1; #endif #ifndef MNG_SKIPCHUNK_SHOW pData->iSHOWmode = 0; /* no SHOW data */ pData->iSHOWfromid = 0; pData->iSHOWtoid = 0; pData->iSHOWnextid = 0; pData->iSHOWskip = 0; #endif pData->iGlobalPLTEcount = 0; /* no global PLTE data */ pData->iGlobalTRNSrawlen = 0; /* no global tRNS data */ pData->iGlobalGamma = 0; /* no global gAMA data */ #ifndef MNG_SKIPCHUNK_cHRM pData->iGlobalWhitepointx = 0; /* no global cHRM data */ pData->iGlobalWhitepointy = 0; pData->iGlobalPrimaryredx = 0; pData->iGlobalPrimaryredy = 0; pData->iGlobalPrimarygreenx = 0; pData->iGlobalPrimarygreeny = 0; pData->iGlobalPrimarybluex = 0; pData->iGlobalPrimarybluey = 0; #endif pData->iGlobalRendintent = 0; /* no global sRGB data */ #ifndef MNG_SKIPCHUNK_iCCP pData->iGlobalProfilesize = 0; /* no global iCCP data */ pData->pGlobalProfile = MNG_NULL; #endif #ifndef MNG_SKIPCHUNK_bKGD pData->iGlobalBKGDred = 0; /* no global bKGD data */ pData->iGlobalBKGDgreen = 0; pData->iGlobalBKGDblue = 0; #endif /* no delta-image */ #ifndef MNG_NO_DELTA_PNG pData->pDeltaImage = MNG_NULL; pData->iDeltaImagetype = 0; pData->iDeltatype = 0; pData->iDeltaBlockwidth = 0; pData->iDeltaBlockheight = 0; pData->iDeltaBlockx = 0; pData->iDeltaBlocky = 0; pData->bDeltaimmediate = MNG_FALSE; pData->fDeltagetrow = MNG_NULL; pData->fDeltaaddrow = MNG_NULL; pData->fDeltareplacerow = MNG_NULL; pData->fDeltaputrow = MNG_NULL; pData->fPromoterow = MNG_NULL; pData->fPromBitdepth = MNG_NULL; pData->pPromBuf = MNG_NULL; pData->iPromColortype = 0; pData->iPromBitdepth = 0; pData->iPromFilltype = 0; pData->iPromWidth = 0; pData->pPromSrc = MNG_NULL; pData->pPromDst = MNG_NULL; #endif #ifndef MNG_SKIPCHUNK_MAGN pData->iMAGNfromid = 0; pData->iMAGNtoid = 0; #endif #ifndef MNG_SKIPCHUNK_PAST pData->iPastx = 0; pData->iPasty = 0; #endif pData->pLastseek = MNG_NULL; #endif #ifdef MNG_INCLUDE_ZLIB pData->bInflating = 0; /* no inflating or deflating */ pData->bDeflating = 0; /* going on at the moment */ #endif #ifdef MNG_SUPPORT_DISPLAY /* reset object 0 */ mng_reset_objzero (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_RESET, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_cleanup (mng_handle* hHandle) { mng_datap pData; /* local vars */ #ifndef MNG_INTERNAL_MEMMNGMT mng_memfree fFree; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)*hHandle), MNG_FN_CLEANUP, MNG_LC_START); #endif MNG_VALIDHANDLE (*hHandle) /* check validity handle */ pData = ((mng_datap)(*hHandle)); /* and address main structure */ mng_reset (*hHandle); /* do an implicit reset to cleanup most stuff */ #ifdef MNG_SUPPORT_DISPLAY /* drop object 0 */ mng_free_imageobject (pData, (mng_imagep)pData->pObjzero); #endif #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_FULL_CMS) if (pData->hProf2) /* output profile defined ? */ mnglcms_freeprofile (pData->hProf2); if (pData->hProf3) /* sRGB profile defined ? */ mnglcms_freeprofile (pData->hProf3); #endif #ifdef MNG_INCLUDE_ZLIB mngzlib_cleanup (pData); /* cleanup zlib stuff */ #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)*hHandle), MNG_FN_CLEANUP, MNG_LC_CLEANUP) #endif pData->iMagic = 0; /* invalidate the actual memory */ #ifdef MNG_INTERNAL_MEMMNGMT free ((void *)*hHandle); /* cleanup the data-structure */ #else fFree = ((mng_datap)*hHandle)->fMemfree; fFree ((mng_ptr)*hHandle, sizeof (mng_data)); #endif *hHandle = 0; /* wipe pointer to inhibit future use */ return MNG_NOERROR; /* and we're done */ } /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_retcode MNG_DECL mng_read (mng_handle hHandle) { mng_datap pData; /* local vars */ mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READ, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle and callbacks */ pData = ((mng_datap)hHandle); /* and make it addressable */ #ifndef MNG_INTERNAL_MEMMNGMT MNG_VALIDCB (hHandle, fMemalloc) MNG_VALIDCB (hHandle, fMemfree) #endif #ifndef MNG_NO_OPEN_CLOSE_STREAM MNG_VALIDCB (hHandle, fOpenstream) MNG_VALIDCB (hHandle, fClosestream) #endif MNG_VALIDCB (hHandle, fReaddata) #ifdef MNG_SUPPORT_DISPLAY /* valid at this point ? */ if ((pData->bReading) || (pData->bDisplaying)) #else if (pData->bReading) #endif MNG_ERROR (pData, MNG_FUNCTIONINVALID); #ifdef MNG_SUPPORT_WRITE if ((pData->bWriting) || (pData->bCreating)) MNG_ERROR (pData, MNG_FUNCTIONINVALID); #endif if (!pData->bCacheplayback) /* must store playback info to work!! */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); cleanup_errors (pData); /* cleanup previous errors */ pData->bReading = MNG_TRUE; /* read only! */ #ifndef MNG_NO_OPEN_CLOSE_STREAM if (pData->fOpenstream && !pData->fOpenstream (hHandle)) /* open it and start reading */ iRetcode = MNG_APPIOERROR; else #endif iRetcode = mng_read_graphic (pData); if (pData->bEOF) /* already at EOF ? */ { pData->bReading = MNG_FALSE; /* then we're no longer reading */ #ifdef MNG_SUPPORT_DISPLAY mng_reset_rundata (pData); /* reset rundata */ #endif } if (iRetcode) /* on error bail out */ return iRetcode; if (pData->bSuspended) /* read suspension ? */ { iRetcode = MNG_NEEDMOREDATA; pData->iSuspendtime = pData->fGettickcount ((mng_handle)pData); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READ, MNG_LC_END); #endif return iRetcode; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_retcode MNG_DECL mng_read_pushdata (mng_handle hHandle, mng_ptr pData, mng_size_t iLength, mng_bool bTakeownership) { mng_datap pMyData; /* local vars */ mng_pushdatap pPush; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READ_PUSHDATA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pMyData = ((mng_datap)hHandle); /* and make it addressable */ /* create a containing buffer */ iRetcode = make_pushbuffer (pMyData, pData, iLength, bTakeownership, &pPush); if (iRetcode) return iRetcode; if (pMyData->pLastpushdata) /* and update the buffer chain */ pMyData->pLastpushdata->pNext = pPush; else pMyData->pFirstpushdata = pPush; pMyData->pLastpushdata = pPush; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READ_PUSHDATA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_retcode MNG_DECL mng_read_pushsig (mng_handle hHandle, mng_imgtype eSigtype) { mng_datap pData; /* local vars */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READ_PUSHSIG, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)hHandle); /* and make it addressable */ if (pData->bHavesig) /* can we expect this call ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); pData->eSigtype = eSigtype; pData->bHavesig = MNG_TRUE; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READ_PUSHSIG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_retcode MNG_DECL mng_read_pushchunk (mng_handle hHandle, mng_ptr pChunk, mng_size_t iLength, mng_bool bTakeownership) { mng_datap pMyData; /* local vars */ mng_pushdatap pPush; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READ_PUSHCHUNK, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pMyData = ((mng_datap)hHandle); /* and make it addressable */ /* create a containing buffer */ iRetcode = make_pushbuffer (pMyData, pChunk, iLength, bTakeownership, &pPush); if (iRetcode) return iRetcode; if (pMyData->pLastpushchunk) /* and update the buffer chain */ pMyData->pLastpushchunk->pNext = pPush; else pMyData->pFirstpushchunk = pPush; pMyData->pLastpushchunk = pPush; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READ_PUSHCHUNK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_retcode MNG_DECL mng_read_resume (mng_handle hHandle) { mng_datap pData; /* local vars */ mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READ_RESUME, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)hHandle); /* and make it addressable */ /* can we expect this call ? */ if ((!pData->bReading) || (!pData->bSuspended)) MNG_ERROR (pData, MNG_FUNCTIONINVALID); cleanup_errors (pData); /* cleanup previous errors */ pData->bSuspended = MNG_FALSE; /* reset the flag */ #ifdef MNG_SUPPORT_DISPLAY /* re-synchronize ? */ if ((pData->bDisplaying) && (pData->bRunning)) pData->iSynctime = pData->iSynctime - pData->iSuspendtime + pData->fGettickcount (hHandle); #endif iRetcode = mng_read_graphic (pData); /* continue reading now */ if (pData->bEOF) /* at EOF ? */ { pData->bReading = MNG_FALSE; /* then we're no longer reading */ #ifdef MNG_SUPPORT_DISPLAY mng_reset_rundata (pData); /* reset rundata */ #endif } if (iRetcode) /* on error bail out */ return iRetcode; if (pData->bSuspended) /* read suspension ? */ { iRetcode = MNG_NEEDMOREDATA; pData->iSuspendtime = pData->fGettickcount ((mng_handle)pData); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READ_RESUME, MNG_LC_END); #endif return iRetcode; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_write (mng_handle hHandle) { mng_datap pData; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_WRITE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle and callbacks */ pData = ((mng_datap)hHandle); /* and make it addressable */ #ifndef MNG_INTERNAL_MEMMNGMT MNG_VALIDCB (hHandle, fMemalloc) MNG_VALIDCB (hHandle, fMemfree) #endif #ifndef MNG_NO_OPEN_CLOSE_STREAM MNG_VALIDCB (hHandle, fOpenstream) MNG_VALIDCB (hHandle, fClosestream) #endif MNG_VALIDCB (hHandle, fWritedata) #ifdef MNG_SUPPORT_READ if (pData->bReading) /* valid at this point ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); #endif cleanup_errors (pData); /* cleanup previous errors */ iRetcode = mng_write_graphic (pData);/* do the write */ if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_WRITE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_create (mng_handle hHandle) { mng_datap pData; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_CREATE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle and callbacks */ pData = ((mng_datap)hHandle); /* and make it addressable */ #ifndef MNG_INTERNAL_MEMMNGMT MNG_VALIDCB (hHandle, fMemalloc) MNG_VALIDCB (hHandle, fMemfree) #endif #ifdef MNG_SUPPORT_READ if (pData->bReading) /* valid at this point ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); #endif if ((pData->bWriting) || (pData->bCreating)) MNG_ERROR (pData, MNG_FUNCTIONINVALID); cleanup_errors (pData); /* cleanup previous errors */ iRetcode = mng_reset (hHandle); /* clear any previous stuff */ if (iRetcode) /* on error bail out */ return iRetcode; pData->bCreating = MNG_TRUE; /* indicate we're creating a new file */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_CREATE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_SUPPORT_READ) mng_retcode MNG_DECL mng_readdisplay (mng_handle hHandle) { mng_datap pData; /* local vars */ mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READDISPLAY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle and callbacks */ pData = ((mng_datap)hHandle); /* and make it addressable */ #ifndef MNG_INTERNAL_MEMMNGMT MNG_VALIDCB (hHandle, fMemalloc) MNG_VALIDCB (hHandle, fMemfree) #endif MNG_VALIDCB (hHandle, fReaddata) MNG_VALIDCB (hHandle, fGetcanvasline) MNG_VALIDCB (hHandle, fRefresh) MNG_VALIDCB (hHandle, fGettickcount) MNG_VALIDCB (hHandle, fSettimer) /* valid at this point ? */ if ((pData->bReading) || (pData->bDisplaying)) MNG_ERROR (pData, MNG_FUNCTIONINVALID); #ifdef MNG_SUPPORT_WRITE if ((pData->bWriting) || (pData->bCreating)) MNG_ERROR (pData, MNG_FUNCTIONINVALID); #endif cleanup_errors (pData); /* cleanup previous errors */ pData->bReading = MNG_TRUE; /* read & display! */ pData->bDisplaying = MNG_TRUE; pData->bRunning = MNG_TRUE; pData->iFrameseq = 0; pData->iLayerseq = 0; pData->iFrametime = 0; pData->iRequestframe = 0; pData->iRequestlayer = 0; pData->iRequesttime = 0; pData->bSearching = MNG_FALSE; pData->iRuntime = 0; pData->iSynctime = pData->fGettickcount (hHandle); pData->iSuspendtime = 0; pData->iStarttime = pData->iSynctime; pData->iEndtime = 0; #ifndef MNG_NO_OPEN_CLOSE_STREAM if (pData->fOpenstream && !pData->fOpenstream (hHandle)) /* open it and start reading */ iRetcode = MNG_APPIOERROR; else #endif iRetcode = mng_read_graphic (pData); if (pData->bEOF) /* already at EOF ? */ { pData->bReading = MNG_FALSE; /* then we're no longer reading */ mng_drop_invalid_objects (pData); /* drop invalidly stored objects */ } if (iRetcode) /* on error bail out */ return iRetcode; if (pData->bSuspended) /* read suspension ? */ { iRetcode = MNG_NEEDMOREDATA; pData->iSuspendtime = pData->fGettickcount ((mng_handle)pData); } else if (pData->bTimerset) /* indicate timer break ? */ iRetcode = MNG_NEEDTIMERWAIT; else if (pData->bSectionwait) /* indicate section break ? */ iRetcode = MNG_NEEDSECTIONWAIT; else { /* no breaks = end of run */ pData->bRunning = MNG_FALSE; if (pData->bFreezing) /* dynamic MNG reached SEEK ? */ pData->bFreezing = MNG_FALSE; /* reset it ! */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_READDISPLAY, MNG_LC_END); #endif return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY && MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_display (mng_handle hHandle) { mng_datap pData; /* local vars */ mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle and callbacks */ pData = ((mng_datap)hHandle); /* and make it addressable */ #ifndef MNG_INTERNAL_MEMMNGMT MNG_VALIDCB (hHandle, fMemalloc) MNG_VALIDCB (hHandle, fMemfree) #endif MNG_VALIDCB (hHandle, fGetcanvasline) MNG_VALIDCB (hHandle, fRefresh) MNG_VALIDCB (hHandle, fGettickcount) MNG_VALIDCB (hHandle, fSettimer) if (pData->bDisplaying) /* valid at this point ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); #ifdef MNG_SUPPORT_READ if (pData->bReading) MNG_ERROR (pData, MNG_FUNCTIONINVALID); #endif #ifdef MNG_SUPPORT_WRITE if ((pData->bWriting) || (pData->bCreating)) MNG_ERROR (pData, MNG_FUNCTIONINVALID); #endif cleanup_errors (pData); /* cleanup previous errors */ pData->bDisplaying = MNG_TRUE; /* display! */ pData->bRunning = MNG_TRUE; pData->iFrameseq = 0; pData->iLayerseq = 0; pData->iFrametime = 0; pData->iRequestframe = 0; pData->iRequestlayer = 0; pData->iRequesttime = 0; pData->bSearching = MNG_FALSE; pData->iRuntime = 0; pData->iSynctime = pData->fGettickcount (hHandle); #ifdef MNG_SUPPORT_READ pData->iSuspendtime = 0; #endif pData->iStarttime = pData->iSynctime; pData->iEndtime = 0; pData->pCurraniobj = pData->pFirstaniobj; /* go do it */ iRetcode = mng_process_display (pData); if (iRetcode) /* on error bail out */ return iRetcode; if (pData->bTimerset) /* indicate timer break ? */ iRetcode = MNG_NEEDTIMERWAIT; else { /* no breaks = end of run */ pData->bRunning = MNG_FALSE; if (pData->bFreezing) /* dynamic MNG reached SEEK ? */ pData->bFreezing = MNG_FALSE; /* reset it ! */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY, MNG_LC_END); #endif return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_display_resume (mng_handle hHandle) { mng_datap pData; /* local vars */ mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_RESUME, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)hHandle); /* and make it addressable */ if (!pData->bDisplaying) /* can we expect this call ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); cleanup_errors (pData); /* cleanup previous errors */ /* was it running ? */ if ((pData->bRunning) || (pData->bReading)) { /* are we expecting this call ? */ if ((pData->bTimerset) || (pData->bSuspended) || (pData->bSectionwait)) { pData->bTimerset = MNG_FALSE; /* reset the flags */ pData->bSectionwait = MNG_FALSE; #ifdef MNG_SUPPORT_READ if (pData->bReading) /* set during read&display ? */ { if (pData->bSuspended) /* calculate proper synchronization */ pData->iSynctime = pData->iSynctime - pData->iSuspendtime + pData->fGettickcount (hHandle); else pData->iSynctime = pData->fGettickcount (hHandle); pData->bSuspended = MNG_FALSE; /* now reset this flag */ /* and continue reading */ iRetcode = mng_read_graphic (pData); if (pData->bEOF) /* already at EOF ? */ { pData->bReading = MNG_FALSE; /* then we're no longer reading */ /* drop invalidly stored objects */ mng_drop_invalid_objects (pData); } } else #endif /* MNG_SUPPORT_READ */ { /* synchronize timing */ pData->iSynctime = pData->fGettickcount (hHandle); /* resume display processing */ iRetcode = mng_process_display (pData); } } else { MNG_ERROR (pData, MNG_FUNCTIONINVALID); } } else { /* synchronize timing */ pData->iSynctime = pData->fGettickcount (hHandle); pData->bRunning = MNG_TRUE; /* it's restarted again ! */ /* resume display processing */ iRetcode = mng_process_display (pData); } if (iRetcode) /* on error bail out */ return iRetcode; if (pData->bSuspended) /* read suspension ? */ { iRetcode = MNG_NEEDMOREDATA; pData->iSuspendtime = pData->fGettickcount ((mng_handle)pData); } else if (pData->bTimerset) /* indicate timer break ? */ iRetcode = MNG_NEEDTIMERWAIT; else if (pData->bSectionwait) /* indicate section break ? */ iRetcode = MNG_NEEDSECTIONWAIT; else { /* no breaks = end of run */ pData->bRunning = MNG_FALSE; if (pData->bFreezing) /* trying to freeze ? */ pData->bFreezing = MNG_FALSE; /* then we're there */ if (pData->bResetting) /* trying to reset as well ? */ { /* full stop!!! */ pData->bDisplaying = MNG_FALSE; iRetcode = mng_reset_rundata (pData); if (iRetcode) /* on error bail out */ return iRetcode; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_RESUME, MNG_LC_END); #endif return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_display_freeze (mng_handle hHandle) { mng_datap pData; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_FREEZE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)hHandle); /* and make it addressable */ /* can we expect this call ? */ if ((!pData->bDisplaying) || (pData->bReading)) MNG_ERROR (pData, MNG_FUNCTIONINVALID); cleanup_errors (pData); /* cleanup previous errors */ if (pData->bRunning) /* is it running ? */ { mng_retcode iRetcode; pData->bFreezing = MNG_TRUE; /* indicate we need to freeze */ /* continue "normal" processing */ iRetcode = mng_display_resume (hHandle); if (iRetcode) /* on error bail out */ return iRetcode; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_FREEZE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_display_reset (mng_handle hHandle) { mng_datap pData; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_RESET, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)hHandle); /* and make it addressable */ /* can we expect this call ? */ if ((!pData->bDisplaying) || (pData->bReading)) MNG_ERROR (pData, MNG_FUNCTIONINVALID); if (!pData->bCacheplayback) /* must store playback info to work!! */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); cleanup_errors (pData); /* cleanup previous errors */ if (pData->bRunning) /* is it running ? */ { pData->bFreezing = MNG_TRUE; /* indicate we need to freeze */ pData->bResetting = MNG_TRUE; /* indicate we're about to reset too */ /* continue normal processing ? */ iRetcode = mng_display_resume (hHandle); if (iRetcode) /* on error bail out */ return iRetcode; } else { /* full stop!!! */ pData->bDisplaying = MNG_FALSE; iRetcode = mng_reset_rundata (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_RESET, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_DISPLAY_GO_SUPPORTED mng_retcode MNG_DECL mng_display_goframe (mng_handle hHandle, mng_uint32 iFramenr) { mng_datap pData; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_GOFRAME, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)hHandle); /* and make it addressable */ if (pData->eImagetype != mng_it_mng) /* is it an animation ? */ MNG_ERROR (pData, MNG_NOTANANIMATION); /* can we expect this call ? */ if ((!pData->bDisplaying) || (pData->bRunning)) MNG_ERROR ((mng_datap)hHandle, MNG_FUNCTIONINVALID); if (!pData->bCacheplayback) /* must store playback info to work!! */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); if (iFramenr > pData->iTotalframes) /* is the parameter within bounds ? */ MNG_ERROR (pData, MNG_FRAMENRTOOHIGH); /* within MHDR bounds ? */ if ((pData->iFramecount) && (iFramenr > pData->iFramecount)) MNG_WARNING (pData, MNG_FRAMENRTOOHIGH); cleanup_errors (pData); /* cleanup previous errors */ if (pData->iFrameseq > iFramenr) /* search from current or go back to start ? */ { iRetcode = mng_reset_rundata (pData); if (iRetcode) /* on error bail out */ return iRetcode; } if (iFramenr) { pData->iRequestframe = iFramenr; /* go find the requested frame then */ iRetcode = mng_process_display (pData); if (iRetcode) /* on error bail out */ return iRetcode; pData->bTimerset = MNG_FALSE; /* reset just to be safe */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_GOFRAME, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_DISPLAY_GO_SUPPORTED mng_retcode MNG_DECL mng_display_golayer (mng_handle hHandle, mng_uint32 iLayernr) { mng_datap pData; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_GOLAYER, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)hHandle); /* and make it addressable */ if (pData->eImagetype != mng_it_mng) /* is it an animation ? */ MNG_ERROR (pData, MNG_NOTANANIMATION); /* can we expect this call ? */ if ((!pData->bDisplaying) || (pData->bRunning)) MNG_ERROR (pData, MNG_FUNCTIONINVALID); if (!pData->bCacheplayback) /* must store playback info to work!! */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); if (iLayernr > pData->iTotallayers) /* is the parameter within bounds ? */ MNG_ERROR (pData, MNG_LAYERNRTOOHIGH); /* within MHDR bounds ? */ if ((pData->iLayercount) && (iLayernr > pData->iLayercount)) MNG_WARNING (pData, MNG_LAYERNRTOOHIGH); cleanup_errors (pData); /* cleanup previous errors */ if (pData->iLayerseq > iLayernr) /* search from current or go back to start ? */ { iRetcode = mng_reset_rundata (pData); if (iRetcode) /* on error bail out */ return iRetcode; } if (iLayernr) { pData->iRequestlayer = iLayernr; /* go find the requested layer then */ iRetcode = mng_process_display (pData); if (iRetcode) /* on error bail out */ return iRetcode; pData->bTimerset = MNG_FALSE; /* reset just to be safe */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_GOLAYER, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_DISPLAY_GO_SUPPORTED mng_retcode MNG_DECL mng_display_gotime (mng_handle hHandle, mng_uint32 iPlaytime) { mng_datap pData; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_GOTIME, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)hHandle); /* and make it addressable */ if (pData->eImagetype != mng_it_mng) /* is it an animation ? */ MNG_ERROR (pData, MNG_NOTANANIMATION); /* can we expect this call ? */ if ((!pData->bDisplaying) || (pData->bRunning)) MNG_ERROR (pData, MNG_FUNCTIONINVALID); if (!pData->bCacheplayback) /* must store playback info to work!! */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); /* is the parameter within bounds ? */ if (iPlaytime > pData->iTotalplaytime) MNG_ERROR (pData, MNG_PLAYTIMETOOHIGH); /* within MHDR bounds ? */ if ((pData->iPlaytime) && (iPlaytime > pData->iPlaytime)) MNG_WARNING (pData, MNG_PLAYTIMETOOHIGH); cleanup_errors (pData); /* cleanup previous errors */ if (pData->iFrametime > iPlaytime) /* search from current or go back to start ? */ { iRetcode = mng_reset_rundata (pData); if (iRetcode) /* on error bail out */ return iRetcode; } if (iPlaytime) { pData->iRequesttime = iPlaytime; /* go find the requested playtime then */ iRetcode = mng_process_display (pData); if (iRetcode) /* on error bail out */ return iRetcode; pData->bTimerset = MNG_FALSE; /* reset just to be safe */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_DISPLAY_GOTIME, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_SUPPORT_DYNAMICMNG) mng_retcode MNG_DECL mng_trapevent (mng_handle hHandle, mng_uint8 iEventtype, mng_int32 iX, mng_int32 iY) { mng_datap pData; mng_eventp pEvent; mng_bool bFound = MNG_FALSE; mng_retcode iRetcode; mng_imagep pImage; mng_uint8p pPixel; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_TRAPEVENT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)hHandle); /* and make it addressable */ if (pData->eImagetype != mng_it_mng) /* is it an animation ? */ MNG_ERROR (pData, MNG_NOTANANIMATION); if (!pData->bDisplaying) /* can we expect this call ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); if (!pData->bCacheplayback) /* must store playback info to work!! */ MNG_ERROR (pData, MNG_FUNCTIONINVALID); /* let's find a matching event object */ pEvent = (mng_eventp)pData->pFirstevent; while ((pEvent) && (!bFound)) { /* matching eventtype ? */ if (pEvent->iEventtype == iEventtype) { switch (pEvent->iMasktype) /* check X/Y on basis of masktype */ { case MNG_MASK_NONE : /* no mask is easy */ { bFound = MNG_TRUE; break; } case MNG_MASK_BOX : /* inside the given box ? */ { /* right- and bottom-border don't count ! */ if ((iX >= pEvent->iLeft) && (iX < pEvent->iRight) && (iY >= pEvent->iTop) && (iY < pEvent->iBottom)) bFound = MNG_TRUE; break; } case MNG_MASK_OBJECT : /* non-zero pixel in the image object ? */ { pImage = mng_find_imageobject (pData, pEvent->iObjectid); /* valid image ? */ if ((pImage) && (pImage->pImgbuf->iBitdepth <= 8) && ((pImage->pImgbuf->iColortype == 0) || (pImage->pImgbuf->iColortype == 3)) && ((mng_int32)pImage->pImgbuf->iWidth > iX) && ((mng_int32)pImage->pImgbuf->iHeight > iY)) { pPixel = pImage->pImgbuf->pImgdata + ((pImage->pImgbuf->iWidth * iY) + iX); if (*pPixel) /* non-zero ? */ bFound = MNG_TRUE; } break; } case MNG_MASK_OBJECTIX : /* pixel in the image object matches index ? */ { pImage = mng_find_imageobject (pData, pEvent->iObjectid); /* valid image ? */ if ((pImage) && (pImage->pImgbuf->iBitdepth <= 8) && ((pImage->pImgbuf->iColortype == 0) || (pImage->pImgbuf->iColortype == 3)) && ((mng_int32)pImage->pImgbuf->iWidth > iX) && (iX >= 0) && ((mng_int32)pImage->pImgbuf->iHeight > iY) && (iY >= 0)) { pPixel = pImage->pImgbuf->pImgdata + ((pImage->pImgbuf->iWidth * iY) + iX); /* matching index ? */ if (*pPixel == pEvent->iIndex) bFound = MNG_TRUE; } break; } case MNG_MASK_BOXOBJECT : /* non-zero pixel in the image object ? */ { mng_int32 iTempx = iX - pEvent->iLeft; mng_int32 iTempy = iY - pEvent->iTop; pImage = mng_find_imageobject (pData, pEvent->iObjectid); /* valid image ? */ if ((pImage) && (pImage->pImgbuf->iBitdepth <= 8) && ((pImage->pImgbuf->iColortype == 0) || (pImage->pImgbuf->iColortype == 3)) && (iTempx < (mng_int32)pImage->pImgbuf->iWidth) && (iTempx >= 0) && (iX < pEvent->iRight) && (iTempy < (mng_int32)pImage->pImgbuf->iHeight) && (iTempy >= 0) && (iY < pEvent->iBottom)) { pPixel = pImage->pImgbuf->pImgdata + ((pImage->pImgbuf->iWidth * iTempy) + iTempx); if (*pPixel) /* non-zero ? */ bFound = MNG_TRUE; } break; } case MNG_MASK_BOXOBJECTIX : /* pixel in the image object matches index ? */ { mng_int32 iTempx = iX - pEvent->iLeft; mng_int32 iTempy = iY - pEvent->iTop; pImage = mng_find_imageobject (pData, pEvent->iObjectid); /* valid image ? */ if ((pImage) && (pImage->pImgbuf->iBitdepth <= 8) && ((pImage->pImgbuf->iColortype == 0) || (pImage->pImgbuf->iColortype == 3)) && (iTempx < (mng_int32)pImage->pImgbuf->iWidth) && (iTempx >= 0) && (iX < pEvent->iRight) && (iTempy < (mng_int32)pImage->pImgbuf->iHeight) && (iTempy >= 0) && (iY < pEvent->iBottom)) { pPixel = pImage->pImgbuf->pImgdata + ((pImage->pImgbuf->iWidth * iTempy) + iTempx); /* matching index ? */ if (*pPixel == pEvent->iIndex) bFound = MNG_TRUE; } break; } } } if (!bFound) /* try the next one */ pEvent = (mng_eventp)pEvent->sHeader.pNext; } /* found one that's not the last mousemove ? */ if ((pEvent) && ((mng_objectp)pEvent != pData->pLastmousemove)) { /* can we start an event process now ? */ if ((!pData->bReading) && (!pData->bRunning)) { pData->iEventx = iX; /* save coordinates */ pData->iEventy = iY; /* do it then ! */ iRetcode = pEvent->sHeader.fProcess (pData, pEvent); if (iRetcode) /* on error bail out */ return iRetcode; /* remember last mousemove event */ if (pEvent->iEventtype == MNG_EVENT_MOUSEMOVE) pData->pLastmousemove = (mng_objectp)pEvent; else pData->pLastmousemove = MNG_NULL; } else { /* TODO: store unprocessed events or not ??? */ } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_TRAPEVENT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode MNG_DECL mng_getlasterror (mng_handle hHandle, mng_int8* iSeverity, mng_chunkid* iChunkname, mng_uint32* iChunkseq, mng_int32* iExtra1, mng_int32* iExtra2, mng_pchar* zErrortext) { mng_datap pData; /* local vars */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETLASTERROR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)hHandle); /* and make it addressable */ *iSeverity = pData->iSeverity; /* return the appropriate fields */ #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) *iChunkname = pData->iChunkname; *iChunkseq = pData->iChunkseq; #else *iChunkname = MNG_UINT_HUH; *iChunkseq = 0; #endif *iExtra1 = pData->iErrorx1; *iExtra2 = pData->iErrorx2; *zErrortext = pData->zErrortext; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETLASTERROR, MNG_LC_END); #endif return pData->iErrorcode; /* and the errorcode */ } /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_data.h0000644000000000000000000015601412005307152014075 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_data.h copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : main data structure definition * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the library main data structure * */ /* * * */ /* * changes : 0.5.1 - 05/04/2000 - G.Juyn * */ /* * - added CRC table to main structure (for thread-safety) * */ /* * 0.5.1 - 05/06/2000 - G.Juyn * */ /* * - added iPLTEentries for checking hIST-length * */ /* * 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed palette definition to exported palette-type * */ /* * - removed frozen indicator * */ /* * - added create/write indicators * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/13/2000 - G.Juyn * */ /* * - added eMNGma hack (will be removed in 1.0.0 !!!) * */ /* * - added TERM animation object pointer (easier reference) * */ /* * - added saved-data structure for SAVE/SEEK processing * */ /* * * */ /* * 0.5.2 - 05/18/2000 - G.Juyn * */ /* * - added fields for JNG support (IJG-based) * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - changed global tRNS definition * */ /* * 0.5.2 - 05/30/2000 - G.Juyn * */ /* * - added delta-image fields * */ /* * 0.5.2 - 06/01/2000 - G.Juyn * */ /* * - added internal delta-image processing callbacks * */ /* * 0.5.2 - 06/02/2000 - G.Juyn * */ /* * - changed SWAP_ENDIAN to BIGENDIAN_SUPPORTED * */ /* * (contributed by Tim Rowley) * */ /* * - added getalphaline callback for RGB8_A8 canvasstyle * */ /* * 0.5.2 - 06/06/2000 - G.Juyn * */ /* * - added parameter for delayed buffer-processing * */ /* * * */ /* * 0.5.3 - 06/16/2000 - G.Juyn * */ /* * - added update-region parms for refresh calback * */ /* * - added Needrefresh parameter * */ /* * 0.5.3 - 06/17/2000 - G.Juyn * */ /* * - added Deltaimmediate parm for faster delta-processing * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - added Speed parameter to facilitate testing * */ /* * - added Imagelevel parameter for processtext callback * */ /* * 0.5.3 - 06/26/2000 - G.Juyn * */ /* * - changed userdata variable to mng_ptr * */ /* * * */ /* * 0.9.1 - 07/07/2000 - G.Juyn * */ /* * - added variables for go_xxxx processing * */ /* * 0.9.1 - 07/08/2000 - G.Juyn * */ /* * - added variables for improved timing support * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - added callbacks for SAVE/SEEK processing * */ /* * - added variable for NEEDSECTIONWAIT breaks * */ /* * - added variable for freeze & reset processing * */ /* * 0.9.1 - 07/17/2000 - G.Juyn * */ /* * - fixed suspension-buffering for 32K+ chunks * */ /* * * */ /* * 0.9.2 - 07/29/2000 - G.Juyn * */ /* * - removed Nextbackxxx fields (no longer used) * */ /* * 0.9.2 - 07/31/2000 - G.Juyn * */ /* * - fixed wrapping of suspension parameters * */ /* * 0.9.2 - 08/04/2000 - G.Juyn * */ /* * - B111096 - fixed large-buffer read-suspension * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 09/07/2000 - G.Juyn * */ /* * - added support for new filter_types * */ /* * 0.9.3 - 09/10/2000 - G.Juyn * */ /* * - fixed DEFI behavior * */ /* * 0.9.3 - 10/10/2000 - G.Juyn * */ /* * - added support for alpha-depth prediction * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - added support for nEED * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added optional support for bKGD for PNG images * */ /* * - added support for JDAA * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - added callback to process non-critical unknown chunks * */ /* * - fixed support for bKGD * */ /* * 0.9.3 - 10/19/2000 - G.Juyn * */ /* * - implemented delayed delta-processing * */ /* * 0.9.4 - 12/16/2000 - G.Juyn * */ /* * - fixed mixup of data- & function-pointers (thanks Dimitri)* */ /* * * */ /* * 1.0.1 - 02/08/2001 - G.Juyn * */ /* * - added MEND processing callback * */ /* * 1.0.1 - 02/13/2001 - G.Juyn * */ /* * - fixed first FRAM_MODE=4 timing problem * */ /* * * */ /* * 1.0.2 - 06/23/2001 - G.Juyn * */ /* * - added optimization option for MNG-video playback * */ /* * - added processterm callback * */ /* * 1.0.2 - 06/25/2001 - G.Juyn * */ /* * - added option to turn off progressive refresh * */ /* * * */ /* * 1.0.5 - 07/08/2002 - G.Juyn * */ /* * - B578572 - removed eMNGma hack (thanks Dimitri!) * */ /* * 1.0.5 - 07/16/2002 - G.Juyn * */ /* * - B581625 - large chunks fail with suspension reads * */ /* * 1.0.5 - 08/15/2002 - G.Juyn * */ /* * - completed PROM support * */ /* * 1.0.5 - 09/15/2002 - G.Juyn * */ /* * - fixed LOOP iteration=0 special case * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - finished support for BACK image & tiling * */ /* * 1.0.5 - 10/07/2002 - G.Juyn * */ /* * - added another fix for misplaced TERM chunk * */ /* * - completed support for condition=2 in TERM chunk * */ /* * 1.0.5 - 10/20/2002 - G.Juyn * */ /* * - fixed processing for multiple objects in MAGN * */ /* * - fixed display of visible target of PAST operation * */ /* * 1.0.5 - 11/07/2002 - G.Juyn * */ /* * - added support to get totals after mng_read() * */ /* * 1.0.5 - 24/02/2003 - G.Juyn * */ /* * - B683152 - libjpeg suspension not always honored correctly* */ /* * * */ /* * 1.0.6 - 04/11/2003 - G.Juyn * */ /* * - B719420 - fixed several MNG_APP_CMS problems * */ /* * 1.0.6 - 07/05/2003 - G. R-P * */ /* * - optionally use zlib's crc32() function * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added SKIPCHUNK conditionals around PAST chunk support * */ /* * 1.0.6 - 08/17/2003 - G.R-P * */ /* * - added iPNGdepth member to pData structure * */ /* * * */ /* * 1.0.7 - 03/10/2004 - G.R-P * */ /* * - added conditionals around openstream/closestream * */ /* * 1.0.7 - 03/24/2004 - G.R-P * */ /* * - added more SKIPCHUNK conditionals * */ /* * * */ /* * 1.0.8 - 04/02/2004 - G.Juyn * */ /* * - added CRC existence & checking flags * */ /* * 1.0.8 - 04/10/2004 - G.Juyn * */ /* * - added data-push mechanisms for specialized decoders * */ /* * * */ /* * 1.0.9 - 12/11/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_DISPLAYCALLS * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_data_h_ #define _libmng_data_h_ /* ************************************************************************** */ #define MNG_MAGIC 0x52530a0aL /* ************************************************************************** */ /* * * */ /* * Internal structures * */ /* * * */ /* ************************************************************************** */ typedef mng_palette8 mng_rgbpaltab; /* ************************************************************************** */ /* * * */ /* * The saved_data structure * */ /* * * */ /* * This contains the saved data after a SAVE chunk has been processed. * */ /* * The data is saved from the main data structure during SAVE processing, * */ /* * and restored to the main data structure during SEEK processing. * */ /* * * */ /* ************************************************************************** */ typedef struct mng_savedata_struct { #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) mng_bool bHasglobalPLTE; /* global PLTE chunk processed */ mng_bool bHasglobalTRNS; /* global tRNS chunk processed */ mng_bool bHasglobalGAMA; /* global gAMA chunk processed */ mng_bool bHasglobalCHRM; /* global cHRM chunk processed */ mng_bool bHasglobalSRGB; /* global sRGB chunk processed */ mng_bool bHasglobalICCP; /* global iCCP chunk processed */ mng_bool bHasglobalBKGD; /* global bKGD chunk processed */ #endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */ #ifdef MNG_SUPPORT_DISPLAY mng_uint16 iBACKred; /* BACK fields */ mng_uint16 iBACKgreen; mng_uint16 iBACKblue; mng_uint8 iBACKmandatory; mng_uint16 iBACKimageid; mng_uint8 iBACKtile; mng_uint8 iFRAMmode; /* FRAM fields (global) */ mng_uint32 iFRAMdelay; mng_uint32 iFRAMtimeout; mng_bool bFRAMclipping; mng_int32 iFRAMclipl; mng_int32 iFRAMclipr; mng_int32 iFRAMclipt; mng_int32 iFRAMclipb; mng_uint32 iGlobalPLTEcount; /* global PLTE fields */ mng_rgbpaltab aGlobalPLTEentries; mng_uint32 iGlobalTRNSrawlen; /* global tRNS fields */ mng_uint8arr aGlobalTRNSrawdata; mng_uint32 iGlobalGamma; /* global gAMA fields */ #ifndef MNG_SKIPCHUNK_cHRM mng_uint32 iGlobalWhitepointx; /* global cHRM fields */ mng_uint32 iGlobalWhitepointy; mng_uint32 iGlobalPrimaryredx; mng_uint32 iGlobalPrimaryredy; mng_uint32 iGlobalPrimarygreenx; mng_uint32 iGlobalPrimarygreeny; mng_uint32 iGlobalPrimarybluex; mng_uint32 iGlobalPrimarybluey; #endif mng_uint8 iGlobalRendintent; /* global sRGB fields */ mng_uint32 iGlobalProfilesize; /* global iCCP fields */ mng_ptr pGlobalProfile; mng_uint16 iGlobalBKGDred; /* global bKGD fields */ mng_uint16 iGlobalBKGDgreen; mng_uint16 iGlobalBKGDblue; #endif /* MNG_SUPPORT_DISPLAY */ } mng_savedata; typedef mng_savedata * mng_savedatap; /* ************************************************************************** */ /* * * */ /* * Internal buffer structure for data push mechanisms * */ /* * * */ /* ************************************************************************** */ typedef struct { mng_ptr pNext; /* for linked list */ mng_ptr pData; /* used for chunks & data */ mng_uint32 iLength; mng_bool bOwned; mng_uint8p pDatanext; /* only used for data */ mng_uint32 iRemaining; } mng_pushdata; typedef mng_pushdata * mng_pushdatap; /* ************************************************************************** */ /* * * */ /* * The main libmng data structure * */ /* * * */ /* * The handle used in all functions points to this structure which * */ /* * contains all volatile data necessary to process the network graphic. * */ /* * * */ /* ************************************************************************** */ typedef struct mng_data_struct { mng_uint32 iMagic; /* magic number to validate a given handle */ mng_ptr pUserdata; /* application workdata */ mng_imgtype eSigtype; /* image information */ mng_imgtype eImagetype; /* initially zeroed */ mng_uint32 iWidth; /* filled after header is processed */ mng_uint32 iHeight; mng_uint32 iTicks; /* these only after MHDR */ mng_uint32 iLayercount; mng_uint32 iFramecount; mng_uint32 iPlaytime; mng_uint32 iSimplicity; mng_uint8 iAlphadepth; /* indicates expected alpha-depth */ mng_uint32 iImagelevel; /* level of image inside a stream */ mng_uint32 iCanvasstyle; /* layout of the drawing-canvas */ mng_uint32 iBkgdstyle; /* layout of the background-canvas */ mng_int8 iMagnify; /* magnification factor (not used yet) */ mng_uint32 iOffsetx; /* x-offset for extremely large image */ mng_uint32 iOffsety; /* y-offset for extremely large image */ mng_uint32 iCanvaswidth; /* real canvas size */ mng_uint32 iCanvasheight; /* must be set by processheader callback */ mng_uint16 iBGred; /* default background color */ mng_uint16 iBGgreen; /* initially "black" */ mng_uint16 iBGblue; mng_bool bUseBKGD; /* preferred use of bKGD for PNG */ mng_bool bIssRGB; /* indicates sRGB system */ #ifdef MNG_FULL_CMS /* little CMS variables */ mng_cmsprof hProf1; /* image input profile */ mng_cmsprof hProf2; /* default output profile */ mng_cmsprof hProf3; /* default sRGB profile */ mng_cmstrans hTrans; /* current transformation handle */ #endif mng_float dViewgamma; /* gamma calculation variables */ mng_float dDisplaygamma; /* initially set for sRGB conditions */ mng_float dDfltimggamma; mng_bool bStorechunks; /* switch for storing chunkdata */ mng_bool bSectionbreaks; /* indicate NEEDSECTIONWAIT breaks */ mng_bool bCacheplayback; /* switch to cache playback info */ mng_bool bDoProgressive; /* progressive refresh for large images */ mng_uint32 iCrcmode; /* CRC existence & checking flags */ mng_speedtype iSpeed; /* speed-modifier for animations */ mng_uint32 iMaxwidth; /* maximum canvas size */ mng_uint32 iMaxheight; /* initially set to 1024 x 1024 */ mng_int32 iErrorcode; /* error reporting fields */ mng_int8 iSeverity; mng_int32 iErrorx1; mng_int32 iErrorx2; mng_pchar zErrortext; mng_memalloc fMemalloc; /* callback pointers */ mng_memfree fMemfree; /* initially nulled */ mng_releasedata fReleasedata; #ifndef MNG_NO_OPEN_CLOSE_STREAM mng_openstream fOpenstream; mng_closestream fClosestream; #endif mng_readdata fReaddata; mng_writedata fWritedata; mng_errorproc fErrorproc; mng_traceproc fTraceproc; mng_processheader fProcessheader; mng_processtext fProcesstext; mng_processsave fProcesssave; mng_processseek fProcessseek; mng_processneed fProcessneed; mng_processmend fProcessmend; mng_processunknown fProcessunknown; mng_processterm fProcessterm; mng_getcanvasline fGetcanvasline; mng_getbkgdline fGetbkgdline; mng_getalphaline fGetalphaline; mng_refresh fRefresh; mng_gettickcount fGettickcount; mng_settimer fSettimer; mng_processgamma fProcessgamma; mng_processchroma fProcesschroma; mng_processsrgb fProcesssrgb; mng_processiccp fProcessiccp; mng_processarow fProcessarow; #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) #ifndef MNG_NO_OLD_VERSIONS mng_bool bPreDraft48; /* flags ancient style draft */ #endif mng_chunkid iChunkname; /* read/write-state variables */ mng_uint32 iChunkseq; mng_chunkp pFirstchunk; /* double-linked list of */ mng_chunkp pLastchunk; /* stored chunk-structures */ mng_bool bHasheader; /* first header chunk processed */ mng_bool bHasMHDR; /* inside a MHDR-MEND sequence */ mng_bool bHasIHDR; /* inside a IHDR-IEND sequence */ mng_bool bHasBASI; /* inside a BASI-IEND sequence */ mng_bool bHasDHDR; /* inside a DHDR-IEND sequence */ #ifdef MNG_INCLUDE_JNG mng_bool bHasJHDR; /* inside a JHDR-IEND sequence */ mng_bool bHasJSEP; /* passed the JSEP separator */ mng_bool bHasJDAA; /* at least 1 JDAA processed */ mng_bool bHasJDAT; /* at least 1 JDAT processed */ #endif mng_bool bHasPLTE; /* PLTE chunk processed */ mng_bool bHasTRNS; /* tRNS chunk processed */ mng_bool bHasGAMA; /* gAMA chunk processed */ mng_bool bHasCHRM; /* cHRM chunk processed */ mng_bool bHasSRGB; /* sRGB chunk processed */ mng_bool bHasICCP; /* iCCP chunk processed */ mng_bool bHasBKGD; /* bKGD chunk processed */ mng_bool bHasIDAT; /* at least 1 IDAT processed */ mng_bool bHasSAVE; /* SAVE chunk processed */ mng_bool bHasBACK; /* BACK chunk processed */ mng_bool bHasFRAM; /* FRAM chunk processed */ mng_bool bHasTERM; /* TERM chunk processed */ mng_bool bHasLOOP; /* at least 1 LOOP open */ mng_bool bHasglobalPLTE; /* global PLTE chunk processed */ mng_bool bHasglobalTRNS; /* global tRNS chunk processed */ mng_bool bHasglobalGAMA; /* global gAMA chunk processed */ mng_bool bHasglobalCHRM; /* global cHRM chunk processed */ mng_bool bHasglobalSRGB; /* global sRGB chunk processed */ mng_bool bHasglobalICCP; /* global iCCP chunk processed */ mng_bool bHasglobalBKGD; /* global bKGD chunk processed */ mng_uint32 iDatawidth; /* IHDR/BASI/DHDR fields */ mng_uint32 iDataheight; /* valid if inside IHDR-IEND, */ mng_uint8 iBitdepth; /* BASI-IEND or DHDR-IEND */ mng_uint8 iColortype; mng_uint8 iCompression; mng_uint8 iFilter; mng_uint8 iInterlace; mng_uint32 iPLTEcount; /* PLTE fields */ #ifdef MNG_INCLUDE_JNG mng_uint8 iJHDRcolortype; /* JHDR fields */ mng_uint8 iJHDRimgbitdepth; /* valid if inside JHDR-IEND */ mng_uint8 iJHDRimgcompression; mng_uint8 iJHDRimginterlace; mng_uint8 iJHDRalphabitdepth; mng_uint8 iJHDRalphacompression; mng_uint8 iJHDRalphafilter; mng_uint8 iJHDRalphainterlace; #endif #endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */ #ifdef MNG_SUPPORT_READ mng_bool bReading; /* read processing variables */ mng_bool bHavesig; mng_bool bEOF; mng_uint32 iReadbufsize; mng_uint8p pReadbuf; mng_uint32 iLargebufsize; /* temp for very large chunks */ mng_uint8p pLargebuf; mng_uint32 iSuspendtime; /* tickcount at last suspension */ mng_bool bSuspended; /* input-reading has been suspended; we're expecting a call to mng_read_resume! */ mng_uint8 iSuspendpoint; /* indicates at which point the flow was broken to suspend input-reading */ mng_bool bSuspensionmode; /* I/O-suspension variables */ mng_uint32 iSuspendbufsize; mng_uint8p pSuspendbuf; mng_uint8p pSuspendbufnext; mng_uint32 iSuspendbufleft; mng_uint32 iChunklen; /* chunk length */ mng_uint8p pReadbufnext; /* 32K+ suspension-processing */ mng_uint8p pLargebufnext; mng_pushdatap pFirstpushchunk; /* variables for push mechanisms */ mng_pushdatap pLastpushchunk; mng_pushdatap pFirstpushdata; mng_pushdatap pLastpushdata; #endif /* MNG_SUPPORT_READ */ #ifdef MNG_SUPPORT_WRITE mng_bool bCreating; /* create/write processing variables */ mng_bool bWriting; mng_chunkid iFirstchunkadded; mng_uint32 iWritebufsize; mng_uint8p pWritebuf; #endif #ifdef MNG_SUPPORT_DISPLAY mng_bool bDisplaying; /* display-state variables */ mng_bool bFramedone; mng_uint32 iFrameseq; mng_uint32 iLayerseq; mng_uint32 iFrametime; /* millisecs */ mng_uint32 iTotalframes; /* end-totals after mng_read() */ mng_uint32 iTotallayers; mng_uint32 iTotalplaytime; /* millisecs */ mng_bool bSkipping; /* LOOP iteration=0 */ #ifdef MNG_SUPPORT_DYNAMICMNG mng_bool bDynamic; /* MNG is dynamic (eg. has events) */ mng_bool bRunningevent; /* currently processing an event */ mng_bool bStopafterseek; /* stop after next SEEK */ mng_int32 iEventx; /* X/Y of current event */ mng_int32 iEventy; mng_objectp pLastmousemove; /* last event triggered */ #endif mng_uint32 iRequestframe; /* go_xxxx variables */ mng_uint32 iRequestlayer; mng_uint32 iRequesttime; mng_bool bSearching; mng_bool bRestorebkgd; /* flags restore required before IDAT/JDAT */ mng_uint32 iRuntime; /* millisecs since start */ mng_uint32 iSynctime; /* tickcount at last framesync */ mng_uint32 iStarttime; /* tickcount at start */ mng_uint32 iEndtime; /* tickcount at end */ mng_bool bRunning; /* animation is active */ mng_bool bTimerset; /* the timer has been set; we're expecting a call to mng_display_resume! */ mng_uint8 iBreakpoint; /* indicates at which point the flow was broken to run the timer */ mng_bool bSectionwait; /* indicates a section break */ mng_bool bFreezing; /* indicates app requested a freeze */ mng_bool bResetting; /* indicates app requested a reset */ mng_bool bNeedrefresh; /* indicates screen-refresh is needed */ mng_bool bMisplacedTERM; /* indicates TERM is out of place */ mng_bool bOnlyfirstframe; /* show first frame after TERM and stop */ mng_uint32 iFramesafterTERM; /* determines frame-count after TERM */ mng_objectp pCurrentobj; /* current "object" */ mng_objectp pCurraniobj; /* current animation object "to be"/"being" processed */ mng_objectp pTermaniobj; /* TERM animation object */ mng_uint32 iIterations; /* TERM/MEND iteration count */ mng_objectp pObjzero; /* "on-the-fly" image (object = 0) */ mng_objectp pLastclone; /* last clone */ mng_objectp pStoreobj; /* current store object for row routines */ mng_objectp pStorebuf; /* current store object-buffer for row routines */ mng_objectp pRetrieveobj; /* current retrieve object for row routines */ mng_savedatap pSavedata; /* pointer to saved data (after SAVE) */ mng_uint32 iUpdateleft; /* update region for refresh */ mng_uint32 iUpdateright; mng_uint32 iUpdatetop; mng_uint32 iUpdatebottom; mng_int8 iPass; /* current interlacing pass; negative value means no interlace */ mng_int32 iRow; /* current row counter */ mng_int32 iRowinc; /* row increment for this pass */ mng_int32 iCol; /* current starting column */ mng_int32 iColinc; /* column increment for this pass */ mng_int32 iRowsamples; /* nr. of samples in current workrow */ mng_int32 iSamplemul; /* needed to calculate rowsize */ mng_int32 iSampleofs; /* from rowsamples */ mng_int32 iSamplediv; mng_int32 iRowsize; /* size of actual data in work row */ mng_int32 iRowmax; /* maximum size of data in work row */ mng_int32 iFilterofs; /* offset to filter-byte in work row */ mng_int32 iPixelofs; /* offset to pixel-bytes in work row */ mng_uint32 iLevel0; /* leveling variables */ mng_uint32 iLevel1; mng_uint32 iLevel2; mng_uint32 iLevel3; mng_uint8p pWorkrow; /* working row of pixel-data */ mng_uint8p pPrevrow; /* previous row of pixel-data */ mng_uint8p pRGBArow; /* intermediate row of RGBA8 or RGBA16 data */ mng_bool bIsRGBA16; /* indicates intermediate row is RGBA16 */ mng_bool bIsOpaque; /* indicates intermediate row is fully opaque */ mng_int32 iFilterbpp; /* bpp index for filtering routines */ mng_int32 iSourcel; /* variables for showing objects */ mng_int32 iSourcer; mng_int32 iSourcet; mng_int32 iSourceb; mng_int32 iDestl; mng_int32 iDestr; mng_int32 iDestt; mng_int32 iDestb; mng_objectp pFirstimgobj; /* double-linked list of */ mng_objectp pLastimgobj; /* image-object structures */ mng_objectp pFirstaniobj; /* double-linked list of */ mng_objectp pLastaniobj; /* animation-object structures */ #ifdef MNG_SUPPORT_DYNAMICMNG mng_objectp pFirstevent; /* double-linked list of */ mng_objectp pLastevent; /* event-object structures */ #endif #if defined(MNG_GAMMA_ONLY) || defined(MNG_FULL_CMS) || defined(MNG_APP_CMS) mng_uint8 aGammatab[256]; /* precomputed gamma lookup table */ mng_float dLastgamma; /* last gamma used to compute table */ #endif mng_fptr fDisplayrow; /* internal callback to display an uncompressed/unfiltered/ color-corrected row */ mng_fptr fRestbkgdrow; /* internal callback for restore- background processing of a row */ mng_fptr fCorrectrow; /* internal callback to color-correct an uncompressed/unfiltered row */ mng_fptr fRetrieverow; /* internal callback to retrieve an uncompressed/unfiltered row of data */ mng_fptr fStorerow; /* internal callback to store an uncompressed/unfiltered row of data */ mng_fptr fProcessrow; /* internal callback to process an uncompressed row of data */ mng_fptr fDifferrow; /* internal callback to perform added filter leveling and differing on an unfiltered row */ mng_fptr fScalerow; /* internal callback to scale a delta-row to the bitdepth of its target */ mng_fptr fDeltarow; /* internal callback to execute a delta-row onto a target */ #ifndef MNG_SKIPCHUNK_PAST mng_fptr fFliprow; /* internal callback to flip a row of pixels left<->right for a PAST operation */ mng_fptr fTilerow; /* internal callback to tile a row of pixels during a PAST operation */ #endif mng_fptr fInitrowproc; /* internal callback to initialize the row processing */ mng_uint16 iDEFIobjectid; /* DEFI fields */ mng_bool bDEFIhasdonotshow; mng_uint8 iDEFIdonotshow; mng_bool bDEFIhasconcrete; mng_uint8 iDEFIconcrete; mng_bool bDEFIhasloca; mng_int32 iDEFIlocax; mng_int32 iDEFIlocay; mng_bool bDEFIhasclip; mng_int32 iDEFIclipl; mng_int32 iDEFIclipr; mng_int32 iDEFIclipt; mng_int32 iDEFIclipb; mng_uint16 iBACKred; /* BACK fields */ mng_uint16 iBACKgreen; mng_uint16 iBACKblue; mng_uint8 iBACKmandatory; mng_uint16 iBACKimageid; mng_uint8 iBACKtile; mng_int32 iBackimgoffsx; /* temp variables for restore_bkgd */ mng_int32 iBackimgoffsy; mng_uint32 iBackimgwidth; mng_uint32 iBackimgheight; #ifndef MNG_SKIPCHUNK_FRAM mng_uint8 iFRAMmode; /* FRAM fields (global) */ mng_uint32 iFRAMdelay; mng_uint32 iFRAMtimeout; mng_bool bFRAMclipping; mng_int32 iFRAMclipl; mng_int32 iFRAMclipr; mng_int32 iFRAMclipt; mng_int32 iFRAMclipb; mng_uint8 iFramemode; /* current subframe variables */ mng_uint32 iFramedelay; mng_uint32 iFrametimeout; mng_bool bFrameclipping; mng_int32 iFrameclipl; mng_int32 iFrameclipr; mng_int32 iFrameclipt; mng_int32 iFrameclipb; mng_uint32 iNextdelay; /* delay *after* next image */ #endif #ifndef MNG_SKIPCHUNK_SHOW mng_uint8 iSHOWmode; /* SHOW fields */ mng_uint16 iSHOWfromid; mng_uint16 iSHOWtoid; mng_uint16 iSHOWnextid; mng_int16 iSHOWskip; #endif mng_uint32 iGlobalPLTEcount; /* global PLTE fields */ mng_rgbpaltab aGlobalPLTEentries; mng_uint32 iGlobalTRNSrawlen; /* global tRNS fields */ mng_uint8arr aGlobalTRNSrawdata; mng_uint32 iGlobalGamma; /* global gAMA fields */ #ifndef MNG_SKIPCHUNK_cHRM mng_uint32 iGlobalWhitepointx; /* global cHRM fields */ mng_uint32 iGlobalWhitepointy; mng_uint32 iGlobalPrimaryredx; mng_uint32 iGlobalPrimaryredy; mng_uint32 iGlobalPrimarygreenx; mng_uint32 iGlobalPrimarygreeny; mng_uint32 iGlobalPrimarybluex; mng_uint32 iGlobalPrimarybluey; #endif mng_uint8 iGlobalRendintent; /* global sRGB fields */ #ifndef MNG_SKIPCHUNK_iCCP mng_uint32 iGlobalProfilesize; /* global iCCP fields */ mng_ptr pGlobalProfile; #endif mng_uint16 iGlobalBKGDred; /* global bKGD fields */ mng_uint16 iGlobalBKGDgreen; mng_uint16 iGlobalBKGDblue; mng_ptr pDeltaImage; /* delta-image fields */ mng_uint8 iDeltaImagetype; #endif /* MNG_SUPPORT_DISPLAY */ mng_uint8 iDeltatype; /* need this one in read processing !! */ #ifdef MNG_SUPPORT_DISPLAY mng_uint32 iDeltaBlockwidth; mng_uint32 iDeltaBlockheight; mng_uint32 iDeltaBlockx; mng_uint32 iDeltaBlocky; mng_bool bDeltaimmediate; mng_fptr fDeltagetrow; /* internal delta-proc callbacks */ mng_fptr fDeltaaddrow; mng_fptr fDeltareplacerow; mng_fptr fDeltaputrow; #ifndef MNG_SKIPCHUNK_PROM mng_fptr fPromoterow; /* internal PROM fields */ mng_fptr fPromBitdepth; mng_ptr pPromBuf; mng_uint8 iPromColortype; mng_uint8 iPromBitdepth; mng_uint8 iPromFilltype; mng_uint32 iPromWidth; mng_ptr pPromSrc; mng_ptr pPromDst; #endif #ifndef MNG_SKIPCHUNK_MAGN mng_uint16 iMAGNfromid; mng_uint16 iMAGNcurrentid; mng_uint16 iMAGNtoid; #endif #ifndef MNG_SKIPCHUNK_PAST mng_uint16 iPASTid; mng_int32 iPastx; /* target x/y of last PAST */ mng_int32 iPasty; #endif mng_objectp pLastseek; /* last processed ani_seek object */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL mng_objectp pMPNG; /* mpNG object if available */ #endif #ifdef MNG_INCLUDE_ANG_PROPOSAL mng_objectp pANG; /* ANG object if available */ #endif #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_INCLUDE_ZLIB z_stream sZlib; /* zlib (de)compression variables */ mng_int32 iZlevel; /* zlib compression parameters */ mng_int32 iZmethod; mng_int32 iZwindowbits; mng_int32 iZmemlevel; mng_int32 iZstrategy; mng_uint32 iMaxIDAT; /* maximum size of IDAT data */ mng_bool bInflating; /* indicates "inflate" in progress */ mng_bool bDeflating; /* indicates "deflate" in progress */ #endif /* MNG_INCLUDE_ZLIB */ #ifdef MNG_INCLUDE_JNG mngjpeg_dctmethod eJPEGdctmethod; /* IJG compression variables */ mng_int32 iJPEGquality; mng_int32 iJPEGsmoothing; mng_bool bJPEGcompressprogr; mng_bool bJPEGcompressopt; mng_uint32 iMaxJDAT; /* maximum size of JDAT/JDAA data */ mngjpeg_compp pJPEGcinfo; /* compression structure */ mngjpeg_errorp pJPEGcerr; /* error-manager compress */ mngjpeg_decompp pJPEGdinfo; /* decompression structure (JDAT) */ mngjpeg_errorp pJPEGderr; /* error-manager decompress (JDAT) */ mngjpeg_sourcep pJPEGdsrc; /* source-manager decompress (JDAT) */ mngjpeg_decompp pJPEGdinfo2; /* decompression structure (JDAA) */ mngjpeg_errorp pJPEGderr2; /* error-manager decompress (JDAA) */ mngjpeg_sourcep pJPEGdsrc2; /* source-manager decompress (JDAA) */ mng_uint8p pJPEGbuf; /* buffer for JPEG (de)compression (JDAT) */ mng_uint32 iJPEGbufmax; /* allocated space for buffer (JDAT) */ mng_uint8p pJPEGcurrent; /* current pointer into buffer (JDAT) */ mng_uint32 iJPEGbufremain; /* remaining bytes in buffer (JDAT) */ mng_uint32 iJPEGtoskip; /* bytes to skip on next input-block (JDAT) */ mng_uint8p pJPEGbuf2; /* buffer for JPEG (de)compression (JDAA) */ mng_uint32 iJPEGbufmax2; /* allocated space for buffer (JDAA) */ mng_uint8p pJPEGcurrent2; /* current pointer into buffer (JDAA) */ mng_uint32 iJPEGbufremain2; /* remaining bytes in buffer (JDAA) */ mng_uint32 iJPEGtoskip2; /* bytes to skip on next input-block (JDAA) */ mng_uint8p pJPEGrow; /* buffer for a JPEG row of samples (JDAT) */ mng_uint32 iJPEGrowlen; mng_uint8p pJPEGrow2; /* buffer for a JPEG row of samples (JDAA) */ mng_uint32 iJPEGrowlen2; mng_bool bJPEGcompress; /* indicates "compress" initialized */ mng_bool bJPEGdecompress; /* indicates "decompress" initialized (JDAT) */ mng_bool bJPEGhasheader; /* indicates "readheader" succeeded (JDAT) */ mng_bool bJPEGdecostarted; /* indicates "decompress" started (JDAT) */ mng_bool bJPEGscanstarted; /* indicates "first scan" started (JDAT) */ mng_bool bJPEGscanending; /* indicates "finish_output" suspended (JDAT) */ mng_bool bJPEGprogressive; /* indicates a progressive image (JDAT) */ mng_bool bJPEGdecompress2; /* indicates "decompress" initialized (JDAA) */ mng_bool bJPEGhasheader2; /* indicates "readheader" succeeded (JDAA) */ mng_bool bJPEGdecostarted2; /* indicates "decompress" started (JDAA) */ mng_bool bJPEGscanstarted2; /* indicates "first scan" started (JDAA) */ mng_bool bJPEGprogressive2; /* indicates a progressive image (JDAA) */ mng_fptr fStorerow2; /* internal callback to store an uncompressed/unfiltered row of JPEG-data (JDAT) */ mng_fptr fStorerow3; /* internal callback to store an uncompressed/unfiltered row of JPEG-data (JDAA) */ mng_uint32 iJPEGrow; /* row-number for current JPEG row */ mng_uint32 iJPEGalpharow; /* nr. of rows filled with alpha */ mng_uint32 iJPEGrgbrow; /* nr. of rows filled with 'color'-info */ mng_uint32 iJPEGdisprow; /* nr. of rows already displayed "on-the-fly" */ #if defined(MNG_USE_SETJMP) && defined (MNG_INCLUDE_IJG6B) jmp_buf sErrorbuf; /* setjmp/longjmp buffer (error-recovery) */ #endif #endif /* MNG_INCLUDE_JNG */ #ifndef MNG_USE_ZLIB_CRC mng_uint32 aCRCtable [256]; /* CRC prefab table */ mng_bool bCRCcomputed; /* "has been built" indicator */ #endif #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT png_imgtype ePng_imgtype; #endif #if defined(MNG_NO_1_2_4BIT_SUPPORT) || defined(MNG_NO_16BIT_SUPPORT) mng_uint8 iPNGdepth; /* Real input depth */ mng_uint8 iPNGmult; #endif #ifdef MNG_OPTIMIZE_DISPLAYCALLS mng_uint32 iRawlen; /* temp vars for display processing */ mng_uint8p pRawdata; #ifndef MNG_SKIPCHUNK_BASI mng_uint16 iBASIred; mng_uint16 iBASIgreen; mng_uint16 iBASIblue; mng_bool bBASIhasalpha; mng_uint16 iBASIalpha; mng_uint8 iBASIviewable; #endif #ifndef MNG_SKIPCHUNK_CLON mng_uint16 iCLONsourceid; mng_uint16 iCLONcloneid; mng_uint8 iCLONclonetype; mng_bool bCLONhasdonotshow; mng_uint8 iCLONdonotshow; mng_uint8 iCLONconcrete; mng_bool bCLONhasloca; mng_uint8 iCLONlocationtype; mng_int32 iCLONlocationx; mng_int32 iCLONlocationy; #endif #ifndef MNG_SKIPCHUNK_DISC mng_uint32 iDISCcount; mng_uint16p pDISCids; #endif #ifndef MNG_SKIPCHUNK_FRAM mng_uint8 iTempFramemode; mng_uint8 iTempChangedelay; mng_uint32 iTempDelay; mng_uint8 iTempChangetimeout; mng_uint32 iTempTimeout; mng_uint8 iTempChangeclipping; mng_uint8 iTempCliptype; mng_int32 iTempClipl; mng_int32 iTempClipr; mng_int32 iTempClipt; mng_int32 iTempClipb; #endif #ifndef MNG_SKIPCHUNK_MOVE mng_uint16 iMOVEfromid; mng_uint16 iMOVEtoid; mng_uint8 iMOVEmovetype; mng_int32 iMOVEmovex; mng_int32 iMOVEmovey; #endif #ifndef MNG_SKIPCHUNK_CLIP mng_uint16 iCLIPfromid; mng_uint16 iCLIPtoid; mng_uint8 iCLIPcliptype; mng_int32 iCLIPclipl; mng_int32 iCLIPclipr; mng_int32 iCLIPclipt; mng_int32 iCLIPclipb; #endif #ifndef MNG_NO_DELTA_PNG mng_uint16 iDHDRobjectid; mng_uint8 iDHDRimagetype; mng_uint8 iDHDRdeltatype; mng_uint32 iDHDRblockwidth; mng_uint32 iDHDRblockheight; mng_uint32 iDHDRblockx; mng_uint32 iDHDRblocky; mng_uint8 iPROMbitdepth; mng_uint8 iPROMcolortype; mng_uint8 iPROMfilltype; mng_uint8 iPPLTtype; mng_uint32 iPPLTcount; mng_palette8ep paPPLTindexentries; mng_uint8p paPPLTalphaentries; mng_uint8p paPPLTusedentries; #endif #ifndef MNG_SKIPCHUNK_MAGN mng_uint16 iMAGNfirstid; mng_uint16 iMAGNlastid; mng_uint8 iMAGNmethodX; mng_uint16 iMAGNmX; mng_uint16 iMAGNmY; mng_uint16 iMAGNmL; mng_uint16 iMAGNmR; mng_uint16 iMAGNmT; mng_uint16 iMAGNmB; mng_uint8 iMAGNmethodY; #endif #ifndef MNG_SKIPCHUNK_PAST mng_uint16 iPASTtargetid; mng_uint8 iPASTtargettype; mng_int32 iPASTtargetx; mng_int32 iPASTtargety; mng_uint32 iPASTcount; mng_ptr pPASTsources; #endif #endif /* MNG_OPTIMIZE_DISPLAYCALLS */ } mng_data; typedef mng_data * mng_datap; /* ************************************************************************** */ /* * * */ /* * Internal Callback-Function prototypes * */ /* * * */ /* ************************************************************************** */ typedef mng_retcode(*mng_displayrow) (mng_datap pData); typedef mng_retcode(*mng_restbkgdrow) (mng_datap pData); typedef mng_retcode(*mng_correctrow) (mng_datap pData); typedef mng_retcode(*mng_retrieverow) (mng_datap pData); typedef mng_retcode(*mng_storerow) (mng_datap pData); typedef mng_retcode(*mng_processrow) (mng_datap pData); typedef mng_retcode(*mng_initrowproc) (mng_datap pData); typedef mng_retcode(*mng_differrow) (mng_datap pData); typedef mng_retcode(*mng_scalerow) (mng_datap pData); typedef mng_retcode(*mng_deltarow) (mng_datap pData); typedef mng_retcode(*mng_promoterow) (mng_datap pData); typedef mng_retcode(*mng_fliprow) (mng_datap pData); typedef mng_retcode(*mng_tilerow) (mng_datap pData); typedef mng_uint8 (*mng_bitdepth_8) (mng_uint8 iB); typedef mng_uint16 (*mng_bitdepth_16) (mng_uint8 iB); typedef mng_retcode(*mng_magnify_x) (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p iSrcline, mng_uint8p iDstline); typedef mng_retcode(*mng_magnify_y) (mng_datap pData, mng_int32 iM, mng_int32 iS, mng_uint32 iWidth, mng_uint8p iSrcline1, mng_uint8p iSrcline2, mng_uint8p iDstline); /* ************************************************************************** */ /* * * */ /* * Routines for swapping byte-order from and to graphic files * */ /* * (This code is adapted from the libpng package) * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_BIGENDIAN_SUPPORTED mng_uint32 mng_get_uint32 (mng_uint8p pBuf); mng_int32 mng_get_int32 (mng_uint8p pBuf); mng_uint16 mng_get_uint16 (mng_uint8p pBuf); void mng_put_uint32 (mng_uint8p pBuf, mng_uint32 i); void mng_put_int32 (mng_uint8p pBuf, mng_int32 i); void mng_put_uint16 (mng_uint8p pBuf, mng_uint16 i); #else /* MNG_BIGENDIAN_SUPPORTED */ #define mng_get_uint32(P) *(mng_uint32p)(P) #define mng_get_int32(P) *(mng_int32p)(P) #define mng_get_uint16(P) *(mng_uint16p)(P) #define mng_put_uint32(P,I) *(mng_uint32p)(P) = (I) #define mng_put_int32(P,I) *(mng_int32p)(P) = (I) #define mng_put_uint16(P,I) *(mng_uint16p)(P) = (I) #endif /* MNG_BIGENDIAN_SUPPORTED */ /* ************************************************************************** */ /* * * */ /* * Some handy(?) macro definitions * */ /* * * */ /* ************************************************************************** */ #define MAX_COORD(a, b) (((a) > (b)) ? (a) : (b)) #define MIN_COORD(a, b) (((a) < (b)) ? (a) : (b)) /* ************************************************************************** */ #endif /* _libmng_data_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/README.config0000644000000000000000000001001212005307152013572 0ustar rootrootConfiguration options in libmng =============================== The library is fairly configurable through the use of a number of defines. Please note however that certain defines are for internal use only. The following list gives a summary of options that can be used externally to define the functionality of the library: ======================================== #define MNG_BUILD_DLL This is used to indicate that a "standard" DLL should result from compiling the library. Please note the remarks in README.dll if you intend to work with the library as a DLL. The purpose of this option is to ensure that DLL builds have the same set of functions. #define MNG_BUILD_SO This is used to indicate that a "standard" shared library (SO) should result from a compilation. The purpose of this option is to ensure that all shared libraries generated this way will have the same set of functions. #define MNG_USE_DLL / #define MNG_USE_SO These should be used when including the library header in the compilation of an application to indicate that the compiler/linker must take the necessary steps to make the binary executable to use the standard DLL or shared library (SO). #define MNG_SKIP_ZLIB / #define MNG_SKIP_LCMS / #define MNG_SKIP_IJG6B Use these in conjunction with MNG_USE_DLL / MNG_USE_SO. This is useful if you only need the external definitions of the MNG library and not the others, which will speed up the compilation process. #define MNG_SUPPORT_FULL / #define MNG_SUPPORT_LC / #define MNG_SUPPORT_VLC These can be used to indicate the level of MNG spec compliance required. Currently only full MNG compliance is supported. #define MNG_SUPPORT_IJG6B This can be used to indicate if JNG support is required. This option will include the IJG JPEG-library. Note that MNG_SUPPORT_FULL will automatically set this option. Use this only if you need JNG support with MNG-(V)LC. #define MNG_FULL_CMS / #define MNG_GAMMA_ONLY / #define MNG_NO_CMS / #define MNG_APP_CMS These indicate the color-correction support level of the library. If you are on a platform that supports lcms (Little CMS by Marti Maria Saguar) then it is highly recommended to define MNG_FULL_CMS. If your platform has it's own CMS then select MNG_APP_CMS and be sure to include the appropriate callbacks in your app. In all other cases it is recommended to define MNG_GAMMA_ONLY. #define MNG_SUPPORT_READ / #define MNG_SUPPORT_WRITE / #define MNG_SUPPORT_DISPLAY These indicate the high-level support for reading, writing and/or displaying files. Note that in order to display a file, you'll need to read it first. (yes, really!) #define MNG_STORE_CHUNKS This indicates that the library should store chunk-information when reading a file. This information can then be processed through the MNG_ITERATE_CHUNKS() function. Note that you must specify this option if you want to create and write a new file. #define MNG_ACCESS_CHUNKS This is used to indicate that the app may need access to internally stored chunk information. MNG_STORE_CHUNKS must be defined as well for this option to function properly. #define MNG_INTERNAL_MEMMNGMT You can use this to have the library handle it's own memory allocation and deallocation through the "standard" memory functions. This option is turned off by default, which means your app must define the memory callbacks. #define MNG_ERROR_TELLTALE Set this on to allow human-readable error-messages to be included in the library and the error function and callback. #define MNG_BIGENDIAN_SUPPORTED This option should be used to indicate the hardware is based on big endian integers. #define MNG_SUPPORT_TRACE / #define MNG_TRACE_TELLTALE These two can be used when debugging an app. You'll need to have the trace callback setup also. This allows for a rather thorough investigation of the libraries function paths. ======================================== Any other optional defines you may encounter are for internal use only. please do not specify them externally. In case of doubt, consult the support email lists. More info can be found on http://www.libmng.com libmng-2.0.2/libmng_types.h0000644000000000000000000007212412076664124014344 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_types.h copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : type specifications * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Specification of the types used by the library * */ /* * Creates platform-independant structure * */ /* * * */ /* * changes : 0.5.1 - 05/06/2000 - G.Juyn * */ /* * - added iteratechunk callback definition * */ /* * 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - improved definitions for DLL support * */ /* * - added 8-bit palette definition * */ /* * - added general array definitions * */ /* * - added MNG_NULL definition * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - changed most callback prototypes to allow the app * */ /* * to report errors during callback processing * */ /* * 0.5.1 - 05/16/2000 - G.Juyn * */ /* * - moved standard header includes into this file * */ /* * (stdlib/mem for mem-mngmt & math for fp gamma-calc) * */ /* * * */ /* * 0.5.2 - 05/18/2000 - G.Juyn * */ /* * - B003 - fixed problem with being proprietary * */ /* * to Borland platform * */ /* * - added helper definitions for JNG (IJG-based) * */ /* * - fixed support for IJGSRC6B * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - added default IJG compression parameters and such * */ /* * 0.5.2 - 05/31/2000 - G.Juyn * */ /* * - fixed inclusion for memcpy (contributed by Tim Rowley) * */ /* * - added mng_int32p (contributed by Tim Rowley) * */ /* * 0.5.2 - 06/02/2000 - G.Juyn * */ /* * - removed SWAP_ENDIAN reference (contributed by Tim Rowley)* */ /* * - added getalphaline callback for RGB8_A8 canvasstyle * */ /* * * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - added speedtype to facilitate testing * */ /* * 0.5.3 - 06/27/2000 - G.Juyn * */ /* * - added typedef for mng_size_t * */ /* * - changed size parameter for memory callbacks to * */ /* * mng_size_t * */ /* * 0.5.3 - 06/28/2000 - G.Juyn * */ /* * - changed definition of 32-bit ints (64-bit platforms) * */ /* * - changed definition of mng_handle (64-bit platforms) * */ /* * 0.5.3 - 06/29/2000 - G.Juyn * */ /* * - changed definition of mng_handle (again) * */ /* * - swapped refresh parameters * */ /* * - added inclusion of stdlib.h for abs() * */ /* * * */ /* * 0.9.0 - 06/30/2000 - G.Juyn * */ /* * - changed refresh parameters to 'x,y,width,height' * */ /* * 0.9.1 - 07/10/2000 - G.Juyn * */ /* * - added suspendbuffer constants * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - added callbacks for SAVE/SEEK processing * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/07/2000 - G.Juyn * */ /* * - B111300 - fixup for improved portability * */ /* * 0.9.3 - 08/12/2000 - G.Juyn * */ /* * - added workaround for faulty PhotoShop iCCP chunk * */ /* * 0.9.3 - 09/11/2000 - G.Juyn * */ /* * - added export of zlib functions from windows dll * */ /* * - fixed inclusion parameters once again to make those * */ /* * external libs work together * */ /* * - re-fixed fixed inclusion parameters * */ /* * (these freeking libraries make me mad) * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - added support for nEED * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - added callback to process non-critical unknown chunks * */ /* * * */ /* * 0.9.4 - 11/20/2000 - R.Giles * */ /* * - fixed inclusion of lcms header for non-windows platforms * */ /* * 0.9.4 - 12/12/2000 - G.Juyn * */ /* * - changed callback convention for MSVC (Thanks Chad) * */ /* * 0.9.4 - 12/16/2000 - G.Juyn * */ /* * - fixed mixup of data- & function-pointers (thanks Dimitri)* */ /* * * */ /* * 1.0.1 - 02/08/2001 - G.Juyn * */ /* * - added MEND processing callback * */ /* * * */ /* * 1.0.2 - 06/23/2001 - G.Juyn * */ /* * - added processterm callback * */ /* * * */ /* * 1.0.3 - 08/06/2001 - G.Juyn * */ /* * - changed inclusion of lcms.h for Linux platforms * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * * */ /* * 1.0.6 - 04/11/2003 - G.Juyn * */ /* * - B719420 - fixed several MNG_APP_CMS problems * */ /* * 1.0.6 - 06/15/2003 - R.Giles * */ /* * - lcms.h inclusion is generally no longer prefixed * */ /* * 1.0.6 - 07/07/2003 - G. R-P. * */ /* * - added png_imgtypes enumeration * */ /* * * */ /* * 1.0.7 - 03/10/2004 - G.R-P * */ /* * - added conditionals around openstream/closestream * */ /* * * */ /* * 1.0.8 - 04/11/2004 - G.Juyn * */ /* * - added data-push mechanisms for specialized decoders * */ /* * 1.0.8 - 08/01/2004 - G.Juyn * */ /* * - added support for 3+byte pixelsize for JPEG's * */ /* * * */ /* * 1.0.9 - 12/05/2004 - G.Juyn * */ /* * - inclusion of zlib/lcms/ijgsrc6b with <> instead of "" * */ /* * 1.0.9 - 12/06/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKREADER * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #ifndef _libmng_types_h_ #define _libmng_types_h_ /* ************************************************************************** */ #ifdef __BORLANDC__ #pragma option -AT /* turn off strict ANSI-C for the moment */ #endif #ifndef WIN32 #if defined(_WIN32) || defined(__WIN32__) || defined(_Windows) || defined(_WINDOWS) #define WIN32 /* gather them into a single define */ #endif #endif /* ************************************************************************** */ /* * * */ /* * Here's where the external & standard libs are embedded * */ /* * * */ /* * (it can be a bit of a pain in the lower-back to get them to work * */ /* * together) * */ /* * * */ /* ************************************************************************** */ #ifdef HIDDEN_FOR_NOW #ifdef WIN32 /* only include needed stuff */ #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #endif #endif /* HIDDEN_FOR_NOW */ #ifdef MNG_USE_DLL #ifdef MNG_SKIP_ZLIB #undef MNG_INCLUDE_ZLIB #endif #ifdef MNG_SKIP_LCMS #undef MNG_INCLUDE_LCMS #endif #ifdef MNG_SKIP_IJG6B #undef MNG_INCLUDE_IJG6B #endif #endif #ifdef MNG_INCLUDE_ZLIB /* zlib by Mark Adler & Jean-loup Gailly */ #include #endif #ifdef MNG_INCLUDE_LCMS /* little cms by Marti Maria Saguer */ #ifndef ZLIB_DLL #undef FAR #endif #ifdef HAVE_LIBLCMS1 #include #elif defined(HAVE_LIBLCMS2) #include #endif #endif /* MNG_INCLUDE_LCMS */ #ifdef MNG_INCLUDE_IJG6B /* IJG's jpgsrc6b */ #define JPEG_INTERNAL_OPTIONS /* for RGB_PIXELSIZE */ #ifdef MNG_USE_SETJMP #include /* needed for error-recovery (blergh) */ #else #ifdef WIN32 /* #define USE_WINDOWS_MESSAGEBOX */ /* display a messagebox under Windoze */ #endif #endif /* MNG_USE_SETJMP */ #ifdef FAR #undef FAR /* possibly defined by zlib or lcms */ #endif #define JPEG_INTERNAL_OPTIONS /* for RGB_PIXELSIZE */ /* There has been a change in jpeg-9 : */ #ifndef _WIN32 #define HAVE_BOOLEAN typedef int boolean; #endif #include #endif /* MNG_INCLUDE_IJG6B */ #if defined(MNG_INTERNAL_MEMMNGMT) || defined(MNG_INCLUDE_FILTERS) #include /* "calloc" & "free" & "abs" */ #endif #include /* get proper integer widths */ #ifdef WIN32 #if defined __BORLANDC__ #include /* defines "memcpy" for BCB */ #else #include /* defines "memcpy" for other win32 platforms */ #endif #include /* "strncmp" + "strcmp" */ #else /* WIN32 */ #ifdef BSD #include /* defines "memcpy", etc for BSD (?) */ #else #include /* defines "memcpy", etc for all others (???) */ #endif #endif /* WIN32 */ #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) #include /* fp gamma-calculation */ #endif /* ************************************************************************** */ /* * * */ /* * Platform-dependant stuff * */ /* * * */ /* ************************************************************************** */ /* TODO: this may require some elaboration for other platforms; only works with BCB for now */ #ifndef MNG_DLL #if defined(MNG_BUILD_DLL) || defined(MNG_USE_DLL) #define MNG_DLL #endif #endif #define MNG_LOCAL static #if defined(MNG_DLL) && defined(WIN32) /* setup DLL calling conventions */ #define MNG_DECL __stdcall #if defined(MNG_BUILD_DLL) #define MNG_EXT __declspec(dllexport) #elif defined(MNG_USE_DLL) #define MNG_EXT __declspec(dllimport) #else #define MNG_EXT #endif #ifdef MNG_STRICT_ANSI #undef MNG_STRICT_ANSI /* can't do strict-ANSI with this DLL-stuff */ #endif #else #define MNG_DECL /* dummies for non-DLL */ #define MNG_EXT #endif /* MNG_DLL && WIN32 */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* now force ANSI-C from here on */ #endif /* ************************************************************************** */ #if USHRT_MAX == 0xffffffffU /* get the proper 32-bit width !!! */ typedef unsigned short mng_uint32; typedef signed short mng_int32; #elif UINT_MAX == 0xffffffffU typedef unsigned int mng_uint32; typedef signed int mng_int32; #elif ULONG_MAX == 0xffffffffU typedef unsigned long mng_uint32; typedef signed long mng_int32; #else #error "Sorry, I can't find any 32-bit integers on this platform." #endif typedef signed short mng_int16; /* other basic integers */ typedef unsigned short mng_uint16; typedef signed char mng_int8; typedef unsigned char mng_uint8; typedef double mng_float; /* basic float */ typedef size_t mng_size_t; /* size field for memory allocation */ typedef char * mng_pchar; /* string */ typedef void * mng_ptr; /* generic pointer */ typedef void (*mng_fptr) (void); /* generic function pointer */ /* ************************************************************************** */ /* * * */ /* * Platform-independant from here * */ /* * * */ /* ************************************************************************** */ typedef mng_uint32 * mng_uint32p; /* pointer to unsigned longs */ typedef mng_int32 * mng_int32p; /* pointer to longs */ typedef mng_uint16 * mng_uint16p; /* pointer to unsigned words */ typedef mng_uint8 * mng_uint8p; /* pointer to unsigned bytes */ typedef mng_int8 mng_bool; /* booleans */ struct mng_data_struct; typedef struct mng_data_struct * mng_handle; /* generic handle */ typedef mng_int32 mng_retcode; /* generic return code */ typedef mng_int32 mng_chunkid; /* 4-byte chunkname identifier */ typedef mng_ptr mng_chunkp; /* pointer to a chunk-structure */ typedef mng_ptr mng_objectp; /* pointer to an object-structure */ typedef mng_chunkid * mng_chunkidp; /* pointer to chunkid */ typedef struct { /* 8-bit palette element */ mng_uint8 iRed; mng_uint8 iGreen; mng_uint8 iBlue; } mng_palette8e; typedef mng_palette8e mng_palette8[256]; /* 8-bit palette */ typedef mng_palette8e * mng_palette8ep; typedef mng_uint8 mng_uint8arr[256]; /* generic arrays */ typedef mng_uint8 mng_uint8arr4[4]; typedef mng_uint16 mng_uint16arr[256]; typedef mng_uint32 mng_uint32arr2[2]; /* ************************************************************************** */ #define MNG_FALSE 0 #define MNG_TRUE 1 #define MNG_NULL 0 #define MNG_SUSPENDBUFFERSIZE 32768 #define MNG_SUSPENDREQUESTSIZE 1024 /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB /* size of temporary zlib buffer for deflate processing */ #define MNG_ZLIB_MAXBUF 8192 /* default zlib compression parameters for deflateinit2 */ #define MNG_ZLIB_LEVEL 9 /* level */ #define MNG_ZLIB_METHOD Z_DEFLATED /* method */ #define MNG_ZLIB_WINDOWBITS 15 /* window size */ #define MNG_ZLIB_MEMLEVEL 9 /* memory level */ #define MNG_ZLIB_STRATEGY Z_DEFAULT_STRATEGY /* strategy */ #define MNG_MAX_IDAT_SIZE 4096 /* maximum size of IDAT data */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_INCLUDE_IJG6B /* IJG helper defs */ typedef struct jpeg_compress_struct mngjpeg_comp; typedef struct jpeg_decompress_struct mngjpeg_decomp; typedef struct jpeg_error_mgr mngjpeg_error; typedef struct jpeg_source_mgr mngjpeg_source; typedef mngjpeg_comp * mngjpeg_compp; typedef mngjpeg_decomp * mngjpeg_decompp; typedef mngjpeg_error * mngjpeg_errorp; typedef mngjpeg_source * mngjpeg_sourcep; typedef J_DCT_METHOD mngjpeg_dctmethod; /* default IJG parameters for compression */ #define MNG_JPEG_DCT JDCT_DEFAULT /* DCT algorithm (JDCT_ISLOW) */ #define MNG_JPEG_QUALITY 100 /* quality 0..100; 100=best */ #define MNG_JPEG_SMOOTHING 0 /* default no smoothing */ #define MNG_JPEG_PROGRESSIVE MNG_FALSE /* default is just baseline */ #define MNG_JPEG_OPTIMIZED MNG_FALSE /* default is not optimized */ #endif /* MNG_INCLUDE_IJG6B */ #define MNG_JPEG_MAXBUF 65500 /* max size of temp JPEG buffer */ #define MNG_MAX_JDAT_SIZE 4096 /* maximum size of JDAT data */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_LCMS typedef cmsHPROFILE mng_cmsprof; /* little CMS helper defs */ typedef cmsHTRANSFORM mng_cmstrans; typedef cmsCIExyY mng_CIExyY; typedef cmsCIExyYTRIPLE mng_CIExyYTRIPLE; #ifdef HAVE_LIBLCMS1 typedef LPGAMMATABLE mng_gammatabp; #elif defined(HAVE_LIBLCMS2) typedef cmsToneCurve* mng_gammatabp; #endif #endif /* MNG_INCLUDE_LCMS */ /* ************************************************************************** */ /* enumeration of known graphics types */ enum mng_imgtypes {mng_it_unknown, mng_it_png, mng_it_mng, mng_it_jng #ifdef MNG_INCLUDE_MPNG_PROPOSAL ,mng_it_mpng #endif #ifdef MNG_INCLUDE_ANG_PROPOSAL ,mng_it_ang #endif }; typedef enum mng_imgtypes mng_imgtype; /* enumeration of animation speed-types */ enum mng_speedtypes {mng_st_normal, mng_st_fast, mng_st_slow, mng_st_slowest}; typedef enum mng_speedtypes mng_speedtype; #ifdef MNG_OPTIMIZE_CHUNKREADER /* enumeration object-creation indicators */ enum mng_createobjtypes {mng_create_none, mng_create_always, mng_create_ifglobal}; typedef enum mng_createobjtypes mng_createobjtype; #endif /* ************************************************************************** */ /* enumeration of PNG image types */ #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT enum png_imgtypes { png_g1, png_g2, png_g4, png_g8, png_rgb8, png_idx1, png_idx2, png_idx4, png_idx8, png_ga8, png_rgba8, #ifdef MNG_INCLUDE_JNG png_jpeg_a1, png_jpeg_a2, png_jpeg_a4, png_jpeg_a8, #endif #ifndef MNG_NO_16BIT_SUPPORT png_g16, png_ga16, png_rgb16, png_rgba16, #ifdef MNG_INCLUDE_JNG png_jpeg_a16, #endif #endif png_none }; typedef enum png_imgtypes png_imgtype; #endif /* ************************************************************************** */ /* memory management callbacks */ typedef mng_ptr (MNG_DECL *mng_memalloc) (mng_size_t iLen); typedef void (MNG_DECL *mng_memfree) (mng_ptr iPtr, mng_size_t iLen); typedef void (MNG_DECL *mng_releasedata) (mng_ptr pUserdata, mng_ptr pData, mng_size_t iLength); /* I/O management callbacks */ #ifndef MNG_NO_OPEN_CLOSE_STREAM typedef mng_bool (MNG_DECL *mng_openstream) (mng_handle hHandle); typedef mng_bool (MNG_DECL *mng_closestream) (mng_handle hHandle); #endif typedef mng_bool (MNG_DECL *mng_readdata) (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pRead); typedef mng_bool (MNG_DECL *mng_writedata) (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pWritten); /* error & trace processing callbacks */ typedef mng_bool (MNG_DECL *mng_errorproc) (mng_handle hHandle, mng_int32 iErrorcode, mng_int8 iSeverity, mng_chunkid iChunkname, mng_uint32 iChunkseq, mng_int32 iExtra1, mng_int32 iExtra2, mng_pchar zErrortext); typedef mng_bool (MNG_DECL *mng_traceproc) (mng_handle hHandle, mng_int32 iFuncnr, mng_int32 iFuncseq, mng_pchar zFuncname); /* read processing callbacks */ typedef mng_bool (MNG_DECL *mng_processheader) (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight); typedef mng_bool (MNG_DECL *mng_processtext) (mng_handle hHandle, mng_uint8 iType, mng_pchar zKeyword, mng_pchar zText, mng_pchar zLanguage, mng_pchar zTranslation); typedef mng_bool (MNG_DECL *mng_processsave) (mng_handle hHandle); typedef mng_bool (MNG_DECL *mng_processseek) (mng_handle hHandle, mng_pchar zName); typedef mng_bool (MNG_DECL *mng_processneed) (mng_handle hHandle, mng_pchar zKeyword); typedef mng_bool (MNG_DECL *mng_processmend) (mng_handle hHandle, mng_uint32 iIterationsdone, mng_uint32 iIterationsleft); typedef mng_bool (MNG_DECL *mng_processunknown) (mng_handle hHandle, mng_chunkid iChunkid, mng_uint32 iRawlen, mng_ptr pRawdata); typedef mng_bool (MNG_DECL *mng_processterm) (mng_handle hHandle, mng_uint8 iTermaction, mng_uint8 iIteraction, mng_uint32 iDelay, mng_uint32 iItermax); /* display processing callbacks */ typedef mng_ptr (MNG_DECL *mng_getcanvasline) (mng_handle hHandle, mng_uint32 iLinenr); typedef mng_ptr (MNG_DECL *mng_getbkgdline) (mng_handle hHandle, mng_uint32 iLinenr); typedef mng_ptr (MNG_DECL *mng_getalphaline) (mng_handle hHandle, mng_uint32 iLinenr); typedef mng_bool (MNG_DECL *mng_refresh) (mng_handle hHandle, mng_uint32 iX, mng_uint32 iY, mng_uint32 iWidth, mng_uint32 iHeight); /* timer management callbacks */ typedef mng_uint32 (MNG_DECL *mng_gettickcount) (mng_handle hHandle); typedef mng_bool (MNG_DECL *mng_settimer) (mng_handle hHandle, mng_uint32 iMsecs); /* color management callbacks */ typedef mng_bool (MNG_DECL *mng_processgamma) (mng_handle hHandle, mng_uint32 iGamma); typedef mng_bool (MNG_DECL *mng_processchroma) (mng_handle hHandle, mng_uint32 iWhitepointx, mng_uint32 iWhitepointy, mng_uint32 iRedx, mng_uint32 iRedy, mng_uint32 iGreenx, mng_uint32 iGreeny, mng_uint32 iBluex, mng_uint32 iBluey); typedef mng_bool (MNG_DECL *mng_processsrgb) (mng_handle hHandle, mng_uint8 iRenderingintent); typedef mng_bool (MNG_DECL *mng_processiccp) (mng_handle hHandle, mng_uint32 iProfilesize, mng_ptr pProfile); typedef mng_bool (MNG_DECL *mng_processarow) (mng_handle hHandle, mng_uint32 iRowsamples, mng_bool bIsRGBA16, mng_ptr pRow); /* chunk access callback(s) */ typedef mng_bool (MNG_DECL *mng_iteratechunk) (mng_handle hHandle, mng_handle hChunk, mng_chunkid iChunkid, mng_uint32 iChunkseq); /* ************************************************************************** */ #endif /* _libmng_types_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/special/0000755000000000000000000000000012005307152013074 5ustar rootrootlibmng-2.0.2/special/mozcfg/0000755000000000000000000000000012005307152014361 5ustar rootrootlibmng-2.0.2/special/mozcfg/mozlibmngconf.h0000644000000000000000000001440712005307152017404 0ustar rootroot/* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : mozlibmngconf.h copyright (c) G.R-P 2003-2005 * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : special config file for Mozilla * */ /* * * */ /* * author : Glenn Randers-Pehrson * */ /* * * */ /* * comment : This is the configuration file designed to minimize * */ /* * footprint for the integration with Mozilla. * */ /* * * */ /* * changes : * */ /* * * */ /* ************************************************************************** */ #ifndef _mozlibmng_conf_h_ #define _mozlibmng_conf_h_ /* Mozilla defines */ /* One or none of these may be defined via MNG_CFLAGS in "configure" */ #if defined(MNG_BUILD_RAW_MNG) || \ defined(MNG_BUILD_FULL_MNG) || \ defined(MNG_BUILD_MOZ_MNG) || \ defined(MNG_BUILD_MOZ_NO_JNG) || \ defined(MNG_BUILD_WEB_MNG) || \ defined(MNG_BUILD_WEB_NO_JNG) || \ defined(MNG_BUILD_LC) || \ defined(MNG_BUILD_LC_NO_JNG) || \ defined(MNG_BUILD_VLC) # define MNG_BUILD_DEFINED #endif #ifndef MNG_BUILD_DEFINED #define MNG_BUILD_FULL_MNG #define MNG_BUILD_DEFINED #endif #if defined(MNG_BUILD_FULL_MNG) #define MNG_DISABLE_UNUSED #endif #if defined(MNG_BUILD_MOZ_MNG) #define MNG_DISABLE_UNUSED #define MNG_ENABLE_FOOTPRINT #endif #if defined(MNG_BUILD_MOZ_NO_JNG) #define MNG_DISABLE_UNUSED #define MNG_ENABLE_FOOTPRINT #define MNG_DISABLE_JNG #endif #if defined(MNG_BUILD_WEB_MNG) #define MNG_DISABLE_UNUSED #define MNG_DISABLE_DELTA_PNG #define MNG_ENABLE_FOOTPRINT #define MNG_SKIPCHUNK_MAGN #endif #if defined(MNG_BUILD_WEB_NO_JNG) #define MNG_DISABLE_UNUSED #define MNG_DISABLE_DELTA_PNG #define MNG_ENABLE_FOOTPRINT #define MNG_SKIPCHUNK_MAGN #define MNG_DISABLE_JNG #endif #if defined(MNG_BUILD_LC) #define MNG_DISABLE_DELTA_PNG #define MNG_DISABLE_UNUSED #define MNG_ENABLE_FOOTPRINT #define MNG_DISABLE_16_BIT #define MNG_DISABLE_NON_LC #endif #if defined(MNG_BUILD_LC_NO_JNG) #define MNG_DISABLE_DELTA_PNG #define MNG_DISABLE_UNUSED #define MNG_ENABLE_FOOTPRINT #define MNG_DISABLE_16_BIT #define MNG_DISABLE_JNG #define MNG_DISABLE_NON_LC #endif #if defined(MNG_BUILD_VLC) #define MNG_DISABLE_DELTA_PNG #define MNG_DISABLE_UNUSED #define MNG_ENABLE_FOOTPRINT #define MNG_DISABLE_16_BIT #define MNG_DISABLE_JNG #define MNG_DISABLE_NON_LC #define MNG_DISABLE_NON_VLC #endif #if defined(MNG_ENABLE_FOOTPRINT) /* Perform footprint optimizations */ #define MNG_OPTIMIZE_FOOTPRINT_COMPOSE #define MNG_OPTIMIZE_FOOTPRINT_DIV #define MNG_OPTIMIZE_FOOTPRINT_SWITCH #define MNG_DECREMENT_LOOPS #define MNG_USE_ZLIB_CRC #define MNG_OPTIMIZE_FOOTPRINT_INIT #define MNG_OPTIMIZE_FOOTPRINT_MAGN #define MNG_OPTIMIZE_OBJCLEANUP #define MNG_OPTIMIZE_CHUNKINITFREE #define MNG_OPTIMIZE_CHUNKASSIGN #endif #if defined(MNG_DISABLE_UNUSED) /* Eliminate unused features from libmng */ #define MNG_NO_VERSION_QUERY_SUPPORT #define MNG_NO_OLD_VERSIONS #ifdef MOZ_CAIRO_GFX #define MNG_SKIPCANVAS_RGB8 #define MNG_SKIPCANVAS_RGB8_A8 #else #define MNG_SKIPCANVAS_BGRA8_PM #endif #define MNG_SKIPCANVAS_ABGR8 #define MNG_SKIPCANVAS_ARGB8 #define MNG_SKIPCANVAS_BGR8 #define MNG_SKIPCANVAS_BGRX8 #define MNG_SKIPCANVAS_BGRA8 #define MNG_SKIPCANVAS_RGBA8_PM #define MNG_SKIPCANVAS_ARGB8_PM #define MNG_SKIPCANVAS_ABGR8_PM #define MNG_SKIPCANVAS_RGBA8 #define MNG_SKIPCANVAS_RGB555 #define MNG_SKIPCANVAS_BGR555 #define MNG_SKIPCANVAS_RGB565 #define MNG_SKIPCANVAS_BGR565 #define MNG_SKIPCANVAS_RGBA565 #define MNG_SKIPCANVAS_BGRA565 #define MNG_SKIPCANVAS_BGR565_A8 #define MNG_SKIP_MAXCANVAS #define MNG_SKIPCHUNK_tEXt #define MNG_SKIPCHUNK_zTXt #define MNG_SKIPCHUNK_iTXt #define MNG_SKIPCHUNK_bKGD #define MNG_SKIPCHUNK_cHRM #define MNG_SKIPCHUNK_hIST #define MNG_SKIPCHUNK_iCCP #define MNG_SKIPCHUNK_pHYs #define MNG_SKIPCHUNK_sBIT #define MNG_SKIPCHUNK_sPLT #define MNG_SKIPCHUNK_tIME #define MNG_SKIPCHUNK_evNT #define MNG_SKIPCHUNK_eXPI #define MNG_SKIPCHUNK_fPRI #define MNG_SKIPCHUNK_nEED #define MNG_SKIPCHUNK_pHYg /* Eliminate "critical" but safe-to-ignore chunks (see mng_read_unknown()) */ #define MNG_SKIPCHUNK_SAVE #define MNG_SKIPCHUNK_SEEK #define MNG_SKIPCHUNK_DBYK #define MNG_SKIPCHUNK_ORDR /* Eliminate unused zlib and jpeg "get" and "set" accessors */ #define MNG_NO_ACCESS_ZLIB #define MNG_NO_ACCESS_JPEG /* Eliminate other unused features */ #define MNG_NO_SUPPORT_FUNCQUERY #define MNG_NO_DISPLAY_GO_SUPPORTED #define MNG_NO_CURRENT_INFO #define MNG_NO_DFLT_INFO #define MNG_NO_LOOP_SIGNALS_SUPPORTED #define MNG_NO_OPEN_CLOSE_STREAM #endif #if defined(MNG_DISABLE_16_BIT) /* Eliminate 16-bit support from libmng */ #define MNG_NO_16BIT_SUPPORT #endif #if defined(MNG_DISABLE_DELTA_PNG) /* Eliminate Delta-PNG feature from libmng */ #define MNG_NO_DELTA_PNG #endif #if defined(MNG_DISABLE_NON_LC) /* Eliminate non-MNG-LC chunks */ #define MNG_SKIPCHUNK_BASI #define MNG_SKIPCHUNK_CLIP #define MNG_SKIPCHUNK_CLON #define MNG_SKIPCHUNK_DISC #define MNG_SKIPCHUNK_MOVE #define MNG_SKIPCHUNK_SHOW #define MNG_SKIPCHUNK_PAST #endif #if defined(MNG_DISABLE_JNG) /* If you change this you should also manually remove or restore jng-recognition in mozilla/modules/libpr0n/src/imgLoader.cpp */ #define MNG_NO_INCLUDE_JNG #endif #if defined(MNG_DISABLE_NON_VLC) /* Eliminate non-MNG-VLC chunks */ #define MNG_SKIPCHUNK_DEFI #define MNG_SKIPCHUNK_FRAM #define MNG_SKIPCHUNK_LOOP #define MNG_SKIPCHUNK_MAGN #endif #if defined(MNG_DISABLE_OPTIONAL_VLC) /* Eliminate optional MNG-VLC chunks */ #define MNG_SKIPCHUNK_TERM #define MNG_SKIPCHUNK_BACK #define MNG_SKIPCHUNK_gAMA #define MNG_SKIPCHUNK_sRGB #endif #endif /* _mozlibmng_conf_h */ libmng-2.0.2/clean.bat0000644000000000000000000000007312005307152013226 0ustar rootrootrmdir /S /Q BUILD mkdir BUILD copy cmake-compile.bat BUILD libmng-2.0.2/libmng_cms.c0000644000000000000000000007415212005307152013743 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_cms.c copyright (c) 2000-2004 G.Juyn * */ /* * version : 1.0.9 * */ /* * * */ /* * purpose : color management routines (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the color management routines * */ /* * * */ /* * changes : 0.5.1 - 05/01/2000 - G.Juyn * */ /* * - B001(105795) - fixed a typo and misconception about * */ /* * freeing allocated gamma-table. (reported by Marti Maria) * */ /* * 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/09/2000 - G.Juyn * */ /* * - filled application-based color-management routines * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - added creatememprofile * */ /* * - added callback error-reporting support * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * * */ /* * 0.5.2 - 06/10/2000 - G.Juyn * */ /* * - fixed some compilation-warnings (contrib Jason Morris) * */ /* * * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - fixed problem with color-correction for stored images * */ /* * 0.5.3 - 06/23/2000 - G.Juyn * */ /* * - fixed problem with incorrect gamma-correction * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/31/2000 - G.Juyn * */ /* * - fixed sRGB precedence for gamma_only corection * */ /* * * */ /* * 0.9.4 - 12/16/2000 - G.Juyn * */ /* * - fixed mixup of data- & function-pointers (thanks Dimitri)* */ /* * * */ /* * 1.0.1 - 03/31/2001 - G.Juyn * */ /* * - ignore gamma=0 (see png-list for more info) * */ /* * 1.0.1 - 04/25/2001 - G.Juyn (reported by Gregg Kelly) * */ /* * - fixed problem with cms profile being created multiple * */ /* * times when both iCCP & cHRM/gAMA are present * */ /* * 1.0.1 - 04/25/2001 - G.Juyn * */ /* * - moved mng_clear_cms to libmng_cms * */ /* * 1.0.1 - 05/02/2001 - G.Juyn * */ /* * - added "default" sRGB generation (Thanks Marti!) * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/19/2002 - G.Juyn * */ /* * - optimized color-correction routines * */ /* * 1.0.5 - 09/23/2002 - G.Juyn * */ /* * - added in-memory color-correction of abstract images * */ /* * 1.0.5 - 11/08/2002 - G.Juyn * */ /* * - fixed issues in init_app_cms() * */ /* * * */ /* * 1.0.6 - 04/11/2003 - G.Juyn * */ /* * - B719420 - fixed several MNG_APP_CMS problems * */ /* * 1.0.6 - 07/11/2003 - G. R-P * */ /* * - added conditional MNG_SKIPCHUNK_cHRM/iCCP * */ /* * * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_objects.h" #include "libmng_cms.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_DISPLAY_PROCS /* ************************************************************************** */ /* * * */ /* * Little CMS helper routines * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_LCMS #define MNG_CMS_FLAGS 0 /* ************************************************************************** */ void mnglcms_initlibrary () { #ifdef HAVE_LIBLCMS1 cmsErrorAction (LCMS_ERROR_IGNORE); /* LCMS should ignore errors! */ #endif } /* ************************************************************************** */ mng_cmsprof mnglcms_createfileprofile (mng_pchar zFilename) { return cmsOpenProfileFromFile (zFilename, "r"); } /* ************************************************************************** */ mng_cmsprof mnglcms_creatememprofile (mng_uint32 iProfilesize, mng_ptr pProfile) { return cmsOpenProfileFromMem (pProfile, iProfilesize); } /* ************************************************************************** */ mng_cmsprof mnglcms_createsrgbprofile (void) { cmsCIExyY D65; cmsCIExyYTRIPLE Rec709Primaries = { {0.6400, 0.3300, 1.0}, {0.3000, 0.6000, 1.0}, {0.1500, 0.0600, 1.0} }; #ifdef HAVE_LIBLCMS1 LPGAMMATABLE Gamma24[3]; #elif defined(HAVE_LIBLCMS2) cmsToneCurve* Gamma24[3]; #endif mng_cmsprof hsRGB; #ifdef HAVE_LIBLCMS1 cmsWhitePointFromTemp(6504, &D65); #elif defined(HAVE_LIBLCMS2) cmsWhitePointFromTemp(&D65, 6504); #endif Gamma24[0] = Gamma24[1] = Gamma24[2] = #ifdef HAVE_LIBLCMS1 cmsBuildGamma(256, 2.4); #elif defined(HAVE_LIBLCMS2) cmsBuildGamma(NULL, 2.4); #endif hsRGB = cmsCreateRGBProfile(&D65, &Rec709Primaries, Gamma24); #ifdef HAVE_LIBLCMS1 cmsFreeGamma(Gamma24[0]); #elif defined(HAVE_LIBLCMS2) cmsFreeToneCurve(Gamma24[0]); #endif return hsRGB; } /* ************************************************************************** */ void mnglcms_freeprofile (mng_cmsprof hProf) { cmsCloseProfile (hProf); return; } /* ************************************************************************** */ void mnglcms_freetransform (mng_cmstrans hTrans) { /* B001 start */ cmsDeleteTransform (hTrans); /* B001 end */ return; } /* ************************************************************************** */ mng_retcode mng_clear_cms (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CLEAR_CMS, MNG_LC_START); #endif if (pData->hTrans) /* transformation still active ? */ mnglcms_freetransform (pData->hTrans); pData->hTrans = 0; if (pData->hProf1) /* file profile still active ? */ mnglcms_freeprofile (pData->hProf1); pData->hProf1 = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CLEAR_CMS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_INCLUDE_LCMS */ /* ************************************************************************** */ /* * * */ /* * Color-management initialization & correction routines * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_LCMS mng_retcode mng_init_full_cms (mng_datap pData, mng_bool bGlobal, mng_bool bObject, mng_bool bRetrobj) { mng_cmsprof hProf; mng_cmstrans hTrans; mng_imagep pImage = MNG_NULL; mng_imagedatap pBuf = MNG_NULL; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_FULL_CMS, MNG_LC_START); #endif if (bObject) /* use object if present ? */ { /* current object ? */ if ((mng_imagep)pData->pCurrentobj) pImage = (mng_imagep)pData->pCurrentobj; else /* if not; use object 0 */ pImage = (mng_imagep)pData->pObjzero; } if (bRetrobj) /* retrieving from an object ? */ pImage = (mng_imagep)pData->pRetrieveobj; if (pImage) /* are we using an object ? */ pBuf = pImage->pImgbuf; /* then address the buffer */ if ((!pBuf) || (!pBuf->bCorrected)) /* is the buffer already corrected ? */ { #ifndef MNG_SKIPCHUNK_iCCP if (((pBuf) && (pBuf->bHasICCP)) || ((bGlobal) && (pData->bHasglobalICCP))) { if (!pData->hProf2) /* output profile not defined ? */ { /* then assume sRGB !! */ pData->hProf2 = mnglcms_createsrgbprofile (); if (!pData->hProf2) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOHANDLE); } if ((pBuf) && (pBuf->bHasICCP)) /* generate a profile handle */ hProf = cmsOpenProfileFromMem (pBuf->pProfile, pBuf->iProfilesize); else hProf = cmsOpenProfileFromMem (pData->pGlobalProfile, pData->iGlobalProfilesize); pData->hProf1 = hProf; /* save for future use */ if (!hProf) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOHANDLE); #ifndef MNG_NO_16BIT_SUPPORT if (pData->bIsRGBA16) /* 16-bit intermediates ? */ hTrans = cmsCreateTransform (hProf, TYPE_RGBA_16_SE, pData->hProf2, TYPE_RGBA_16_SE, INTENT_PERCEPTUAL, MNG_CMS_FLAGS); else #endif hTrans = cmsCreateTransform (hProf, TYPE_RGBA_8, pData->hProf2, TYPE_RGBA_8, INTENT_PERCEPTUAL, MNG_CMS_FLAGS); pData->hTrans = hTrans; /* save for future use */ if (!hTrans) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOTRANS); /* load color-correction routine */ pData->fCorrectrow = (mng_fptr)mng_correct_full_cms; return MNG_NOERROR; /* and done */ } else #endif if (((pBuf) && (pBuf->bHasSRGB)) || ((bGlobal) && (pData->bHasglobalSRGB))) { mng_uint8 iIntent; if (pData->bIssRGB) /* sRGB system ? */ return MNG_NOERROR; /* no conversion required */ if (!pData->hProf3) /* sRGB profile not defined ? */ { /* then create it implicitly !! */ pData->hProf3 = mnglcms_createsrgbprofile (); if (!pData->hProf3) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOHANDLE); } hProf = pData->hProf3; /* convert from sRGB profile */ if ((pBuf) && (pBuf->bHasSRGB)) /* determine rendering intent */ iIntent = pBuf->iRenderingintent; else iIntent = pData->iGlobalRendintent; if (pData->bIsRGBA16) /* 16-bit intermediates ? */ hTrans = cmsCreateTransform (hProf, TYPE_RGBA_16_SE, pData->hProf2, TYPE_RGBA_16_SE, iIntent, MNG_CMS_FLAGS); else hTrans = cmsCreateTransform (hProf, TYPE_RGBA_8, pData->hProf2, TYPE_RGBA_8, iIntent, MNG_CMS_FLAGS); pData->hTrans = hTrans; /* save for future use */ if (!hTrans) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOTRANS); /* load color-correction routine */ pData->fCorrectrow = (mng_fptr)mng_correct_full_cms; return MNG_NOERROR; /* and done */ } else if ( (((pBuf) && (pBuf->bHasCHRM)) || ((bGlobal) && (pData->bHasglobalCHRM))) && ( ((pBuf) && (pBuf->bHasGAMA) && (pBuf->iGamma > 0)) || ((bGlobal) && (pData->bHasglobalGAMA) && (pData->iGlobalGamma > 0)) ) ) { mng_CIExyY sWhitepoint; mng_CIExyYTRIPLE sPrimaries; mng_gammatabp pGammatable[3]; mng_float dGamma; if (!pData->hProf2) /* output profile not defined ? */ { /* then assume sRGB !! */ pData->hProf2 = mnglcms_createsrgbprofile (); if (!pData->hProf2) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOHANDLE); } #ifndef MNG_SKIPCHUNK_cHRM if ((pBuf) && (pBuf->bHasCHRM)) /* local cHRM ? */ { sWhitepoint.x = (mng_float)pBuf->iWhitepointx / 100000; sWhitepoint.y = (mng_float)pBuf->iWhitepointy / 100000; sPrimaries.Red.x = (mng_float)pBuf->iPrimaryredx / 100000; sPrimaries.Red.y = (mng_float)pBuf->iPrimaryredy / 100000; sPrimaries.Green.x = (mng_float)pBuf->iPrimarygreenx / 100000; sPrimaries.Green.y = (mng_float)pBuf->iPrimarygreeny / 100000; sPrimaries.Blue.x = (mng_float)pBuf->iPrimarybluex / 100000; sPrimaries.Blue.y = (mng_float)pBuf->iPrimarybluey / 100000; } else { sWhitepoint.x = (mng_float)pData->iGlobalWhitepointx / 100000; sWhitepoint.y = (mng_float)pData->iGlobalWhitepointy / 100000; sPrimaries.Red.x = (mng_float)pData->iGlobalPrimaryredx / 100000; sPrimaries.Red.y = (mng_float)pData->iGlobalPrimaryredy / 100000; sPrimaries.Green.x = (mng_float)pData->iGlobalPrimarygreenx / 100000; sPrimaries.Green.y = (mng_float)pData->iGlobalPrimarygreeny / 100000; sPrimaries.Blue.x = (mng_float)pData->iGlobalPrimarybluex / 100000; sPrimaries.Blue.y = (mng_float)pData->iGlobalPrimarybluey / 100000; } #endif sWhitepoint.Y = /* Y component is always 1.0 */ sPrimaries.Red.Y = sPrimaries.Green.Y = sPrimaries.Blue.Y = 1.0; if ((pBuf) && (pBuf->bHasGAMA)) /* get the gamma value */ dGamma = (mng_float)pBuf->iGamma / 100000; else dGamma = (mng_float)pData->iGlobalGamma / 100000; dGamma = pData->dViewgamma / dGamma; pGammatable [0] = /* and build the lookup tables */ pGammatable [1] = pGammatable [2] = #ifdef HAVE_LIBLCMS1 cmsBuildGamma (256, dGamma); #elif defined(HAVE_LIBLCMS2) cmsBuildGamma(NULL, dGamma); #endif if (!pGammatable [0]) /* enough memory ? */ MNG_ERRORL (pData, MNG_LCMS_NOMEM); /* create the profile */ hProf = cmsCreateRGBProfile (&sWhitepoint, &sPrimaries, pGammatable); #ifdef HAVE_LIBLCMS1 cmsFreeGamma (pGammatable [0]); /* free the temporary gamma tables ? */ /* yes! but just the one! */ #elif defined(HAVE_LIBLCMS2) cmsFreeToneCurve(pGammatable [0]); #endif pData->hProf1 = hProf; /* save for future use */ if (!hProf) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOHANDLE); if (pData->bIsRGBA16) /* 16-bit intermediates ? */ hTrans = cmsCreateTransform (hProf, TYPE_RGBA_16_SE, pData->hProf2, TYPE_RGBA_16_SE, INTENT_PERCEPTUAL, MNG_CMS_FLAGS); else hTrans = cmsCreateTransform (hProf, TYPE_RGBA_8, pData->hProf2, TYPE_RGBA_8, INTENT_PERCEPTUAL, MNG_CMS_FLAGS); pData->hTrans = hTrans; /* save for future use */ if (!hTrans) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOTRANS); /* load color-correction routine */ pData->fCorrectrow = (mng_fptr)mng_correct_full_cms; return MNG_NOERROR; /* and done */ } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_FULL_CMS, MNG_LC_END); #endif /* if we get here, we'll only do gamma */ return mng_init_gamma_only (pData, bGlobal, bObject, bRetrobj); } #endif /* MNG_INCLUDE_LCMS */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_LCMS mng_retcode mng_correct_full_cms (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CORRECT_FULL_CMS, MNG_LC_START); #endif cmsDoTransform (pData->hTrans, pData->pRGBArow, pData->pRGBArow, pData->iRowsamples); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CORRECT_FULL_CMS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_LCMS */ /* ************************************************************************** */ #if defined(MNG_GAMMA_ONLY) || defined(MNG_FULL_CMS) || defined(MNG_APP_CMS) mng_retcode mng_init_gamma_only (mng_datap pData, mng_bool bGlobal, mng_bool bObject, mng_bool bRetrobj) { mng_float dGamma; mng_imagep pImage = MNG_NULL; mng_imagedatap pBuf = MNG_NULL; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GAMMA_ONLY, MNG_LC_START); #endif if (bObject) /* use object if present ? */ { /* current object ? */ if ((mng_imagep)pData->pCurrentobj) pImage = (mng_imagep)pData->pCurrentobj; else /* if not; use object 0 */ pImage = (mng_imagep)pData->pObjzero; } if (bRetrobj) /* retrieving from an object ? */ pImage = (mng_imagep)pData->pRetrieveobj; if (pImage) /* are we using an object ? */ pBuf = pImage->pImgbuf; /* then address the buffer */ if ((!pBuf) || (!pBuf->bCorrected)) /* is the buffer already corrected ? */ { if ((pBuf) && (pBuf->bHasSRGB)) /* get the gamma value */ dGamma = 0.45455; else if ((pBuf) && (pBuf->bHasGAMA)) dGamma = (mng_float)pBuf->iGamma / 100000; else if ((bGlobal) && (pData->bHasglobalSRGB)) dGamma = 0.45455; else if ((bGlobal) && (pData->bHasglobalGAMA)) dGamma = (mng_float)pData->iGlobalGamma / 100000; else dGamma = pData->dDfltimggamma; if (dGamma > 0) /* ignore gamma=0 */ { dGamma = pData->dViewgamma / (dGamma * pData->dDisplaygamma); if (dGamma != pData->dLastgamma) /* lookup table needs to be computed ? */ { mng_int32 iX; pData->aGammatab [0] = 0; for (iX = 1; iX <= 255; iX++) pData->aGammatab [iX] = (mng_uint8)(pow (iX / 255.0, dGamma) * 255 + 0.5); pData->dLastgamma = dGamma; /* keep for next time */ } /* load color-correction routine */ pData->fCorrectrow = (mng_fptr)mng_correct_gamma_only; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GAMMA_ONLY, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_GAMMA_ONLY || MNG_FULL_CMS || MNG_APP_CMS */ /* ************************************************************************** */ #if defined(MNG_GAMMA_ONLY) || defined(MNG_FULL_CMS) || defined(MNG_APP_CMS) mng_retcode mng_correct_gamma_only (mng_datap pData) { mng_uint8p pWork; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CORRECT_GAMMA_ONLY, MNG_LC_START); #endif pWork = pData->pRGBArow; /* address intermediate row */ if (pData->bIsRGBA16) /* 16-bit intermediate row ? */ { /* TODO: 16-bit precision gamma processing */ /* we'll just do the high-order byte for now */ /* convert all samples in the row */ for (iX = 0; iX < pData->iRowsamples; iX++) { /* using the precalculated gamma lookup table */ *pWork = pData->aGammatab [*pWork]; *(pWork+2) = pData->aGammatab [*(pWork+2)]; *(pWork+4) = pData->aGammatab [*(pWork+4)]; pWork += 8; } } else { /* convert all samples in the row */ for (iX = 0; iX < pData->iRowsamples; iX++) { /* using the precalculated gamma lookup table */ *pWork = pData->aGammatab [*pWork]; *(pWork+1) = pData->aGammatab [*(pWork+1)]; *(pWork+2) = pData->aGammatab [*(pWork+2)]; pWork += 4; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CORRECT_GAMMA_ONLY, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_GAMMA_ONLY || MNG_FULL_CMS || MNG_APP_CMS */ /* ************************************************************************** */ #ifdef MNG_APP_CMS mng_retcode mng_init_app_cms (mng_datap pData, mng_bool bGlobal, mng_bool bObject, mng_bool bRetrobj) { mng_imagep pImage = MNG_NULL; mng_imagedatap pBuf = MNG_NULL; mng_bool bDone = MNG_FALSE; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_APP_CMS, MNG_LC_START); #endif if (bObject) /* use object if present ? */ { /* current object ? */ if ((mng_imagep)pData->pCurrentobj) pImage = (mng_imagep)pData->pCurrentobj; else /* if not; use object 0 */ pImage = (mng_imagep)pData->pObjzero; } if (bRetrobj) /* retrieving from an object ? */ pImage = (mng_imagep)pData->pRetrieveobj; if (pImage) /* are we using an object ? */ pBuf = pImage->pImgbuf; /* then address the buffer */ if ((!pBuf) || (!pBuf->bCorrected)) /* is the buffer already corrected ? */ { #ifndef MNG_SKIPCHUNK_iCCP if ( (pData->fProcessiccp) && (((pBuf) && (pBuf->bHasICCP)) || ((bGlobal) && (pData->bHasglobalICCP))) ) { mng_uint32 iProfilesize; mng_ptr pProfile; if ((pBuf) && (pBuf->bHasICCP)) /* get the right profile */ { iProfilesize = pBuf->iProfilesize; pProfile = pBuf->pProfile; } else { iProfilesize = pData->iGlobalProfilesize; pProfile = pData->pGlobalProfile; } /* inform the app */ if (!pData->fProcessiccp ((mng_handle)pData, iProfilesize, pProfile)) MNG_ERROR (pData, MNG_APPCMSERROR); /* load color-correction routine */ pData->fCorrectrow = (mng_fptr)mng_correct_app_cms; bDone = MNG_TRUE; } #endif if ( (pData->fProcesssrgb) && (((pBuf) && (pBuf->bHasSRGB)) || ((bGlobal) && (pData->bHasglobalSRGB))) ) { mng_uint8 iIntent; if ((pBuf) && (pBuf->bHasSRGB)) /* determine rendering intent */ iIntent = pBuf->iRenderingintent; else iIntent = pData->iGlobalRendintent; /* inform the app */ if (!pData->fProcesssrgb ((mng_handle)pData, iIntent)) MNG_ERROR (pData, MNG_APPCMSERROR); /* load color-correction routine */ pData->fCorrectrow = (mng_fptr)mng_correct_app_cms; bDone = MNG_TRUE; } #ifndef MNG_SKIPCHUNK_cHRM if ( (pData->fProcesschroma) && (((pBuf) && (pBuf->bHasCHRM)) || ((bGlobal) && (pData->bHasglobalCHRM))) ) { mng_uint32 iWhitepointx, iWhitepointy; mng_uint32 iPrimaryredx, iPrimaryredy; mng_uint32 iPrimarygreenx, iPrimarygreeny; mng_uint32 iPrimarybluex, iPrimarybluey; if ((pBuf) && (pBuf->bHasCHRM)) /* local cHRM ? */ { iWhitepointx = pBuf->iWhitepointx; iWhitepointy = pBuf->iWhitepointy; iPrimaryredx = pBuf->iPrimaryredx; iPrimaryredy = pBuf->iPrimaryredy; iPrimarygreenx = pBuf->iPrimarygreenx; iPrimarygreeny = pBuf->iPrimarygreeny; iPrimarybluex = pBuf->iPrimarybluex; iPrimarybluey = pBuf->iPrimarybluey; } else { iWhitepointx = pData->iGlobalWhitepointx; iWhitepointy = pData->iGlobalWhitepointy; iPrimaryredx = pData->iGlobalPrimaryredx; iPrimaryredy = pData->iGlobalPrimaryredy; iPrimarygreenx = pData->iGlobalPrimarygreenx; iPrimarygreeny = pData->iGlobalPrimarygreeny; iPrimarybluex = pData->iGlobalPrimarybluex; iPrimarybluey = pData->iGlobalPrimarybluey; } /* inform the app */ if (!pData->fProcesschroma ((mng_handle)pData, iWhitepointx, iWhitepointy, iPrimaryredx, iPrimaryredy, iPrimarygreenx, iPrimarygreeny, iPrimarybluex, iPrimarybluey)) MNG_ERROR (pData, MNG_APPCMSERROR); /* load color-correction routine */ pData->fCorrectrow = (mng_fptr)mng_correct_app_cms; bDone = MNG_TRUE; } #endif if ( (pData->fProcessgamma) && (((pBuf) && (pBuf->bHasGAMA)) || ((bGlobal) && (pData->bHasglobalGAMA))) ) { mng_uint32 iGamma; if ((pBuf) && (pBuf->bHasGAMA)) /* get the gamma value */ iGamma = pBuf->iGamma; else iGamma = pData->iGlobalGamma; /* inform the app */ if (!pData->fProcessgamma ((mng_handle)pData, iGamma)) { /* app wants us to use internal routines ! */ iRetcode = mng_init_gamma_only (pData, bGlobal, bObject, bRetrobj); if (iRetcode) /* on error bail out */ return iRetcode; } else { /* load color-correction routine */ pData->fCorrectrow = (mng_fptr)mng_correct_app_cms; } bDone = MNG_TRUE; } if (!bDone) /* no color-info at all ? */ { /* then use default image gamma ! */ if (!pData->fProcessgamma ((mng_handle)pData, (mng_uint32)((pData->dDfltimggamma * 100000) + 0.5))) { /* app wants us to use internal routines ! */ iRetcode = mng_init_gamma_only (pData, bGlobal, bObject, bRetrobj); if (iRetcode) /* on error bail out */ return iRetcode; } else { /* load color-correction routine */ pData->fCorrectrow = (mng_fptr)mng_correct_app_cms; } } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_APP_CMS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_APP_CMS */ /* ************************************************************************** */ #ifdef MNG_APP_CMS mng_retcode mng_correct_app_cms (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CORRECT_APP_CMS, MNG_LC_START); #endif if (pData->fProcessarow) /* let the app do something with our row */ if (!pData->fProcessarow ((mng_handle)pData, pData->iRowsamples, pData->bIsRGBA16, pData->pRGBArow)) MNG_ERROR (pData, MNG_APPCMSERROR); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CORRECT_APP_CMS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_APP_CMS */ /* ************************************************************************** */ #endif /* MNG_INCLUDE_DISPLAY_PROCS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_display.c0000644000000000000000000103253112005307152014622 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_display.c copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Display management (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the display management routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - added callback error-reporting support * */ /* * - fixed frame_delay misalignment * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - added sanity check for frozen status * */ /* * - changed trace to macro for callback error-reporting * */ /* * 0.5.1 - 05/13/2000 - G.Juyn * */ /* * - changed display_mend to reset state to initial or SAVE * */ /* * - added eMNGma hack (will be removed in 1.0.0 !!!) * */ /* * - added TERM animation object pointer (easier reference) * */ /* * - added process_save & process_seek routines * */ /* * 0.5.1 - 05/14/2000 - G.Juyn * */ /* * - added save_state and restore_state for SAVE/SEEK/TERM * */ /* * processing * */ /* * * */ /* * 0.5.2 - 05/20/2000 - G.Juyn * */ /* * - added JNG support (JHDR/JDAT) * */ /* * 0.5.2 - 05/23/2000 - G.Juyn * */ /* * - fixed problem with DEFI clipping * */ /* * 0.5.2 - 05/30/2000 - G.Juyn * */ /* * - added delta-image support (DHDR,PROM,IPNG,IJNG) * */ /* * 0.5.2 - 05/31/2000 - G.Juyn * */ /* * - fixed pointer confusion (contributed by Tim Rowley) * */ /* * 0.5.2 - 06/03/2000 - G.Juyn * */ /* * - fixed makeup for Linux gcc compile * */ /* * 0.5.2 - 06/05/2000 - G.Juyn * */ /* * - added support for RGB8_A8 canvasstyle * */ /* * 0.5.2 - 06/09/2000 - G.Juyn * */ /* * - fixed timer-handling to run with Mozilla (Tim Rowley) * */ /* * 0.5.2 - 06/10/2000 - G.Juyn * */ /* * - fixed some compilation-warnings (contrib Jason Morris) * */ /* * * */ /* * 0.5.3 - 06/12/2000 - G.Juyn * */ /* * - fixed display of stored JNG images * */ /* * 0.5.3 - 06/13/2000 - G.Juyn * */ /* * - fixed problem with BASI-IEND as object 0 * */ /* * 0.5.3 - 06/16/2000 - G.Juyn * */ /* * - changed progressive-display processing * */ /* * 0.5.3 - 06/17/2000 - G.Juyn * */ /* * - changed delta-image processing * */ /* * 0.5.3 - 06/20/2000 - G.Juyn * */ /* * - fixed some minor stuff * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - added speed-modifier to timing routine * */ /* * 0.5.3 - 06/22/2000 - G.Juyn * */ /* * - added support for PPLT chunk processing * */ /* * 0.5.3 - 06/29/2000 - G.Juyn * */ /* * - swapped refresh parameters * */ /* * * */ /* * 0.9.0 - 06/30/2000 - G.Juyn * */ /* * - changed refresh parameters to 'x,y,width,height' * */ /* * * */ /* * 0.9.1 - 07/07/2000 - G.Juyn * */ /* * - implemented support for freeze/reset/resume & go_xxxx * */ /* * 0.9.1 - 07/08/2000 - G.Juyn * */ /* * - added support for improved timing * */ /* * 0.9.1 - 07/14/2000 - G.Juyn * */ /* * - changed EOF processing behavior * */ /* * - fixed TERM delay processing * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - fixed freeze & reset processing * */ /* * 0.9.1 - 07/16/2000 - G.Juyn * */ /* * - fixed storage of images during mng_read() * */ /* * - fixed support for mng_display() after mng_read() * */ /* * 0.9.1 - 07/24/2000 - G.Juyn * */ /* * - fixed reading of still-images * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/07/2000 - G.Juyn * */ /* * - B111300 - fixup for improved portability * */ /* * 0.9.3 - 08/21/2000 - G.Juyn * */ /* * - fixed TERM processing delay of 0 msecs * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 09/10/2000 - G.Juyn * */ /* * - fixed problem with no refresh after TERM * */ /* * - fixed DEFI behavior * */ /* * 0.9.3 - 09/16/2000 - G.Juyn * */ /* * - fixed timing & refresh behavior for single PNG/JNG * */ /* * 0.9.3 - 09/19/2000 - G.Juyn * */ /* * - refixed timing & refresh behavior for single PNG/JNG * */ /* * 0.9.3 - 10/02/2000 - G.Juyn * */ /* * - fixed timing again (this is getting boring...) * */ /* * - refixed problem with no refresh after TERM * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added JDAA chunk * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - fixed support for bKGD * */ /* * 0.9.3 - 10/18/2000 - G.Juyn * */ /* * - fixed delta-processing behavior * */ /* * 0.9.3 - 10/19/2000 - G.Juyn * */ /* * - added storage for pixel-/alpha-sampledepth for delta's * */ /* * 0.9.3 - 10/27/2000 - G.Juyn * */ /* * - fixed separate read() & display() processing * */ /* * * */ /* * 0.9.4 - 10/31/2000 - G.Juyn * */ /* * - fixed possible loop in display_resume() (Thanks Vova!) * */ /* * 0.9.4 - 11/20/2000 - G.Juyn * */ /* * - fixed unwanted repetition in mng_readdisplay() * */ /* * 0.9.4 - 11/24/2000 - G.Juyn * */ /* * - moved restore of object 0 to libmng_display * */ /* * - added restore of object 0 to TERM processing !!! * */ /* * - fixed TERM delay processing * */ /* * - fixed TERM end processing (count = 0) * */ /* * 0.9.4 - 12/16/2000 - G.Juyn * */ /* * - fixed mixup of data- & function-pointers (thanks Dimitri)* */ /* * 0.9.4 - 1/18/2001 - G.Juyn * */ /* * - removed test filter-methods 1 & 65 * */ /* * - set default level-set for filtertype=64 to all zeroes * */ /* * * */ /* * 0.9.5 - 1/20/2001 - G.Juyn * */ /* * - fixed compiler-warnings Mozilla (thanks Tim) * */ /* * 0.9.5 - 1/23/2001 - G.Juyn * */ /* * - fixed timing-problem with switching framing_modes * */ /* * * */ /* * 1.0.1 - 02/08/2001 - G.Juyn * */ /* * - added MEND processing callback * */ /* * 1.0.1 - 02/13/2001 - G.Juyn * */ /* * - fixed first FRAM_MODE=4 timing problem * */ /* * 1.0.1 - 04/21/2001 - G.Juyn * */ /* * - fixed memory-leak for JNGs with alpha (Thanks Gregg!) * */ /* * - added BGRA8 canvas with premultiplied alpha * */ /* * * */ /* * 1.0.2 - 06/25/2001 - G.Juyn * */ /* * - fixed memory-leak with delta-images (Thanks Michael!) * */ /* * * */ /* * 1.0.5 - 08/15/2002 - G.Juyn * */ /* * - completed PROM support * */ /* * - completed delta-image support * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/13/2002 - G.Juyn * */ /* * - fixed read/write of MAGN chunk * */ /* * 1.0.5 - 09/15/2002 - G.Juyn * */ /* * - fixed LOOP iteration=0 special case * */ /* * 1.0.5 - 09/19/2002 - G.Juyn * */ /* * - fixed color-correction for restore-background handling * */ /* * - optimized restore-background for bKGD cases * */ /* * - cleaned up some old stuff * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - finished support for BACK image & tiling * */ /* * - added support for PAST * */ /* * 1.0.5 - 09/22/2002 - G.Juyn * */ /* * - added bgrx8 canvas (filler byte) * */ /* * 1.0.5 - 10/05/2002 - G.Juyn * */ /* * - fixed dropping mix of frozen/unfrozen objects * */ /* * 1.0.5 - 10/07/2002 - G.Juyn * */ /* * - added proposed change in handling of TERM- & if-delay * */ /* * - added another fix for misplaced TERM chunk * */ /* * - completed support for condition=2 in TERM chunk * */ /* * 1.0.5 - 10/18/2002 - G.Juyn * */ /* * - fixed clipping-problem with BACK tiling (Thanks Sakura!) * */ /* * 1.0.5 - 10/20/2002 - G.Juyn * */ /* * - fixed processing for multiple objects in MAGN * */ /* * - fixed display of visible target of PAST operation * */ /* * 1.0.5 - 10/30/2002 - G.Juyn * */ /* * - modified TERM/MEND processing for max(1, TERM_delay, * */ /* * interframe_delay) * */ /* * 1.0.5 - 11/04/2002 - G.Juyn * */ /* * - fixed layer- & frame-counting during read() * */ /* * - fixed goframe/golayer/gotime processing * */ /* * 1.0.5 - 01/19/2003 - G.Juyn * */ /* * - B654627 - fixed SEGV when no gettickcount callback * */ /* * - B664383 - fixed typo * */ /* * - finalized changes in TERM/final_delay to elected proposal* */ /* * * */ /* * 1.0.6 - 05/11/2003 - G. Juyn * */ /* * - added conditionals around canvas update routines * */ /* * 1.0.6 - 05/25/2003 - G.R-P * */ /* * - added MNG_SKIPCHUNK_cHNK footprint optimizations * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - added conditionals around some JNG-supporting code * */ /* * - added conditionals around 16-bit supporting code * */ /* * - reversed some loops to use decrementing counter * */ /* * - combined init functions into one function * */ /* * 1.0.6 - 07/10/2003 - G.R-P * */ /* * - replaced nested switches with simple init setup function * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditionals around PAST chunk support * */ /* * 1.0.6 - 08/17/2003 - G.R-P * */ /* * - added conditionals around non-VLC chunk support * */ /* * * */ /* * 1.0.7 - 11/27/2003 - R.A * */ /* * - added CANVAS_RGB565 and CANVAS_BGR565 * */ /* * 1.0.7 - 12/06/2003 - R.A * */ /* * - added CANVAS_RGBA565 and CANVAS_BGRA565 * */ /* * 1.0.7 - 01/25/2004 - J.S * */ /* * - added premultiplied alpha canvas' for RGBA, ARGB, ABGR * */ /* * * */ /* * 1.0.8 - 03/31/2004 - G.Juyn * */ /* * - fixed problem with PAST usage where source > dest * */ /* * 1.0.8 - 05/04/2004 - G.R-P. * */ /* * - fixed misplaced 16-bit conditionals * */ /* * * */ /* * 1.0.9 - 09/18/2004 - G.R-P. * */ /* * - revised some SKIPCHUNK conditionals * */ /* * 1.0.9 - 10/10/2004 - G.R-P. * */ /* * - added MNG_NO_1_2_4BIT_SUPPORT * */ /* * 1.0.9 - 10/14/2004 - G.Juyn * */ /* * - added bgr565_a8 canvas-style (thanks to J. Elvander) * */ /* * 1.0.9 - 12/11/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_DISPLAYCALLS * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* * 1.0.10 - 07/06/2005 - G.R-P. * */ /* * - added more SKIPCHUNK conditionals * */ /* * 1.0.10 - 12/28/2005 - G.R-P. * */ /* * - added missing SKIPCHUNK_MAGN conditional * */ /* * 1.0.10 - 03/07/2006 - (thanks to W. Manthey) * */ /* * - added CANVAS_RGB555 and CANVAS_BGR555 * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - fixed several compiler warnings * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_chunks.h" #include "libmng_objects.h" #include "libmng_object_prc.h" #include "libmng_memory.h" #include "libmng_zlib.h" #include "libmng_jpeg.h" #include "libmng_cms.h" #include "libmng_pixels.h" #include "libmng_display.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_DISPLAY_PROCS /* ************************************************************************** */ MNG_LOCAL mng_retcode set_delay (mng_datap pData, mng_uint32 iInterval) { if (!iInterval) /* at least 1 msec please! */ iInterval = 1; if (pData->bRunning) /* only when really displaying */ if (!pData->fSettimer ((mng_handle)pData, iInterval)) MNG_ERROR (pData, MNG_APPTIMERERROR); #ifdef MNG_SUPPORT_DYNAMICMNG if ((!pData->bDynamic) || (pData->bRunning)) #else if (pData->bRunning) #endif pData->bTimerset = MNG_TRUE; /* and indicate so */ return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_uint32 calculate_delay (mng_datap pData, mng_uint32 iDelay) { mng_uint32 iTicks = pData->iTicks; mng_uint32 iWaitfor = 1; /* default non-MNG delay */ if (!iTicks) /* tick_count not specified ? */ if (pData->eImagetype == mng_it_mng) iTicks = 1000; if (iTicks) { switch (pData->iSpeed) /* honor speed modifier */ { case mng_st_fast : { iWaitfor = (mng_uint32)(( 500 * iDelay) / iTicks); break; } case mng_st_slow : { iWaitfor = (mng_uint32)((3000 * iDelay) / iTicks); break; } case mng_st_slowest : { iWaitfor = (mng_uint32)((8000 * iDelay) / iTicks); break; } default : { iWaitfor = (mng_uint32)((1000 * iDelay) / iTicks); } } } return iWaitfor; } /* ************************************************************************** */ /* * * */ /* * Progressive display refresh - does the call to the refresh callback * */ /* * and sets the timer to allow the app to perform the actual refresh to * */ /* * the screen (eg. process its main message-loop) * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_display_progressive_refresh (mng_datap pData, mng_uint32 iInterval) { { /* let the app refresh first ? */ if ((pData->bRunning) && (!pData->bSkipping) && (pData->iUpdatetop < pData->iUpdatebottom) && (pData->iUpdateleft < pData->iUpdateright)) { if (!pData->fRefresh (((mng_handle)pData), pData->iUpdateleft, pData->iUpdatetop, pData->iUpdateright - pData->iUpdateleft, pData->iUpdatebottom - pData->iUpdatetop)) MNG_ERROR (pData, MNG_APPMISCERROR); pData->iUpdateleft = 0; /* reset update-region */ pData->iUpdateright = 0; pData->iUpdatetop = 0; pData->iUpdatebottom = 0; /* reset refreshneeded indicator */ pData->bNeedrefresh = MNG_FALSE; /* interval requested ? */ if ((!pData->bFreezing) && (iInterval)) { /* setup the timer */ mng_retcode iRetcode = set_delay (pData, iInterval); if (iRetcode) /* on error bail out */ return iRetcode; } } } return MNG_NOERROR; } /* ************************************************************************** */ /* * * */ /* * Generic display routines * */ /* * * */ /* ************************************************************************** */ MNG_LOCAL mng_retcode interframe_delay (mng_datap pData) { mng_uint32 iWaitfor = 0; mng_uint32 iInterval; mng_uint32 iRuninterval; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INTERFRAME_DELAY, MNG_LC_START); #endif { #ifndef MNG_SKIPCHUNK_FRAM if (pData->iFramedelay > 0) /* real delay ? */ { /* let the app refresh first ? */ if ((pData->bRunning) && (!pData->bSkipping) && (pData->iUpdatetop < pData->iUpdatebottom) && (pData->iUpdateleft < pData->iUpdateright)) if (!pData->fRefresh (((mng_handle)pData), pData->iUpdateleft, pData->iUpdatetop, pData->iUpdateright - pData->iUpdateleft, pData->iUpdatebottom - pData->iUpdatetop)) MNG_ERROR (pData, MNG_APPMISCERROR); pData->iUpdateleft = 0; /* reset update-region */ pData->iUpdateright = 0; pData->iUpdatetop = 0; pData->iUpdatebottom = 0; /* reset refreshneeded indicator */ pData->bNeedrefresh = MNG_FALSE; #ifndef MNG_SKIPCHUNK_TERM if (pData->bOnlyfirstframe) /* only processing first frame after TERM ? */ { pData->iFramesafterTERM++; /* did we do a frame yet ? */ if (pData->iFramesafterTERM > 1) { /* then that's it; just stop right here ! */ pData->pCurraniobj = MNG_NULL; pData->bRunning = MNG_FALSE; return MNG_NOERROR; } } #endif if (pData->fGettickcount) { /* get current tickcount */ pData->iRuntime = pData->fGettickcount ((mng_handle)pData); /* calculate interval since last sync-point */ if (pData->iRuntime < pData->iSynctime) iRuninterval = pData->iRuntime + ~pData->iSynctime + 1; else iRuninterval = pData->iRuntime - pData->iSynctime; /* calculate actual run-time */ if (pData->iRuntime < pData->iStarttime) pData->iRuntime = pData->iRuntime + ~pData->iStarttime + 1; else pData->iRuntime = pData->iRuntime - pData->iStarttime; } else { iRuninterval = 0; } iWaitfor = calculate_delay (pData, pData->iFramedelay); if (iWaitfor > iRuninterval) /* delay necessary ? */ iInterval = iWaitfor - iRuninterval; else iInterval = 1; /* force app to process messageloop */ /* set the timer ? */ if (((pData->bRunning) || (pData->bSearching) || (pData->bReading)) && (!pData->bSkipping)) { iRetcode = set_delay (pData, iInterval); if (iRetcode) /* on error bail out */ return iRetcode; } } if (!pData->bSkipping) /* increase frametime in advance */ pData->iFrametime = pData->iFrametime + iWaitfor; /* setup for next delay */ pData->iFramedelay = pData->iNextdelay; #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INTERFRAME_DELAY, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL void set_display_routine (mng_datap pData) { /* actively running ? */ if (((pData->bRunning) || (pData->bSearching)) && (!pData->bSkipping)) { switch (pData->iCanvasstyle) /* determine display routine */ { #ifndef MNG_SKIPCANVAS_RGB8 case MNG_CANVAS_RGB8 : { pData->fDisplayrow = (mng_fptr)mng_display_rgb8; break; } #endif #ifndef MNG_SKIPCANVAS_RGBA8 case MNG_CANVAS_RGBA8 : { pData->fDisplayrow = (mng_fptr)mng_display_rgba8; break; } #endif #ifndef MNG_SKIPCANVAS_RGBA8_PM case MNG_CANVAS_RGBA8_PM: { pData->fDisplayrow = (mng_fptr)mng_display_rgba8_pm; break; } #endif #ifndef MNG_SKIPCANVAS_ARGB8 case MNG_CANVAS_ARGB8 : { pData->fDisplayrow = (mng_fptr)mng_display_argb8; break; } #endif #ifndef MNG_SKIPCANVAS_ARGB8_PM case MNG_CANVAS_ARGB8_PM: { pData->fDisplayrow = (mng_fptr)mng_display_argb8_pm; break; } #endif #ifndef MNG_SKIPCANVAS_RGB8_A8 case MNG_CANVAS_RGB8_A8 : { pData->fDisplayrow = (mng_fptr)mng_display_rgb8_a8; break; } #endif #ifndef MNG_SKIPCANVAS_BGR8 case MNG_CANVAS_BGR8 : { pData->fDisplayrow = (mng_fptr)mng_display_bgr8; break; } #endif #ifndef MNG_SKIPCANVAS_BGRX8 case MNG_CANVAS_BGRX8 : { pData->fDisplayrow = (mng_fptr)mng_display_bgrx8; break; } #endif #ifndef MNG_SKIPCANVAS_BGRA8 case MNG_CANVAS_BGRA8 : { pData->fDisplayrow = (mng_fptr)mng_display_bgra8; break; } #endif #ifndef MNG_SKIPCANVAS_BGRA8_PM case MNG_CANVAS_BGRA8_PM: { pData->fDisplayrow = (mng_fptr)mng_display_bgra8_pm; break; } #endif #ifndef MNG_SKIPCANVAS_ABGR8 case MNG_CANVAS_ABGR8 : { pData->fDisplayrow = (mng_fptr)mng_display_abgr8; break; } #endif #ifndef MNG_SKIPCANVAS_ABGR8_PM case MNG_CANVAS_ABGR8_PM: { pData->fDisplayrow = (mng_fptr)mng_display_abgr8_pm; break; } #endif #ifndef MNG_SKIPCANVAS_RGB565 case MNG_CANVAS_RGB565 : { pData->fDisplayrow = (mng_fptr)mng_display_rgb565; break; } #endif #ifndef MNG_SKIPCANVAS_RGBA565 case MNG_CANVAS_RGBA565 : { pData->fDisplayrow = (mng_fptr)mng_display_rgba565; break; } #endif #ifndef MNG_SKIPCANVAS_BGR565 case MNG_CANVAS_BGR565 : { pData->fDisplayrow = (mng_fptr)mng_display_bgr565; break; } #endif #ifndef MNG_SKIPCANVAS_BGRA565 case MNG_CANVAS_BGRA565 : { pData->fDisplayrow = (mng_fptr)mng_display_bgra565; break; } #endif #ifndef MNG_SKIPCANVAS_BGR565_A8 case MNG_CANVAS_BGR565_A8 : { pData->fDisplayrow = (mng_fptr)mng_display_bgr565_a8; break; } #endif #ifndef MNG_SKIPCANVAS_RGB555 case MNG_CANVAS_RGB555 : { pData->fDisplayrow = (mng_fptr)mng_display_rgb555; break; } #endif #ifndef MNG_SKIPCANVAS_BGR555 case MNG_CANVAS_BGR555 : { pData->fDisplayrow = (mng_fptr)mng_display_bgr555; break; } #endif #ifndef MNG_NO_16BIT_SUPPORT /* case MNG_CANVAS_RGB16 : { pData->fDisplayrow = (mng_fptr)mng_display_rgb16; break; } */ /* case MNG_CANVAS_RGBA16 : { pData->fDisplayrow = (mng_fptr)mng_display_rgba16; break; } */ /* case MNG_CANVAS_ARGB16 : { pData->fDisplayrow = (mng_fptr)mng_display_argb16; break; } */ /* case MNG_CANVAS_BGR16 : { pData->fDisplayrow = (mng_fptr)mng_display_bgr16; break; } */ /* case MNG_CANVAS_BGRA16 : { pData->fDisplayrow = (mng_fptr)mng_display_bgra16; break; } */ /* case MNG_CANVAS_ABGR16 : { pData->fDisplayrow = (mng_fptr)mng_display_abgr16; break; } */ #endif /* case MNG_CANVAS_INDEX8 : { pData->fDisplayrow = (mng_fptr)mng_display_index8; break; } */ /* case MNG_CANVAS_INDEXA8 : { pData->fDisplayrow = (mng_fptr)mng_display_indexa8; break; } */ /* case MNG_CANVAS_AINDEX8 : { pData->fDisplayrow = (mng_fptr)mng_display_aindex8; break; } */ /* case MNG_CANVAS_GRAY8 : { pData->fDisplayrow = (mng_fptr)mng_display_gray8; break; } */ /* case MNG_CANVAS_AGRAY8 : { pData->fDisplayrow = (mng_fptr)mng_display_agray8; break; } */ /* case MNG_CANVAS_GRAYA8 : { pData->fDisplayrow = (mng_fptr)mng_display_graya8; break; } */ #ifndef MNG_NO_16BIT_SUPPORT /* case MNG_CANVAS_GRAY16 : { pData->fDisplayrow = (mng_fptr)mng_display_gray16; break; } */ /* case MNG_CANVAS_GRAYA16 : { pData->fDisplayrow = (mng_fptr)mng_display_graya16; break; } */ /* case MNG_CANVAS_AGRAY16 : { pData->fDisplayrow = (mng_fptr)mng_display_agray16; break; } */ #endif /* case MNG_CANVAS_DX15 : { pData->fDisplayrow = (mng_fptr)mng_display_dx15; break; } */ /* case MNG_CANVAS_DX16 : { pData->fDisplayrow = (mng_fptr)mng_display_dx16; break; } */ } } return; } /* ************************************************************************** */ MNG_LOCAL mng_retcode load_bkgdlayer (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_LOAD_BKGDLAYER, MNG_LC_START); #endif /* actively running ? */ if (((pData->bRunning) || (pData->bSearching)) && (!pData->bSkipping)) { mng_int32 iY; mng_retcode iRetcode; mng_bool bColorcorr = MNG_FALSE; /* save values */ mng_int32 iDestl = pData->iDestl; mng_int32 iDestr = pData->iDestr; mng_int32 iDestt = pData->iDestt; mng_int32 iDestb = pData->iDestb; mng_int32 iSourcel = pData->iSourcel; mng_int32 iSourcer = pData->iSourcer; mng_int32 iSourcet = pData->iSourcet; mng_int32 iSourceb = pData->iSourceb; mng_int8 iPass = pData->iPass; mng_int32 iRow = pData->iRow; mng_int32 iRowinc = pData->iRowinc; mng_int32 iCol = pData->iCol; mng_int32 iColinc = pData->iColinc; mng_int32 iRowsamples = pData->iRowsamples; mng_int32 iRowsize = pData->iRowsize; mng_uint8p pPrevrow = pData->pPrevrow; mng_uint8p pRGBArow = pData->pRGBArow; mng_bool bIsRGBA16 = pData->bIsRGBA16; mng_bool bIsOpaque = pData->bIsOpaque; mng_fptr fCorrectrow = pData->fCorrectrow; mng_fptr fDisplayrow = pData->fDisplayrow; mng_fptr fRetrieverow = pData->fRetrieverow; mng_objectp pCurrentobj = pData->pCurrentobj; mng_objectp pRetrieveobj = pData->pRetrieveobj; pData->iDestl = 0; /* determine clipping region */ pData->iDestt = 0; pData->iDestr = pData->iWidth; pData->iDestb = pData->iHeight; #ifndef MNG_SKIPCHUNK_FRAM if (pData->bFrameclipping) /* frame clipping specified ? */ { pData->iDestl = MAX_COORD (pData->iDestl, pData->iFrameclipl); pData->iDestt = MAX_COORD (pData->iDestt, pData->iFrameclipt); pData->iDestr = MIN_COORD (pData->iDestr, pData->iFrameclipr); pData->iDestb = MIN_COORD (pData->iDestb, pData->iFrameclipb); } #endif /* anything to clear ? */ if ((pData->iDestr >= pData->iDestl) && (pData->iDestb >= pData->iDestt)) { pData->iPass = -1; /* these are the object's dimensions now */ pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iWidth; pData->iRowsize = pData->iRowsamples << 2; pData->bIsRGBA16 = MNG_FALSE; /* let's keep it simple ! */ pData->bIsOpaque = MNG_TRUE; pData->iSourcel = 0; /* source relative to destination */ pData->iSourcer = pData->iDestr - pData->iDestl; pData->iSourcet = 0; pData->iSourceb = pData->iDestb - pData->iDestt; set_display_routine (pData); /* determine display routine */ /* default restore using preset BG color */ pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bgcolor; #ifndef MNG_SKIPCHUNK_bKGD if (((pData->eImagetype == mng_it_png) || (pData->eImagetype == mng_it_jng)) && (pData->bUseBKGD)) { /* prefer bKGD in PNG/JNG */ if (!pData->pCurrentobj) pData->pCurrentobj = pData->pObjzero; if (((mng_imagep)pData->pCurrentobj)->pImgbuf->bHasBKGD) { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bkgd; bColorcorr = MNG_TRUE; } } #endif if (pData->fGetbkgdline) /* background-canvas-access callback set ? */ { switch (pData->iBkgdstyle) { #ifndef MNG_SKIPCANVAS_RGB8 case MNG_CANVAS_RGB8 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_rgb8; break; } #endif #ifndef MNG_SKIPCANVAS_BGR8 case MNG_CANVAS_BGR8 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bgr8; break; } #endif #ifndef MNG_SKIPCANVAS_BGRX8 case MNG_CANVAS_BGRX8 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bgrx8; break; } #endif #ifndef MNG_SKIPCANVAS_BGR565 case MNG_CANVAS_BGR565 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bgr565; break; } #endif #ifndef MNG_SKIPCANVAS_RGB565 case MNG_CANVAS_RGB565 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_rgb565; break; } #endif #ifndef MNG_NO_16BIT_SUPPORT /* case MNG_CANVAS_RGB16 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_rgb16; break; } */ /* case MNG_CANVAS_BGR16 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bgr16; break; } */ #endif /* case MNG_CANVAS_INDEX8 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_index8; break; } */ /* case MNG_CANVAS_GRAY8 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_gray8; break; } */ #ifndef MNG_NO_16BIT_SUPPORT /* case MNG_CANVAS_GRAY16 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_gray16; break; } */ #endif /* case MNG_CANVAS_DX15 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_dx15; break; } */ /* case MNG_CANVAS_DX16 : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_dx16; break; } */ } } #ifndef MNG_SKIPCHUNK_BACK if (pData->bHasBACK) { /* background image ? */ if ((pData->iBACKmandatory & 0x02) && (pData->iBACKimageid)) { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_backcolor; bColorcorr = MNG_TRUE; } else /* background color ? */ if (pData->iBACKmandatory & 0x01) { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_backcolor; bColorcorr = MNG_TRUE; } } #endif pData->fCorrectrow = MNG_NULL; /* default no color-correction */ if (bColorcorr) /* do we have to do color-correction ? */ { #ifdef MNG_NO_CMS iRetcode = MNG_NOERROR; #else #if defined(MNG_FULL_CMS) /* determine color-management routine */ iRetcode = mng_init_full_cms (pData, MNG_TRUE, MNG_FALSE, MNG_FALSE); #elif defined(MNG_GAMMA_ONLY) iRetcode = mng_init_gamma_only (pData, MNG_TRUE, MNG_FALSE, MNG_FALSE); #elif defined(MNG_APP_CMS) iRetcode = mng_init_app_cms (pData, MNG_TRUE, MNG_FALSE, MNG_FALSE); #endif if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_NO_CMS */ } /* get a temporary row-buffer */ MNG_ALLOC (pData, pData->pRGBArow, pData->iRowsize); iY = pData->iDestt; /* this is where we start */ iRetcode = MNG_NOERROR; /* so far, so good */ while ((!iRetcode) && (iY < pData->iDestb)) { /* restore a background row */ iRetcode = ((mng_restbkgdrow)pData->fRestbkgdrow) (pData); /* color correction ? */ if ((!iRetcode) && (pData->fCorrectrow)) iRetcode = ((mng_correctrow)pData->fCorrectrow) (pData); if (!iRetcode) /* so... display it */ iRetcode = ((mng_displayrow)pData->fDisplayrow) (pData); if (!iRetcode) iRetcode = mng_next_row (pData); iY++; /* and next line */ } /* drop the temporary row-buffer */ MNG_FREE (pData, pData->pRGBArow, pData->iRowsize); if (iRetcode) /* on error bail out */ return iRetcode; #if defined(MNG_FULL_CMS) /* cleanup cms stuff */ if (bColorcorr) /* did we do color-correction ? */ { iRetcode = mng_clear_cms (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif #ifndef MNG_SKIPCHUNK_BACK /* background image ? */ if ((pData->bHasBACK) && (pData->iBACKmandatory & 0x02) && (pData->iBACKimageid)) { mng_imagep pImage; /* let's find that object then */ pData->pRetrieveobj = mng_find_imageobject (pData, pData->iBACKimageid); pImage = (mng_imagep)pData->pRetrieveobj; /* exists, viewable and visible ? */ if ((pImage) && (pImage->bViewable) && (pImage->bVisible)) { /* will it fall within the target region ? */ if ((pImage->iPosx < pData->iDestr) && (pImage->iPosy < pData->iDestb) && ((pData->iBACKtile) || ((pImage->iPosx + (mng_int32)pImage->pImgbuf->iWidth >= pData->iDestl) && (pImage->iPosy + (mng_int32)pImage->pImgbuf->iHeight >= pData->iDestt) )) && ((!pImage->bClipped) || ((pImage->iClipl <= pImage->iClipr) && (pImage->iClipt <= pImage->iClipb) && (pImage->iClipl < pData->iDestr) && (pImage->iClipr >= pData->iDestl) && (pImage->iClipt < pData->iDestb) && (pImage->iClipb >= pData->iDestt) ))) { /* right; we've got ourselves something to do */ if (pImage->bClipped) /* clip output region with image's clipping region ? */ { if (pImage->iClipl > pData->iDestl) pData->iDestl = pImage->iClipl; if (pImage->iClipr < pData->iDestr) pData->iDestr = pImage->iClipr; if (pImage->iClipt > pData->iDestt) pData->iDestt = pImage->iClipt; if (pImage->iClipb < pData->iDestb) pData->iDestb = pImage->iClipb; } /* image offset does some extra clipping too ! */ if (pImage->iPosx > pData->iDestl) pData->iDestl = pImage->iPosx; if (pImage->iPosy > pData->iDestt) pData->iDestt = pImage->iPosy; if (!pData->iBACKtile) /* without tiling further clipping is needed */ { if (pImage->iPosx + (mng_int32)pImage->pImgbuf->iWidth < pData->iDestr) pData->iDestr = pImage->iPosx + (mng_int32)pImage->pImgbuf->iWidth; if (pImage->iPosy + (mng_int32)pImage->pImgbuf->iHeight < pData->iDestb) pData->iDestb = pImage->iPosy + (mng_int32)pImage->pImgbuf->iHeight; } pData->iSourcel = 0; /* source relative to destination */ pData->iSourcer = pData->iDestr - pData->iDestl; pData->iSourcet = 0; pData->iSourceb = pData->iDestb - pData->iDestt; /* 16-bit background ? */ #ifdef MNG_NO_16BIT_SUPPORT pData->bIsRGBA16 = MNG_FALSE; #else pData->bIsRGBA16 = (mng_bool)(pImage->pImgbuf->iBitdepth > 8); #endif /* let restore routine know the offsets !!! */ pData->iBackimgoffsx = pImage->iPosx; pData->iBackimgoffsy = pImage->iPosy; pData->iBackimgwidth = pImage->pImgbuf->iWidth; pData->iBackimgheight = pImage->pImgbuf->iHeight; pData->iRow = 0; /* start at the top again !! */ /* determine background object retrieval routine */ switch (pImage->pImgbuf->iColortype) { case 0 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_g16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_g8; pData->bIsOpaque = (mng_bool)(!pImage->pImgbuf->bHasTRNS); break; } case 2 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb8; pData->bIsOpaque = (mng_bool)(!pImage->pImgbuf->bHasTRNS); break; } case 3 : { pData->fRetrieverow = (mng_fptr)mng_retrieve_idx8; pData->bIsOpaque = (mng_bool)(!pImage->pImgbuf->bHasTRNS); break; } case 4 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_ga16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_ga8; pData->bIsOpaque = MNG_FALSE; break; } case 6 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba8; pData->bIsOpaque = MNG_FALSE; break; } case 8 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_g16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_g8; pData->bIsOpaque = MNG_TRUE; break; } case 10 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb8; pData->bIsOpaque = MNG_TRUE; break; } case 12 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_ga16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_ga8; pData->bIsOpaque = MNG_FALSE; break; } case 14 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba8; pData->bIsOpaque = MNG_FALSE; break; } } #ifdef MNG_NO_CMS iRetcode = MNG_NOERROR; #else #if defined(MNG_FULL_CMS) /* determine color-management routine */ iRetcode = mng_init_full_cms (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #elif defined(MNG_GAMMA_ONLY) iRetcode = mng_init_gamma_only (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #elif defined(MNG_APP_CMS) iRetcode = mng_init_app_cms (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #endif if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_NO_CMS */ /* get temporary row-buffers */ MNG_ALLOC (pData, pData->pPrevrow, pData->iRowsize); MNG_ALLOC (pData, pData->pRGBArow, pData->iRowsize); iY = pData->iDestt; /* this is where we start */ iRetcode = MNG_NOERROR; /* so far, so good */ while ((!iRetcode) && (iY < pData->iDestb)) { /* restore a background row */ iRetcode = mng_restore_bkgd_backimage (pData); /* color correction ? */ if ((!iRetcode) && (pData->fCorrectrow)) iRetcode = ((mng_correctrow)pData->fCorrectrow) (pData); if (!iRetcode) /* so... display it */ iRetcode = ((mng_displayrow)pData->fDisplayrow) (pData); if (!iRetcode) iRetcode = mng_next_row (pData); iY++; /* and next line */ } /* drop temporary row-buffers */ MNG_FREE (pData, pData->pRGBArow, pData->iRowsize); MNG_FREE (pData, pData->pPrevrow, pData->iRowsize); if (iRetcode) /* on error bail out */ return iRetcode; #if defined(MNG_FULL_CMS) /* cleanup cms stuff */ iRetcode = mng_clear_cms (pData); if (iRetcode) /* on error bail out */ return iRetcode; #endif } } } #endif } pData->iDestl = iDestl; /* restore values */ pData->iDestr = iDestr; pData->iDestt = iDestt; pData->iDestb = iDestb; pData->iSourcel = iSourcel; pData->iSourcer = iSourcer; pData->iSourcet = iSourcet; pData->iSourceb = iSourceb; pData->iPass = iPass; pData->iRow = iRow; pData->iRowinc = iRowinc; pData->iCol = iCol; pData->iColinc = iColinc; pData->iRowsamples = iRowsamples; pData->iRowsize = iRowsize; pData->pPrevrow = pPrevrow; pData->pRGBArow = pRGBArow; pData->bIsRGBA16 = bIsRGBA16; pData->bIsOpaque = bIsOpaque; pData->fCorrectrow = fCorrectrow; pData->fDisplayrow = fDisplayrow; pData->fRetrieverow = fRetrieverow; pData->pCurrentobj = pCurrentobj; pData->pRetrieveobj = pRetrieveobj; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_LOAD_BKGDLAYER, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode clear_canvas (mng_datap pData) { mng_int32 iY; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CLEAR_CANVAS, MNG_LC_START); #endif pData->iDestl = 0; /* clipping region is full canvas! */ pData->iDestt = 0; pData->iDestr = pData->iWidth; pData->iDestb = pData->iHeight; pData->iSourcel = 0; /* source is same as destination */ pData->iSourcer = pData->iWidth; pData->iSourcet = 0; pData->iSourceb = pData->iHeight; pData->iPass = -1; /* these are the object's dimensions now */ pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iWidth; pData->iRowsize = pData->iRowsamples << 2; pData->bIsRGBA16 = MNG_FALSE; /* let's keep it simple ! */ pData->bIsOpaque = MNG_TRUE; set_display_routine (pData); /* determine display routine */ /* get a temporary row-buffer */ /* it's transparent black by default!! */ MNG_ALLOC (pData, pData->pRGBArow, pData->iRowsize); iY = pData->iDestt; /* this is where we start */ iRetcode = MNG_NOERROR; /* so far, so good */ while ((!iRetcode) && (iY < pData->iDestb)) { /* clear a row then */ iRetcode = ((mng_displayrow)pData->fDisplayrow) (pData); if (!iRetcode) iRetcode = mng_next_row (pData); /* adjust variables for next row */ iY++; /* and next line */ } /* drop the temporary row-buffer */ MNG_FREE (pData, pData->pRGBArow, pData->iRowsize); if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CLEAR_CANVAS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode next_frame (mng_datap pData, mng_uint8 iFramemode, mng_uint8 iChangedelay, mng_uint32 iDelay, mng_uint8 iChangetimeout, mng_uint32 iTimeout, mng_uint8 iChangeclipping, mng_uint8 iCliptype, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb) { mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_NEXT_FRAME, MNG_LC_START); #endif if (!pData->iBreakpoint) /* no previous break here ? */ { #ifndef MNG_SKIPCHUNK_FRAM mng_uint8 iOldmode = pData->iFramemode; /* interframe delay required ? */ if ((iOldmode == 2) || (iOldmode == 4)) { if ((pData->iFrameseq) && (iFramemode != 1) && (iFramemode != 3)) iRetcode = interframe_delay (pData); else pData->iFramedelay = pData->iNextdelay; } else { /* delay before inserting background layer? */ if ((pData->bFramedone) && (iFramemode == 4)) iRetcode = interframe_delay (pData); } if (iRetcode) /* on error bail out */ return iRetcode; /* now we'll assume we're in the next frame! */ if (iFramemode) /* save the new framing mode ? */ { pData->iFRAMmode = iFramemode; pData->iFramemode = iFramemode; } else /* reload default */ pData->iFramemode = pData->iFRAMmode; if (iChangedelay) /* delay changed ? */ { pData->iNextdelay = iDelay; /* for *after* next subframe */ if ((iOldmode == 2) || (iOldmode == 4)) pData->iFramedelay = pData->iFRAMdelay; if (iChangedelay == 2) /* also overall ? */ pData->iFRAMdelay = iDelay; } else { /* reload default */ pData->iNextdelay = pData->iFRAMdelay; } if (iChangetimeout) /* timeout changed ? */ { /* for next subframe */ pData->iFrametimeout = iTimeout; if ((iChangetimeout == 2) || /* also overall ? */ (iChangetimeout == 4) || (iChangetimeout == 6) || (iChangetimeout == 8)) pData->iFRAMtimeout = iTimeout; } else /* reload default */ pData->iFrametimeout = pData->iFRAMtimeout; if (iChangeclipping) /* clipping changed ? */ { pData->bFrameclipping = MNG_TRUE; if (!iCliptype) /* absolute ? */ { pData->iFrameclipl = iClipl; pData->iFrameclipr = iClipr; pData->iFrameclipt = iClipt; pData->iFrameclipb = iClipb; } else /* relative */ { pData->iFrameclipl = pData->iFrameclipl + iClipl; pData->iFrameclipr = pData->iFrameclipr + iClipr; pData->iFrameclipt = pData->iFrameclipt + iClipt; pData->iFrameclipb = pData->iFrameclipb + iClipb; } if (iChangeclipping == 2) /* also overall ? */ { pData->bFRAMclipping = MNG_TRUE; if (!iCliptype) /* absolute ? */ { pData->iFRAMclipl = iClipl; pData->iFRAMclipr = iClipr; pData->iFRAMclipt = iClipt; pData->iFRAMclipb = iClipb; } else /* relative */ { pData->iFRAMclipl = pData->iFRAMclipl + iClipl; pData->iFRAMclipr = pData->iFRAMclipr + iClipr; pData->iFRAMclipt = pData->iFRAMclipt + iClipt; pData->iFRAMclipb = pData->iFRAMclipb + iClipb; } } } else { /* reload defaults */ pData->bFrameclipping = pData->bFRAMclipping; pData->iFrameclipl = pData->iFRAMclipl; pData->iFrameclipr = pData->iFRAMclipr; pData->iFrameclipt = pData->iFRAMclipt; pData->iFrameclipb = pData->iFRAMclipb; } #endif } if (!pData->bTimerset) /* timer still off ? */ { if ( #ifndef MNG_SKIPCHUNK_FRAM (pData->iFramemode == 4) || /* insert background layer after a new frame */ #endif (!pData->iLayerseq)) /* and certainly before the very first layer */ iRetcode = load_bkgdlayer (pData); if (iRetcode) /* on error bail out */ return iRetcode; pData->iFrameseq++; /* count the frame ! */ pData->bFramedone = MNG_TRUE; /* and indicate we've done one */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_NEXT_FRAME, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode next_layer (mng_datap pData) { mng_imagep pImage; mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_NEXT_LAYER, MNG_LC_START); #endif #ifndef MNG_SKIPCHUNK_FRAM if (!pData->iBreakpoint) /* no previous break here ? */ { /* interframe delay required ? */ if ((pData->eImagetype == mng_it_mng) && (pData->iLayerseq) && ((pData->iFramemode == 1) || (pData->iFramemode == 3))) iRetcode = interframe_delay (pData); else pData->iFramedelay = pData->iNextdelay; if (iRetcode) /* on error bail out */ return iRetcode; } #endif if (!pData->bTimerset) /* timer still off ? */ { if (!pData->iLayerseq) /* restore background for the very first layer ? */ { /* wait till IDAT/JDAT for PNGs & JNGs !!! */ if ((pData->eImagetype == mng_it_png) || (pData->eImagetype == mng_it_jng)) pData->bRestorebkgd = MNG_TRUE; else { /* for MNG we do it right away */ iRetcode = load_bkgdlayer (pData); pData->iLayerseq++; /* and it counts as a layer then ! */ } } #ifndef MNG_SKIPCHUNK_FRAM else if (pData->iFramemode == 3) /* restore background for each layer ? */ iRetcode = load_bkgdlayer (pData); #endif if (iRetcode) /* on error bail out */ return iRetcode; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* processing a delta-image ? */ pImage = (mng_imagep)pData->pDeltaImage; else #endif pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* not an active object ? */ pImage = (mng_imagep)pData->pObjzero; /* determine display rectangle */ pData->iDestl = MAX_COORD ((mng_int32)0, pImage->iPosx); pData->iDestt = MAX_COORD ((mng_int32)0, pImage->iPosy); /* is it a valid buffer ? */ if ((pImage->pImgbuf->iWidth) && (pImage->pImgbuf->iHeight)) { pData->iDestr = MIN_COORD ((mng_int32)pData->iWidth, pImage->iPosx + (mng_int32)pImage->pImgbuf->iWidth ); pData->iDestb = MIN_COORD ((mng_int32)pData->iHeight, pImage->iPosy + (mng_int32)pImage->pImgbuf->iHeight); } else /* it's a single image ! */ { pData->iDestr = MIN_COORD ((mng_int32)pData->iWidth, (mng_int32)pData->iDatawidth ); pData->iDestb = MIN_COORD ((mng_int32)pData->iHeight, (mng_int32)pData->iDataheight); } #ifndef MNG_SKIPCHUNK_FRAM if (pData->bFrameclipping) /* frame clipping specified ? */ { pData->iDestl = MAX_COORD (pData->iDestl, pData->iFrameclipl); pData->iDestt = MAX_COORD (pData->iDestt, pData->iFrameclipt); pData->iDestr = MIN_COORD (pData->iDestr, pData->iFrameclipr); pData->iDestb = MIN_COORD (pData->iDestb, pData->iFrameclipb); } #endif if (pImage->bClipped) /* is the image clipped itself ? */ { pData->iDestl = MAX_COORD (pData->iDestl, pImage->iClipl); pData->iDestt = MAX_COORD (pData->iDestt, pImage->iClipt); pData->iDestr = MIN_COORD (pData->iDestr, pImage->iClipr); pData->iDestb = MIN_COORD (pData->iDestb, pImage->iClipb); } /* determine source starting point */ pData->iSourcel = MAX_COORD ((mng_int32)0, pData->iDestl - pImage->iPosx); pData->iSourcet = MAX_COORD ((mng_int32)0, pData->iDestt - pImage->iPosy); if ((pImage->pImgbuf->iWidth) && (pImage->pImgbuf->iHeight)) { /* and maximum size */ pData->iSourcer = MIN_COORD ((mng_int32)pImage->pImgbuf->iWidth, pData->iSourcel + pData->iDestr - pData->iDestl); pData->iSourceb = MIN_COORD ((mng_int32)pImage->pImgbuf->iHeight, pData->iSourcet + pData->iDestb - pData->iDestt); } else /* it's a single image ! */ { pData->iSourcer = pData->iSourcel + pData->iDestr - pData->iDestl; pData->iSourceb = pData->iSourcet + pData->iDestb - pData->iDestt; } pData->iLayerseq++; /* count the layer ! */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_NEXT_LAYER, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_display_image (mng_datap pData, mng_imagep pImage, mng_bool bLayeradvanced) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_IMAGE, MNG_LC_START); #endif /* actively running ? */ #ifndef MNG_SKIPCHUNK_MAGN if (((pData->bRunning) || (pData->bSearching)) && (!pData->bSkipping)) { if ( (!pData->iBreakpoint) && /* needs magnification ? */ ( (pImage->iMAGN_MethodX) || (pImage->iMAGN_MethodY) ) ) { iRetcode = mng_magnify_imageobject (pData, pImage); if (iRetcode) /* on error bail out */ return iRetcode; } } #endif pData->pRetrieveobj = pImage; /* so retrieve-row and color-correction can find it */ if (!bLayeradvanced) /* need to advance the layer ? */ { mng_imagep pSave = pData->pCurrentobj; pData->pCurrentobj = pImage; next_layer (pData); /* advance to next layer */ pData->pCurrentobj = pSave; } /* need to restore the background ? */ if ((!pData->bTimerset) && (pData->bRestorebkgd)) { mng_imagep pSave = pData->pCurrentobj; pData->pCurrentobj = pImage; pData->bRestorebkgd = MNG_FALSE; iRetcode = load_bkgdlayer (pData); pData->pCurrentobj = pSave; if (iRetcode) /* on error bail out */ return iRetcode; pData->iLayerseq++; /* and it counts as a layer then ! */ } /* actively running ? */ if (((pData->bRunning) || (pData->bSearching)) && (!pData->bSkipping)) { if (!pData->bTimerset) /* all systems still go ? */ { pData->iBreakpoint = 0; /* let's make absolutely sure... */ /* anything to display ? */ if ((pData->iDestr >= pData->iDestl) && (pData->iDestb >= pData->iDestt)) { mng_int32 iY; set_display_routine (pData); /* determine display routine */ /* and image-buffer retrieval routine */ switch (pImage->pImgbuf->iColortype) { case 0 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_g16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_g8; pData->bIsOpaque = (mng_bool)(!pImage->pImgbuf->bHasTRNS); break; } case 2 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb8; pData->bIsOpaque = (mng_bool)(!pImage->pImgbuf->bHasTRNS); break; } case 3 : { pData->fRetrieverow = (mng_fptr)mng_retrieve_idx8; pData->bIsOpaque = (mng_bool)(!pImage->pImgbuf->bHasTRNS); break; } case 4 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_ga16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_ga8; pData->bIsOpaque = MNG_FALSE; break; } case 6 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba8; pData->bIsOpaque = MNG_FALSE; break; } case 8 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_g16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_g8; pData->bIsOpaque = MNG_TRUE; break; } case 10 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb8; pData->bIsOpaque = MNG_TRUE; break; } case 12 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_ga16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_ga8; pData->bIsOpaque = MNG_FALSE; break; } case 14 : { #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba8; pData->bIsOpaque = MNG_FALSE; break; } } pData->iPass = -1; /* these are the object's dimensions now */ pData->iRow = pData->iSourcet; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pImage->pImgbuf->iWidth; pData->iRowsize = pData->iRowsamples << 2; pData->bIsRGBA16 = MNG_FALSE; /* adjust for 16-bit object ? */ #ifndef MNG_NO_16BIT_SUPPORT if (pImage->pImgbuf->iBitdepth > 8) { pData->bIsRGBA16 = MNG_TRUE; pData->iRowsize = pData->iRowsamples << 3; } #endif pData->fCorrectrow = MNG_NULL; /* default no color-correction */ #ifdef MNG_NO_CMS iRetcode = MNG_NOERROR; #else #if defined(MNG_FULL_CMS) /* determine color-management routine */ iRetcode = mng_init_full_cms (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #elif defined(MNG_GAMMA_ONLY) iRetcode = mng_init_gamma_only (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #elif defined(MNG_APP_CMS) iRetcode = mng_init_app_cms (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #endif if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_NO_CMS */ /* get a temporary row-buffer */ MNG_ALLOC (pData, pData->pRGBArow, pData->iRowsize); iY = pData->iSourcet; /* this is where we start */ while ((!iRetcode) && (iY < pData->iSourceb)) { /* get a row */ iRetcode = ((mng_retrieverow)pData->fRetrieverow) (pData); /* color correction ? */ if ((!iRetcode) && (pData->fCorrectrow)) iRetcode = ((mng_correctrow)pData->fCorrectrow) (pData); if (!iRetcode) /* so... display it */ iRetcode = ((mng_displayrow)pData->fDisplayrow) (pData); if (!iRetcode) /* adjust variables for next row */ iRetcode = mng_next_row (pData); iY++; /* and next line */ } /* drop the temporary row-buffer */ MNG_FREE (pData, pData->pRGBArow, pData->iRowsize); if (iRetcode) /* on error bail out */ return iRetcode; #if defined(MNG_FULL_CMS) /* cleanup cms stuff */ iRetcode = mng_clear_cms (pData); if (iRetcode) /* on error bail out */ return iRetcode; #endif } } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_IMAGE, MNG_LC_END); #endif return MNG_NOERROR; /* whehehe, this is good ! */ } /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode mng_execute_delta_image (mng_datap pData, mng_imagep pTarget, mng_imagep pDelta) { mng_imagedatap pBuftarget = pTarget->pImgbuf; mng_imagedatap pBufdelta = pDelta->pImgbuf; mng_uint32 iY; mng_retcode iRetcode; mng_ptr pSaveRGBA; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_EXECUTE_DELTA_IMAGE, MNG_LC_START); #endif /* actively running ? */ if (((pData->bRunning) || (pData->bSearching)) && (!pData->bSkipping)) { if (pBufdelta->bHasPLTE) /* palette in delta ? */ { mng_uint32 iX; /* new palette larger than old one ? */ if ((!pBuftarget->bHasPLTE) || (pBuftarget->iPLTEcount < pBufdelta->iPLTEcount)) pBuftarget->iPLTEcount = pBufdelta->iPLTEcount; /* it's definitely got a PLTE now */ pBuftarget->bHasPLTE = MNG_TRUE; for (iX = 0; iX < pBufdelta->iPLTEcount; iX++) { pBuftarget->aPLTEentries[iX].iRed = pBufdelta->aPLTEentries[iX].iRed; pBuftarget->aPLTEentries[iX].iGreen = pBufdelta->aPLTEentries[iX].iGreen; pBuftarget->aPLTEentries[iX].iBlue = pBufdelta->aPLTEentries[iX].iBlue; } } if (pBufdelta->bHasTRNS) /* cheap transparency in delta ? */ { switch (pData->iColortype) /* drop it into the target */ { case 0: { /* gray */ pBuftarget->iTRNSgray = pBufdelta->iTRNSgray; pBuftarget->iTRNSred = 0; pBuftarget->iTRNSgreen = 0; pBuftarget->iTRNSblue = 0; pBuftarget->iTRNScount = 0; break; } case 2: { /* rgb */ pBuftarget->iTRNSgray = 0; pBuftarget->iTRNSred = pBufdelta->iTRNSred; pBuftarget->iTRNSgreen = pBufdelta->iTRNSgreen; pBuftarget->iTRNSblue = pBufdelta->iTRNSblue; pBuftarget->iTRNScount = 0; break; } case 3: { /* indexed */ pBuftarget->iTRNSgray = 0; pBuftarget->iTRNSred = 0; pBuftarget->iTRNSgreen = 0; pBuftarget->iTRNSblue = 0; /* existing range smaller than new one ? */ if ((!pBuftarget->bHasTRNS) || (pBuftarget->iTRNScount < pBufdelta->iTRNScount)) pBuftarget->iTRNScount = pBufdelta->iTRNScount; MNG_COPY (pBuftarget->aTRNSentries, pBufdelta->aTRNSentries, pBufdelta->iTRNScount); break; } } pBuftarget->bHasTRNS = MNG_TRUE; /* tell it it's got a tRNS now */ } #ifndef MNG_SKIPCHUNK_bKGD if (pBufdelta->bHasBKGD) /* bkgd in source ? */ { /* drop it onto the target */ pBuftarget->bHasBKGD = MNG_TRUE; pBuftarget->iBKGDindex = pBufdelta->iBKGDindex; pBuftarget->iBKGDgray = pBufdelta->iBKGDgray; pBuftarget->iBKGDred = pBufdelta->iBKGDred; pBuftarget->iBKGDgreen = pBufdelta->iBKGDgreen; pBuftarget->iBKGDblue = pBufdelta->iBKGDblue; } #endif if (pBufdelta->bHasGAMA) /* gamma in source ? */ { pBuftarget->bHasGAMA = MNG_TRUE; /* drop it onto the target */ pBuftarget->iGamma = pBufdelta->iGamma; } #ifndef MNG_SKIPCHUNK_cHRM if (pBufdelta->bHasCHRM) /* chroma in delta ? */ { /* drop it onto the target */ pBuftarget->bHasCHRM = MNG_TRUE; pBuftarget->iWhitepointx = pBufdelta->iWhitepointx; pBuftarget->iWhitepointy = pBufdelta->iWhitepointy; pBuftarget->iPrimaryredx = pBufdelta->iPrimaryredx; pBuftarget->iPrimaryredy = pBufdelta->iPrimaryredy; pBuftarget->iPrimarygreenx = pBufdelta->iPrimarygreenx; pBuftarget->iPrimarygreeny = pBufdelta->iPrimarygreeny; pBuftarget->iPrimarybluex = pBufdelta->iPrimarybluex; pBuftarget->iPrimarybluey = pBufdelta->iPrimarybluey; } #endif #ifndef MNG_SKIPCHUNK_sRGB if (pBufdelta->bHasSRGB) /* sRGB in delta ? */ { /* drop it onto the target */ pBuftarget->bHasSRGB = MNG_TRUE; pBuftarget->iRenderingintent = pBufdelta->iRenderingintent; } #endif #ifndef MNG_SKIPCHUNK_iCCP if (pBufdelta->bHasICCP) /* ICC profile in delta ? */ { pBuftarget->bHasICCP = MNG_TRUE; /* drop it onto the target */ if (pBuftarget->pProfile) /* profile existed ? */ MNG_FREEX (pData, pBuftarget->pProfile, pBuftarget->iProfilesize); /* allocate a buffer & copy it */ MNG_ALLOC (pData, pBuftarget->pProfile, pBufdelta->iProfilesize); MNG_COPY (pBuftarget->pProfile, pBufdelta->pProfile, pBufdelta->iProfilesize); /* store its length as well */ pBuftarget->iProfilesize = pBufdelta->iProfilesize; } #endif /* need to execute delta pixels ? */ if ((!pData->bDeltaimmediate) && (pData->iDeltatype != MNG_DELTATYPE_NOCHANGE)) { pData->fScalerow = MNG_NULL; /* not needed by default */ switch (pBufdelta->iBitdepth) /* determine scaling routine */ { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { switch (pBuftarget->iBitdepth) { case 2 : { pData->fScalerow = (mng_fptr)mng_scale_g1_g2; break; } case 4 : { pData->fScalerow = (mng_fptr)mng_scale_g1_g4; break; } case 8 : { pData->fScalerow = (mng_fptr)mng_scale_g1_g8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fScalerow = (mng_fptr)mng_scale_g1_g16; break; } #endif } break; } case 2 : { switch (pBuftarget->iBitdepth) { case 1 : { pData->fScalerow = (mng_fptr)mng_scale_g2_g1; break; } case 4 : { pData->fScalerow = (mng_fptr)mng_scale_g2_g4; break; } case 8 : { pData->fScalerow = (mng_fptr)mng_scale_g2_g8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fScalerow = (mng_fptr)mng_scale_g2_g16; break; } #endif } break; } case 4 : { switch (pBuftarget->iBitdepth) { case 1 : { pData->fScalerow = (mng_fptr)mng_scale_g4_g1; break; } case 2 : { pData->fScalerow = (mng_fptr)mng_scale_g4_g2; break; } case 8 : { pData->fScalerow = (mng_fptr)mng_scale_g4_g8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fScalerow = (mng_fptr)mng_scale_g4_g16; break; } #endif } break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { switch (pBufdelta->iColortype) { case 0 : ; case 3 : ; case 8 : { switch (pBuftarget->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { pData->fScalerow = (mng_fptr)mng_scale_g8_g1; break; } case 2 : { pData->fScalerow = (mng_fptr)mng_scale_g8_g2; break; } case 4 : { pData->fScalerow = (mng_fptr)mng_scale_g8_g4; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fScalerow = (mng_fptr)mng_scale_g8_g16; break; } #endif } break; } case 2 : ; case 10 : { #ifndef MNG_NO_16BIT_SUPPORT if (pBuftarget->iBitdepth == 16) pData->fScalerow = (mng_fptr)mng_scale_rgb8_rgb16; #endif break; } case 4 : ; case 12 : { #ifndef MNG_NO_16BIT_SUPPORT if (pBuftarget->iBitdepth == 16) pData->fScalerow = (mng_fptr)mng_scale_ga8_ga16; #endif break; } case 6 : ; case 14 : { #ifndef MNG_NO_16BIT_SUPPORT if (pBuftarget->iBitdepth == 16) pData->fScalerow = (mng_fptr)mng_scale_rgba8_rgba16; #endif break; } } break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { switch (pBufdelta->iColortype) { case 0 : ; case 3 : ; case 8 : { switch (pBuftarget->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { pData->fScalerow = (mng_fptr)mng_scale_g16_g1; break; } case 2 : { pData->fScalerow = (mng_fptr)mng_scale_g16_g2; break; } case 4 : { pData->fScalerow = (mng_fptr)mng_scale_g16_g4; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { pData->fScalerow = (mng_fptr)mng_scale_g16_g8; break; } } break; } case 2 : ; case 10 : { if (pBuftarget->iBitdepth == 8) pData->fScalerow = (mng_fptr)mng_scale_rgb16_rgb8; break; } case 4 : ; case 12 : { if (pBuftarget->iBitdepth == 8) pData->fScalerow = (mng_fptr)mng_scale_ga16_ga8; break; } case 6 : ; case 14 : { if (pBuftarget->iBitdepth == 8) pData->fScalerow = (mng_fptr)mng_scale_rgba16_rgba8; break; } } break; } #endif } pData->fDeltarow = MNG_NULL; /* let's assume there's nothing to do */ switch (pBuftarget->iColortype) /* determine delta processing routine */ { case 0 : ; case 8 : { /* gray */ if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { if ((pBufdelta->iColortype == 0) || (pBufdelta->iColortype == 3) || (pBufdelta->iColortype == 8)) { switch (pBuftarget->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { pData->fDeltarow = (mng_fptr)mng_delta_g1_g1; break; } case 2 : { pData->fDeltarow = (mng_fptr)mng_delta_g2_g2; break; } case 4 : { pData->fDeltarow = (mng_fptr)mng_delta_g4_g4; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { pData->fDeltarow = (mng_fptr)mng_delta_g8_g8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fDeltarow = (mng_fptr)mng_delta_g16_g16; break; } #endif } } } break; } case 2 : ; case 10 : { /* rgb */ if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { if ((pBufdelta->iColortype == 2) || (pBufdelta->iColortype == 10)) { switch (pBuftarget->iBitdepth) { case 8 : { pData->fDeltarow = (mng_fptr)mng_delta_rgb8_rgb8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fDeltarow = (mng_fptr)mng_delta_rgb16_rgb16; break; } #endif } } } break; } case 3 : { /* indexed; abuse gray routines */ if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { if ((pBufdelta->iColortype == 0) || (pBufdelta->iColortype == 3)) { switch (pBuftarget->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { pData->fDeltarow = (mng_fptr)mng_delta_g1_g1; break; } case 2 : { pData->fDeltarow = (mng_fptr)mng_delta_g2_g2; break; } case 4 : { pData->fDeltarow = (mng_fptr)mng_delta_g4_g4; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { pData->fDeltarow = (mng_fptr)mng_delta_g8_g8; break; } } } } break; } case 4 : ; case 12 : { /* gray + alpha */ if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { if ((pBufdelta->iColortype == 4) || (pBufdelta->iColortype == 12)) { switch (pBuftarget->iBitdepth) { case 8 : { pData->fDeltarow = (mng_fptr)mng_delta_ga8_ga8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fDeltarow = (mng_fptr)mng_delta_ga16_ga16; break; } #endif } } } else if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE) ) { if ((pBufdelta->iColortype == 0) || (pBufdelta->iColortype == 3) || (pBufdelta->iColortype == 8)) { switch (pBuftarget->iBitdepth) { case 8 : { pData->fDeltarow = (mng_fptr)mng_delta_ga8_g8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fDeltarow = (mng_fptr)mng_delta_ga16_g16; break; } #endif } } } else if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE) ) { if ((pBufdelta->iColortype == 0) || (pBufdelta->iColortype == 3)) { switch (pBuftarget->iBitdepth) { case 8 : { pData->fDeltarow = (mng_fptr)mng_delta_ga8_a8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fDeltarow = (mng_fptr)mng_delta_ga16_a16; break; } #endif } } } break; } case 6 : ; case 14 : { /* rgb + alpha */ if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { if ((pBufdelta->iColortype == 6) || (pBufdelta->iColortype == 14)) { switch (pBuftarget->iBitdepth) { case 8 : { pData->fDeltarow = (mng_fptr)mng_delta_rgba8_rgba8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fDeltarow = (mng_fptr)mng_delta_rgba16_rgba16; break; } #endif } } } else if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE) ) { if ((pBufdelta->iColortype == 2) || (pBufdelta->iColortype == 10)) { switch (pBuftarget->iBitdepth) { case 8 : { pData->fDeltarow = (mng_fptr)mng_delta_rgba8_rgb8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fDeltarow = (mng_fptr)mng_delta_rgba16_rgb16; break; } #endif } } } else if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE) ) { if ((pBufdelta->iColortype == 0) || (pBufdelta->iColortype == 3)) { switch (pBuftarget->iBitdepth) { case 8 : { pData->fDeltarow = (mng_fptr)mng_delta_rgba8_a8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fDeltarow = (mng_fptr)mng_delta_rgba16_a16; break; } #endif } } } break; } } if (pData->fDeltarow) /* do we need to take action ? */ { pData->iPass = -1; /* setup row dimensions and stuff */ pData->iRow = pData->iDeltaBlocky; pData->iRowinc = 1; pData->iCol = pData->iDeltaBlockx; pData->iColinc = 1; pData->iRowsamples = pBufdelta->iWidth; pData->iRowsize = pBuftarget->iRowsize; /* indicate where to retrieve & where to store */ pData->pRetrieveobj = (mng_objectp)pDelta; pData->pStoreobj = (mng_objectp)pTarget; pSaveRGBA = pData->pRGBArow; /* save current temp-buffer! */ /* get a temporary row-buffer */ MNG_ALLOC (pData, pData->pRGBArow, (pBufdelta->iRowsize << 1)); iY = 0; /* this is where we start */ iRetcode = MNG_NOERROR; /* still oke for now */ while ((!iRetcode) && (iY < pBufdelta->iHeight)) { /* get a row */ mng_uint8p pWork = pBufdelta->pImgdata + (iY * pBufdelta->iRowsize); MNG_COPY (pData->pRGBArow, pWork, pBufdelta->iRowsize); if (pData->fScalerow) /* scale it (if necessary) */ iRetcode = ((mng_scalerow)pData->fScalerow) (pData); if (!iRetcode) /* and... execute it */ iRetcode = ((mng_deltarow)pData->fDeltarow) (pData); if (!iRetcode) /* adjust variables for next row */ iRetcode = mng_next_row (pData); iY++; /* and next line */ } /* drop the temporary row-buffer */ MNG_FREE (pData, pData->pRGBArow, (pBufdelta->iRowsize << 1)); pData->pRGBArow = pSaveRGBA; /* restore saved temp-buffer! */ if (iRetcode) /* on error bail out */ return iRetcode; } else MNG_ERROR (pData, MNG_INVALIDDELTA); } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_EXECUTE_DELTA_IMAGE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_DELTA_PNG */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE MNG_LOCAL mng_retcode save_state (mng_datap pData) { mng_savedatap pSave; mng_imagep pImage; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SAVE_STATE, MNG_LC_START); #endif if (pData->pSavedata) /* sanity check */ MNG_ERROR (pData, MNG_INTERNALERROR); /* get a buffer for saving */ MNG_ALLOC (pData, pData->pSavedata, sizeof (mng_savedata)); pSave = pData->pSavedata; /* address it more directly */ /* and copy global data from the main struct */ #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) pSave->bHasglobalPLTE = pData->bHasglobalPLTE; pSave->bHasglobalTRNS = pData->bHasglobalTRNS; pSave->bHasglobalGAMA = pData->bHasglobalGAMA; pSave->bHasglobalCHRM = pData->bHasglobalCHRM; pSave->bHasglobalSRGB = pData->bHasglobalSRGB; pSave->bHasglobalICCP = pData->bHasglobalICCP; pSave->bHasglobalBKGD = pData->bHasglobalBKGD; #endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */ #ifndef MNG_SKIPCHUNK_BACK pSave->iBACKred = pData->iBACKred; pSave->iBACKgreen = pData->iBACKgreen; pSave->iBACKblue = pData->iBACKblue; pSave->iBACKmandatory = pData->iBACKmandatory; pSave->iBACKimageid = pData->iBACKimageid; pSave->iBACKtile = pData->iBACKtile; #endif #ifndef MNG_SKIPCHUNK_FRAM pSave->iFRAMmode = pData->iFRAMmode; pSave->iFRAMdelay = pData->iFRAMdelay; pSave->iFRAMtimeout = pData->iFRAMtimeout; pSave->bFRAMclipping = pData->bFRAMclipping; pSave->iFRAMclipl = pData->iFRAMclipl; pSave->iFRAMclipr = pData->iFRAMclipr; pSave->iFRAMclipt = pData->iFRAMclipt; pSave->iFRAMclipb = pData->iFRAMclipb; #endif pSave->iGlobalPLTEcount = pData->iGlobalPLTEcount; MNG_COPY (pSave->aGlobalPLTEentries, pData->aGlobalPLTEentries, sizeof (mng_rgbpaltab)); pSave->iGlobalTRNSrawlen = pData->iGlobalTRNSrawlen; MNG_COPY (pSave->aGlobalTRNSrawdata, pData->aGlobalTRNSrawdata, 256); pSave->iGlobalGamma = pData->iGlobalGamma; #ifndef MNG_SKIPCHUNK_cHRM pSave->iGlobalWhitepointx = pData->iGlobalWhitepointx; pSave->iGlobalWhitepointy = pData->iGlobalWhitepointy; pSave->iGlobalPrimaryredx = pData->iGlobalPrimaryredx; pSave->iGlobalPrimaryredy = pData->iGlobalPrimaryredy; pSave->iGlobalPrimarygreenx = pData->iGlobalPrimarygreenx; pSave->iGlobalPrimarygreeny = pData->iGlobalPrimarygreeny; pSave->iGlobalPrimarybluex = pData->iGlobalPrimarybluex; pSave->iGlobalPrimarybluey = pData->iGlobalPrimarybluey; #endif #ifndef MNG_SKIPCHUNK_sRGB pSave->iGlobalRendintent = pData->iGlobalRendintent; #endif #ifndef MNG_SKIPCHUNK_iCCP pSave->iGlobalProfilesize = pData->iGlobalProfilesize; if (pSave->iGlobalProfilesize) /* has a profile ? */ { /* then copy that ! */ MNG_ALLOC (pData, pSave->pGlobalProfile, pSave->iGlobalProfilesize); MNG_COPY (pSave->pGlobalProfile, pData->pGlobalProfile, pSave->iGlobalProfilesize); } #endif #ifndef MNG_SKIPCHUNK_bKGD pSave->iGlobalBKGDred = pData->iGlobalBKGDred; pSave->iGlobalBKGDgreen = pData->iGlobalBKGDgreen; pSave->iGlobalBKGDblue = pData->iGlobalBKGDblue; #endif /* freeze current image objects */ pImage = (mng_imagep)pData->pFirstimgobj; while (pImage) { /* freeze the object AND its buffer */ pImage->bFrozen = MNG_TRUE; pImage->pImgbuf->bFrozen = MNG_TRUE; /* neeeext */ pImage = (mng_imagep)pImage->sHeader.pNext; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SAVE_STATE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_reset_objzero (mng_datap pData) { mng_imagep pImage = (mng_imagep)pData->pObjzero; mng_retcode iRetcode = mng_reset_object_details (pData, pImage, 0, 0, 0, 0, 0, 0, 0, MNG_TRUE); if (iRetcode) /* on error bail out */ return iRetcode; pImage->bVisible = MNG_TRUE; pImage->bViewable = MNG_TRUE; pImage->iPosx = 0; pImage->iPosy = 0; pImage->bClipped = MNG_FALSE; pImage->iClipl = 0; pImage->iClipr = 0; pImage->iClipt = 0; pImage->iClipb = 0; #ifndef MNG_SKIPCHUNK_MAGN pImage->iMAGN_MethodX = 0; pImage->iMAGN_MethodY = 0; pImage->iMAGN_MX = 0; pImage->iMAGN_MY = 0; pImage->iMAGN_ML = 0; pImage->iMAGN_MR = 0; pImage->iMAGN_MT = 0; pImage->iMAGN_MB = 0; #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode restore_state (mng_datap pData) { #ifndef MNG_SKIPCHUNK_SAVE mng_savedatap pSave; #endif mng_imagep pImage; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_STATE, MNG_LC_START); #endif /* restore object 0 status !!! */ iRetcode = mng_reset_objzero (pData); if (iRetcode) /* on error bail out */ return iRetcode; /* fresh cycle; fake no frames done yet */ pData->bFramedone = MNG_FALSE; #ifndef MNG_SKIPCHUNK_SAVE if (pData->pSavedata) /* do we have a saved state ? */ { pSave = pData->pSavedata; /* address it more directly */ /* and copy it back to the main struct */ #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) pData->bHasglobalPLTE = pSave->bHasglobalPLTE; pData->bHasglobalTRNS = pSave->bHasglobalTRNS; pData->bHasglobalGAMA = pSave->bHasglobalGAMA; pData->bHasglobalCHRM = pSave->bHasglobalCHRM; pData->bHasglobalSRGB = pSave->bHasglobalSRGB; pData->bHasglobalICCP = pSave->bHasglobalICCP; pData->bHasglobalBKGD = pSave->bHasglobalBKGD; #endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */ #ifndef MNG_SKIPCHUNK_BACK pData->iBACKred = pSave->iBACKred; pData->iBACKgreen = pSave->iBACKgreen; pData->iBACKblue = pSave->iBACKblue; pData->iBACKmandatory = pSave->iBACKmandatory; pData->iBACKimageid = pSave->iBACKimageid; pData->iBACKtile = pSave->iBACKtile; #endif #ifndef MNG_SKIPCHUNK_FRAM pData->iFRAMmode = pSave->iFRAMmode; /* pData->iFRAMdelay = pSave->iFRAMdelay; */ pData->iFRAMtimeout = pSave->iFRAMtimeout; pData->bFRAMclipping = pSave->bFRAMclipping; pData->iFRAMclipl = pSave->iFRAMclipl; pData->iFRAMclipr = pSave->iFRAMclipr; pData->iFRAMclipt = pSave->iFRAMclipt; pData->iFRAMclipb = pSave->iFRAMclipb; /* NOOOOOOOOOOOO */ /* pData->iFramemode = pSave->iFRAMmode; pData->iFramedelay = pSave->iFRAMdelay; pData->iFrametimeout = pSave->iFRAMtimeout; pData->bFrameclipping = pSave->bFRAMclipping; pData->iFrameclipl = pSave->iFRAMclipl; pData->iFrameclipr = pSave->iFRAMclipr; pData->iFrameclipt = pSave->iFRAMclipt; pData->iFrameclipb = pSave->iFRAMclipb; */ /* pData->iNextdelay = pSave->iFRAMdelay; */ pData->iNextdelay = pData->iFramedelay; #endif pData->iGlobalPLTEcount = pSave->iGlobalPLTEcount; MNG_COPY (pData->aGlobalPLTEentries, pSave->aGlobalPLTEentries, sizeof (mng_rgbpaltab)); pData->iGlobalTRNSrawlen = pSave->iGlobalTRNSrawlen; MNG_COPY (pData->aGlobalTRNSrawdata, pSave->aGlobalTRNSrawdata, 256); pData->iGlobalGamma = pSave->iGlobalGamma; #ifndef MNG_SKIPCHUNK_cHRM pData->iGlobalWhitepointx = pSave->iGlobalWhitepointx; pData->iGlobalWhitepointy = pSave->iGlobalWhitepointy; pData->iGlobalPrimaryredx = pSave->iGlobalPrimaryredx; pData->iGlobalPrimaryredy = pSave->iGlobalPrimaryredy; pData->iGlobalPrimarygreenx = pSave->iGlobalPrimarygreenx; pData->iGlobalPrimarygreeny = pSave->iGlobalPrimarygreeny; pData->iGlobalPrimarybluex = pSave->iGlobalPrimarybluex; pData->iGlobalPrimarybluey = pSave->iGlobalPrimarybluey; #endif pData->iGlobalRendintent = pSave->iGlobalRendintent; #ifndef MNG_SKIPCHUNK_iCCP pData->iGlobalProfilesize = pSave->iGlobalProfilesize; if (pData->iGlobalProfilesize) /* has a profile ? */ { /* then copy that ! */ MNG_ALLOC (pData, pData->pGlobalProfile, pData->iGlobalProfilesize); MNG_COPY (pData->pGlobalProfile, pSave->pGlobalProfile, pData->iGlobalProfilesize); } #endif #ifndef MNG_SKIPCHUNK_bKGD pData->iGlobalBKGDred = pSave->iGlobalBKGDred; pData->iGlobalBKGDgreen = pSave->iGlobalBKGDgreen; pData->iGlobalBKGDblue = pSave->iGlobalBKGDblue; #endif } else /* no saved-data; so reset the lot */ #endif /* SKIPCHUNK_SAVE */ { #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) pData->bHasglobalPLTE = MNG_FALSE; pData->bHasglobalTRNS = MNG_FALSE; pData->bHasglobalGAMA = MNG_FALSE; pData->bHasglobalCHRM = MNG_FALSE; pData->bHasglobalSRGB = MNG_FALSE; pData->bHasglobalICCP = MNG_FALSE; pData->bHasglobalBKGD = MNG_FALSE; #endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */ #ifndef MNG_SKIPCHUNK_TERM if (!pData->bMisplacedTERM) /* backward compatible ugliness !!! */ { pData->iBACKred = 0; pData->iBACKgreen = 0; pData->iBACKblue = 0; pData->iBACKmandatory = 0; pData->iBACKimageid = 0; pData->iBACKtile = 0; } #endif #ifndef MNG_SKIPCHUNK_FRAM pData->iFRAMmode = 1; /* pData->iFRAMdelay = 1; */ pData->iFRAMtimeout = 0x7fffffffl; pData->bFRAMclipping = MNG_FALSE; pData->iFRAMclipl = 0; pData->iFRAMclipr = 0; pData->iFRAMclipt = 0; pData->iFRAMclipb = 0; /* NOOOOOOOOOOOO */ /* pData->iFramemode = 1; pData->iFramedelay = 1; pData->iFrametimeout = 0x7fffffffl; pData->bFrameclipping = MNG_FALSE; pData->iFrameclipl = 0; pData->iFrameclipr = 0; pData->iFrameclipt = 0; pData->iFrameclipb = 0; */ /* pData->iNextdelay = 1; */ pData->iNextdelay = pData->iFramedelay; #endif pData->iGlobalPLTEcount = 0; pData->iGlobalTRNSrawlen = 0; pData->iGlobalGamma = 0; #ifndef MNG_SKIPCHUNK_cHRM pData->iGlobalWhitepointx = 0; pData->iGlobalWhitepointy = 0; pData->iGlobalPrimaryredx = 0; pData->iGlobalPrimaryredy = 0; pData->iGlobalPrimarygreenx = 0; pData->iGlobalPrimarygreeny = 0; pData->iGlobalPrimarybluex = 0; pData->iGlobalPrimarybluey = 0; #endif pData->iGlobalRendintent = 0; #ifndef MNG_SKIPCHUNK_iCCP if (pData->iGlobalProfilesize) /* free a previous profile ? */ MNG_FREE (pData, pData->pGlobalProfile, pData->iGlobalProfilesize); pData->iGlobalProfilesize = 0; #endif #ifndef MNG_SKIPCHUNK_bKGD pData->iGlobalBKGDred = 0; pData->iGlobalBKGDgreen = 0; pData->iGlobalBKGDblue = 0; #endif } #ifndef MNG_SKIPCHUNK_TERM if (!pData->bMisplacedTERM) /* backward compatible ugliness !!! */ { pImage = (mng_imagep)pData->pFirstimgobj; /* drop un-frozen image objects */ while (pImage) { mng_imagep pNext = (mng_imagep)pImage->sHeader.pNext; if (!pImage->bFrozen) /* is it un-frozen ? */ { mng_imagep pPrev = (mng_imagep)pImage->sHeader.pPrev; if (pPrev) /* unlink it */ pPrev->sHeader.pNext = pNext; else pData->pFirstimgobj = pNext; if (pNext) pNext->sHeader.pPrev = pPrev; else pData->pLastimgobj = pPrev; if (pImage->pImgbuf->bFrozen) /* buffer frozen ? */ { if (pImage->pImgbuf->iRefcount < 2) MNG_ERROR (pData, MNG_INTERNALERROR); /* decrease ref counter */ pImage->pImgbuf->iRefcount--; /* just cleanup the object then */ MNG_FREEX (pData, pImage, sizeof (mng_image)); } else { /* free the image buffer */ iRetcode = mng_free_imagedataobject (pData, pImage->pImgbuf); /* and cleanup the object */ MNG_FREEX (pData, pImage, sizeof (mng_image)); if (iRetcode) /* on error bail out */ return iRetcode; } } pImage = pNext; /* neeeext */ } } #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_STATE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ /* * * */ /* * General display processing routine * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_process_display (mng_datap pData) { mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY, MNG_LC_START); #endif if (!pData->iBreakpoint) /* not broken previously ? */ { if ((pData->iRequestframe) || (pData->iRequestlayer) || (pData->iRequesttime)) { pData->bSearching = MNG_TRUE; /* indicate we're searching */ iRetcode = clear_canvas (pData); /* make the canvas virgin black ?!? */ if (iRetcode) /* on error bail out */ return iRetcode; /* let's start from the top, shall we */ pData->pCurraniobj = pData->pFirstaniobj; } } do /* process the objects */ { if (pData->bSearching) /* clear timer-flag when searching !!! */ pData->bTimerset = MNG_FALSE; /* do we need to finish something first ? */ if ((pData->iBreakpoint) && (pData->iBreakpoint < 99)) { switch (pData->iBreakpoint) /* return to broken display routine */ { #ifndef MNG_SKIPCHUNK_FRAM case 1 : { iRetcode = mng_process_display_fram2 (pData); break; } #endif #ifndef MNG_SKIPCHUNK_SHOW case 3 : ; /* same as 4 !!! */ case 4 : { iRetcode = mng_process_display_show (pData); break; } #endif #ifndef MNG_SKIPCHUNK_CLON case 5 : { iRetcode = mng_process_display_clon2 (pData); break; } #endif #ifndef MNG_SKIPCHUNK_MAGN case 9 : { iRetcode = mng_process_display_magn2 (pData); break; } case 10 : { iRetcode = mng_process_display_mend2 (pData); break; } #endif #ifndef MNG_SKIPCHUNK_PAST case 11 : { iRetcode = mng_process_display_past2 (pData); break; } #endif default : MNG_ERROR (pData, MNG_INTERNALERROR); } } else { if (pData->pCurraniobj) iRetcode = ((mng_object_headerp)pData->pCurraniobj)->fProcess (pData, pData->pCurraniobj); } if (!pData->bTimerset) /* reset breakpoint flag ? */ pData->iBreakpoint = 0; /* can we advance to next object ? */ if ((!iRetcode) && (pData->pCurraniobj) && (!pData->bTimerset) && (!pData->bSectionwait)) { pData->pCurraniobj = ((mng_object_headerp)pData->pCurraniobj)->pNext; /* MEND processing to be done ? */ if ((pData->eImagetype == mng_it_mng) && (!pData->pCurraniobj)) iRetcode = mng_process_display_mend (pData); if (!pData->pCurraniobj) /* refresh after last image ? */ pData->bNeedrefresh = MNG_TRUE; } if (pData->bSearching) /* are we looking for something ? */ { if ((pData->iRequestframe) && (pData->iRequestframe <= pData->iFrameseq)) { pData->iRequestframe = 0; /* found the frame ! */ pData->bSearching = MNG_FALSE; } else if ((pData->iRequestlayer) && (pData->iRequestlayer <= pData->iLayerseq)) { pData->iRequestlayer = 0; /* found the layer ! */ pData->bSearching = MNG_FALSE; } else if ((pData->iRequesttime) && (pData->iRequesttime <= pData->iFrametime)) { pData->iRequesttime = 0; /* found the playtime ! */ pData->bSearching = MNG_FALSE; } } } /* until error or a break or no more objects */ while ((!iRetcode) && (pData->pCurraniobj) && (((pData->bRunning) && (!pData->bTimerset)) || (pData->bSearching)) && (!pData->bSectionwait) && (!pData->bFreezing)); if (iRetcode) /* on error bail out */ return iRetcode; /* refresh needed ? */ if ((!pData->bTimerset) && (pData->bNeedrefresh)) { iRetcode = mng_display_progressive_refresh (pData, 1); if (iRetcode) /* on error bail out */ return iRetcode; } /* timer break ? */ if ((pData->bTimerset) && (!pData->iBreakpoint)) pData->iBreakpoint = 99; else if (!pData->bTimerset) pData->iBreakpoint = 0; /* reset if no timer break */ if ((!pData->bTimerset) && (!pData->pCurraniobj)) pData->bRunning = MNG_FALSE; /* all done now ! */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ /* * * */ /* * Chunk display processing routines * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT png_imgtype mng_png_imgtype(mng_uint8 colortype, mng_uint8 bitdepth) { png_imgtype ret; switch (bitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1: { png_imgtype imgtype[]={png_g1,png_none,png_none,png_idx1}; ret=imgtype[colortype]; break; } case 2: { png_imgtype imgtype[]={png_g2,png_none,png_none,png_idx2}; ret=imgtype[colortype]; break; } case 4: { png_imgtype imgtype[]={png_g4,png_none,png_none,png_idx4}; ret=imgtype[colortype]; break; } #endif case 8: { png_imgtype imgtype[]={png_g8,png_none,png_rgb8,png_idx8,png_ga8, png_none,png_rgba8}; ret=imgtype[colortype]; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16: { png_imgtype imgtype[]={png_g16,png_none,png_rgb16,png_none,png_ga16, png_none,png_rgba16}; ret=imgtype[colortype]; break; } #endif default: ret=png_none; break; } return (ret); } #endif /* MNG_OPTIMIZE_FOOTPRINT_INIT */ /* ************************************************************************** */ mng_retcode mng_process_display_ihdr (mng_datap pData) { /* address the current "object" if any */ mng_imagep pImage = (mng_imagep)pData->pCurrentobj; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_IHDR, MNG_LC_START); #endif if (!pData->bHasDHDR) { pData->fInitrowproc = MNG_NULL; /* do nothing by default */ pData->fDisplayrow = MNG_NULL; pData->fCorrectrow = MNG_NULL; pData->fStorerow = MNG_NULL; pData->fProcessrow = MNG_NULL; pData->fDifferrow = MNG_NULL; pData->pStoreobj = MNG_NULL; } if (!pData->iBreakpoint) /* not previously broken ? */ { mng_retcode iRetcode = MNG_NOERROR; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* is a delta-image ? */ { if (pData->iDeltatype == MNG_DELTATYPE_REPLACE) iRetcode = mng_reset_object_details (pData, (mng_imagep)pData->pDeltaImage, pData->iDatawidth, pData->iDataheight, pData->iBitdepth, pData->iColortype, pData->iCompression, pData->iFilter, pData->iInterlace, MNG_TRUE); else if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { ((mng_imagep)pData->pDeltaImage)->pImgbuf->iPixelsampledepth = pData->iBitdepth; ((mng_imagep)pData->pDeltaImage)->pImgbuf->iAlphasampledepth = pData->iBitdepth; } else if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE) ) ((mng_imagep)pData->pDeltaImage)->pImgbuf->iAlphasampledepth = pData->iBitdepth; else if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE) ) ((mng_imagep)pData->pDeltaImage)->pImgbuf->iPixelsampledepth = pData->iBitdepth; if (!iRetcode) { /* process immediately if bitdepth & colortype are equal */ pData->bDeltaimmediate = (mng_bool)((pData->iBitdepth == ((mng_imagep)pData->pDeltaImage)->pImgbuf->iBitdepth ) && (pData->iColortype == ((mng_imagep)pData->pDeltaImage)->pImgbuf->iColortype) ); /* be sure to reset object 0 */ iRetcode = mng_reset_object_details (pData, (mng_imagep)pData->pObjzero, pData->iDatawidth, pData->iDataheight, pData->iBitdepth, pData->iColortype, pData->iCompression, pData->iFilter, pData->iInterlace, MNG_TRUE); } } else #endif { if (pImage) /* update object buffer ? */ iRetcode = mng_reset_object_details (pData, pImage, pData->iDatawidth, pData->iDataheight, pData->iBitdepth, pData->iColortype, pData->iCompression, pData->iFilter, pData->iInterlace, MNG_TRUE); else iRetcode = mng_reset_object_details (pData, (mng_imagep)pData->pObjzero, pData->iDatawidth, pData->iDataheight, pData->iBitdepth, pData->iColortype, pData->iCompression, pData->iFilter, pData->iInterlace, MNG_TRUE); } if (iRetcode) /* on error bail out */ return iRetcode; } #ifndef MNG_NO_DELTA_PNG if (!pData->bHasDHDR) #endif { if (pImage) /* real object ? */ pData->pStoreobj = pImage; /* tell the row routines */ else /* otherwise use object 0 */ pData->pStoreobj = pData->pObjzero; #if !defined(MNG_INCLUDE_MPNG_PROPOSAL) && !defined(MNG_INCLUDE_ANG_PROPOSAL) if ( /* display "on-the-fly" ? */ #ifndef MNG_SKIPCHUNK_MAGN (((mng_imagep)pData->pStoreobj)->iMAGN_MethodX == 0) && (((mng_imagep)pData->pStoreobj)->iMAGN_MethodY == 0) && #endif ( (pData->eImagetype == mng_it_png ) || (((mng_imagep)pData->pStoreobj)->bVisible) ) ) { next_layer (pData); /* that's a new layer then ! */ if (pData->bTimerset) /* timer break ? */ pData->iBreakpoint = 2; else { pData->iBreakpoint = 0; /* anything to display ? */ if ((pData->iDestr > pData->iDestl) && (pData->iDestb > pData->iDestt)) set_display_routine (pData); /* then determine display routine */ } } #endif } if (!pData->bTimerset) /* no timer break ? */ { #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT pData->fInitrowproc = (mng_fptr)mng_init_rowproc; pData->ePng_imgtype=mng_png_imgtype(pData->iColortype,pData->iBitdepth); #else switch (pData->iColortype) /* determine row initialization routine */ { case 0 : { /* gray */ switch (pData->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g1_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g1_i; break; } case 2 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g2_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g2_i; break; } case 4 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g4_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g4_i; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g16_i; break; } #endif } break; } case 2 : { /* rgb */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgb8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgb8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgb16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgb16_i; break; } #endif } break; } case 3 : { /* indexed */ switch (pData->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx1_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx1_i; break; } case 2 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx2_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx2_i; break; } case 4 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx4_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx4_i; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx8_i; break; } } break; } case 4 : { /* gray+alpha */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_ga8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_ga8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_ga16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_ga16_i; break; } #endif } break; } case 6 : { /* rgb+alpha */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgba8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgba8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgba16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgba16_i; break; } #endif } break; } } #endif /* MNG_OPTIMIZE_FOOTPRINT_INIT */ pData->iFilterofs = 0; /* determine filter characteristics */ pData->iLevel0 = 0; /* default levels */ pData->iLevel1 = 0; pData->iLevel2 = 0; pData->iLevel3 = 0; #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) { switch (pData->iColortype) { case 0 : { if (pData->iBitdepth <= 8) pData->iFilterofs = 1; else pData->iFilterofs = 2; break; } case 2 : { if (pData->iBitdepth <= 8) pData->iFilterofs = 3; else pData->iFilterofs = 6; break; } case 3 : { pData->iFilterofs = 1; break; } case 4 : { if (pData->iBitdepth <= 8) pData->iFilterofs = 2; else pData->iFilterofs = 4; break; } case 6 : { if (pData->iBitdepth <= 8) pData->iFilterofs = 4; else pData->iFilterofs = 8; break; } } } #endif #ifdef FILTER193 /* no adaptive filtering ? */ if (pData->iFilter == MNG_FILTER_NOFILTER) pData->iPixelofs = pData->iFilterofs; else #endif pData->iPixelofs = pData->iFilterofs + 1; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_IHDR, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL mng_retcode mng_process_display_mpng (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MPNG, MNG_LC_START); #endif pData->iAlphadepth = 8; /* assume transparency !! */ if (pData->fProcessheader) /* inform the app (creating the output canvas) ? */ { pData->iWidth = ((mng_mpng_objp)pData->pMPNG)->iFramewidth; pData->iHeight = ((mng_mpng_objp)pData->pMPNG)->iFrameheight; if (!pData->fProcessheader (((mng_handle)pData), pData->iWidth, pData->iHeight)) MNG_ERROR (pData, MNG_APPMISCERROR); } next_layer (pData); /* first mPNG layer then ! */ pData->bTimerset = MNG_FALSE; pData->iBreakpoint = 0; if ((pData->iDestr > pData->iDestl) && (pData->iDestb > pData->iDestt)) set_display_routine (pData); /* then determine display routine */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MPNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL mng_retcode mng_process_display_ang (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_ANG, MNG_LC_START); #endif if (pData->fProcessheader) /* inform the app (creating the output canvas) ? */ { if (!pData->fProcessheader (((mng_handle)pData), pData->iWidth, pData->iHeight)) MNG_ERROR (pData, MNG_APPMISCERROR); } next_layer (pData); /* first mPNG layer then ! */ pData->bTimerset = MNG_FALSE; pData->iBreakpoint = 0; if ((pData->iDestr > pData->iDestl) && (pData->iDestb > pData->iDestt)) set_display_routine (pData); /* then determine display routine */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_ANG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_idat (mng_datap pData, mng_uint32 iRawlen, mng_uint8p pRawdata) #else mng_retcode mng_process_display_idat (mng_datap pData) #endif { mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_IDAT, MNG_LC_START); #endif #if defined(MNG_INCLUDE_MPNG_PROPOSAL) || defined(MNG_INCLUDE_ANG_PROPOSAL) if ((pData->eImagetype == mng_it_png) && (pData->iLayerseq <= 0)) { if (pData->fProcessheader) /* inform the app (creating the output canvas) ? */ if (!pData->fProcessheader (((mng_handle)pData), pData->iWidth, pData->iHeight)) MNG_ERROR (pData, MNG_APPMISCERROR); next_layer (pData); /* first regular PNG layer then ! */ pData->bTimerset = MNG_FALSE; pData->iBreakpoint = 0; if ((pData->iDestr > pData->iDestl) && (pData->iDestb > pData->iDestt)) set_display_routine (pData); /* then determine display routine */ } #endif if (pData->bRestorebkgd) /* need to restore the background ? */ { pData->bRestorebkgd = MNG_FALSE; iRetcode = load_bkgdlayer (pData); if (iRetcode) /* on error bail out */ return iRetcode; pData->iLayerseq++; /* and it counts as a layer then ! */ } if (pData->fInitrowproc) /* need to initialize row processing? */ { iRetcode = ((mng_initrowproc)pData->fInitrowproc) (pData); pData->fInitrowproc = MNG_NULL; /* only call this once !!! */ } if ((!iRetcode) && (!pData->bInflating)) /* initialize inflate */ iRetcode = mngzlib_inflateinit (pData); if (!iRetcode) /* all ok? then inflate, my man */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mngzlib_inflaterows (pData, iRawlen, pRawdata); #else iRetcode = mngzlib_inflaterows (pData, pData->iRawlen, pData->pRawdata); #endif if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_IDAT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_process_display_iend (mng_datap pData) { mng_retcode iRetcode, iRetcode2; mng_bool bDodisplay = MNG_FALSE; mng_bool bMagnify = MNG_FALSE; mng_bool bCleanup = (mng_bool)(pData->iBreakpoint != 0); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_IEND, MNG_LC_START); #endif #ifdef MNG_INCLUDE_JNG /* progressive+alpha JNG can be displayed now */ if ( (pData->bHasJHDR ) && ( (pData->bJPEGprogressive) || (pData->bJPEGprogressive2)) && ( (pData->eImagetype == mng_it_jng ) || (((mng_imagep)pData->pStoreobj)->bVisible) ) && ( (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAYA ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLORA) ) ) bDodisplay = MNG_TRUE; #endif #ifndef MNG_SKIPCHUNK_MAGN if ( (pData->pStoreobj) && /* on-the-fly magnification ? */ ( (((mng_imagep)pData->pStoreobj)->iMAGN_MethodX) || (((mng_imagep)pData->pStoreobj)->iMAGN_MethodY) ) ) bMagnify = MNG_TRUE; #endif if ((pData->bHasBASI) || /* was it a BASI stream */ (bDodisplay) || /* or should we display the JNG */ #ifndef MNG_SKIPCHUNK_MAGN (bMagnify) || /* or should we magnify it */ #endif /* or did we get broken here last time ? */ ((pData->iBreakpoint) && (pData->iBreakpoint != 8))) { mng_imagep pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* or was it object 0 ? */ pImage = (mng_imagep)pData->pObjzero; /* display it now then ? */ if ((pImage->bVisible) && (pImage->bViewable)) { /* ok, so do it */ iRetcode = mng_display_image (pData, pImage, bDodisplay); if (iRetcode) /* on error bail out */ return iRetcode; if (pData->bTimerset) /* timer break ? */ pData->iBreakpoint = 6; } } #ifndef MNG_NO_DELTA_PNG else if ((pData->bHasDHDR) || /* was it a DHDR stream */ (pData->iBreakpoint == 8)) /* or did we get broken here last time ? */ { mng_imagep pImage = (mng_imagep)pData->pDeltaImage; if (!pData->iBreakpoint) { /* perform the delta operations needed */ iRetcode = mng_execute_delta_image (pData, pImage, (mng_imagep)pData->pObjzero); if (iRetcode) /* on error bail out */ return iRetcode; } /* display it now then ? */ if ((pImage->bVisible) && (pImage->bViewable)) { /* ok, so do it */ iRetcode = mng_display_image (pData, pImage, MNG_FALSE); if (iRetcode) /* on error bail out */ return iRetcode; if (pData->bTimerset) /* timer break ? */ pData->iBreakpoint = 8; } } #endif if (!pData->bTimerset) /* can we continue ? */ { pData->iBreakpoint = 0; /* clear this flag now ! */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL if (pData->eImagetype == mng_it_mpng) { pData->pCurraniobj = pData->pFirstaniobj; } else #endif #ifdef MNG_INCLUDE_ANG_PROPOSAL if (pData->eImagetype == mng_it_ang) { pData->pCurraniobj = pData->pFirstaniobj; } else #endif { /* cleanup object 0 */ mng_reset_object_details (pData, (mng_imagep)pData->pObjzero, 0, 0, 0, 0, 0, 0, 0, MNG_TRUE); } if (pData->bInflating) /* if we've been inflating */ { /* cleanup row-processing, */ iRetcode = mng_cleanup_rowproc (pData); /* also cleanup inflate! */ iRetcode2 = mngzlib_inflatefree (pData); if (iRetcode) /* on error bail out */ return iRetcode; if (iRetcode2) return iRetcode2; } #ifdef MNG_INCLUDE_JNG if (pData->bJPEGdecompress) /* if we've been decompressing JDAT */ { /* cleanup row-processing, */ iRetcode = mng_cleanup_rowproc (pData); /* also cleanup decompress! */ iRetcode2 = mngjpeg_decompressfree (pData); if (iRetcode) /* on error bail out */ return iRetcode; if (iRetcode2) return iRetcode2; } if (pData->bJPEGdecompress2) /* if we've been decompressing JDAA */ { /* cleanup row-processing, */ iRetcode = mng_cleanup_rowproc (pData); /* also cleanup decompress! */ iRetcode2 = mngjpeg_decompressfree2 (pData); if (iRetcode) /* on error bail out */ return iRetcode; if (iRetcode2) return iRetcode2; } #endif if (bCleanup) /* if we got broken last time we need to cleanup */ { pData->bHasIHDR = MNG_FALSE; /* IEND signals the end for most ... */ pData->bHasBASI = MNG_FALSE; pData->bHasDHDR = MNG_FALSE; #ifdef MNG_INCLUDE_JNG pData->bHasJHDR = MNG_FALSE; pData->bHasJSEP = MNG_FALSE; pData->bHasJDAA = MNG_FALSE; pData->bHasJDAT = MNG_FALSE; #endif pData->bHasPLTE = MNG_FALSE; pData->bHasTRNS = MNG_FALSE; pData->bHasGAMA = MNG_FALSE; pData->bHasCHRM = MNG_FALSE; pData->bHasSRGB = MNG_FALSE; pData->bHasICCP = MNG_FALSE; pData->bHasBKGD = MNG_FALSE; pData->bHasIDAT = MNG_FALSE; } /* if the image was displayed on the fly, */ /* we'll have to make the app refresh */ if ((pData->eImagetype != mng_it_mng) && (pData->fDisplayrow)) pData->bNeedrefresh = MNG_TRUE; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_IEND, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ /* change in the MNG spec with regards to TERM delay & interframe_delay as proposed by Adam M. Costello (option 4) and finalized by official vote during december 2002 / check the 'mng-list' archives for more details */ mng_retcode mng_process_display_mend (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MEND, MNG_LC_START); #endif #ifdef MNG_SUPPORT_DYNAMICMNG if (pData->bStopafterseek) /* need to stop after this ? */ { pData->bFreezing = MNG_TRUE; /* stop processing on this one */ pData->bRunningevent = MNG_FALSE; pData->bStopafterseek = MNG_FALSE; pData->bNeedrefresh = MNG_TRUE; /* make sure the last bit is displayed ! */ } #endif #ifndef MNG_SKIPCHUNK_TERM /* TERM processed ? */ if ((pData->bDisplaying) && (pData->bRunning) && (pData->bHasTERM) && (pData->pTermaniobj)) { mng_retcode iRetcode; mng_ani_termp pTERM; /* get the right animation object ! */ pTERM = (mng_ani_termp)pData->pTermaniobj; pData->iIterations++; /* increase iteration count */ switch (pTERM->iTermaction) /* determine what to do! */ { case 0 : { /* show last frame indefinitly */ break; /* piece of cake, that is... */ } case 1 : { /* cease displaying anything */ /* max(1, TERM delay, interframe_delay) */ #ifndef MNG_SKIPCHUNK_FRAM if (pTERM->iDelay > pData->iFramedelay) pData->iFramedelay = pTERM->iDelay; if (!pData->iFramedelay) pData->iFramedelay = 1; #endif iRetcode = interframe_delay (pData); /* no interframe_delay? then fake it */ if ((!iRetcode) && (!pData->bTimerset)) iRetcode = set_delay (pData, 1); if (iRetcode) return iRetcode; pData->iBreakpoint = 10; break; } case 2 : { /* show first image after TERM */ iRetcode = restore_state (pData); if (iRetcode) /* on error bail out */ return iRetcode; /* notify the app ? */ if (pData->fProcessmend) if (!pData->fProcessmend ((mng_handle)pData, pData->iIterations, 0)) MNG_ERROR (pData, MNG_APPMISCERROR); /* show first frame after TERM chunk */ pData->pCurraniobj = pTERM; pData->bOnlyfirstframe = MNG_TRUE; pData->iFramesafterTERM = 0; /* max(1, TERM delay, interframe_delay) */ #ifndef MNG_SKIPCHUNK_FRAM if (pTERM->iDelay > pData->iFramedelay) pData->iFramedelay = pTERM->iDelay; if (!pData->iFramedelay) pData->iFramedelay = 1; #endif break; } case 3 : { /* repeat */ if ((pTERM->iItermax) && (pTERM->iItermax < 0x7FFFFFFF)) pTERM->iItermax--; if (pTERM->iItermax) /* go back to TERM ? */ { /* restore to initial or SAVE state */ iRetcode = restore_state (pData); if (iRetcode) /* on error bail out */ return iRetcode; /* notify the app ? */ if (pData->fProcessmend) if (!pData->fProcessmend ((mng_handle)pData, pData->iIterations, pTERM->iItermax)) MNG_ERROR (pData, MNG_APPMISCERROR); /* restart from TERM chunk */ pData->pCurraniobj = pTERM; if (pTERM->iDelay) /* set the delay (?) */ { /* max(1, TERM delay, interframe_delay) */ #ifndef MNG_SKIPCHUNK_FRAM if (pTERM->iDelay > pData->iFramedelay) pData->iFramedelay = pTERM->iDelay; if (!pData->iFramedelay) pData->iFramedelay = 1; #endif pData->bNeedrefresh = MNG_TRUE; } } else { switch (pTERM->iIteraction) { case 0 : { /* show last frame indefinitly */ break; /* piece of cake, that is... */ } case 1 : { /* cease displaying anything */ /* max(1, TERM delay, interframe_delay) */ #ifndef MNG_SKIPCHUNK_FRAM if (pTERM->iDelay > pData->iFramedelay) pData->iFramedelay = pTERM->iDelay; if (!pData->iFramedelay) pData->iFramedelay = 1; #endif iRetcode = interframe_delay (pData); /* no interframe_delay? then fake it */ if ((!iRetcode) && (!pData->bTimerset)) iRetcode = set_delay (pData, 1); if (iRetcode) return iRetcode; pData->iBreakpoint = 10; break; } case 2 : { /* show first image after TERM */ iRetcode = restore_state (pData); /* on error bail out */ if (iRetcode) return iRetcode; /* notify the app ? */ if (pData->fProcessmend) if (!pData->fProcessmend ((mng_handle)pData, pData->iIterations, 0)) MNG_ERROR (pData, MNG_APPMISCERROR); /* show first frame after TERM chunk */ pData->pCurraniobj = pTERM; pData->bOnlyfirstframe = MNG_TRUE; pData->iFramesafterTERM = 0; /* max(1, TERM delay, interframe_delay) */ #ifndef MNG_SKIPCHUNK_FRAM if (pTERM->iDelay > pData->iFramedelay) pData->iFramedelay = pTERM->iDelay; if (!pData->iFramedelay) pData->iFramedelay = 1; #endif break; } } } break; } } } #endif /* MNG_SKIPCHUNK_TERM */ /* just reading ? */ if ((!pData->bDisplaying) && (pData->bReading)) if (pData->fProcessmend) /* inform the app ? */ if (!pData->fProcessmend ((mng_handle)pData, 0, 0)) MNG_ERROR (pData, MNG_APPMISCERROR); if (!pData->pCurraniobj) /* always let the app refresh at the end ! */ pData->bNeedrefresh = MNG_TRUE; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MEND, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_process_display_mend2 (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MEND, MNG_LC_START); #endif #ifndef MNG_SKIPCHUNK_FRAM pData->bFrameclipping = MNG_FALSE; /* nothing to do but restore the app background */ #endif load_bkgdlayer (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MEND, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DEFI mng_retcode mng_process_display_defi (mng_datap pData) { mng_imagep pImage; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_DEFI, MNG_LC_START); #endif if (!pData->iDEFIobjectid) /* object id=0 ? */ { pImage = (mng_imagep)pData->pObjzero; if (pData->bDEFIhasdonotshow) pImage->bVisible = (mng_bool)(pData->iDEFIdonotshow == 0); if (pData->bDEFIhasloca) { pImage->iPosx = pData->iDEFIlocax; pImage->iPosy = pData->iDEFIlocay; } if (pData->bDEFIhasclip) { pImage->bClipped = pData->bDEFIhasclip; pImage->iClipl = pData->iDEFIclipl; pImage->iClipr = pData->iDEFIclipr; pImage->iClipt = pData->iDEFIclipt; pImage->iClipb = pData->iDEFIclipb; } pData->pCurrentobj = 0; /* not a real object ! */ } else { /* already exists ? */ pImage = (mng_imagep)mng_find_imageobject (pData, pData->iDEFIobjectid); if (!pImage) /* if not; create new */ { mng_retcode iRetcode = mng_create_imageobject (pData, pData->iDEFIobjectid, (mng_bool)(pData->iDEFIconcrete == 1), (mng_bool)(pData->iDEFIdonotshow == 0), MNG_FALSE, 0, 0, 0, 0, 0, 0, 0, pData->iDEFIlocax, pData->iDEFIlocay, pData->bDEFIhasclip, pData->iDEFIclipl, pData->iDEFIclipr, pData->iDEFIclipt, pData->iDEFIclipb, &pImage); if (iRetcode) /* on error bail out */ return iRetcode; } else { /* exists; then set new info */ if (pData->bDEFIhasdonotshow) pImage->bVisible = (mng_bool)(pData->iDEFIdonotshow == 0); pImage->bViewable = MNG_FALSE; if (pData->bDEFIhasloca) { pImage->iPosx = pData->iDEFIlocax; pImage->iPosy = pData->iDEFIlocay; } if (pData->bDEFIhasclip) { pImage->bClipped = pData->bDEFIhasclip; pImage->iClipl = pData->iDEFIclipl; pImage->iClipr = pData->iDEFIclipr; pImage->iClipt = pData->iDEFIclipt; pImage->iClipb = pData->iDEFIclipb; } if (pData->bDEFIhasconcrete) pImage->pImgbuf->bConcrete = (mng_bool)(pData->iDEFIconcrete == 1); } pData->pCurrentobj = pImage; /* others may want to know this */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_DEFI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BASI #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_basi (mng_datap pData, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_bool bHasalpha, mng_uint16 iAlpha, mng_uint8 iViewable) #else mng_retcode mng_process_display_basi (mng_datap pData) #endif { /* address the current "object" if any */ mng_imagep pImage = (mng_imagep)pData->pCurrentobj; mng_uint8p pWork; mng_uint32 iX; mng_imagedatap pBuf; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_BASI, MNG_LC_START); #endif if (!pImage) /* or is it an "on-the-fly" image ? */ pImage = (mng_imagep)pData->pObjzero; /* address the object-buffer */ pBuf = pImage->pImgbuf; pData->fDisplayrow = MNG_NULL; /* do nothing by default */ pData->fCorrectrow = MNG_NULL; pData->fStorerow = MNG_NULL; pData->fProcessrow = MNG_NULL; /* set parms now that they're known */ iRetcode = mng_reset_object_details (pData, pImage, pData->iDatawidth, pData->iDataheight, pData->iBitdepth, pData->iColortype, pData->iCompression, pData->iFilter, pData->iInterlace, MNG_FALSE); if (iRetcode) /* on error bail out */ return iRetcode; /* save the viewable flag */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS pImage->bViewable = (mng_bool)(iViewable == 1); #else pImage->bViewable = (mng_bool)(pData->iBASIviewable == 1); #endif pBuf->bViewable = pImage->bViewable; pData->pStoreobj = pImage; /* let row-routines know which object */ pWork = pBuf->pImgdata; /* fill the object-buffer with the specified "color" sample */ switch (pData->iColortype) /* depending on color_type & bit_depth */ { case 0 : { /* gray */ #ifndef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth == 16) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iDatawidth * pData->iDataheight; iX > 0;iX--) #else for (iX = 0; iX < pData->iDatawidth * pData->iDataheight; iX++) #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_put_uint16 (pWork, iRed); #else mng_put_uint16 (pWork, pData->iBASIred); #endif pWork += 2; } } else #endif { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iDatawidth * pData->iDataheight; iX > 0;iX--) #else for (iX = 0; iX < pData->iDatawidth * pData->iDataheight; iX++) #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS *pWork = (mng_uint8)iRed; #else *pWork = (mng_uint8)pData->iBASIred; #endif pWork++; } } /* force tRNS ? */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS if ((bHasalpha) && (!iAlpha)) #else if ((pData->bBASIhasalpha) && (!pData->iBASIalpha)) #endif { pBuf->bHasTRNS = MNG_TRUE; #ifndef MNG_OPTIMIZE_DISPLAYCALLS pBuf->iTRNSgray = iRed; #else pBuf->iTRNSgray = pData->iBASIred; #endif } break; } case 2 : { /* rgb */ #ifndef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth == 16) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iDatawidth * pData->iDataheight; iX > 0;iX--) #else for (iX = 0; iX < pData->iDatawidth * pData->iDataheight; iX++) #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_put_uint16 (pWork, iRed ); mng_put_uint16 (pWork+2, iGreen); mng_put_uint16 (pWork+4, iBlue ); #else mng_put_uint16 (pWork, pData->iBASIred ); mng_put_uint16 (pWork+2, pData->iBASIgreen); mng_put_uint16 (pWork+4, pData->iBASIblue ); #endif pWork += 6; } } else #endif { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iDatawidth * pData->iDataheight; iX > 0;iX--) #else for (iX = 0; iX < pData->iDatawidth * pData->iDataheight; iX++) #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS *pWork = (mng_uint8)iRed; *(pWork+1) = (mng_uint8)iGreen; *(pWork+2) = (mng_uint8)iBlue; #else *pWork = (mng_uint8)pData->iBASIred; *(pWork+1) = (mng_uint8)pData->iBASIgreen; *(pWork+2) = (mng_uint8)pData->iBASIblue; #endif pWork += 3; } } /* force tRNS ? */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS if ((bHasalpha) && (!iAlpha)) #else if ((pData->bBASIhasalpha) && (!pData->iBASIalpha)) #endif { pBuf->bHasTRNS = MNG_TRUE; #ifndef MNG_OPTIMIZE_DISPLAYCALLS pBuf->iTRNSred = iRed; pBuf->iTRNSgreen = iGreen; pBuf->iTRNSblue = iBlue; #else pBuf->iTRNSred = pData->iBASIred; pBuf->iTRNSgreen = pData->iBASIgreen; pBuf->iTRNSblue = pData->iBASIblue; #endif } break; } case 3 : { /* indexed */ pBuf->bHasPLTE = MNG_TRUE; switch (pData->iBitdepth) { case 1 : { pBuf->iPLTEcount = 2; break; } case 2 : { pBuf->iPLTEcount = 4; break; } case 4 : { pBuf->iPLTEcount = 16; break; } case 8 : { pBuf->iPLTEcount = 256; break; } default : { pBuf->iPLTEcount = 1; break; } } #ifndef MNG_OPTIMIZE_DISPLAYCALLS pBuf->aPLTEentries [0].iRed = (mng_uint8)iRed; pBuf->aPLTEentries [0].iGreen = (mng_uint8)iGreen; pBuf->aPLTEentries [0].iBlue = (mng_uint8)iBlue; #else pBuf->aPLTEentries [0].iRed = (mng_uint8)pData->iBASIred; pBuf->aPLTEentries [0].iGreen = (mng_uint8)pData->iBASIgreen; pBuf->aPLTEentries [0].iBlue = (mng_uint8)pData->iBASIblue; #endif for (iX = 1; iX < pBuf->iPLTEcount; iX++) { pBuf->aPLTEentries [iX].iRed = 0; pBuf->aPLTEentries [iX].iGreen = 0; pBuf->aPLTEentries [iX].iBlue = 0; } /* force tRNS ? */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS if ((bHasalpha) && (iAlpha < 255)) #else if ((pData->bBASIhasalpha) && (pData->iBASIalpha < 255)) #endif { pBuf->bHasTRNS = MNG_TRUE; pBuf->iTRNScount = 1; #ifndef MNG_OPTIMIZE_DISPLAYCALLS pBuf->aTRNSentries [0] = (mng_uint8)iAlpha; #else pBuf->aTRNSentries [0] = (mng_uint8)pData->iBASIalpha; #endif } break; } case 4 : { /* gray+alpha */ #ifndef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth == 16) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iDatawidth * pData->iDataheight; iX > 0;iX--) #else for (iX = 0; iX < pData->iDatawidth * pData->iDataheight; iX++) #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_put_uint16 (pWork, iRed); mng_put_uint16 (pWork+2, iAlpha); #else mng_put_uint16 (pWork, pData->iBASIred); mng_put_uint16 (pWork+2, pData->iBASIalpha); #endif pWork += 4; } } else #endif { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iDatawidth * pData->iDataheight; iX > 0;iX--) #else for (iX = 0; iX < pData->iDatawidth * pData->iDataheight; iX++) #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS *pWork = (mng_uint8)iRed; *(pWork+1) = (mng_uint8)iAlpha; #else *pWork = (mng_uint8)pData->iBASIred; *(pWork+1) = (mng_uint8)pData->iBASIalpha; #endif pWork += 2; } } break; } case 6 : { /* rgb+alpha */ #ifndef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth == 16) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iDatawidth * pData->iDataheight; iX > 0;iX--) #else for (iX = 0; iX < pData->iDatawidth * pData->iDataheight; iX++) #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_put_uint16 (pWork, iRed); mng_put_uint16 (pWork+2, iGreen); mng_put_uint16 (pWork+4, iBlue); mng_put_uint16 (pWork+6, iAlpha); #else mng_put_uint16 (pWork, pData->iBASIred); mng_put_uint16 (pWork+2, pData->iBASIgreen); mng_put_uint16 (pWork+4, pData->iBASIblue); mng_put_uint16 (pWork+6, pData->iBASIalpha); #endif pWork += 8; } } else #endif { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iDatawidth * pData->iDataheight; iX > 0;iX--) #else for (iX = 0; iX < pData->iDatawidth * pData->iDataheight; iX++) #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS *pWork = (mng_uint8)iRed; *(pWork+1) = (mng_uint8)iGreen; *(pWork+2) = (mng_uint8)iBlue; *(pWork+3) = (mng_uint8)iAlpha; #else *pWork = (mng_uint8)pData->iBASIred; *(pWork+1) = (mng_uint8)pData->iBASIgreen; *(pWork+2) = (mng_uint8)pData->iBASIblue; *(pWork+3) = (mng_uint8)pData->iBASIalpha; #endif pWork += 4; } } break; } } #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT pData->fInitrowproc = (mng_fptr)mng_init_rowproc; pData->ePng_imgtype=mng_png_imgtype(pData->iColortype,pData->iBitdepth); #else switch (pData->iColortype) /* determine row initialization routine */ { /* just to accomodate IDAT if it arrives */ case 0 : { /* gray */ switch (pData->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g1_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g1_i; break; } case 2 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g2_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g2_i; break; } case 4 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g4_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g4_i; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g16_i; break; } #endif } break; } case 2 : { /* rgb */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgb8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgb8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgb16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgb16_i; break; } #endif } break; } case 3 : { /* indexed */ switch (pData->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx1_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx1_i; break; } case 2 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx2_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx2_i; break; } case 4 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx4_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx4_i; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx8_i; break; } } break; } case 4 : { /* gray+alpha */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_ga8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_ga8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_ga16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_ga16_i; break; } #endif } break; } case 6 : { /* rgb+alpha */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgba8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgba8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgba16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgba16_i; break; } #endif } break; } } #endif /* MNG_OPTIMIZE_FOOTPRINT_INIT */ pData->iFilterofs = 0; /* determine filter characteristics */ pData->iLevel0 = 0; /* default levels */ pData->iLevel1 = 0; pData->iLevel2 = 0; pData->iLevel3 = 0; #ifdef FILTER192 if (pData->iFilter == 0xC0) /* leveling & differing ? */ { switch (pData->iColortype) { case 0 : { #ifndef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth <= 8) #endif pData->iFilterofs = 1; #ifndef MNG_NO_16BIT_SUPPORT else pData->iFilterofs = 2; #endif break; } case 2 : { #ifndef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth <= 8) #endif pData->iFilterofs = 3; #ifndef MNG_NO_16BIT_SUPPORT else pData->iFilterofs = 6; #endif break; } case 3 : { pData->iFilterofs = 1; break; } case 4 : { #ifndef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth <= 8) #endif pData->iFilterofs = 2; #ifndef MNG_NO_16BIT_SUPPORT else pData->iFilterofs = 4; #endif break; } case 6 : { #ifndef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth <= 8) #endif pData->iFilterofs = 4; #ifndef MNG_NO_16BIT_SUPPORT else pData->iFilterofs = 8; #endif break; } } } #endif #ifdef FILTER193 if (pData->iFilter == 0xC1) /* no adaptive filtering ? */ pData->iPixelofs = pData->iFilterofs; else #endif pData->iPixelofs = pData->iFilterofs + 1; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_BASI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLON #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_clon (mng_datap pData, mng_uint16 iSourceid, mng_uint16 iCloneid, mng_uint8 iClonetype, mng_bool bHasdonotshow, mng_uint8 iDonotshow, mng_uint8 iConcrete, mng_bool bHasloca, mng_uint8 iLocationtype, mng_int32 iLocationx, mng_int32 iLocationy) #else mng_retcode mng_process_display_clon (mng_datap pData) #endif { mng_imagep pSource, pClone; mng_bool bVisible, bAbstract; mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_CLON, MNG_LC_START); #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS /* locate the source object first */ pSource = mng_find_imageobject (pData, iSourceid); /* check if the clone exists */ pClone = mng_find_imageobject (pData, iCloneid); #else /* locate the source object first */ pSource = mng_find_imageobject (pData, pData->iCLONsourceid); /* check if the clone exists */ pClone = mng_find_imageobject (pData, pData->iCLONcloneid); #endif if (!pSource) /* source must exist ! */ MNG_ERROR (pData, MNG_OBJECTUNKNOWN); if (pClone) /* clone must not exist ! */ MNG_ERROR (pData, MNG_OBJECTEXISTS); #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (bHasdonotshow) /* DoNotShow flag filled ? */ bVisible = (mng_bool)(iDonotshow == 0); else bVisible = pSource->bVisible; #else if (pData->bCLONhasdonotshow) /* DoNotShow flag filled ? */ bVisible = (mng_bool)(pData->iCLONdonotshow == 0); else bVisible = pSource->bVisible; #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS bAbstract = (mng_bool)(iConcrete == 1); #else bAbstract = (mng_bool)(pData->iCLONconcrete == 1); #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS switch (iClonetype) /* determine action to take */ { case 0 : { /* full clone */ iRetcode = mng_clone_imageobject (pData, iCloneid, MNG_FALSE, bVisible, bAbstract, bHasloca, iLocationtype, iLocationx, iLocationy, pSource, &pClone); break; } case 1 : { /* partial clone */ iRetcode = mng_clone_imageobject (pData, iCloneid, MNG_TRUE, bVisible, bAbstract, bHasloca, iLocationtype, iLocationx, iLocationy, pSource, &pClone); break; } case 2 : { /* renumber object */ iRetcode = mng_renum_imageobject (pData, pSource, iCloneid, bVisible, bAbstract, bHasloca, iLocationtype, iLocationx, iLocationy); pClone = pSource; break; } } #else switch (pData->iCLONclonetype) /* determine action to take */ { case 0 : { /* full clone */ iRetcode = mng_clone_imageobject (pData, pData->iCLONcloneid, MNG_FALSE, bVisible, bAbstract, pData->bCLONhasloca, pData->iCLONlocationtype, pData->iCLONlocationx, pData->iCLONlocationy, pSource, &pClone); break; } case 1 : { /* partial clone */ iRetcode = mng_clone_imageobject (pData, pData->iCLONcloneid, MNG_TRUE, bVisible, bAbstract, pData->bCLONhasloca, pData->iCLONlocationtype, pData->iCLONlocationx, pData->iCLONlocationy, pSource, &pClone); break; } case 2 : { /* renumber object */ iRetcode = mng_renum_imageobject (pData, pSource, pData->iCLONcloneid, bVisible, bAbstract, pData->bCLONhasloca, pData->iCLONlocationtype, pData->iCLONlocationx, pData->iCLONlocationy); pClone = pSource; break; } } #endif if (iRetcode) /* on error bail out */ return iRetcode; /* display on the fly ? */ if ((pClone->bViewable) && (pClone->bVisible)) { pData->pLastclone = pClone; /* remember in case of timer break ! */ /* display it */ mng_display_image (pData, pClone, MNG_FALSE); if (pData->bTimerset) /* timer break ? */ pData->iBreakpoint = 5; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_CLON, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_process_display_clon2 (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_CLON, MNG_LC_START); #endif /* only called after timer break ! */ mng_display_image (pData, (mng_imagep)pData->pLastclone, MNG_FALSE); pData->iBreakpoint = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_CLON, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DISC #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_disc (mng_datap pData, mng_uint32 iCount, mng_uint16p pIds) #else mng_retcode mng_process_display_disc (mng_datap pData) #endif { mng_uint32 iX; mng_imagep pImage; mng_uint32 iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_DISC, MNG_LC_START); #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (iCount) /* specific list ? */ #else if (pData->iDISCcount) /* specific list ? */ #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_uint16p pWork = pIds; #else mng_uint16p pWork = pData->pDISCids; #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS #ifdef MNG_DECREMENT_LOOPS /* iterate the list */ for (iX = iCount; iX > 0; iX--) #else for (iX = 0; iX < iCount; iX++) #endif #else #ifdef MNG_DECREMENT_LOOPS /* iterate the list */ for (iX = pData->iDISCcount; iX > 0; iX--) #else for (iX = 0; iX < pData->iDISCcount; iX++) #endif #endif { pImage = mng_find_imageobject (pData, *pWork++); if (pImage) /* found the object ? */ { /* then drop it */ iRetcode = mng_free_imageobject (pData, pImage); if (iRetcode) /* on error bail out */ return iRetcode; } } } else /* empty: drop all un-frozen objects */ { mng_imagep pNext = (mng_imagep)pData->pFirstimgobj; while (pNext) /* any left ? */ { pImage = pNext; pNext = pImage->sHeader.pNext; if (!pImage->bFrozen) /* not frozen ? */ { /* then drop it */ iRetcode = mng_free_imageobject (pData, pImage); if (iRetcode) /* on error bail out */ return iRetcode; } } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_DISC, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_FRAM #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_fram (mng_datap pData, mng_uint8 iFramemode, mng_uint8 iChangedelay, mng_uint32 iDelay, mng_uint8 iChangetimeout, mng_uint32 iTimeout, mng_uint8 iChangeclipping, mng_uint8 iCliptype, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb) #else mng_retcode mng_process_display_fram (mng_datap pData) #endif { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_FRAM, MNG_LC_START); #endif /* advance a frame then */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = next_frame (pData, iFramemode, iChangedelay, iDelay, iChangetimeout, iTimeout, iChangeclipping, iCliptype, iClipl, iClipr, iClipt, iClipb); #else iRetcode = next_frame (pData, pData->iTempFramemode, pData->iTempChangedelay, pData->iTempDelay, pData->iTempChangetimeout, pData->iTempTimeout, pData->iTempChangeclipping, pData->iTempCliptype, pData->iTempClipl, pData->iTempClipr, pData->iTempClipt, pData->iTempClipb); #endif if (pData->bTimerset) /* timer break ? */ pData->iBreakpoint = 1; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_FRAM, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ mng_retcode mng_process_display_fram2 (mng_datap pData) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_FRAM, MNG_LC_START); #endif /* again; after the break */ iRetcode = next_frame (pData, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); pData->iBreakpoint = 0; /* not again! */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_FRAM, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MOVE #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_move (mng_datap pData, mng_uint16 iFromid, mng_uint16 iToid, mng_uint8 iMovetype, mng_int32 iMovex, mng_int32 iMovey) #else mng_retcode mng_process_display_move (mng_datap pData) #endif { mng_uint16 iX; mng_imagep pImage; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MOVE, MNG_LC_START); #endif /* iterate the list */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS for (iX = iFromid; iX <= iToid; iX++) #else for (iX = pData->iMOVEfromid; iX <= pData->iMOVEtoid; iX++) #endif { if (!iX) /* object id=0 ? */ pImage = (mng_imagep)pData->pObjzero; else pImage = mng_find_imageobject (pData, iX); if (pImage) /* object exists ? */ { #ifndef MNG_OPTIMIZE_DISPLAYCALLS switch (iMovetype) #else switch (pData->iMOVEmovetype) #endif { case 0 : { /* absolute */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS pImage->iPosx = iMovex; pImage->iPosy = iMovey; #else pImage->iPosx = pData->iMOVEmovex; pImage->iPosy = pData->iMOVEmovey; #endif break; } case 1 : { /* relative */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS pImage->iPosx = pImage->iPosx + iMovex; pImage->iPosy = pImage->iPosy + iMovey; #else pImage->iPosx = pImage->iPosx + pData->iMOVEmovex; pImage->iPosy = pImage->iPosy + pData->iMOVEmovey; #endif break; } } } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MOVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLIP #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_clip (mng_datap pData, mng_uint16 iFromid, mng_uint16 iToid, mng_uint8 iCliptype, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb) #else mng_retcode mng_process_display_clip (mng_datap pData) #endif { mng_uint16 iX; mng_imagep pImage; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_CLIP, MNG_LC_START); #endif /* iterate the list */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS for (iX = iFromid; iX <= iToid; iX++) #else for (iX = pData->iCLIPfromid; iX <= pData->iCLIPtoid; iX++) #endif { if (!iX) /* object id=0 ? */ pImage = (mng_imagep)pData->pObjzero; else pImage = mng_find_imageobject (pData, iX); if (pImage) /* object exists ? */ { #ifndef MNG_OPTIMIZE_DISPLAYCALLS switch (iCliptype) #else switch (pData->iCLIPcliptype) #endif { case 0 : { /* absolute */ pImage->bClipped = MNG_TRUE; #ifndef MNG_OPTIMIZE_DISPLAYCALLS pImage->iClipl = iClipl; pImage->iClipr = iClipr; pImage->iClipt = iClipt; pImage->iClipb = iClipb; #else pImage->iClipl = pData->iCLIPclipl; pImage->iClipr = pData->iCLIPclipr; pImage->iClipt = pData->iCLIPclipt; pImage->iClipb = pData->iCLIPclipb; #endif break; } case 1 : { /* relative */ pImage->bClipped = MNG_TRUE; #ifndef MNG_OPTIMIZE_DISPLAYCALLS pImage->iClipl = pImage->iClipl + iClipl; pImage->iClipr = pImage->iClipr + iClipr; pImage->iClipt = pImage->iClipt + iClipt; pImage->iClipb = pImage->iClipb + iClipb; #else pImage->iClipl = pImage->iClipl + pData->iCLIPclipl; pImage->iClipr = pImage->iClipr + pData->iCLIPclipr; pImage->iClipt = pImage->iClipt + pData->iCLIPclipt; pImage->iClipb = pImage->iClipb + pData->iCLIPclipb; #endif break; } } } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_CLIP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SHOW mng_retcode mng_process_display_show (mng_datap pData) { mng_int16 iX, iS, iFrom, iTo; mng_imagep pImage; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_SHOW, MNG_LC_START); #endif /* TODO: optimization for the cases where "abs (iTo - iFrom)" is rather high; especially where ((iFrom==1) && (iTo==65535)); eg. an empty SHOW !!! */ if (pData->iBreakpoint == 3) /* previously broken during cycle-mode ? */ { pImage = mng_find_imageobject (pData, pData->iSHOWnextid); if (pImage) /* still there ? */ mng_display_image (pData, pImage, MNG_FALSE); pData->iBreakpoint = 0; /* let's not go through this again! */ } else { if (pData->iBreakpoint) /* previously broken at other point ? */ { /* restore last parms */ iFrom = (mng_int16)pData->iSHOWfromid; iTo = (mng_int16)pData->iSHOWtoid; iX = (mng_int16)pData->iSHOWnextid; iS = (mng_int16)pData->iSHOWskip; } else { /* regular sequence ? */ if (pData->iSHOWtoid >= pData->iSHOWfromid) iS = 1; else /* reverse sequence ! */ iS = -1; iFrom = (mng_int16)pData->iSHOWfromid; iTo = (mng_int16)pData->iSHOWtoid; iX = iFrom; pData->iSHOWfromid = (mng_uint16)iFrom; pData->iSHOWtoid = (mng_uint16)iTo; pData->iSHOWskip = iS; } /* cycle mode ? */ if ((pData->iSHOWmode == 6) || (pData->iSHOWmode == 7)) { mng_uint16 iTrigger = 0; mng_uint16 iFound = 0; mng_uint16 iPass = 0; mng_imagep pFound = 0; do { iPass++; /* lets prevent endless loops when there are no potential candidates in the list! */ if (iS > 0) /* forward ? */ { for (iX = iFrom; iX <= iTo; iX += iS) { pImage = mng_find_imageobject (pData, (mng_uint16)iX); if (pImage) /* object exists ? */ { if (iFound) /* already found a candidate ? */ pImage->bVisible = MNG_FALSE; else if (iTrigger) /* found the trigger ? */ { pImage->bVisible = MNG_TRUE; iFound = iX; pFound = pImage; } else if (pImage->bVisible) /* ok, this is the trigger */ { pImage->bVisible = MNG_FALSE; iTrigger = iX; } } } } else { for (iX = iFrom; iX >= iTo; iX += iS) { pImage = mng_find_imageobject (pData, (mng_uint16)iX); if (pImage) /* object exists ? */ { if (iFound) /* already found a candidate ? */ pImage->bVisible = MNG_FALSE; else if (iTrigger) /* found the trigger ? */ { pImage->bVisible = MNG_TRUE; iFound = iX; pFound = pImage; } else if (pImage->bVisible) /* ok, this is the trigger */ { pImage->bVisible = MNG_FALSE; iTrigger = iX; } } } } if (!iTrigger) /* did not find a trigger ? */ iTrigger = 1; /* then fake it so the first image gets nominated */ } /* cycle back to beginning ? */ while ((iPass < 2) && (iTrigger) && (!iFound)); pData->iBreakpoint = 0; /* just a sanity precaution */ /* display it ? */ if ((pData->iSHOWmode == 6) && (pFound)) { mng_display_image (pData, pFound, MNG_FALSE); if (pData->bTimerset) /* timer set ? */ { pData->iBreakpoint = 3; pData->iSHOWnextid = iFound; /* save it for after the break */ } } } else { do { pImage = mng_find_imageobject (pData, iX); if (pImage) /* object exists ? */ { if (pData->iBreakpoint) /* did we get broken last time ? */ { /* could only happen in the display routine */ mng_display_image (pData, pImage, MNG_FALSE); pData->iBreakpoint = 0; /* only once inside this loop please ! */ } else { switch (pData->iSHOWmode) /* do what ? */ { case 0 : { pImage->bVisible = MNG_TRUE; mng_display_image (pData, pImage, MNG_FALSE); break; } case 1 : { pImage->bVisible = MNG_FALSE; break; } case 2 : { if (pImage->bVisible) mng_display_image (pData, pImage, MNG_FALSE); break; } case 3 : { pImage->bVisible = MNG_TRUE; break; } case 4 : { pImage->bVisible = (mng_bool)(!pImage->bVisible); if (pImage->bVisible) mng_display_image (pData, pImage, MNG_FALSE); break; } case 5 : { pImage->bVisible = (mng_bool)(!pImage->bVisible); } } } } if (!pData->bTimerset) /* next ? */ iX += iS; } /* continue ? */ while ((!pData->bTimerset) && (((iS > 0) && (iX <= iTo)) || ((iS < 0) && (iX >= iTo)) )); if (pData->bTimerset) /* timer set ? */ { pData->iBreakpoint = 4; pData->iSHOWnextid = iX; /* save for next time */ } else pData->iBreakpoint = 0; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_SHOW, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE mng_retcode mng_process_display_save (mng_datap pData) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_SAVE, MNG_LC_START); #endif iRetcode = save_state (pData); /* save the current state */ if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_SAVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SEEK mng_retcode mng_process_display_seek (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_SEEK, MNG_LC_START); #endif #ifdef MNG_SUPPORT_DYNAMICMNG if (pData->bStopafterseek) /* need to stop after this SEEK ? */ { pData->bFreezing = MNG_TRUE; /* stop processing on this one */ pData->bRunningevent = MNG_FALSE; pData->bStopafterseek = MNG_FALSE; pData->bNeedrefresh = MNG_TRUE; /* make sure the last bit is displayed ! */ } else #endif { /* restore the initial or SAVE state */ mng_retcode iRetcode = restore_state (pData); if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_DYNAMICMNG /* stop after next SEEK ? */ if ((pData->bDynamic) || (pData->bRunningevent)) pData->bStopafterseek = MNG_TRUE; #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_SEEK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG mng_retcode mng_process_display_jhdr (mng_datap pData) { /* address the current "object" if any */ mng_imagep pImage = (mng_imagep)pData->pCurrentobj; mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_JHDR, MNG_LC_START); #endif if (!pData->bHasDHDR) { pData->fInitrowproc = MNG_NULL; /* do nothing by default */ pData->fDisplayrow = MNG_NULL; pData->fCorrectrow = MNG_NULL; pData->fStorerow = MNG_NULL; pData->fProcessrow = MNG_NULL; pData->fDifferrow = MNG_NULL; pData->fStorerow2 = MNG_NULL; pData->fStorerow3 = MNG_NULL; pData->pStoreobj = MNG_NULL; /* initialize important work-parms */ pData->iJPEGrow = 0; pData->iJPEGalpharow = 0; pData->iJPEGrgbrow = 0; pData->iRowmax = 0; /* so init_rowproc does the right thing ! */ } if (!pData->iBreakpoint) /* not previously broken ? */ { #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* delta-image ? */ { if (pData->iDeltatype == MNG_DELTATYPE_REPLACE) { iRetcode = mng_reset_object_details (pData, (mng_imagep)pData->pDeltaImage, pData->iDatawidth, pData->iDataheight, pData->iJHDRimgbitdepth, pData->iJHDRcolortype, pData->iJHDRalphacompression, pData->iJHDRalphafilter, pData->iJHDRalphainterlace, MNG_TRUE); ((mng_imagep)pData->pDeltaImage)->pImgbuf->iAlphabitdepth = pData->iJHDRalphabitdepth; ((mng_imagep)pData->pDeltaImage)->pImgbuf->iJHDRcompression = pData->iJHDRimgcompression; ((mng_imagep)pData->pDeltaImage)->pImgbuf->iJHDRinterlace = pData->iJHDRimginterlace; ((mng_imagep)pData->pDeltaImage)->pImgbuf->iAlphasampledepth = pData->iJHDRalphabitdepth; } else if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { ((mng_imagep)pData->pDeltaImage)->pImgbuf->iPixelsampledepth = pData->iJHDRimgbitdepth; ((mng_imagep)pData->pDeltaImage)->pImgbuf->iAlphasampledepth = pData->iJHDRalphabitdepth; } else if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE) ) ((mng_imagep)pData->pDeltaImage)->pImgbuf->iAlphasampledepth = pData->iJHDRalphabitdepth; else if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORADD ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE) ) ((mng_imagep)pData->pDeltaImage)->pImgbuf->iPixelsampledepth = pData->iJHDRimgbitdepth; } else #endif /* MNG_NO_DELTA_PNG */ { if (pImage) /* update object buffer ? */ { iRetcode = mng_reset_object_details (pData, pImage, pData->iDatawidth, pData->iDataheight, pData->iJHDRimgbitdepth, pData->iJHDRcolortype, pData->iJHDRalphacompression, pData->iJHDRalphafilter, pData->iJHDRalphainterlace, MNG_TRUE); pImage->pImgbuf->iAlphabitdepth = pData->iJHDRalphabitdepth; pImage->pImgbuf->iJHDRcompression = pData->iJHDRimgcompression; pImage->pImgbuf->iJHDRinterlace = pData->iJHDRimginterlace; pImage->pImgbuf->iAlphasampledepth = pData->iJHDRalphabitdepth; } else /* update object 0 */ { iRetcode = mng_reset_object_details (pData, (mng_imagep)pData->pObjzero, pData->iDatawidth, pData->iDataheight, pData->iJHDRimgbitdepth, pData->iJHDRcolortype, pData->iJHDRalphacompression, pData->iJHDRalphafilter, pData->iJHDRalphainterlace, MNG_TRUE); ((mng_imagep)pData->pObjzero)->pImgbuf->iAlphabitdepth = pData->iJHDRalphabitdepth; ((mng_imagep)pData->pObjzero)->pImgbuf->iJHDRcompression = pData->iJHDRimgcompression; ((mng_imagep)pData->pObjzero)->pImgbuf->iJHDRinterlace = pData->iJHDRimginterlace; ((mng_imagep)pData->pObjzero)->pImgbuf->iAlphasampledepth = pData->iJHDRalphabitdepth; } } if (iRetcode) /* on error bail out */ return iRetcode; } if (!pData->bHasDHDR) { /* we're always storing a JPEG */ if (pImage) /* real object ? */ pData->pStoreobj = pImage; /* tell the row routines */ else /* otherwise use object 0 */ pData->pStoreobj = pData->pObjzero; /* display "on-the-fly" ? */ if ( #ifndef MNG_SKIPCHUNK_MAGN ( ((mng_imagep)pData->pStoreobj)->iMAGN_MethodX == 0) && ( ((mng_imagep)pData->pStoreobj)->iMAGN_MethodY == 0) && #endif ( (pData->eImagetype == mng_it_jng ) || (((mng_imagep)pData->pStoreobj)->bVisible) ) ) { next_layer (pData); /* that's a new layer then ! */ pData->iBreakpoint = 0; if (pData->bTimerset) /* timer break ? */ pData->iBreakpoint = 7; else if (pData->bRunning) /* still running ? */ { /* anything to display ? */ if ((pData->iDestr > pData->iDestl) && (pData->iDestb > pData->iDestt)) { set_display_routine (pData); /* then determine display routine */ /* display from the object we store in */ pData->pRetrieveobj = pData->pStoreobj; } } } } if (!pData->bTimerset) /* no timer break ? */ { /* default row initialization ! */ #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT pData->ePng_imgtype=png_none; #endif pData->fInitrowproc = (mng_fptr)mng_init_rowproc; if ((!pData->bHasDHDR) || (pData->iDeltatype == MNG_DELTATYPE_REPLACE)) { /* 8-bit JPEG ? */ if (pData->iJHDRimgbitdepth == 8) { /* intermediate row is 8-bit deep */ pData->bIsRGBA16 = MNG_FALSE; pData->iRowsamples = pData->iDatawidth; switch (pData->iJHDRcolortype) /* determine pixel processing routines */ { case MNG_COLORTYPE_JPEGGRAY : { pData->fStorerow2 = (mng_fptr)mng_store_jpeg_g8; pData->fRetrieverow = (mng_fptr)mng_retrieve_g8; pData->bIsOpaque = MNG_TRUE; break; } case MNG_COLORTYPE_JPEGCOLOR : { pData->fStorerow2 = (mng_fptr)mng_store_jpeg_rgb8; pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb8; pData->bIsOpaque = MNG_TRUE; break; } case MNG_COLORTYPE_JPEGGRAYA : { pData->fStorerow2 = (mng_fptr)mng_store_jpeg_ga8; pData->fRetrieverow = (mng_fptr)mng_retrieve_ga8; pData->bIsOpaque = MNG_FALSE; break; } case MNG_COLORTYPE_JPEGCOLORA : { pData->fStorerow2 = (mng_fptr)mng_store_jpeg_rgba8; pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba8; pData->bIsOpaque = MNG_FALSE; break; } } } #ifndef MNG_NO_16BIT_SUPPORT else { pData->bIsRGBA16 = MNG_TRUE; /* intermediate row is 16-bit deep */ /* TODO: 12-bit JPEG */ /* TODO: 8- + 12-bit JPEG (eg. type=20) */ } #endif /* possible IDAT alpha-channel ? */ if (pData->iJHDRalphacompression == MNG_COMPRESSION_DEFLATE) { /* determine alpha processing routine */ #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT pData->fInitrowproc = (mng_fptr)mng_init_rowproc; #endif switch (pData->iJHDRalphabitdepth) { #ifndef MNG_OPTIMIZE_FOOTPRINT_INIT #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { pData->fInitrowproc = (mng_fptr)mng_init_jpeg_a1_ni; break; } case 2 : { pData->fInitrowproc = (mng_fptr)mng_init_jpeg_a2_ni; break; } case 4 : { pData->fInitrowproc = (mng_fptr)mng_init_jpeg_a4_ni; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { pData->fInitrowproc = (mng_fptr)mng_init_jpeg_a8_ni; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fInitrowproc = (mng_fptr)mng_init_jpeg_a16_ni; break; } #endif #else #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { pData->ePng_imgtype = png_jpeg_a1; break; } case 2 : { pData->ePng_imgtype = png_jpeg_a2; break; } case 4 : { pData->ePng_imgtype = png_jpeg_a4; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { pData->ePng_imgtype = png_jpeg_a8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->ePng_imgtype = png_jpeg_a16; break; } #endif #endif } } else /* possible JDAA alpha-channel ? */ if (pData->iJHDRalphacompression == MNG_COMPRESSION_BASELINEJPEG) { /* 8-bit JPEG ? */ if (pData->iJHDRimgbitdepth == 8) { if (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAYA) pData->fStorerow3 = (mng_fptr)mng_store_jpeg_g8_alpha; else if (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLORA) pData->fStorerow3 = (mng_fptr)mng_store_jpeg_rgb8_alpha; } else { /* TODO: 12-bit JPEG with 8-bit JDAA */ } } /* initialize JPEG library */ iRetcode = mngjpeg_initialize (pData); if (iRetcode) /* on error bail out */ return iRetcode; } else { /* must be alpha add/replace !! */ if ((pData->iDeltatype != MNG_DELTATYPE_BLOCKALPHAADD ) && (pData->iDeltatype != MNG_DELTATYPE_BLOCKALPHAREPLACE) ) MNG_ERROR (pData, MNG_INVDELTATYPE); /* determine alpha processing routine */ #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT pData->fInitrowproc = (mng_fptr)mng_init_rowproc; #endif switch (pData->iJHDRalphabitdepth) { #ifndef MNG_OPTIMIZE_FOOTPRINT_INIT #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { pData->fInitrowproc = (mng_fptr)mng_init_g1_ni; break; } case 2 : { pData->fInitrowproc = (mng_fptr)mng_init_g2_ni; break; } case 4 : { pData->fInitrowproc = (mng_fptr)mng_init_g4_ni; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { pData->fInitrowproc = (mng_fptr)mng_init_g8_ni; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fInitrowproc = (mng_fptr)mng_init_g16_ni; break; } #endif #else #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { pData->ePng_imgtype = png_jpeg_a1; break; } case 2 : { pData->ePng_imgtype = png_jpeg_a2; break; } case 4 : { pData->ePng_imgtype = png_jpeg_a4; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { pData->ePng_imgtype = png_jpeg_a8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->ePng_imgtype = png_jpeg_a16; break; } #endif #endif /* MNG_OPTIMIZE_FOOTPRINT_INIT */ } } pData->iFilterofs = 0; /* determine filter characteristics */ pData->iLevel0 = 0; /* default levels */ pData->iLevel1 = 0; pData->iLevel2 = 0; pData->iLevel3 = 0; #ifdef FILTER192 /* leveling & differing ? */ if (pData->iJHDRalphafilter == 0xC0) { if (pData->iJHDRalphabitdepth <= 8) pData->iFilterofs = 1; else pData->iFilterofs = 2; } #endif #ifdef FILTER193 /* no adaptive filtering ? */ if (pData->iJHDRalphafilter == 0xC1) pData->iPixelofs = pData->iFilterofs; else #endif pData->iPixelofs = pData->iFilterofs + 1; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_JHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_jdaa (mng_datap pData, mng_uint32 iRawlen, mng_uint8p pRawdata) #else mng_retcode mng_process_display_jdaa (mng_datap pData) #endif { mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_JDAA, MNG_LC_START); #endif if (!pData->bJPEGdecompress2) /* if we're not decompressing already */ { if (pData->fInitrowproc) /* initialize row-processing? */ { iRetcode = ((mng_initrowproc)pData->fInitrowproc) (pData); pData->fInitrowproc = MNG_NULL; /* only call this once !!! */ } if (!iRetcode) /* initialize decompress */ iRetcode = mngjpeg_decompressinit2 (pData); } if (!iRetcode) /* all ok? then decompress, my man */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mngjpeg_decompressdata2 (pData, iRawlen, pRawdata); #else iRetcode = mngjpeg_decompressdata2 (pData, pData->iRawlen, pData->pRawdata); #endif if (iRetcode) return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_JDAA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_jdat (mng_datap pData, mng_uint32 iRawlen, mng_uint8p pRawdata) #else mng_retcode mng_process_display_jdat (mng_datap pData) #endif { mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_JDAT, MNG_LC_START); #endif if (pData->bRestorebkgd) /* need to restore the background ? */ { pData->bRestorebkgd = MNG_FALSE; iRetcode = load_bkgdlayer (pData); pData->iLayerseq++; /* and it counts as a layer then ! */ if (iRetcode) /* on error bail out */ return iRetcode; } if (!pData->bJPEGdecompress) /* if we're not decompressing already */ { if (pData->fInitrowproc) /* initialize row-processing? */ { iRetcode = ((mng_initrowproc)pData->fInitrowproc) (pData); pData->fInitrowproc = MNG_NULL; /* only call this once !!! */ } if (!iRetcode) /* initialize decompress */ iRetcode = mngjpeg_decompressinit (pData); } if (!iRetcode) /* all ok? then decompress, my man */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mngjpeg_decompressdata (pData, iRawlen, pRawdata); #else iRetcode = mngjpeg_decompressdata (pData, pData->iRawlen, pData->pRawdata); #endif if (iRetcode) return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_JDAT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_dhdr (mng_datap pData, mng_uint16 iObjectid, mng_uint8 iImagetype, mng_uint8 iDeltatype, mng_uint32 iBlockwidth, mng_uint32 iBlockheight, mng_uint32 iBlockx, mng_uint32 iBlocky) #else mng_retcode mng_process_display_dhdr (mng_datap pData) #endif { mng_imagep pImage; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_DHDR, MNG_LC_START); #endif pData->fInitrowproc = MNG_NULL; /* do nothing by default */ pData->fDisplayrow = MNG_NULL; pData->fCorrectrow = MNG_NULL; pData->fStorerow = MNG_NULL; pData->fProcessrow = MNG_NULL; pData->pStoreobj = MNG_NULL; pData->fDeltagetrow = MNG_NULL; pData->fDeltaaddrow = MNG_NULL; pData->fDeltareplacerow = MNG_NULL; pData->fDeltaputrow = MNG_NULL; #ifndef MNG_OPTIMIZE_DISPLAYCALLS pImage = mng_find_imageobject (pData, iObjectid); #else pImage = mng_find_imageobject (pData, pData->iDHDRobjectid); #endif if (pImage) /* object exists ? */ { if (pImage->pImgbuf->bConcrete) /* is it concrete ? */ { /* previous magnification to be done ? */ #ifndef MNG_SKIPCHUNK_MAGN if ((pImage->iMAGN_MethodX) || (pImage->iMAGN_MethodY)) { iRetcode = mng_magnify_imageobject (pData, pImage); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* save delta fields */ pData->pDeltaImage = (mng_ptr)pImage; #ifndef MNG_OPTIMIZE_DISPLAYCALLS pData->iDeltaImagetype = iImagetype; pData->iDeltatype = iDeltatype; pData->iDeltaBlockwidth = iBlockwidth; pData->iDeltaBlockheight = iBlockheight; pData->iDeltaBlockx = iBlockx; pData->iDeltaBlocky = iBlocky; #else pData->iDeltaImagetype = pData->iDHDRimagetype; pData->iDeltatype = pData->iDHDRdeltatype; pData->iDeltaBlockwidth = pData->iDHDRblockwidth; pData->iDeltaBlockheight = pData->iDHDRblockheight; pData->iDeltaBlockx = pData->iDHDRblockx; pData->iDeltaBlocky = pData->iDHDRblocky; #endif /* restore target-object fields */ pData->iDatawidth = pImage->pImgbuf->iWidth; pData->iDataheight = pImage->pImgbuf->iHeight; pData->iBitdepth = pImage->pImgbuf->iBitdepth; pData->iColortype = pImage->pImgbuf->iColortype; pData->iCompression = pImage->pImgbuf->iCompression; pData->iFilter = pImage->pImgbuf->iFilter; pData->iInterlace = pImage->pImgbuf->iInterlace; #ifndef MNG_OPTIMIZE_DISPLAYCALLS if ((iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD ) || (iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) pData->iBitdepth = pImage->pImgbuf->iPixelsampledepth; else if ((iDeltatype == MNG_DELTATYPE_BLOCKALPHAADD ) || (iDeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE) ) pData->iBitdepth = pImage->pImgbuf->iAlphasampledepth; else if ((iDeltatype == MNG_DELTATYPE_BLOCKCOLORADD ) || (iDeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE) ) pData->iBitdepth = pImage->pImgbuf->iPixelsampledepth; #else if ((pData->iDHDRdeltatype == MNG_DELTATYPE_BLOCKPIXELADD ) || (pData->iDHDRdeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) pData->iBitdepth = pImage->pImgbuf->iPixelsampledepth; else if ((pData->iDHDRdeltatype == MNG_DELTATYPE_BLOCKALPHAADD ) || (pData->iDHDRdeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE) ) pData->iBitdepth = pImage->pImgbuf->iAlphasampledepth; else if ((pData->iDHDRdeltatype == MNG_DELTATYPE_BLOCKCOLORADD ) || (pData->iDHDRdeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE) ) pData->iBitdepth = pImage->pImgbuf->iPixelsampledepth; #endif #ifdef MNG_INCLUDE_JNG pData->iJHDRimgbitdepth = pImage->pImgbuf->iBitdepth; pData->iJHDRcolortype = pImage->pImgbuf->iColortype; pData->iJHDRimgcompression = pImage->pImgbuf->iJHDRcompression; pData->iJHDRimginterlace = pImage->pImgbuf->iJHDRinterlace; pData->iJHDRalphacompression = pImage->pImgbuf->iCompression; pData->iJHDRalphafilter = pImage->pImgbuf->iFilter; pData->iJHDRalphainterlace = pImage->pImgbuf->iInterlace; pData->iJHDRalphabitdepth = pImage->pImgbuf->iAlphabitdepth; #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS /* block size specified ? */ if (iDeltatype != MNG_DELTATYPE_NOCHANGE) { /* block entirely within target ? */ if (iDeltatype != MNG_DELTATYPE_REPLACE) { if (((iBlockx + iBlockwidth ) > pData->iDatawidth ) || ((iBlocky + iBlockheight) > pData->iDataheight) ) MNG_ERROR (pData, MNG_INVALIDBLOCK); } pData->iDatawidth = iBlockwidth; pData->iDataheight = iBlockheight; } #else /* block size specified ? */ if (pData->iDHDRdeltatype != MNG_DELTATYPE_NOCHANGE) { /* block entirely within target ? */ if (pData->iDHDRdeltatype != MNG_DELTATYPE_REPLACE) { if (((pData->iDHDRblockx + pData->iDHDRblockwidth ) > pData->iDatawidth ) || ((pData->iDHDRblocky + pData->iDHDRblockheight) > pData->iDataheight) ) MNG_ERROR (pData, MNG_INVALIDBLOCK); } pData->iDatawidth = pData->iDHDRblockwidth; pData->iDataheight = pData->iDHDRblockheight; } #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS switch (iDeltatype) /* determine nr of delta-channels */ #else switch (pData->iDHDRdeltatype) /* determine nr of delta-channels */ #endif { case MNG_DELTATYPE_BLOCKALPHAADD : ; case MNG_DELTATYPE_BLOCKALPHAREPLACE : { #ifdef MNG_INCLUDE_JNG if ((pData->iColortype == MNG_COLORTYPE_GRAYA ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAYA) ) { pData->iColortype = MNG_COLORTYPE_GRAY; pData->iJHDRcolortype = MNG_COLORTYPE_JPEGGRAY; } else if ((pData->iColortype == MNG_COLORTYPE_RGBA ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLORA) ) { pData->iColortype = MNG_COLORTYPE_GRAY; pData->iJHDRcolortype = MNG_COLORTYPE_JPEGGRAY; } #else if (pData->iColortype == MNG_COLORTYPE_GRAYA) pData->iColortype = MNG_COLORTYPE_GRAY; else if (pData->iColortype == MNG_COLORTYPE_RGBA) pData->iColortype = MNG_COLORTYPE_GRAY; #endif else /* target has no alpha; that sucks! */ MNG_ERROR (pData, MNG_TARGETNOALPHA); break; } case MNG_DELTATYPE_BLOCKCOLORADD : ; case MNG_DELTATYPE_BLOCKCOLORREPLACE : { #ifdef MNG_INCLUDE_JNG if ((pData->iColortype == MNG_COLORTYPE_GRAYA ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAYA) ) { pData->iColortype = MNG_COLORTYPE_GRAY; pData->iJHDRcolortype = MNG_COLORTYPE_JPEGGRAY; } else if ((pData->iColortype == MNG_COLORTYPE_RGBA ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLORA) ) { pData->iColortype = MNG_COLORTYPE_RGB; pData->iJHDRcolortype = MNG_COLORTYPE_JPEGCOLOR; } #else if (pData->iColortype == MNG_COLORTYPE_GRAYA) pData->iColortype = MNG_COLORTYPE_GRAY; else if (pData->iColortype == MNG_COLORTYPE_RGBA) pData->iColortype = MNG_COLORTYPE_RGB; #endif else /* target has no alpha; that sucks! */ MNG_ERROR (pData, MNG_TARGETNOALPHA); break; } } /* full image replace ? */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (iDeltatype == MNG_DELTATYPE_REPLACE) #else if (pData->iDHDRdeltatype == MNG_DELTATYPE_REPLACE) #endif { iRetcode = mng_reset_object_details (pData, pImage, pData->iDatawidth, pData->iDataheight, pData->iBitdepth, pData->iColortype, pData->iCompression, pData->iFilter, pData->iInterlace, MNG_FALSE); if (iRetcode) /* on error bail out */ return iRetcode; pData->pStoreobj = pImage; /* and store straight into this object */ } else { mng_imagedatap pBufzero, pBuf; /* we store in object 0 and process it later */ pData->pStoreobj = pData->pObjzero; /* make sure to initialize object 0 then */ iRetcode = mng_reset_object_details (pData, (mng_imagep)pData->pObjzero, pData->iDatawidth, pData->iDataheight, pData->iBitdepth, pData->iColortype, pData->iCompression, pData->iFilter, pData->iInterlace, MNG_TRUE); if (iRetcode) /* on error bail out */ return iRetcode; pBuf = pImage->pImgbuf; /* copy possible palette & cheap transparency */ pBufzero = ((mng_imagep)pData->pObjzero)->pImgbuf; pBufzero->bHasPLTE = pBuf->bHasPLTE; pBufzero->bHasTRNS = pBuf->bHasTRNS; if (pBufzero->bHasPLTE) /* copy palette ? */ { mng_uint32 iX; pBufzero->iPLTEcount = pBuf->iPLTEcount; for (iX = 0; iX < pBuf->iPLTEcount; iX++) { pBufzero->aPLTEentries [iX].iRed = pBuf->aPLTEentries [iX].iRed; pBufzero->aPLTEentries [iX].iGreen = pBuf->aPLTEentries [iX].iGreen; pBufzero->aPLTEentries [iX].iBlue = pBuf->aPLTEentries [iX].iBlue; } } if (pBufzero->bHasTRNS) /* copy cheap transparency ? */ { pBufzero->iTRNSgray = pBuf->iTRNSgray; pBufzero->iTRNSred = pBuf->iTRNSred; pBufzero->iTRNSgreen = pBuf->iTRNSgreen; pBufzero->iTRNSblue = pBuf->iTRNSblue; pBufzero->iTRNScount = pBuf->iTRNScount; MNG_COPY (pBufzero->aTRNSentries, pBuf->aTRNSentries, sizeof (pBufzero->aTRNSentries)); } /* process immediately if bitdepth & colortype are equal */ pData->bDeltaimmediate = (mng_bool)((pData->bDisplaying) && (!pData->bSkipping) && ((pData->bRunning) || (pData->bSearching)) && (pData->iBitdepth == ((mng_imagep)pData->pDeltaImage)->pImgbuf->iBitdepth ) && (pData->iColortype == ((mng_imagep)pData->pDeltaImage)->pImgbuf->iColortype) ); } #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT pData->fInitrowproc = (mng_fptr)mng_init_rowproc; pData->ePng_imgtype = mng_png_imgtype (pData->iColortype, pData->iBitdepth); #else switch (pData->iColortype) /* determine row initialization routine */ { case 0 : { /* gray */ switch (pData->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g1_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g1_i; break; } case 2 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g2_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g2_i; break; } case 4 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g4_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g4_i; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g16_i; break; } #endif } break; } case 2 : { /* rgb */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgb8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgb8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgb16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgb16_i; break; } #endif } break; } case 3 : { /* indexed */ switch (pData->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx1_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx1_i; break; } case 2 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx2_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx2_i; break; } case 4 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx4_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx4_i; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx8_i; break; } } break; } case 4 : { /* gray+alpha */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_ga8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_ga8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_ga16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_ga16_i; break; } #endif } break; } case 6 : { /* rgb+alpha */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgba8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgba8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgba16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgba16_i; break; } #endif } break; } } #endif /* MNG_OPTIMIZE_FOOTPRINT_INIT */ } else MNG_ERROR (pData, MNG_OBJNOTCONCRETE); } else MNG_ERROR (pData, MNG_OBJECTUNKNOWN); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_DHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_prom (mng_datap pData, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iFilltype) #else mng_retcode mng_process_display_prom (mng_datap pData) #endif { mng_imagep pImage; mng_imagedatap pBuf; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_PROM, MNG_LC_START); #endif if (!pData->pDeltaImage) /* gotta have this now! */ MNG_ERROR (pData, MNG_INVALIDDELTA); pImage = (mng_imagep)pData->pDeltaImage; pBuf = pImage->pImgbuf; /* can't demote bitdepth! */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (iBitdepth < pBuf->iBitdepth) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if ( ((pBuf->iColortype == MNG_COLORTYPE_GRAY ) && (iColortype != MNG_COLORTYPE_GRAY ) && (iColortype != MNG_COLORTYPE_GRAYA ) && (iColortype != MNG_COLORTYPE_RGB ) && (iColortype != MNG_COLORTYPE_RGBA ) ) || ((pBuf->iColortype == MNG_COLORTYPE_GRAYA ) && (iColortype != MNG_COLORTYPE_GRAYA ) && (iColortype != MNG_COLORTYPE_RGBA ) ) || ((pBuf->iColortype == MNG_COLORTYPE_RGB ) && (iColortype != MNG_COLORTYPE_RGB ) && (iColortype != MNG_COLORTYPE_RGBA ) ) || ((pBuf->iColortype == MNG_COLORTYPE_RGBA ) && (iColortype != MNG_COLORTYPE_RGBA ) ) || #ifdef MNG_INCLUDE_JNG ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAY ) && (iColortype != MNG_COLORTYPE_JPEGGRAY ) && (iColortype != MNG_COLORTYPE_JPEGCOLOR ) && (iColortype != MNG_COLORTYPE_JPEGGRAYA ) && (iColortype != MNG_COLORTYPE_JPEGCOLORA) ) || ((pBuf->iColortype == MNG_COLORTYPE_JPEGCOLOR ) && (iColortype != MNG_COLORTYPE_JPEGCOLOR ) && (iColortype != MNG_COLORTYPE_JPEGCOLORA) ) || ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAYA ) && (iColortype != MNG_COLORTYPE_JPEGGRAYA ) && (iColortype != MNG_COLORTYPE_JPEGCOLORA) ) || ((pBuf->iColortype == MNG_COLORTYPE_JPEGCOLORA) && (iColortype != MNG_COLORTYPE_JPEGCOLORA) ) || #endif ((pBuf->iColortype == MNG_COLORTYPE_INDEXED ) && (iColortype != MNG_COLORTYPE_INDEXED ) && (iColortype != MNG_COLORTYPE_RGB ) && (iColortype != MNG_COLORTYPE_RGBA ) ) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); iRetcode = mng_promote_imageobject (pData, pImage, iBitdepth, iColortype, iFilltype); #else if (pData->iPROMbitdepth < pBuf->iBitdepth) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if ( ((pBuf->iColortype == MNG_COLORTYPE_GRAY ) && (pData->iPROMcolortype != MNG_COLORTYPE_GRAY ) && (pData->iPROMcolortype != MNG_COLORTYPE_GRAYA ) && (pData->iPROMcolortype != MNG_COLORTYPE_RGB ) && (pData->iPROMcolortype != MNG_COLORTYPE_RGBA ) ) || ((pBuf->iColortype == MNG_COLORTYPE_GRAYA ) && (pData->iPROMcolortype != MNG_COLORTYPE_GRAYA ) && (pData->iPROMcolortype != MNG_COLORTYPE_RGBA ) ) || ((pBuf->iColortype == MNG_COLORTYPE_RGB ) && (pData->iPROMcolortype != MNG_COLORTYPE_RGB ) && (pData->iPROMcolortype != MNG_COLORTYPE_RGBA ) ) || ((pBuf->iColortype == MNG_COLORTYPE_RGBA ) && (pData->iPROMcolortype != MNG_COLORTYPE_RGBA ) ) || #ifdef MNG_INCLUDE_JNG ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAY ) && (pData->iPROMcolortype != MNG_COLORTYPE_JPEGGRAY ) && (pData->iPROMcolortype != MNG_COLORTYPE_JPEGCOLOR ) && (pData->iPROMcolortype != MNG_COLORTYPE_JPEGGRAYA ) && (pData->iPROMcolortype != MNG_COLORTYPE_JPEGCOLORA) ) || ((pBuf->iColortype == MNG_COLORTYPE_JPEGCOLOR ) && (pData->iPROMcolortype != MNG_COLORTYPE_JPEGCOLOR ) && (pData->iPROMcolortype != MNG_COLORTYPE_JPEGCOLORA) ) || ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAYA ) && (pData->iPROMcolortype != MNG_COLORTYPE_JPEGGRAYA ) && (pData->iPROMcolortype != MNG_COLORTYPE_JPEGCOLORA) ) || ((pBuf->iColortype == MNG_COLORTYPE_JPEGCOLORA) && (pData->iPROMcolortype != MNG_COLORTYPE_JPEGCOLORA) ) || #endif ((pBuf->iColortype == MNG_COLORTYPE_INDEXED ) && (pData->iPROMcolortype != MNG_COLORTYPE_INDEXED ) && (pData->iPROMcolortype != MNG_COLORTYPE_RGB ) && (pData->iPROMcolortype != MNG_COLORTYPE_RGBA ) ) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); iRetcode = mng_promote_imageobject (pData, pImage, pData->iPROMbitdepth, pData->iPROMcolortype, pData->iPROMfilltype); #endif if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_PROM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode mng_process_display_ipng (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_IPNG, MNG_LC_START); #endif /* indicate it for what it is now */ pData->iDeltaImagetype = MNG_IMAGETYPE_PNG; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_IPNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG mng_retcode mng_process_display_ijng (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_IJNG, MNG_LC_START); #endif /* indicate it for what it is now */ pData->iDeltaImagetype = MNG_IMAGETYPE_JNG; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_IJNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_pplt (mng_datap pData, mng_uint8 iType, mng_uint32 iCount, mng_palette8ep paIndexentries, mng_uint8p paAlphaentries, mng_uint8p paUsedentries) #else mng_retcode mng_process_display_pplt (mng_datap pData) #endif { mng_uint32 iX; mng_imagep pImage = (mng_imagep)pData->pObjzero; mng_imagedatap pBuf = pImage->pImgbuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_PPLT, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS #ifndef MNG_OPTIMIZE_DISPLAYCALLS iX = iCount; #else iX = pData->iPPLTcount; #endif #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS switch (iType) #else switch (pData->iPPLTtype) #endif { case MNG_DELTATYPE_REPLACERGB : { #ifdef MNG_DECREMENT_LOOPS for (; iX > 0;iX--) #else #ifndef MNG_OPTIMIZE_DISPLAYCALLS for (iX = 0; iX < iCount; iX++) #else for (iX = 0; iX < pData->iPPLTcount; iX++) #endif #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (paUsedentries [iX]) { pBuf->aPLTEentries [iX].iRed = paIndexentries [iX].iRed; pBuf->aPLTEentries [iX].iGreen = paIndexentries [iX].iGreen; pBuf->aPLTEentries [iX].iBlue = paIndexentries [iX].iBlue; } #else if (pData->paPPLTusedentries [iX]) { pBuf->aPLTEentries [iX].iRed = pData->paPPLTindexentries [iX].iRed; pBuf->aPLTEentries [iX].iGreen = pData->paPPLTindexentries [iX].iGreen; pBuf->aPLTEentries [iX].iBlue = pData->paPPLTindexentries [iX].iBlue; } #endif } break; } case MNG_DELTATYPE_DELTARGB : { #ifdef MNG_DECREMENT_LOOPS for (; iX > 0;iX--) #else #ifndef MNG_OPTIMIZE_DISPLAYCALLS for (iX = 0; iX < iCount; iX++) #else for (iX = 0; iX < pData->iPPLTcount; iX++) #endif #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (paUsedentries [iX]) { pBuf->aPLTEentries [iX].iRed = (mng_uint8)(pBuf->aPLTEentries [iX].iRed + paIndexentries [iX].iRed ); pBuf->aPLTEentries [iX].iGreen = (mng_uint8)(pBuf->aPLTEentries [iX].iGreen + paIndexentries [iX].iGreen); pBuf->aPLTEentries [iX].iBlue = (mng_uint8)(pBuf->aPLTEentries [iX].iBlue + paIndexentries [iX].iBlue ); } #else if (pData->paPPLTusedentries [iX]) { pBuf->aPLTEentries [iX].iRed = (mng_uint8)(pBuf->aPLTEentries [iX].iRed + pData->paPPLTindexentries [iX].iRed ); pBuf->aPLTEentries [iX].iGreen = (mng_uint8)(pBuf->aPLTEentries [iX].iGreen + pData->paPPLTindexentries [iX].iGreen); pBuf->aPLTEentries [iX].iBlue = (mng_uint8)(pBuf->aPLTEentries [iX].iBlue + pData->paPPLTindexentries [iX].iBlue ); } #endif } break; } case MNG_DELTATYPE_REPLACEALPHA : { #ifdef MNG_DECREMENT_LOOPS for (; iX > 0;iX--) #else #ifndef MNG_OPTIMIZE_DISPLAYCALLS for (iX = 0; iX < iCount; iX++) #else for (iX = 0; iX < pData->iPPLTcount; iX++) #endif #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (paUsedentries [iX]) pBuf->aTRNSentries [iX] = paAlphaentries [iX]; } #else if (pData->paPPLTusedentries [iX]) pBuf->aTRNSentries [iX] = pData->paPPLTalphaentries [iX]; } #endif break; } case MNG_DELTATYPE_DELTAALPHA : { #ifdef MNG_DECREMENT_LOOPS for (; iX > 0;iX--) #else #ifndef MNG_OPTIMIZE_DISPLAYCALLS for (iX = 0; iX < iCount; iX++) #else for (iX = 0; iX < pData->iPPLTcount; iX++) #endif #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (paUsedentries [iX]) pBuf->aTRNSentries [iX] = (mng_uint8)(pBuf->aTRNSentries [iX] + paAlphaentries [iX]); #else if (pData->paPPLTusedentries [iX]) pBuf->aTRNSentries [iX] = (mng_uint8)(pBuf->aTRNSentries [iX] + pData->paPPLTalphaentries [iX]); #endif } break; } case MNG_DELTATYPE_REPLACERGBA : { #ifdef MNG_DECREMENT_LOOPS for (; iX > 0;iX--) #else #ifndef MNG_OPTIMIZE_DISPLAYCALLS for (iX = 0; iX < iCount; iX++) #else for (iX = 0; iX < pData->iPPLTcount; iX++) #endif #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (paUsedentries [iX]) { pBuf->aPLTEentries [iX].iRed = paIndexentries [iX].iRed; pBuf->aPLTEentries [iX].iGreen = paIndexentries [iX].iGreen; pBuf->aPLTEentries [iX].iBlue = paIndexentries [iX].iBlue; pBuf->aTRNSentries [iX] = paAlphaentries [iX]; } #else if (pData->paPPLTusedentries [iX]) { pBuf->aPLTEentries [iX].iRed = pData->paPPLTindexentries [iX].iRed; pBuf->aPLTEentries [iX].iGreen = pData->paPPLTindexentries [iX].iGreen; pBuf->aPLTEentries [iX].iBlue = pData->paPPLTindexentries [iX].iBlue; pBuf->aTRNSentries [iX] = pData->paPPLTalphaentries [iX]; } #endif } break; } case MNG_DELTATYPE_DELTARGBA : { #ifdef MNG_DECREMENT_LOOPS for (; iX > 0;iX--) #else #ifndef MNG_OPTIMIZE_DISPLAYCALLS for (iX = 0; iX < iCount; iX++) #else for (iX = 0; iX < pData->iPPLTcount; iX++) #endif #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (paUsedentries [iX]) { pBuf->aPLTEentries [iX].iRed = (mng_uint8)(pBuf->aPLTEentries [iX].iRed + paIndexentries [iX].iRed ); pBuf->aPLTEentries [iX].iGreen = (mng_uint8)(pBuf->aPLTEentries [iX].iGreen + paIndexentries [iX].iGreen); pBuf->aPLTEentries [iX].iBlue = (mng_uint8)(pBuf->aPLTEentries [iX].iBlue + paIndexentries [iX].iBlue ); pBuf->aTRNSentries [iX] = (mng_uint8)(pBuf->aTRNSentries [iX] + paAlphaentries [iX]); } #else if (pData->paPPLTusedentries [iX]) { pBuf->aPLTEentries [iX].iRed = (mng_uint8)(pBuf->aPLTEentries [iX].iRed + pData->paPPLTindexentries [iX].iRed ); pBuf->aPLTEentries [iX].iGreen = (mng_uint8)(pBuf->aPLTEentries [iX].iGreen + pData->paPPLTindexentries [iX].iGreen); pBuf->aPLTEentries [iX].iBlue = (mng_uint8)(pBuf->aPLTEentries [iX].iBlue + pData->paPPLTindexentries [iX].iBlue ); pBuf->aTRNSentries [iX] = (mng_uint8)(pBuf->aTRNSentries [iX] + pData->paPPLTalphaentries [iX]); } #endif } break; } } #ifndef MNG_OPTIMIZE_DISPLAYCALLS if ((iType != MNG_DELTATYPE_REPLACERGB) && (iType != MNG_DELTATYPE_DELTARGB)) #else if ((pData->iPPLTtype != MNG_DELTATYPE_REPLACERGB) && (pData->iPPLTtype != MNG_DELTATYPE_DELTARGB ) ) #endif { if (pBuf->bHasTRNS) { #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (iCount > pBuf->iTRNScount) pBuf->iTRNScount = iCount; #else if (pData->iPPLTcount > pBuf->iTRNScount) pBuf->iTRNScount = pData->iPPLTcount; #endif } else { #ifndef MNG_OPTIMIZE_DISPLAYCALLS pBuf->iTRNScount = iCount; pBuf->bHasTRNS = MNG_TRUE; #else pBuf->iTRNScount = pData->iPPLTcount; pBuf->bHasTRNS = MNG_TRUE; #endif } } #ifndef MNG_OPTIMIZE_DISPLAYCALLS if ((iType != MNG_DELTATYPE_REPLACEALPHA) && (iType != MNG_DELTATYPE_DELTAALPHA)) #else if ((pData->iPPLTtype != MNG_DELTATYPE_REPLACEALPHA) && (pData->iPPLTtype != MNG_DELTATYPE_DELTAALPHA ) ) #endif { #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (iCount > pBuf->iPLTEcount) pBuf->iPLTEcount = iCount; #else if (pData->iPPLTcount > pBuf->iPLTEcount) pBuf->iPLTEcount = pData->iPPLTcount; #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_PPLT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MAGN #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_magn (mng_datap pData, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iMethodX, mng_uint16 iMX, mng_uint16 iMY, mng_uint16 iML, mng_uint16 iMR, mng_uint16 iMT, mng_uint16 iMB, mng_uint8 iMethodY) #else mng_retcode mng_process_display_magn (mng_datap pData) #endif { mng_uint16 iX; mng_imagep pImage; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MAGN, MNG_LC_START); #endif /* iterate the object-ids */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS for (iX = iFirstid; iX <= iLastid; iX++) #else for (iX = pData->iMAGNfirstid; iX <= pData->iMAGNlastid; iX++) #endif { if (iX == 0) /* process object 0 ? */ { pImage = (mng_imagep)pData->pObjzero; #ifndef MNG_OPTIMIZE_DISPLAYCALLS pImage->iMAGN_MethodX = iMethodX; pImage->iMAGN_MethodY = iMethodY; pImage->iMAGN_MX = iMX; pImage->iMAGN_MY = iMY; pImage->iMAGN_ML = iML; pImage->iMAGN_MR = iMR; pImage->iMAGN_MT = iMT; pImage->iMAGN_MB = iMB; #else pImage->iMAGN_MethodX = pData->iMAGNmethodX; pImage->iMAGN_MethodY = pData->iMAGNmethodY; pImage->iMAGN_MX = pData->iMAGNmX; pImage->iMAGN_MY = pData->iMAGNmY; pImage->iMAGN_ML = pData->iMAGNmL; pImage->iMAGN_MR = pData->iMAGNmR; pImage->iMAGN_MT = pData->iMAGNmT; pImage->iMAGN_MB = pData->iMAGNmB; #endif } else { pImage = mng_find_imageobject (pData, iX); /* object exists & is not frozen ? */ if ((pImage) && (!pImage->bFrozen)) { /* previous magnification to be done ? */ if ((pImage->iMAGN_MethodX) || (pImage->iMAGN_MethodY)) { mng_retcode iRetcode = mng_magnify_imageobject (pData, pImage); if (iRetcode) /* on error bail out */ return iRetcode; } #ifndef MNG_OPTIMIZE_DISPLAYCALLS pImage->iMAGN_MethodX = iMethodX; pImage->iMAGN_MethodY = iMethodY; pImage->iMAGN_MX = iMX; pImage->iMAGN_MY = iMY; pImage->iMAGN_ML = iML; pImage->iMAGN_MR = iMR; pImage->iMAGN_MT = iMT; pImage->iMAGN_MB = iMB; #else pImage->iMAGN_MethodX = pData->iMAGNmethodX; pImage->iMAGN_MethodY = pData->iMAGNmethodY; pImage->iMAGN_MX = pData->iMAGNmX; pImage->iMAGN_MY = pData->iMAGNmY; pImage->iMAGN_ML = pData->iMAGNmL; pImage->iMAGN_MR = pData->iMAGNmR; pImage->iMAGN_MT = pData->iMAGNmT; pImage->iMAGN_MB = pData->iMAGNmB; #endif } } } #ifndef MNG_OPTIMIZE_DISPLAYCALLS pData->iMAGNfromid = iFirstid; pData->iMAGNtoid = iLastid; iX = iFirstid; #else pData->iMAGNfromid = pData->iMAGNfirstid; pData->iMAGNtoid = pData->iMAGNlastid; iX = pData->iMAGNfirstid; #endif /* iterate again for showing */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS while ((iX <= iLastid) && (!pData->bTimerset)) #else while ((iX <= pData->iMAGNlastid) && (!pData->bTimerset)) #endif { pData->iMAGNcurrentid = iX; if (iX) /* only real objects ! */ { pImage = mng_find_imageobject (pData, iX); /* object exists & is not frozen & is visible & is viewable ? */ if ((pImage) && (!pImage->bFrozen) && (pImage->bVisible) && (pImage->bViewable)) { mng_retcode iRetcode = mng_display_image (pData, pImage, MNG_FALSE); if (iRetcode) return iRetcode; } } iX++; } if (pData->bTimerset) /* broken ? */ pData->iBreakpoint = 9; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MAGN, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_process_display_magn2 (mng_datap pData) { mng_uint16 iX; mng_imagep pImage; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MAGN, MNG_LC_START); #endif iX = pData->iMAGNcurrentid; /* iterate again for showing */ while ((iX <= pData->iMAGNtoid) && (!pData->bTimerset)) { pData->iMAGNcurrentid = iX; if (iX) /* only real objects ! */ { pImage = mng_find_imageobject (pData, iX); /* object exists & is not frozen & is visible & is viewable ? */ if ((pImage) && (!pImage->bFrozen) && (pImage->bVisible) && (pImage->bViewable)) { mng_retcode iRetcode = mng_display_image (pData, pImage, MNG_FALSE); if (iRetcode) return iRetcode; } } iX++; } if (pData->bTimerset) /* broken ? */ pData->iBreakpoint = 9; else pData->iBreakpoint = 0; /* not again ! */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MAGN, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_past (mng_datap pData, mng_uint16 iTargetid, mng_uint8 iTargettype, mng_int32 iTargetx, mng_int32 iTargety, mng_uint32 iCount, mng_ptr pSources) #else mng_retcode mng_process_display_past (mng_datap pData) #endif { mng_retcode iRetcode = MNG_NOERROR; mng_imagep pTargetimg; mng_imagep pSourceimg; #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_past_sourcep pSource = (mng_past_sourcep)pSources; #else mng_past_sourcep pSource = (mng_past_sourcep)pData->pPASTsources; #endif mng_uint32 iX = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_PAST, MNG_LC_START); #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (iTargetid) /* a real destination object ? */ #else if (pData->iPASTtargetid) /* a real destination object ? */ #endif { /* let's find it then */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS pTargetimg = (mng_imagep)mng_find_imageobject (pData, iTargetid); #else pTargetimg = (mng_imagep)mng_find_imageobject (pData, pData->iPASTtargetid); #endif if (!pTargetimg) /* if it doesn't exists; do a barf */ MNG_ERROR (pData, MNG_OBJECTUNKNOWN); /* it's gotta be abstract !!! */ if (pTargetimg->pImgbuf->bConcrete) MNG_ERROR (pData, MNG_OBJNOTABSTRACT); /* we want 32-/64-bit RGBA to play with ! */ if ((pTargetimg->pImgbuf->iBitdepth <= MNG_BITDEPTH_8) || (pTargetimg->pImgbuf->iColortype == MNG_COLORTYPE_GRAY) || (pTargetimg->pImgbuf->iColortype == MNG_COLORTYPE_RGB) || (pTargetimg->pImgbuf->iColortype == MNG_COLORTYPE_INDEXED) || (pTargetimg->pImgbuf->iColortype == MNG_COLORTYPE_GRAYA) ) iRetcode = mng_promote_imageobject (pData, pTargetimg, MNG_BITDEPTH_8, MNG_COLORTYPE_RGBA, MNG_FILLMETHOD_LEFTBITREPLICATE); else if ((pTargetimg->pImgbuf->iBitdepth > MNG_BITDEPTH_8) && ((pTargetimg->pImgbuf->iColortype == MNG_COLORTYPE_GRAY) || (pTargetimg->pImgbuf->iColortype == MNG_COLORTYPE_RGB) || (pTargetimg->pImgbuf->iColortype == MNG_COLORTYPE_GRAYA) ) ) iRetcode = mng_promote_imageobject (pData, pTargetimg, MNG_BITDEPTH_16, MNG_COLORTYPE_RGBA, MNG_FILLMETHOD_LEFTBITREPLICATE); #ifdef MNG_INCLUDE_JNG else if ((pTargetimg->pImgbuf->iColortype == MNG_COLORTYPE_JPEGGRAY) || (pTargetimg->pImgbuf->iColortype == MNG_COLORTYPE_JPEGCOLOR) || (pTargetimg->pImgbuf->iColortype == MNG_COLORTYPE_JPEGGRAYA) ) iRetcode = mng_promote_imageobject (pData, pTargetimg, pTargetimg->pImgbuf->iBitdepth, MNG_COLORTYPE_JPEGCOLORA, MNG_FILLMETHOD_LEFTBITREPLICATE); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* make it really abstract ? */ if (!pTargetimg->pImgbuf->bCorrected) { iRetcode = mng_colorcorrect_object (pData, pTargetimg); if (iRetcode) /* on error bail out */ return iRetcode; } } else { /* pasting into object 0 !!! */ pTargetimg = (mng_imagep)pData->pObjzero; /* is it usable ??? */ if ((pTargetimg->bClipped) && (pTargetimg->iClipr > pTargetimg->iPosx) && (pTargetimg->iClipb > pTargetimg->iPosy)) { /* make it 32-bit RGBA please !!! */ iRetcode = mng_reset_object_details (pData, pTargetimg, pTargetimg->iClipr - pTargetimg->iPosx, pTargetimg->iClipb - pTargetimg->iPosy, MNG_BITDEPTH_8, MNG_COLORTYPE_RGBA, 0, 0, 0, MNG_FALSE); if (iRetcode) /* on error bail out */ return iRetcode; } else pTargetimg = MNG_NULL; /* clipped beyond visibility ! */ } if (pTargetimg) /* usable destination ? */ { mng_int32 iSourceY; mng_int32 iSourceYinc; mng_int32 iSourcerowsize; mng_int32 iSourcesamples; mng_bool bSourceRGBA16; mng_int32 iTargetY; mng_int32 iTargetrowsize; mng_int32 iTargetsamples; mng_bool bTargetRGBA16 = MNG_FALSE; mng_int32 iTemprowsize; mng_imagedatap pBuf; #ifndef MNG_SKIPCHUNK_MAGN /* needs magnification ? */ if ((pTargetimg->iMAGN_MethodX) || (pTargetimg->iMAGN_MethodY)) iRetcode = mng_magnify_imageobject (pData, pTargetimg); #endif if (!iRetcode) /* still ok ? */ { bTargetRGBA16 = (mng_bool)(pTargetimg->pImgbuf->iBitdepth > 8); #ifndef MNG_OPTIMIZE_DISPLAYCALLS switch (iTargettype) /* determine target x/y */ #else switch (pData->iPASTtargettype) /* determine target x/y */ #endif { case 0 : { #ifndef MNG_OPTIMIZE_DISPLAYCALLS pData->iPastx = iTargetx; pData->iPasty = iTargety; #else pData->iPastx = pData->iPASTtargetx; pData->iPasty = pData->iPASTtargety; #endif break; } case 1 : { #ifndef MNG_OPTIMIZE_DISPLAYCALLS pData->iPastx = pTargetimg->iPastx + iTargetx; pData->iPasty = pTargetimg->iPasty + iTargety; #else pData->iPastx = pTargetimg->iPastx + pData->iPASTtargetx; pData->iPasty = pTargetimg->iPasty + pData->iPASTtargety; #endif break; } case 2 : { #ifndef MNG_OPTIMIZE_DISPLAYCALLS pData->iPastx += iTargetx; pData->iPasty += iTargety; #else pData->iPastx += pData->iPASTtargetx; pData->iPasty += pData->iPASTtargety; #endif break; } } /* save for next time ... */ pTargetimg->iPastx = pData->iPastx; pTargetimg->iPasty = pData->iPasty; /* address destination for row-routines */ pData->pStoreobj = (mng_objectp)pTargetimg; pData->pStorebuf = (mng_objectp)pTargetimg->pImgbuf; } /* process the sources one by one */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS while ((!iRetcode) && (iX < iCount)) #else while ((!iRetcode) && (iX < pData->iPASTcount)) #endif { /* find the little bastards first */ pSourceimg = (mng_imagep)mng_find_imageobject (pData, pSource->iSourceid); /* exists and viewable? */ if ((pSourceimg) && (pSourceimg->bViewable)) { /* needs magnification ? */ #ifndef MNG_SKIPCHUNK_MAGN if ((pSourceimg->iMAGN_MethodX) || (pSourceimg->iMAGN_MethodY)) iRetcode = mng_magnify_imageobject (pData, pSourceimg); #endif if (!iRetcode) /* still ok ? */ { pBuf = (mng_imagedatap)pSourceimg->pImgbuf; /* address source for row-routines */ pData->pRetrieveobj = (mng_objectp)pSourceimg; pData->iPass = -1; /* init row-processing variables */ pData->iRowinc = 1; pData->iColinc = 1; pData->iPixelofs = 0; iSourcesamples = (mng_int32)pBuf->iWidth; iSourcerowsize = pBuf->iRowsize; bSourceRGBA16 = (mng_bool)(pBuf->iBitdepth > 8); /* make sure the delta-routines do the right thing */ pData->iDeltatype = MNG_DELTATYPE_BLOCKPIXELREPLACE; switch (pBuf->iColortype) { case 0 : { #ifndef MNG_NO_16BIT_SUPPORT if (bSourceRGBA16) pData->fRetrieverow = (mng_fptr)mng_retrieve_g16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_g8; pData->bIsOpaque = (mng_bool)(!pBuf->bHasTRNS); break; } case 2 : { #ifndef MNG_NO_16BIT_SUPPORT if (bSourceRGBA16) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb8; pData->bIsOpaque = (mng_bool)(!pBuf->bHasTRNS); break; } case 3 : { pData->fRetrieverow = (mng_fptr)mng_retrieve_idx8; pData->bIsOpaque = (mng_bool)(!pBuf->bHasTRNS); break; } case 4 : { #ifndef MNG_NO_16BIT_SUPPORT if (bSourceRGBA16) pData->fRetrieverow = (mng_fptr)mng_retrieve_ga16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_ga8; pData->bIsOpaque = MNG_FALSE; break; } case 6 : { #ifndef MNG_NO_16BIT_SUPPORT if (bSourceRGBA16) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba8; pData->bIsOpaque = MNG_FALSE; break; } case 8 : { #ifndef MNG_NO_16BIT_SUPPORT if (bSourceRGBA16) pData->fRetrieverow = (mng_fptr)mng_retrieve_g16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_g8; pData->bIsOpaque = MNG_TRUE; break; } case 10 : { #ifndef MNG_NO_16BIT_SUPPORT if (bSourceRGBA16) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb8; pData->bIsOpaque = MNG_TRUE; break; } case 12 : { #ifndef MNG_NO_16BIT_SUPPORT if (bSourceRGBA16) pData->fRetrieverow = (mng_fptr)mng_retrieve_ga16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_ga8; pData->bIsOpaque = MNG_FALSE; break; } case 14 : { #ifndef MNG_NO_16BIT_SUPPORT if (bSourceRGBA16) pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba16; else #endif pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba8; pData->bIsOpaque = MNG_FALSE; break; } } /* determine scaling */ #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_NO_DELTA_PNG if ((!bSourceRGBA16) && (bTargetRGBA16)) pData->fScalerow = (mng_fptr)mng_scale_rgba8_rgba16; else if ((bSourceRGBA16) && (!bTargetRGBA16)) pData->fScalerow = (mng_fptr)mng_scale_rgba16_rgba8; else #endif #endif pData->fScalerow = MNG_NULL; /* default no color-correction */ pData->fCorrectrow = MNG_NULL; #if defined(MNG_FULL_CMS) /* determine color-management routine */ iRetcode = mng_init_full_cms (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #elif defined(MNG_GAMMA_ONLY) iRetcode = mng_init_gamma_only (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #elif defined(MNG_APP_CMS) iRetcode = mng_init_app_cms (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #endif } if (!iRetcode) /* still ok ? */ { pData->fFliprow = MNG_NULL; /* no flipping or tiling by default */ pData->fTilerow = MNG_NULL; /* but perhaps we do have to ... */ switch (pSource->iOrientation) { case 2 : ; case 4 : { #ifndef MNG_NO_16BIT_SUPPORT if (bTargetRGBA16) pData->fFliprow = (mng_fptr)mng_flip_rgba16; else #endif pData->fFliprow = (mng_fptr)mng_flip_rgba8; break; } case 8 : { #ifndef MNG_NO_16BIT_SUPPORT if (bTargetRGBA16) pData->fTilerow = (mng_fptr)mng_tile_rgba16; else #endif pData->fTilerow = (mng_fptr)mng_tile_rgba8; break; } } /* determine composition routine */ /* note that we're abusing the delta-routine setup !!! */ switch (pSource->iComposition) { case 0 : { /* composite over */ #ifndef MNG_NO_16BIT_SUPPORT if (bTargetRGBA16) pData->fDeltarow = (mng_fptr)mng_composeover_rgba16; else #endif pData->fDeltarow = (mng_fptr)mng_composeover_rgba8; break; } case 1 : { /* replace */ #ifndef MNG_NO_16BIT_SUPPORT if (bTargetRGBA16) pData->fDeltarow = (mng_fptr)mng_delta_rgba16_rgba16; else #endif pData->fDeltarow = (mng_fptr)mng_delta_rgba8_rgba8; break; } case 2 : { /* composite under */ #ifndef MNG_NO_16BIT_SUPPORT if (bTargetRGBA16) pData->fDeltarow = (mng_fptr)mng_composeunder_rgba16; else #endif pData->fDeltarow = (mng_fptr)mng_composeunder_rgba8; break; } } /* determine offsets & clipping */ if (pSource->iOffsettype == 1) { pData->iDestl = pData->iPastx + pSource->iOffsetx; pData->iDestt = pData->iPasty + pSource->iOffsety; } else { pData->iDestl = pSource->iOffsetx; pData->iDestt = pSource->iOffsety; } pData->iDestr = (mng_int32)pTargetimg->pImgbuf->iWidth; pData->iDestb = (mng_int32)pTargetimg->pImgbuf->iHeight; /* take the source dimension into account ? */ if (pSource->iOrientation != 8) { pData->iDestr = MIN_COORD (pData->iDestr, pData->iDestl + (mng_int32)pBuf->iWidth); pData->iDestb = MIN_COORD (pData->iDestb, pData->iDestt + (mng_int32)pBuf->iHeight); } /* source clipping */ if (pSource->iBoundarytype == 1) { if (pData->iDestl < pData->iPastx + pSource->iBoundaryl) pData->iSourcel = pData->iPastx + pSource->iBoundaryl - pData->iDestl; else pData->iSourcel = 0; if (pData->iDestt < pData->iPasty + pSource->iBoundaryt) pData->iSourcet = pData->iPasty + pSource->iBoundaryt - pData->iDestt; else pData->iSourcet = 0; pData->iDestl = MAX_COORD (pData->iDestl, pData->iPastx + pSource->iBoundaryl); pData->iDestt = MAX_COORD (pData->iDestt, pData->iPasty + pSource->iBoundaryt); pData->iDestr = MIN_COORD (pData->iDestr, pData->iPastx + pSource->iBoundaryr); pData->iDestb = MIN_COORD (pData->iDestb, pData->iPasty + pSource->iBoundaryb); } else { if (pData->iDestl < pSource->iBoundaryl) pData->iSourcel = pSource->iBoundaryl - pData->iDestl; else pData->iSourcel = 0; if (pData->iDestt < pSource->iBoundaryt) pData->iSourcet = pSource->iBoundaryt - pData->iDestt; else pData->iSourcet = 0; pData->iDestl = MAX_COORD (pData->iDestl, pSource->iBoundaryl); pData->iDestt = MAX_COORD (pData->iDestt, pSource->iBoundaryt); pData->iDestr = MIN_COORD (pData->iDestr, pSource->iBoundaryr); pData->iDestb = MIN_COORD (pData->iDestb, pSource->iBoundaryb); } if (pData->iSourcel) /* indent source ? */ { #ifndef MNG_NO_16BIT_SUPPORT if (bTargetRGBA16) /* abuse tiling routine to shift source-pixels */ pData->fTilerow = (mng_fptr)mng_tile_rgba16; else #endif pData->fTilerow = (mng_fptr)mng_tile_rgba8; } /* anything to display ? */ if ((pData->iDestl <= pData->iDestr) && (pData->iDestt <= pData->iDestb)) { /* init variables for the loop */ if ((pSource->iOrientation == 2) || (pSource->iOrientation == 6)) { iSourceY = (mng_int32)pBuf->iHeight - 1 - pData->iSourcet; iSourceYinc = -1; } else { iSourceY = pData->iSourcet; iSourceYinc = 1; } iTargetY = pData->iDestt; pData->iCol = pData->iDestl; iTargetsamples = pData->iDestr - pData->iDestl; #ifndef MNG_NO_16BIT_SUPPORT if (bTargetRGBA16) iTargetrowsize = (iTargetsamples << 3); else #endif iTargetrowsize = (iTargetsamples << 2); /* get temporary work-buffers */ if (iSourcerowsize > iTargetrowsize) iTemprowsize = iSourcerowsize << 1; else iTemprowsize = iTargetrowsize << 1; MNG_ALLOC (pData, pData->pRGBArow, iTemprowsize); MNG_ALLOC (pData, pData->pWorkrow, iTemprowsize); while ((!iRetcode) && (iTargetY < pData->iDestb)) { /* get a row */ pData->iRow = iSourceY; pData->iRowsamples = iSourcesamples; pData->iRowsize = iSourcerowsize; pData->bIsRGBA16 = bSourceRGBA16; iRetcode = ((mng_retrieverow)pData->fRetrieverow) (pData); /* scale it (if necessary) */ if ((!iRetcode) && (pData->fScalerow)) iRetcode = ((mng_scalerow)pData->fScalerow) (pData); pData->bIsRGBA16 = bTargetRGBA16; /* color correction (if necessary) */ if ((!iRetcode) && (pData->fCorrectrow)) iRetcode = ((mng_correctrow)pData->fCorrectrow) (pData); /* flipping (if necessary) */ if ((!iRetcode) && (pData->fFliprow)) iRetcode = ((mng_fliprow)pData->fFliprow) (pData); /* tiling (if necessary) */ if ((!iRetcode) && (pData->fTilerow)) iRetcode = ((mng_tilerow)pData->fTilerow) (pData); if (!iRetcode) /* and paste..... */ { pData->iRow = iTargetY; pData->iRowsamples = iTargetsamples; pData->iRowsize = iTargetrowsize; iRetcode = ((mng_deltarow)pData->fDeltarow) (pData); } iSourceY += iSourceYinc; /* and next line */ if (iSourceY < 0) iSourceY = (mng_int32)pBuf->iHeight - 1; else if (iSourceY >= (mng_int32)pBuf->iHeight) iSourceY = 0; iTargetY++; } /* drop the temporary row-buffer */ MNG_FREEX (pData, pData->pWorkrow, iTemprowsize); MNG_FREEX (pData, pData->pRGBArow, iTemprowsize); } #if defined(MNG_FULL_CMS) /* cleanup cms stuff */ if (!iRetcode) iRetcode = mng_clear_cms (pData); #endif } pSource++; /* neeeeext */ iX++; } } if (iRetcode) /* on error bail out */ return iRetcode; #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (!iTargetid) /* did we paste into object 0 ? */ #else if (!pData->iPASTtargetid) /* did we paste into object 0 ? */ #endif { /* display it then ! */ iRetcode = mng_display_image (pData, pTargetimg, MNG_FALSE); if (iRetcode) /* on error bail out */ return iRetcode; } else { /* target is visible & viewable ? */ if ((pTargetimg->bVisible) && (pTargetimg->bViewable)) { iRetcode = mng_display_image (pData, pTargetimg, MNG_FALSE); if (iRetcode) return iRetcode; } } } if (pData->bTimerset) /* broken ? */ { #ifndef MNG_OPTIMIZE_DISPLAYCALLS pData->iPASTid = iTargetid; #else pData->iPASTid = pData->iPASTtargetid; #endif pData->iBreakpoint = 11; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_PAST, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SKIPCHUNK_PAST */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_process_display_past2 (mng_datap pData) { mng_retcode iRetcode; mng_imagep pTargetimg; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_PAST, MNG_LC_START); #endif if (pData->iPASTid) /* a real destination object ? */ pTargetimg = (mng_imagep)mng_find_imageobject (pData, pData->iPASTid); else /* otherwise object 0 */ pTargetimg = (mng_imagep)pData->pObjzero; iRetcode = mng_display_image (pData, pTargetimg, MNG_FALSE); if (iRetcode) return iRetcode; pData->iBreakpoint = 0; /* only once */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_PAST, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SKIPCHUNK_PAST */ /* ************************************************************************** */ #endif /* MNG_INCLUDE_DISPLAY_PROCS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/ltmain.sh0000755000000000000000000105017412115360512013310 0ustar rootroot # libtool (GNU libtool) 2.4 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4 TIMESTAMP="" package_revision=1.3293 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${EGREP="grep -E"} : ${FGREP="grep -F"} : ${GREP="grep"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SED="sed"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=: for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -e 's/\([\\"]\)/\\\1/g' \ -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then #func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" #test "$absdir" != "$libdir" && \ # func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_apped perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 libmng-2.0.2/CMake/0000755000000000000000000000000012115351630012436 5ustar rootrootlibmng-2.0.2/CMake/FindMAN.cmake0000644000000000000000000000043512005307151014653 0ustar rootrootFIND_PROGRAM(MAN_EXE NAMES man PATHS /bin /usr/bin /usr/local/bin) IF(MAN_EXE) SET(MAN_FOUND YES) ELSE(MAN_EXE) # MESSAGE(WARNING "Unable to find 'man' program.MAN pages not installed") SET(MAN_FOUND NO) ENDIF(MAN_EXE) libmng-2.0.2/CMake/FindGZIP.cmake0000644000000000000000000000041512005307151015007 0ustar rootrootFIND_PROGRAM(GZIP_EXE NAMES gzip PATHS /bin /usr/bin /usr/local/bin) IF(GZIP_EXE) SET(GZIP_FOUND YES) ELSE(GZIP_EXE) MESSAGE(WARNING "Unable to find 'gzip' program") SET(GZIP_FOUND NO) ENDIF(GZIP_EXE) libmng-2.0.2/CMake/FindLCMS2.cmake0000644000000000000000000000167212005307151015064 0ustar rootroot# - Find LCMS version 2 library # # LCMS2_INCLUDE_DIR - Where to find lcms2.h, etc. # LCMS2_LIBRARIES - Libraries to link against to use LCMS2. # LCMS2_FOUND - If false, do not try to use LCMS2. # # also defined, but not for general use are # LCMS2_LIBRARY - Where to find the LCMS2 library. FIND_PATH(LCMS2_INCLUDE_DIR lcms2.h PATHS /usr/include /usr/local/include /opt/include /opt/local/include) SET(LCMS2_NAMES ${LCMS2_NAMES} lcms2 liblcms2 liblcms2_static) FIND_LIBRARY(LCMS2_LIBRARY NAMES ${LCMS2_NAMES} ) MARK_AS_ADVANCED(LCMS2_INCLUDE_DIR LCMS2_LIBRARY) # handle the QUIETLY and REQUIRED arguments and set LCMS2_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(LCMS2 DEFAULT_MSG LCMS2_LIBRARY LCMS2_INCLUDE_DIR) IF(LCMS2_FOUND) SET(LCMS2_INCLUDE_DIRS ${LCMS2_INCLUDE_DIR}) SET(LCMS2_LIBRARIES ${LCMS2_LIBRARY} ) ENDIF(LCMS2_FOUND) libmng-2.0.2/CMake/vers.cmake0000644000000000000000000000011312115351630014412 0ustar rootrootSET(MNG_VERSION_MAJOR 2) SET(MNG_VERSION_MINOR 0) SET(MNG_VERSION_PATCH 2) libmng-2.0.2/CMake/FindLCMS1.cmake0000644000000000000000000000141012005307151015051 0ustar rootroot# - Find LCMS version 1 library # # LCMS_INCLUDE_DIR # LCMS_LIBRARIES # LCMS_FOUND # # also defined, but not for general use are # LCMS_LIBRARY FIND_PATH(LCMS1_INCLUDE_DIR lcms.h PATHS /usr/include /usr/local/include /opt/include /opt/local/include) SET(LCMS1_NAMES ${LCMS_NAMES} lcms liblcms liblcms_static) FIND_LIBRARY(LCMS1_LIBRARY NAMES ${LCMS1_NAMES} ) MARK_AS_ADVANCED(LCMS1_INCLUDE_DIR LCMS1_LIBRARY) # handle the QUIETLY and REQUIRED arguments and set LCMS_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(LCMS1 DEFAULT_MSG LCMS1_LIBRARY LCMS1_INCLUDE_DIR) IF(LCMS1_FOUND) SET(LCMS1_INCLUDE_DIRS ${LCMS1_INCLUDE_DIR}) SET(LCMS1_LIBRARIES ${LCMS1_LIBRARY} ) ENDIF(LCMS1_FOUND) libmng-2.0.2/CMake/libmng.pc.cmake0000644000000000000000000000046212005307151015310 0ustar rootrootprefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=@CMAKE_INSTALL_PREFIX@ libdir=${prefix}/@MNG_INSTALL_LIB_DIR@ includedir=${prefix}/@MNG_INSTALL_INCLUDE_DIR@ Name: libmng Description: Loads PNG/MNG/JNG files Version: @MNG_VERSION@ Libs: -L${libdir} -lmng Libs.private: @MNG_LIBS_PRIVATE@ Cflags: -I${includedir} libmng-2.0.2/config.h.in~0000644000000000000000000000720612115352373013711 0ustar rootroot/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* define if you want JPEG support */ #undef HAVE_LIBJPEG /* define if you want lcms v1 support */ #undef HAVE_LIBLCMS1 /* define if you want lcms v2 support */ #undef HAVE_LIBLCMS2 /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* define if you want chunk access support */ #undef MNG_ACCESS_CHUNKS /* enable building standard shared object */ #undef MNG_BUILD_SO /* enable verbose error text */ #undef MNG_ERROR_TELLTALE /* define if you want full lcms support */ #undef MNG_FULL_CMS /* enable support for accessing chunks */ #undef MNG_STORE_CHUNKS /* define if you want display support */ #undef MNG_SUPPORT_DISPLAY /* define if you want dynamic support */ #undef MNG_SUPPORT_DYNAMICMNG /* define if you want full mng support */ #undef MNG_SUPPORT_FULL /* define if you want read support */ #undef MNG_SUPPORT_READ /* enable support for debug tracing */ #undef MNG_SUPPORT_TRACE /* define if you want write support */ #undef MNG_SUPPORT_WRITE /* enable support for debug messages */ #undef MNG_TRACE_TELLTALE /* but: libmng.dll (!) */ #undef MNG_VERSION_DLL /* MAJOR number of version */ #undef MNG_VERSION_MAJOR /* MINOR number of version */ #undef MNG_VERSION_MINOR /* PATCH number of version */ #undef MNG_VERSION_RELEASE /* eg. libmng.so.1 */ #undef MNG_VERSION_SO /* 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 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to empty if `const' does not conform to ANSI C. */ #undef const libmng-2.0.2/libmng.pc0000644000000000000000000000035112115373260013254 0ustar rootrootprefix=/usr exec_prefix=${prefix} libdir=/usr/lib64 includedir=${prefix}/include Name: libmng Description: Loads PNG/MNG/JNG files Version: 2.0.2 Libs: -L${libdir} -lmng Libs.private: -lz -lm -ljpeg -llcms2 Cflags: -I${includedir} libmng-2.0.2/libmng_trace.h0000644000000000000000000017723712005307152014274 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_trace.h copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Trace functions (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the trace functions * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - added chunk-access function trace-codes * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * 0.5.1 - 05/13/2000 - G.Juyn * */ /* * - added save_state & restore_state trace-codes * */ /* * 0.5.1 - 05/15/2000 - G.Juyn * */ /* * - added getimgdata & putimgdata trace-codes * */ /* * * */ /* * 0.5.2 - 05/20/2000 - G.Juyn * */ /* * - added JNG tracecodes * */ /* * 0.5.2 - 05/23/2000 - G.Juyn * */ /* * - added trace-table entry definition * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - added tracecodes for global animation color-chunks * */ /* * - added tracecodes for get/set of default ZLIB/IJG parms * */ /* * - added tracecodes for global PLTE,tRNS,bKGD * */ /* * 0.5.2 - 05/30/2000 - G.Juyn * */ /* * - added tracecodes for image-object promotion * */ /* * - added tracecodes for delta-image processing * */ /* * 0.5.2 - 06/02/2000 - G.Juyn * */ /* * - added tracecodes for getalphaline callback * */ /* * 0.5.2 - 06/05/2000 - G.Juyn * */ /* * - added tracecode for RGB8_A8 canvasstyle * */ /* * 0.5.2 - 06/06/2000 - G.Juyn * */ /* * - added tracecode for mng_read_resume HLAPI function * */ /* * * */ /* * 0.5.3 - 06/06/2000 - G.Juyn * */ /* * - added tracecodes for tracing JPEG progression * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - added tracecodes for get/set speedtype * */ /* * - added tracecodes for get imagelevel * */ /* * 0.5.3 - 06/22/2000 - G.Juyn * */ /* * - added tracecode for delta-image processing * */ /* * - added tracecodes for PPLT chunk processing * */ /* * * */ /* * 0.9.1 - 07/07/2000 - G.Juyn * */ /* * - added tracecodes for special display processing * */ /* * 0.9.1 - 07/08/2000 - G.Juyn * */ /* * - added tracecode for get/set suspensionmode * */ /* * - added tracecodes for get/set display variables * */ /* * - added tracecode for read_databuffer (I/O-suspension) * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - added tracecodes for SAVE/SEEK callbacks * */ /* * - added tracecodes for get/set sectionbreaks * */ /* * - added tracecode for special error routine * */ /* * 0.9.1 - 07/19/2000 - G.Juyn * */ /* * - added tracecode for updatemngheader * */ /* * * */ /* * 0.9.2 - 07/31/2000 - G.Juyn * */ /* * - added tracecodes for status_xxxxx functions * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * - added tracecode for updatemngsimplicity * */ /* * * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 09/07/2000 - G.Juyn * */ /* * - added support for new filter_types * */ /* * 0.9.3 - 10/10/2000 - G.Juyn * */ /* * - added support for alpha-depth prediction * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - added JDAA chunk * */ /* * - added support for nEED * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added functions to retrieve PNG/JNG specific header-info * */ /* * - added optional support for bKGD for PNG images * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - added callback to process non-critical unknown chunks * */ /* * - added routine to discard "invalid" objects * */ /* * 0.9.3 - 10/19/2000 - G.Juyn * */ /* * - implemented delayed delta-processing * */ /* * 0.9.3 - 10/20/2000 - G.Juyn * */ /* * - added get/set for bKGD preference setting * */ /* * 0.9.3 - 10/21/2000 - G.Juyn * */ /* * - added get function for interlace/progressive display * */ /* * * */ /* * 0.9.4 - 1/18/2001 - G.Juyn * */ /* * - added "new" MAGN methods 3, 4 & 5 * */ /* * * */ /* * 1.0.1 - 02/08/2001 - G.Juyn * */ /* * - added MEND processing callback * */ /* * 1.0.1 - 04/21/2001 - G.Juyn (code by G.Kelly) * */ /* * - added BGRA8 canvas with premultiplied alpha * */ /* * 1.0.1 - 05/02/2001 - G.Juyn * */ /* * - added "default" sRGB generation (Thanks Marti!) * */ /* * * */ /* * 1.0.2 - 06/23/2001 - G.Juyn * */ /* * - added optimization option for MNG-video playback * */ /* * - added processterm callback * */ /* * 1.0.2 - 06/25/2001 - G.Juyn * */ /* * - added option to turn off progressive refresh * */ /* * * */ /* * 1.0.3 - 08/06/2001 - G.Juyn * */ /* * - added get function for last processed BACK chunk * */ /* * * */ /* * 1.0.5 - 08/15/2002 - G.Juyn * */ /* * - completed PROM support * */ /* * - completed delta-image support * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * - added HLAPI function to copy chunks * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - added support for PAST * */ /* * 1.0.5 - 09/22/2002 - G.Juyn * */ /* * - added bgrx8 canvas (filler byte) * */ /* * 1.0.5 - 09/23/2002 - G.Juyn * */ /* * - added in-memory color-correction of abstract images * */ /* * - added compose over/under routines for PAST processing * */ /* * - added flip & tile routines for PAST processing * */ /* * 1.0.5 - 10/09/2002 - G.Juyn * */ /* * - fixed trace-constants for PAST chunk * */ /* * 1.0.5 - 11/07/2002 - G.Juyn * */ /* * - added support to get totals after mng_read() * */ /* * * */ /* * 1.0.6 - 07/14/2003 - G.Randers-Pehrson * */ /* * - added conditionals around rarely used features * */ /* * * */ /* * 1.0.7 - 11/27/2003 - R.A * */ /* * - added CANVAS_RGB565 and CANVAS_BGR565 * */ /* * 1.0.7 - 01/25/2004 - J.S * */ /* * - added premultiplied alpha canvas' for RGBA, ARGB, ABGR * */ /* * 1.0.7 - 03/10/2004 - G.R-P * */ /* * - added conditionals around openstream/closestream * */ /* * * */ /* * 1.0.8 - 04/02/2004 - G.Juyn * */ /* * - added CRC existence & checking flags * */ /* * 1.0.8 - 04/11/2004 - G.Juyn * */ /* * - added data-push mechanisms for specialized decoders * */ /* * * */ /* * 1.0.9 - 10/03/2004 - G.Juyn * */ /* * - added function to retrieve current FRAM delay * */ /* * 1.0.9 - 10/14/2004 - G.Juyn * */ /* * - added bgr565_a8 canvas-style (thanks to J. Elvander) * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 07/06/2007 - G.R-P bugfix by Lucas Quintana * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_trace_h_ #define _libmng_trace_h_ /* ************************************************************************** */ #ifdef MNG_INCLUDE_TRACE_PROCS /* ************************************************************************** */ /* TODO: add a trace-mask so certain functions can be excluded */ mng_retcode mng_trace (mng_datap pData, mng_uint32 iFunction, mng_uint32 iLocation); /* ************************************************************************** */ #define MNG_TRACE(D,F,L) { mng_retcode iR = mng_trace (D,F,L); \ if (iR) return iR; } #define MNG_TRACEB(D,F,L) { if (mng_trace (D,F,L)) return MNG_FALSE; } #define MNG_TRACEX(D,F,L) { if (mng_trace (D,F,L)) return 0; } /* ************************************************************************** */ #define MNG_LC_START 1 #define MNG_LC_END 2 #define MNG_LC_INITIALIZE 3 #define MNG_LC_CLEANUP 4 /* ************************************************************************** */ #define MNG_LC_JPEG_CREATE_DECOMPRESS 101 #define MNG_LC_JPEG_READ_HEADER 102 #define MNG_LC_JPEG_START_DECOMPRESS 103 #define MNG_LC_JPEG_START_OUTPUT 104 #define MNG_LC_JPEG_READ_SCANLINES 105 #define MNG_LC_JPEG_FINISH_OUTPUT 106 #define MNG_LC_JPEG_FINISH_DECOMPRESS 107 #define MNG_LC_JPEG_DESTROY_DECOMPRESS 108 /* ************************************************************************** */ #define MNG_FN_INITIALIZE 1 #define MNG_FN_RESET 2 #define MNG_FN_CLEANUP 3 #define MNG_FN_READ 4 #define MNG_FN_WRITE 5 #define MNG_FN_CREATE 6 #define MNG_FN_READDISPLAY 7 #define MNG_FN_DISPLAY 8 #define MNG_FN_DISPLAY_RESUME 9 #define MNG_FN_DISPLAY_FREEZE 10 #define MNG_FN_DISPLAY_RESET 11 #ifndef MNG_NO_DISPLAY_GO_SUPPORTED #define MNG_FN_DISPLAY_GOFRAME 12 #define MNG_FN_DISPLAY_GOLAYER 13 #define MNG_FN_DISPLAY_GOTIME 14 #endif #define MNG_FN_GETLASTERROR 15 #define MNG_FN_READ_RESUME 16 #define MNG_FN_TRAPEVENT 17 #define MNG_FN_READ_PUSHDATA 18 #define MNG_FN_READ_PUSHSIG 19 #define MNG_FN_READ_PUSHCHUNK 20 #define MNG_FN_SETCB_MEMALLOC 101 #define MNG_FN_SETCB_MEMFREE 102 #define MNG_FN_SETCB_READDATA 103 #define MNG_FN_SETCB_WRITEDATA 104 #define MNG_FN_SETCB_ERRORPROC 105 #define MNG_FN_SETCB_TRACEPROC 106 #define MNG_FN_SETCB_PROCESSHEADER 107 #define MNG_FN_SETCB_PROCESSTEXT 108 #define MNG_FN_SETCB_GETCANVASLINE 109 #define MNG_FN_SETCB_GETBKGDLINE 110 #define MNG_FN_SETCB_REFRESH 111 #define MNG_FN_SETCB_GETTICKCOUNT 112 #define MNG_FN_SETCB_SETTIMER 113 #define MNG_FN_SETCB_PROCESSGAMMA 114 #define MNG_FN_SETCB_PROCESSCHROMA 115 #define MNG_FN_SETCB_PROCESSSRGB 116 #define MNG_FN_SETCB_PROCESSICCP 117 #define MNG_FN_SETCB_PROCESSAROW 118 #ifndef MNG_NO_OPEN_CLOSE_STREAM #define MNG_FN_SETCB_OPENSTREAM 119 #define MNG_FN_SETCB_CLOSESTREAM 120 #endif #define MNG_FN_SETCB_GETALPHALINE 121 #define MNG_FN_SETCB_PROCESSSAVE 122 #define MNG_FN_SETCB_PROCESSSEEK 123 #define MNG_FN_SETCB_PROCESSNEED 124 #define MNG_FN_SETCB_PROCESSUNKNOWN 125 #define MNG_FN_SETCB_PROCESSMEND 126 #define MNG_FN_SETCB_PROCESSTERM 127 #define MNG_FN_SETCB_RELEASEDATA 128 #define MNG_FN_GETCB_MEMALLOC 201 #define MNG_FN_GETCB_MEMFREE 202 #define MNG_FN_GETCB_READDATA 203 #define MNG_FN_GETCB_WRITEDATA 204 #define MNG_FN_GETCB_ERRORPROC 205 #define MNG_FN_GETCB_TRACEPROC 206 #define MNG_FN_GETCB_PROCESSHEADER 207 #define MNG_FN_GETCB_PROCESSTEXT 208 #define MNG_FN_GETCB_GETCANVASLINE 209 #define MNG_FN_GETCB_GETBKGDLINE 210 #define MNG_FN_GETCB_REFRESH 211 #define MNG_FN_GETCB_GETTICKCOUNT 212 #define MNG_FN_GETCB_SETTIMER 213 #define MNG_FN_GETCB_PROCESSGAMMA 214 #define MNG_FN_GETCB_PROCESSCHROMA 215 #define MNG_FN_GETCB_PROCESSSRGB 216 #define MNG_FN_GETCB_PROCESSICCP 217 #define MNG_FN_GETCB_PROCESSAROW 218 #ifndef MNG_NO_OPEN_CLOSE_STREAM #define MNG_FN_GETCB_OPENSTREAM 219 #define MNG_FN_GETCB_CLOSESTREAM 220 #endif #define MNG_FN_GETCB_GETALPHALINE 221 #define MNG_FN_GETCB_PROCESSSAVE 222 #define MNG_FN_GETCB_PROCESSSEEK 223 #define MNG_FN_GETCB_PROCESSNEED 224 #define MNG_FN_GETCB_PROCESSUNKNOWN 225 #define MNG_FN_GETCB_PROCESSMEND 226 #define MNG_FN_GETCB_PROCESSTERM 227 #define MNG_FN_GETCB_RELEASEDATA 228 #define MNG_FN_SET_USERDATA 301 #define MNG_FN_SET_CANVASSTYLE 302 #define MNG_FN_SET_BKGDSTYLE 303 #define MNG_FN_SET_BGCOLOR 304 #define MNG_FN_SET_STORECHUNKS 305 #define MNG_FN_SET_VIEWGAMMA 306 #define MNG_FN_SET_DISPLAYGAMMA 307 #define MNG_FN_SET_DFLTIMGGAMMA 308 #define MNG_FN_SET_SRGB 309 #define MNG_FN_SET_OUTPUTPROFILE 310 #define MNG_FN_SET_SRGBPROFILE 311 #define MNG_FN_SET_MAXCANVASWIDTH 312 #define MNG_FN_SET_MAXCANVASHEIGHT 313 #define MNG_FN_SET_MAXCANVASSIZE 314 #define MNG_FN_SET_ZLIB_LEVEL 315 #define MNG_FN_SET_ZLIB_METHOD 316 #define MNG_FN_SET_ZLIB_WINDOWBITS 317 #define MNG_FN_SET_ZLIB_MEMLEVEL 318 #define MNG_FN_SET_ZLIB_STRATEGY 319 #define MNG_FN_SET_ZLIB_MAXIDAT 320 #define MNG_FN_SET_JPEG_DCTMETHOD 321 #define MNG_FN_SET_JPEG_QUALITY 322 #define MNG_FN_SET_JPEG_SMOOTHING 323 #define MNG_FN_SET_JPEG_PROGRESSIVE 324 #define MNG_FN_SET_JPEG_OPTIMIZED 325 #define MNG_FN_SET_JPEG_MAXJDAT 326 #define MNG_FN_SET_SPEED 327 #define MNG_FN_SET_SUSPENSIONMODE 328 #define MNG_FN_SET_SECTIONBREAKS 329 #define MNG_FN_SET_USEBKGD 330 #define MNG_FN_SET_OUTPUTPROFILE2 331 #define MNG_FN_SET_SRGBPROFILE2 332 #define MNG_FN_SET_OUTPUTSRGB 333 #define MNG_FN_SET_SRGBIMPLICIT 334 #define MNG_FN_SET_CACHEPLAYBACK 335 #define MNG_FN_SET_DOPROGRESSIVE 336 #define MNG_FN_SET_CRCMODE 337 #define MNG_FN_GET_USERDATA 401 #define MNG_FN_GET_SIGTYPE 402 #define MNG_FN_GET_IMAGETYPE 403 #define MNG_FN_GET_IMAGEWIDTH 404 #define MNG_FN_GET_IMAGEHEIGHT 405 #define MNG_FN_GET_TICKS 406 #define MNG_FN_GET_FRAMECOUNT 407 #define MNG_FN_GET_LAYERCOUNT 408 #define MNG_FN_GET_PLAYTIME 409 #define MNG_FN_GET_SIMPLICITY 410 #define MNG_FN_GET_CANVASSTYLE 411 #define MNG_FN_GET_BKGDSTYLE 412 #define MNG_FN_GET_BGCOLOR 413 #define MNG_FN_GET_STORECHUNKS 414 #define MNG_FN_GET_VIEWGAMMA 415 #define MNG_FN_GET_DISPLAYGAMMA 416 #define MNG_FN_GET_DFLTIMGGAMMA 417 #define MNG_FN_GET_SRGB 418 #define MNG_FN_GET_MAXCANVASWIDTH 419 #define MNG_FN_GET_MAXCANVASHEIGHT 420 #define MNG_FN_GET_ZLIB_LEVEL 421 #define MNG_FN_GET_ZLIB_METHOD 422 #define MNG_FN_GET_ZLIB_WINDOWBITS 423 #define MNG_FN_GET_ZLIB_MEMLEVEL 424 #define MNG_FN_GET_ZLIB_STRATEGY 425 #define MNG_FN_GET_ZLIB_MAXIDAT 426 #define MNG_FN_GET_JPEG_DCTMETHOD 427 #define MNG_FN_GET_JPEG_QUALITY 428 #define MNG_FN_GET_JPEG_SMOOTHING 429 #define MNG_FN_GET_JPEG_PROGRESSIVE 430 #define MNG_FN_GET_JPEG_OPTIMIZED 431 #define MNG_FN_GET_JPEG_MAXJDAT 432 #define MNG_FN_GET_SPEED 433 #define MNG_FN_GET_IMAGELEVEL 434 #define MNG_FN_GET_SUSPENSIONMODE 435 #define MNG_FN_GET_STARTTIME 436 #define MNG_FN_GET_RUNTIME 437 #define MNG_FN_GET_CURRENTFRAME 438 #define MNG_FN_GET_CURRENTLAYER 439 #define MNG_FN_GET_CURRENTPLAYTIME 440 #define MNG_FN_GET_SECTIONBREAKS 441 #define MNG_FN_GET_ALPHADEPTH 442 #define MNG_FN_GET_BITDEPTH 443 #define MNG_FN_GET_COLORTYPE 444 #define MNG_FN_GET_COMPRESSION 445 #define MNG_FN_GET_FILTER 446 #define MNG_FN_GET_INTERLACE 447 #define MNG_FN_GET_ALPHABITDEPTH 448 #define MNG_FN_GET_ALPHACOMPRESSION 449 #define MNG_FN_GET_ALPHAFILTER 450 #define MNG_FN_GET_ALPHAINTERLACE 451 #define MNG_FN_GET_USEBKGD 452 #define MNG_FN_GET_REFRESHPASS 453 #define MNG_FN_GET_CACHEPLAYBACK 454 #define MNG_FN_GET_DOPROGRESSIVE 455 #define MNG_FN_GET_LASTBACKCHUNK 456 #define MNG_FN_GET_LASTSEEKNAME 457 #define MNG_FN_GET_TOTALFRAMES 458 #define MNG_FN_GET_TOTALLAYERS 459 #define MNG_FN_GET_TOTALPLAYTIME 460 #define MNG_FN_GET_CRCMODE 461 #define MNG_FN_GET_CURRFRAMDELAY 462 #define MNG_FN_STATUS_ERROR 481 #define MNG_FN_STATUS_READING 482 #define MNG_FN_STATUS_SUSPENDBREAK 483 #define MNG_FN_STATUS_CREATING 484 #define MNG_FN_STATUS_WRITING 485 #define MNG_FN_STATUS_DISPLAYING 486 #define MNG_FN_STATUS_RUNNING 487 #define MNG_FN_STATUS_TIMERBREAK 488 #define MNG_FN_STATUS_DYNAMIC 489 #define MNG_FN_STATUS_RUNNINGEVENT 490 /* ************************************************************************** */ #define MNG_FN_ITERATE_CHUNKS 601 #define MNG_FN_COPY_CHUNK 602 #define MNG_FN_GETCHUNK_IHDR 701 #define MNG_FN_GETCHUNK_PLTE 702 #define MNG_FN_GETCHUNK_IDAT 703 #define MNG_FN_GETCHUNK_IEND 704 #define MNG_FN_GETCHUNK_TRNS 705 #define MNG_FN_GETCHUNK_GAMA 706 #define MNG_FN_GETCHUNK_CHRM 707 #define MNG_FN_GETCHUNK_SRGB 708 #define MNG_FN_GETCHUNK_ICCP 709 #define MNG_FN_GETCHUNK_TEXT 710 #define MNG_FN_GETCHUNK_ZTXT 711 #define MNG_FN_GETCHUNK_ITXT 712 #define MNG_FN_GETCHUNK_BKGD 713 #define MNG_FN_GETCHUNK_PHYS 714 #define MNG_FN_GETCHUNK_SBIT 715 #define MNG_FN_GETCHUNK_SPLT 716 #define MNG_FN_GETCHUNK_HIST 717 #define MNG_FN_GETCHUNK_TIME 718 #define MNG_FN_GETCHUNK_MHDR 719 #define MNG_FN_GETCHUNK_MEND 720 #define MNG_FN_GETCHUNK_LOOP 721 #define MNG_FN_GETCHUNK_ENDL 722 #define MNG_FN_GETCHUNK_DEFI 723 #define MNG_FN_GETCHUNK_BASI 724 #define MNG_FN_GETCHUNK_CLON 725 #define MNG_FN_GETCHUNK_PAST 726 #define MNG_FN_GETCHUNK_DISC 727 #define MNG_FN_GETCHUNK_BACK 728 #define MNG_FN_GETCHUNK_FRAM 729 #define MNG_FN_GETCHUNK_MOVE 730 #define MNG_FN_GETCHUNK_CLIP 731 #define MNG_FN_GETCHUNK_SHOW 732 #define MNG_FN_GETCHUNK_TERM 733 #define MNG_FN_GETCHUNK_SAVE 734 #define MNG_FN_GETCHUNK_SEEK 735 #define MNG_FN_GETCHUNK_EXPI 736 #define MNG_FN_GETCHUNK_FPRI 737 #define MNG_FN_GETCHUNK_NEED 738 #define MNG_FN_GETCHUNK_PHYG 739 #define MNG_FN_GETCHUNK_JHDR 740 #define MNG_FN_GETCHUNK_JDAT 741 #define MNG_FN_GETCHUNK_JSEP 742 #define MNG_FN_GETCHUNK_DHDR 743 #define MNG_FN_GETCHUNK_PROM 744 #define MNG_FN_GETCHUNK_IPNG 745 #define MNG_FN_GETCHUNK_PPLT 746 #define MNG_FN_GETCHUNK_IJNG 747 #define MNG_FN_GETCHUNK_DROP 748 #define MNG_FN_GETCHUNK_DBYK 749 #define MNG_FN_GETCHUNK_ORDR 750 #define MNG_FN_GETCHUNK_UNKNOWN 751 #define MNG_FN_GETCHUNK_MAGN 752 #define MNG_FN_GETCHUNK_JDAA 753 #define MNG_FN_GETCHUNK_EVNT 754 #define MNG_FN_GETCHUNK_MPNG 755 #define MNG_FN_GETCHUNK_PAST_SRC 781 #define MNG_FN_GETCHUNK_SAVE_ENTRY 782 #define MNG_FN_GETCHUNK_PPLT_ENTRY 783 #define MNG_FN_GETCHUNK_ORDR_ENTRY 784 #define MNG_FN_GETCHUNK_EVNT_ENTRY 785 #define MNG_FN_GETCHUNK_MPNG_FRAME 786 #define MNG_FN_PUTCHUNK_IHDR 801 #define MNG_FN_PUTCHUNK_PLTE 802 #define MNG_FN_PUTCHUNK_IDAT 803 #define MNG_FN_PUTCHUNK_IEND 804 #define MNG_FN_PUTCHUNK_TRNS 805 #define MNG_FN_PUTCHUNK_GAMA 806 #define MNG_FN_PUTCHUNK_CHRM 807 #define MNG_FN_PUTCHUNK_SRGB 808 #define MNG_FN_PUTCHUNK_ICCP 809 #define MNG_FN_PUTCHUNK_TEXT 810 #define MNG_FN_PUTCHUNK_ZTXT 811 #define MNG_FN_PUTCHUNK_ITXT 812 #define MNG_FN_PUTCHUNK_BKGD 813 #define MNG_FN_PUTCHUNK_PHYS 814 #define MNG_FN_PUTCHUNK_SBIT 815 #define MNG_FN_PUTCHUNK_SPLT 816 #define MNG_FN_PUTCHUNK_HIST 817 #define MNG_FN_PUTCHUNK_TIME 818 #define MNG_FN_PUTCHUNK_MHDR 819 #define MNG_FN_PUTCHUNK_MEND 820 #define MNG_FN_PUTCHUNK_LOOP 821 #define MNG_FN_PUTCHUNK_ENDL 822 #define MNG_FN_PUTCHUNK_DEFI 823 #define MNG_FN_PUTCHUNK_BASI 824 #define MNG_FN_PUTCHUNK_CLON 825 #define MNG_FN_PUTCHUNK_PAST 826 #define MNG_FN_PUTCHUNK_DISC 827 #define MNG_FN_PUTCHUNK_BACK 828 #define MNG_FN_PUTCHUNK_FRAM 829 #define MNG_FN_PUTCHUNK_MOVE 830 #define MNG_FN_PUTCHUNK_CLIP 831 #define MNG_FN_PUTCHUNK_SHOW 832 #define MNG_FN_PUTCHUNK_TERM 833 #define MNG_FN_PUTCHUNK_SAVE 834 #define MNG_FN_PUTCHUNK_SEEK 835 #define MNG_FN_PUTCHUNK_EXPI 836 #define MNG_FN_PUTCHUNK_FPRI 837 #define MNG_FN_PUTCHUNK_NEED 838 #define MNG_FN_PUTCHUNK_PHYG 839 #define MNG_FN_PUTCHUNK_JHDR 840 #define MNG_FN_PUTCHUNK_JDAT 841 #define MNG_FN_PUTCHUNK_JSEP 842 #define MNG_FN_PUTCHUNK_DHDR 843 #define MNG_FN_PUTCHUNK_PROM 844 #define MNG_FN_PUTCHUNK_IPNG 845 #define MNG_FN_PUTCHUNK_PPLT 846 #define MNG_FN_PUTCHUNK_IJNG 847 #define MNG_FN_PUTCHUNK_DROP 848 #define MNG_FN_PUTCHUNK_DBYK 849 #define MNG_FN_PUTCHUNK_ORDR 850 #define MNG_FN_PUTCHUNK_UNKNOWN 851 #define MNG_FN_PUTCHUNK_MAGN 852 #define MNG_FN_PUTCHUNK_JDAA 853 #define MNG_FN_PUTCHUNK_EVNT 854 #define MNG_FN_PUTCHUNK_MPNG 855 #define MNG_FN_PUTCHUNK_PAST_SRC 881 #define MNG_FN_PUTCHUNK_SAVE_ENTRY 882 #define MNG_FN_PUTCHUNK_PPLT_ENTRY 883 #define MNG_FN_PUTCHUNK_ORDR_ENTRY 884 #define MNG_FN_PUTCHUNK_EVNT_ENTRY 885 #define MNG_FN_PUTCHUNK_MPNG_FRAME 886 /* ************************************************************************** */ #define MNG_FN_GETIMGDATA_SEQ 901 #define MNG_FN_GETIMGDATA_CHUNKSEQ 902 #define MNG_FN_GETIMGDATA_CHUNK 903 #define MNG_FN_PUTIMGDATA_IHDR 951 #define MNG_FN_PUTIMGDATA_JHDR 952 #define MNG_FN_PUTIMGDATA_BASI 953 #define MNG_FN_PUTIMGDATA_DHDR 954 #define MNG_FN_UPDATEMNGHEADER 981 #define MNG_FN_UPDATEMNGSIMPLICITY 982 /* ************************************************************************** */ #define MNG_FN_PROCESS_RAW_CHUNK 1001 #define MNG_FN_READ_GRAPHIC 1002 #define MNG_FN_DROP_CHUNKS 1003 #define MNG_FN_PROCESS_ERROR 1004 #define MNG_FN_CLEAR_CMS 1005 #define MNG_FN_DROP_OBJECTS 1006 #define MNG_FN_READ_CHUNK 1007 #define MNG_FN_LOAD_BKGDLAYER 1008 #define MNG_FN_NEXT_FRAME 1009 #define MNG_FN_NEXT_LAYER 1010 #define MNG_FN_INTERFRAME_DELAY 1011 #define MNG_FN_DISPLAY_IMAGE 1012 #define MNG_FN_DROP_IMGOBJECTS 1013 #define MNG_FN_DROP_ANIOBJECTS 1014 #define MNG_FN_INFLATE_BUFFER 1015 #define MNG_FN_DEFLATE_BUFFER 1016 #define MNG_FN_WRITE_RAW_CHUNK 1017 #define MNG_FN_WRITE_GRAPHIC 1018 #define MNG_FN_SAVE_STATE 1019 #define MNG_FN_RESTORE_STATE 1020 #define MNG_FN_DROP_SAVEDATA 1021 #define MNG_FN_EXECUTE_DELTA_IMAGE 1022 #define MNG_FN_PROCESS_DISPLAY 1023 #define MNG_FN_CLEAR_CANVAS 1024 #define MNG_FN_READ_DATABUFFER 1025 #define MNG_FN_STORE_ERROR 1026 #define MNG_FN_DROP_INVALID_OBJECTS 1027 #define MNG_FN_RELEASE_PUSHDATA 1028 #define MNG_FN_READ_DATA 1029 #define MNG_FN_READ_CHUNK_CRC 1030 #define MNG_FN_RELEASE_PUSHCHUNK 1031 /* ************************************************************************** */ #define MNG_FN_DISPLAY_RGB8 1101 #define MNG_FN_DISPLAY_RGBA8 1102 #define MNG_FN_DISPLAY_ARGB8 1103 #define MNG_FN_DISPLAY_BGR8 1104 #define MNG_FN_DISPLAY_BGRA8 1105 #define MNG_FN_DISPLAY_ABGR8 1106 #define MNG_FN_DISPLAY_RGB16 1107 #define MNG_FN_DISPLAY_RGBA16 1108 #define MNG_FN_DISPLAY_ARGB16 1109 #define MNG_FN_DISPLAY_BGR16 1110 #define MNG_FN_DISPLAY_BGRA16 1111 #define MNG_FN_DISPLAY_ABGR16 1112 #define MNG_FN_DISPLAY_INDEX8 1113 #define MNG_FN_DISPLAY_INDEXA8 1114 #define MNG_FN_DISPLAY_AINDEX8 1115 #define MNG_FN_DISPLAY_GRAY8 1116 #define MNG_FN_DISPLAY_GRAY16 1117 #define MNG_FN_DISPLAY_GRAYA8 1118 #define MNG_FN_DISPLAY_GRAYA16 1119 #define MNG_FN_DISPLAY_AGRAY8 1120 #define MNG_FN_DISPLAY_AGRAY16 1121 #define MNG_FN_DISPLAY_DX15 1122 #define MNG_FN_DISPLAY_DX16 1123 #define MNG_FN_DISPLAY_RGB8_A8 1124 #define MNG_FN_DISPLAY_BGRA8PM 1125 #define MNG_FN_DISPLAY_BGRX8 1126 #define MNG_FN_DISPLAY_RGB565 1127 #define MNG_FN_DISPLAY_RGBA565 1128 #define MNG_FN_DISPLAY_BGR565 1129 #define MNG_FN_DISPLAY_BGRA565 1130 #define MNG_FN_DISPLAY_RGBA8_PM 1131 #define MNG_FN_DISPLAY_ARGB8_PM 1132 #define MNG_FN_DISPLAY_ABGR8_PM 1133 #define MNG_FN_DISPLAY_BGR565_A8 1134 #define MNG_FN_DISPLAY_RGB555 1135 #define MNG_FN_DISPLAY_BGR555 1136 /* ************************************************************************** */ #define MNG_FN_INIT_FULL_CMS 1201 #define MNG_FN_CORRECT_FULL_CMS 1202 #define MNG_FN_INIT_GAMMA_ONLY 1204 #define MNG_FN_CORRECT_GAMMA_ONLY 1205 #define MNG_FN_CORRECT_APP_CMS 1206 #define MNG_FN_INIT_FULL_CMS_OBJ 1207 #define MNG_FN_INIT_GAMMA_ONLY_OBJ 1208 #define MNG_FN_INIT_APP_CMS 1209 #define MNG_FN_INIT_APP_CMS_OBJ 1210 /* ************************************************************************** */ #define MNG_FN_PROCESS_G1 1301 #define MNG_FN_PROCESS_G2 1302 #define MNG_FN_PROCESS_G4 1303 #define MNG_FN_PROCESS_G8 1304 #define MNG_FN_PROCESS_G16 1305 #define MNG_FN_PROCESS_RGB8 1306 #define MNG_FN_PROCESS_RGB16 1307 #define MNG_FN_PROCESS_IDX1 1308 #define MNG_FN_PROCESS_IDX2 1309 #define MNG_FN_PROCESS_IDX4 1310 #define MNG_FN_PROCESS_IDX8 1311 #define MNG_FN_PROCESS_GA8 1312 #define MNG_FN_PROCESS_GA16 1313 #define MNG_FN_PROCESS_RGBA8 1314 #define MNG_FN_PROCESS_RGBA16 1315 /* ************************************************************************** */ #define MNG_FN_INIT_G1_NI 1401 #define MNG_FN_INIT_G1_I 1402 #define MNG_FN_INIT_G2_NI 1403 #define MNG_FN_INIT_G2_I 1404 #define MNG_FN_INIT_G4_NI 1405 #define MNG_FN_INIT_G4_I 1406 #define MNG_FN_INIT_G8_NI 1407 #define MNG_FN_INIT_G8_I 1408 #define MNG_FN_INIT_G16_NI 1409 #define MNG_FN_INIT_G16_I 1410 #define MNG_FN_INIT_RGB8_NI 1411 #define MNG_FN_INIT_RGB8_I 1412 #define MNG_FN_INIT_RGB16_NI 1413 #define MNG_FN_INIT_RGB16_I 1414 #define MNG_FN_INIT_IDX1_NI 1415 #define MNG_FN_INIT_IDX1_I 1416 #define MNG_FN_INIT_IDX2_NI 1417 #define MNG_FN_INIT_IDX2_I 1418 #define MNG_FN_INIT_IDX4_NI 1419 #define MNG_FN_INIT_IDX4_I 1420 #define MNG_FN_INIT_IDX8_NI 1421 #define MNG_FN_INIT_IDX8_I 1422 #define MNG_FN_INIT_GA8_NI 1423 #define MNG_FN_INIT_GA8_I 1424 #define MNG_FN_INIT_GA16_NI 1425 #define MNG_FN_INIT_GA16_I 1426 #define MNG_FN_INIT_RGBA8_NI 1427 #define MNG_FN_INIT_RGBA8_I 1428 #define MNG_FN_INIT_RGBA16_NI 1429 #define MNG_FN_INIT_RGBA16_I 1430 #define MNG_FN_INIT_ROWPROC 1497 #define MNG_FN_NEXT_ROW 1498 #define MNG_FN_CLEANUP_ROWPROC 1499 /* ************************************************************************** */ #define MNG_FN_FILTER_A_ROW 1501 #define MNG_FN_FILTER_SUB 1502 #define MNG_FN_FILTER_UP 1503 #define MNG_FN_FILTER_AVERAGE 1504 #define MNG_FN_FILTER_PAETH 1505 #define MNG_FN_INIT_ROWDIFFERING 1551 #define MNG_FN_DIFFER_G1 1552 #define MNG_FN_DIFFER_G2 1553 #define MNG_FN_DIFFER_G4 1554 #define MNG_FN_DIFFER_G8 1555 #define MNG_FN_DIFFER_G16 1556 #define MNG_FN_DIFFER_RGB8 1557 #define MNG_FN_DIFFER_RGB16 1558 #define MNG_FN_DIFFER_IDX1 1559 #define MNG_FN_DIFFER_IDX2 1560 #define MNG_FN_DIFFER_IDX4 1561 #define MNG_FN_DIFFER_IDX8 1562 #define MNG_FN_DIFFER_GA8 1563 #define MNG_FN_DIFFER_GA16 1564 #define MNG_FN_DIFFER_RGBA8 1565 #define MNG_FN_DIFFER_RGBA16 1566 /* ************************************************************************** */ #define MNG_FN_CREATE_IMGDATAOBJECT 1601 #define MNG_FN_FREE_IMGDATAOBJECT 1602 #define MNG_FN_CLONE_IMGDATAOBJECT 1603 #define MNG_FN_CREATE_IMGOBJECT 1604 #define MNG_FN_FREE_IMGOBJECT 1605 #define MNG_FN_FIND_IMGOBJECT 1606 #define MNG_FN_CLONE_IMGOBJECT 1607 #define MNG_FN_RESET_OBJECTDETAILS 1608 #define MNG_FN_RENUM_IMGOBJECT 1609 #define MNG_FN_PROMOTE_IMGOBJECT 1610 #define MNG_FN_MAGNIFY_IMGOBJECT 1611 #define MNG_FN_COLORCORRECT_OBJECT 1612 /* ************************************************************************** */ #define MNG_FN_STORE_G1 1701 #define MNG_FN_STORE_G2 1702 #define MNG_FN_STORE_G4 1703 #define MNG_FN_STORE_G8 1704 #define MNG_FN_STORE_G16 1705 #define MNG_FN_STORE_RGB8 1706 #define MNG_FN_STORE_RGB16 1707 #define MNG_FN_STORE_IDX1 1708 #define MNG_FN_STORE_IDX2 1709 #define MNG_FN_STORE_IDX4 1710 #define MNG_FN_STORE_IDX8 1711 #define MNG_FN_STORE_GA8 1712 #define MNG_FN_STORE_GA16 1713 #define MNG_FN_STORE_RGBA8 1714 #define MNG_FN_STORE_RGBA16 1715 #define MNG_FN_RETRIEVE_G8 1751 #define MNG_FN_RETRIEVE_G16 1752 #define MNG_FN_RETRIEVE_RGB8 1753 #define MNG_FN_RETRIEVE_RGB16 1754 #define MNG_FN_RETRIEVE_IDX8 1755 #define MNG_FN_RETRIEVE_GA8 1756 #define MNG_FN_RETRIEVE_GA16 1757 #define MNG_FN_RETRIEVE_RGBA8 1758 #define MNG_FN_RETRIEVE_RGBA16 1759 #define MNG_FN_DELTA_G1 1771 #define MNG_FN_DELTA_G2 1772 #define MNG_FN_DELTA_G4 1773 #define MNG_FN_DELTA_G8 1774 #define MNG_FN_DELTA_G16 1775 #define MNG_FN_DELTA_RGB8 1776 #define MNG_FN_DELTA_RGB16 1777 #define MNG_FN_DELTA_IDX1 1778 #define MNG_FN_DELTA_IDX2 1779 #define MNG_FN_DELTA_IDX4 1780 #define MNG_FN_DELTA_IDX8 1781 #define MNG_FN_DELTA_GA8 1782 #define MNG_FN_DELTA_GA16 1783 #define MNG_FN_DELTA_RGBA8 1784 #define MNG_FN_DELTA_RGBA16 1785 /* ************************************************************************** */ #define MNG_FN_CREATE_ANI_LOOP 1801 #define MNG_FN_CREATE_ANI_ENDL 1802 #define MNG_FN_CREATE_ANI_DEFI 1803 #define MNG_FN_CREATE_ANI_BASI 1804 #define MNG_FN_CREATE_ANI_CLON 1805 #define MNG_FN_CREATE_ANI_PAST 1806 #define MNG_FN_CREATE_ANI_DISC 1807 #define MNG_FN_CREATE_ANI_BACK 1808 #define MNG_FN_CREATE_ANI_FRAM 1809 #define MNG_FN_CREATE_ANI_MOVE 1810 #define MNG_FN_CREATE_ANI_CLIP 1811 #define MNG_FN_CREATE_ANI_SHOW 1812 #define MNG_FN_CREATE_ANI_TERM 1813 #define MNG_FN_CREATE_ANI_SAVE 1814 #define MNG_FN_CREATE_ANI_SEEK 1815 #define MNG_FN_CREATE_ANI_GAMA 1816 #define MNG_FN_CREATE_ANI_CHRM 1817 #define MNG_FN_CREATE_ANI_SRGB 1818 #define MNG_FN_CREATE_ANI_ICCP 1819 #define MNG_FN_CREATE_ANI_PLTE 1820 #define MNG_FN_CREATE_ANI_TRNS 1821 #define MNG_FN_CREATE_ANI_BKGD 1822 #define MNG_FN_CREATE_ANI_DHDR 1823 #define MNG_FN_CREATE_ANI_PROM 1824 #define MNG_FN_CREATE_ANI_IPNG 1825 #define MNG_FN_CREATE_ANI_IJNG 1826 #define MNG_FN_CREATE_ANI_PPLT 1827 #define MNG_FN_CREATE_ANI_MAGN 1828 #define MNG_FN_CREATE_ANI_IMAGE 1891 #define MNG_FN_CREATE_EVENT 1892 /* ************************************************************************** */ #define MNG_FN_FREE_ANI_LOOP 1901 #define MNG_FN_FREE_ANI_ENDL 1902 #define MNG_FN_FREE_ANI_DEFI 1903 #define MNG_FN_FREE_ANI_BASI 1904 #define MNG_FN_FREE_ANI_CLON 1905 #define MNG_FN_FREE_ANI_PAST 1906 #define MNG_FN_FREE_ANI_DISC 1907 #define MNG_FN_FREE_ANI_BACK 1908 #define MNG_FN_FREE_ANI_FRAM 1909 #define MNG_FN_FREE_ANI_MOVE 1910 #define MNG_FN_FREE_ANI_CLIP 1911 #define MNG_FN_FREE_ANI_SHOW 1912 #define MNG_FN_FREE_ANI_TERM 1913 #define MNG_FN_FREE_ANI_SAVE 1914 #define MNG_FN_FREE_ANI_SEEK 1915 #define MNG_FN_FREE_ANI_GAMA 1916 #define MNG_FN_FREE_ANI_CHRM 1917 #define MNG_FN_FREE_ANI_SRGB 1918 #define MNG_FN_FREE_ANI_ICCP 1919 #define MNG_FN_FREE_ANI_PLTE 1920 #define MNG_FN_FREE_ANI_TRNS 1921 #define MNG_FN_FREE_ANI_BKGD 1922 #define MNG_FN_FREE_ANI_DHDR 1923 #define MNG_FN_FREE_ANI_PROM 1924 #define MNG_FN_FREE_ANI_IPNG 1925 #define MNG_FN_FREE_ANI_IJNG 1926 #define MNG_FN_FREE_ANI_PPLT 1927 #define MNG_FN_FREE_ANI_MAGN 1928 #define MNG_FN_FREE_ANI_IMAGE 1991 #define MNG_FN_FREE_EVENT 1992 /* ************************************************************************** */ #define MNG_FN_PROCESS_ANI_LOOP 2001 #define MNG_FN_PROCESS_ANI_ENDL 2002 #define MNG_FN_PROCESS_ANI_DEFI 2003 #define MNG_FN_PROCESS_ANI_BASI 2004 #define MNG_FN_PROCESS_ANI_CLON 2005 #define MNG_FN_PROCESS_ANI_PAST 2006 #define MNG_FN_PROCESS_ANI_DISC 2007 #define MNG_FN_PROCESS_ANI_BACK 2008 #define MNG_FN_PROCESS_ANI_FRAM 2009 #define MNG_FN_PROCESS_ANI_MOVE 2010 #define MNG_FN_PROCESS_ANI_CLIP 2011 #define MNG_FN_PROCESS_ANI_SHOW 2012 #define MNG_FN_PROCESS_ANI_TERM 2013 #define MNG_FN_PROCESS_ANI_SAVE 2014 #define MNG_FN_PROCESS_ANI_SEEK 2015 #define MNG_FN_PROCESS_ANI_GAMA 2016 #define MNG_FN_PROCESS_ANI_CHRM 2017 #define MNG_FN_PROCESS_ANI_SRGB 2018 #define MNG_FN_PROCESS_ANI_ICCP 2019 #define MNG_FN_PROCESS_ANI_PLTE 2020 #define MNG_FN_PROCESS_ANI_TRNS 2021 #define MNG_FN_PROCESS_ANI_BKGD 2022 #define MNG_FN_PROCESS_ANI_DHDR 2023 #define MNG_FN_PROCESS_ANI_PROM 2024 #define MNG_FN_PROCESS_ANI_IPNG 2025 #define MNG_FN_PROCESS_ANI_IJNG 2026 #define MNG_FN_PROCESS_ANI_PPLT 2027 #define MNG_FN_PROCESS_ANI_MAGN 2028 #define MNG_FN_PROCESS_ANI_IMAGE 2091 #define MNG_FN_PROCESS_EVENT 2092 /* ************************************************************************** */ #define MNG_FN_RESTORE_BACKIMAGE 2101 #define MNG_FN_RESTORE_BACKCOLOR 2102 #define MNG_FN_RESTORE_BGCOLOR 2103 #define MNG_FN_RESTORE_RGB8 2104 #define MNG_FN_RESTORE_BGR8 2105 #define MNG_FN_RESTORE_BKGD 2106 #define MNG_FN_RESTORE_BGRX8 2107 #define MNG_FN_RESTORE_RGB565 2108 #define MNG_FN_RESTORE_BGR565 2109 /* ************************************************************************** */ #define MNG_FN_INIT_IHDR 2201 #define MNG_FN_INIT_PLTE 2202 #define MNG_FN_INIT_IDAT 2203 #define MNG_FN_INIT_IEND 2204 #define MNG_FN_INIT_TRNS 2205 #define MNG_FN_INIT_GAMA 2206 #define MNG_FN_INIT_CHRM 2207 #define MNG_FN_INIT_SRGB 2208 #define MNG_FN_INIT_ICCP 2209 #define MNG_FN_INIT_TEXT 2210 #define MNG_FN_INIT_ZTXT 2211 #define MNG_FN_INIT_ITXT 2212 #define MNG_FN_INIT_BKGD 2213 #define MNG_FN_INIT_PHYS 2214 #define MNG_FN_INIT_SBIT 2215 #define MNG_FN_INIT_SPLT 2216 #define MNG_FN_INIT_HIST 2217 #define MNG_FN_INIT_TIME 2218 #define MNG_FN_INIT_MHDR 2219 #define MNG_FN_INIT_MEND 2220 #define MNG_FN_INIT_LOOP 2221 #define MNG_FN_INIT_ENDL 2222 #define MNG_FN_INIT_DEFI 2223 #define MNG_FN_INIT_BASI 2224 #define MNG_FN_INIT_CLON 2225 #define MNG_FN_INIT_PAST 2226 #define MNG_FN_INIT_DISC 2227 #define MNG_FN_INIT_BACK 2228 #define MNG_FN_INIT_FRAM 2229 #define MNG_FN_INIT_MOVE 2230 #define MNG_FN_INIT_CLIP 2231 #define MNG_FN_INIT_SHOW 2232 #define MNG_FN_INIT_TERM 2233 #define MNG_FN_INIT_SAVE 2234 #define MNG_FN_INIT_SEEK 2235 #define MNG_FN_INIT_EXPI 2236 #define MNG_FN_INIT_FPRI 2237 #define MNG_FN_INIT_NEED 2238 #define MNG_FN_INIT_PHYG 2239 #define MNG_FN_INIT_JHDR 2240 #define MNG_FN_INIT_JDAT 2241 #define MNG_FN_INIT_JSEP 2242 #define MNG_FN_INIT_DHDR 2243 #define MNG_FN_INIT_PROM 2244 #define MNG_FN_INIT_IPNG 2245 #define MNG_FN_INIT_PPLT 2246 #define MNG_FN_INIT_IJNG 2247 #define MNG_FN_INIT_DROP 2248 #define MNG_FN_INIT_DBYK 2249 #define MNG_FN_INIT_ORDR 2250 #define MNG_FN_INIT_UNKNOWN 2251 #define MNG_FN_INIT_MAGN 2252 #define MNG_FN_INIT_JDAA 2253 #define MNG_FN_INIT_EVNT 2254 #define MNG_FN_INIT_MPNG 2255 /* ************************************************************************** */ #define MNG_FN_ASSIGN_IHDR 2301 #define MNG_FN_ASSIGN_PLTE 2302 #define MNG_FN_ASSIGN_IDAT 2303 #define MNG_FN_ASSIGN_IEND 2304 #define MNG_FN_ASSIGN_TRNS 2305 #define MNG_FN_ASSIGN_GAMA 2306 #define MNG_FN_ASSIGN_CHRM 2307 #define MNG_FN_ASSIGN_SRGB 2308 #define MNG_FN_ASSIGN_ICCP 2309 #define MNG_FN_ASSIGN_TEXT 2310 #define MNG_FN_ASSIGN_ZTXT 2311 #define MNG_FN_ASSIGN_ITXT 2312 #define MNG_FN_ASSIGN_BKGD 2313 #define MNG_FN_ASSIGN_PHYS 2314 #define MNG_FN_ASSIGN_SBIT 2315 #define MNG_FN_ASSIGN_SPLT 2316 #define MNG_FN_ASSIGN_HIST 2317 #define MNG_FN_ASSIGN_TIME 2318 #define MNG_FN_ASSIGN_MHDR 2319 #define MNG_FN_ASSIGN_MEND 2320 #define MNG_FN_ASSIGN_LOOP 2321 #define MNG_FN_ASSIGN_ENDL 2322 #define MNG_FN_ASSIGN_DEFI 2323 #define MNG_FN_ASSIGN_BASI 2324 #define MNG_FN_ASSIGN_CLON 2325 #define MNG_FN_ASSIGN_PAST 2326 #define MNG_FN_ASSIGN_DISC 2327 #define MNG_FN_ASSIGN_BACK 2328 #define MNG_FN_ASSIGN_FRAM 2329 #define MNG_FN_ASSIGN_MOVE 2330 #define MNG_FN_ASSIGN_CLIP 2331 #define MNG_FN_ASSIGN_SHOW 2332 #define MNG_FN_ASSIGN_TERM 2333 #define MNG_FN_ASSIGN_SAVE 2334 #define MNG_FN_ASSIGN_SEEK 2335 #define MNG_FN_ASSIGN_EXPI 2336 #define MNG_FN_ASSIGN_FPRI 2337 #define MNG_FN_ASSIGN_NEED 2338 #define MNG_FN_ASSIGN_PHYG 2339 #define MNG_FN_ASSIGN_JHDR 2340 #define MNG_FN_ASSIGN_JDAT 2341 #define MNG_FN_ASSIGN_JSEP 2342 #define MNG_FN_ASSIGN_DHDR 2343 #define MNG_FN_ASSIGN_PROM 2344 #define MNG_FN_ASSIGN_IPNG 2345 #define MNG_FN_ASSIGN_PPLT 2346 #define MNG_FN_ASSIGN_IJNG 2347 #define MNG_FN_ASSIGN_DROP 2348 #define MNG_FN_ASSIGN_DBYK 2349 #define MNG_FN_ASSIGN_ORDR 2350 #define MNG_FN_ASSIGN_UNKNOWN 2351 #define MNG_FN_ASSIGN_MAGN 2352 #define MNG_FN_ASSIGN_JDAA 2353 #define MNG_FN_ASSIGN_EVNT 2354 #define MNG_FN_ASSIGN_MPNG 2355 /* ************************************************************************** */ #define MNG_FN_FREE_IHDR 2401 #define MNG_FN_FREE_PLTE 2402 #define MNG_FN_FREE_IDAT 2403 #define MNG_FN_FREE_IEND 2404 #define MNG_FN_FREE_TRNS 2405 #define MNG_FN_FREE_GAMA 2406 #define MNG_FN_FREE_CHRM 2407 #define MNG_FN_FREE_SRGB 2408 #define MNG_FN_FREE_ICCP 2409 #define MNG_FN_FREE_TEXT 2410 #define MNG_FN_FREE_ZTXT 2411 #define MNG_FN_FREE_ITXT 2412 #define MNG_FN_FREE_BKGD 2413 #define MNG_FN_FREE_PHYS 2414 #define MNG_FN_FREE_SBIT 2415 #define MNG_FN_FREE_SPLT 2416 #define MNG_FN_FREE_HIST 2417 #define MNG_FN_FREE_TIME 2418 #define MNG_FN_FREE_MHDR 2419 #define MNG_FN_FREE_MEND 2420 #define MNG_FN_FREE_LOOP 2421 #define MNG_FN_FREE_ENDL 2422 #define MNG_FN_FREE_DEFI 2423 #define MNG_FN_FREE_BASI 2424 #define MNG_FN_FREE_CLON 2425 #define MNG_FN_FREE_PAST 2426 #define MNG_FN_FREE_DISC 2427 #define MNG_FN_FREE_BACK 2428 #define MNG_FN_FREE_FRAM 2429 #define MNG_FN_FREE_MOVE 2430 #define MNG_FN_FREE_CLIP 2431 #define MNG_FN_FREE_SHOW 2432 #define MNG_FN_FREE_TERM 2433 #define MNG_FN_FREE_SAVE 2434 #define MNG_FN_FREE_SEEK 2435 #define MNG_FN_FREE_EXPI 2436 #define MNG_FN_FREE_FPRI 2437 #define MNG_FN_FREE_NEED 2438 #define MNG_FN_FREE_PHYG 2439 #define MNG_FN_FREE_JHDR 2440 #define MNG_FN_FREE_JDAT 2441 #define MNG_FN_FREE_JSEP 2442 #define MNG_FN_FREE_DHDR 2443 #define MNG_FN_FREE_PROM 2444 #define MNG_FN_FREE_IPNG 2445 #define MNG_FN_FREE_PPLT 2446 #define MNG_FN_FREE_IJNG 2447 #define MNG_FN_FREE_DROP 2448 #define MNG_FN_FREE_DBYK 2449 #define MNG_FN_FREE_ORDR 2450 #define MNG_FN_FREE_UNKNOWN 2451 #define MNG_FN_FREE_MAGN 2452 #define MNG_FN_FREE_JDAA 2453 #define MNG_FN_FREE_EVNT 2454 #define MNG_FN_FREE_MPNG 2455 /* ************************************************************************** */ #define MNG_FN_READ_IHDR 2601 #define MNG_FN_READ_PLTE 2602 #define MNG_FN_READ_IDAT 2603 #define MNG_FN_READ_IEND 2604 #define MNG_FN_READ_TRNS 2605 #define MNG_FN_READ_GAMA 2606 #define MNG_FN_READ_CHRM 2607 #define MNG_FN_READ_SRGB 2608 #define MNG_FN_READ_ICCP 2609 #define MNG_FN_READ_TEXT 2610 #define MNG_FN_READ_ZTXT 2611 #define MNG_FN_READ_ITXT 2612 #define MNG_FN_READ_BKGD 2613 #define MNG_FN_READ_PHYS 2614 #define MNG_FN_READ_SBIT 2615 #define MNG_FN_READ_SPLT 2616 #define MNG_FN_READ_HIST 2617 #define MNG_FN_READ_TIME 2618 #define MNG_FN_READ_MHDR 2619 #define MNG_FN_READ_MEND 2620 #define MNG_FN_READ_LOOP 2621 #define MNG_FN_READ_ENDL 2622 #define MNG_FN_READ_DEFI 2623 #define MNG_FN_READ_BASI 2624 #define MNG_FN_READ_CLON 2625 #define MNG_FN_READ_PAST 2626 #define MNG_FN_READ_DISC 2627 #define MNG_FN_READ_BACK 2628 #define MNG_FN_READ_FRAM 2629 #define MNG_FN_READ_MOVE 2630 #define MNG_FN_READ_CLIP 2631 #define MNG_FN_READ_SHOW 2632 #define MNG_FN_READ_TERM 2633 #define MNG_FN_READ_SAVE 2634 #define MNG_FN_READ_SEEK 2635 #define MNG_FN_READ_EXPI 2636 #define MNG_FN_READ_FPRI 2637 #define MNG_FN_READ_NEED 2638 #define MNG_FN_READ_PHYG 2639 #define MNG_FN_READ_JHDR 2640 #define MNG_FN_READ_JDAT 2641 #define MNG_FN_READ_JSEP 2642 #define MNG_FN_READ_DHDR 2643 #define MNG_FN_READ_PROM 2644 #define MNG_FN_READ_IPNG 2645 #define MNG_FN_READ_PPLT 2646 #define MNG_FN_READ_IJNG 2647 #define MNG_FN_READ_DROP 2648 #define MNG_FN_READ_DBYK 2649 #define MNG_FN_READ_ORDR 2650 #define MNG_FN_READ_UNKNOWN 2651 #define MNG_FN_READ_MAGN 2652 #define MNG_FN_READ_JDAA 2653 #define MNG_FN_READ_EVNT 2654 #define MNG_FN_READ_MPNG 2655 /* ************************************************************************** */ #define MNG_FN_WRITE_IHDR 2801 #define MNG_FN_WRITE_PLTE 2802 #define MNG_FN_WRITE_IDAT 2803 #define MNG_FN_WRITE_IEND 2804 #define MNG_FN_WRITE_TRNS 2805 #define MNG_FN_WRITE_GAMA 2806 #define MNG_FN_WRITE_CHRM 2807 #define MNG_FN_WRITE_SRGB 2808 #define MNG_FN_WRITE_ICCP 2809 #define MNG_FN_WRITE_TEXT 2810 #define MNG_FN_WRITE_ZTXT 2811 #define MNG_FN_WRITE_ITXT 2812 #define MNG_FN_WRITE_BKGD 2813 #define MNG_FN_WRITE_PHYS 2814 #define MNG_FN_WRITE_SBIT 2815 #define MNG_FN_WRITE_SPLT 2816 #define MNG_FN_WRITE_HIST 2817 #define MNG_FN_WRITE_TIME 2818 #define MNG_FN_WRITE_MHDR 2819 #define MNG_FN_WRITE_MEND 2820 #define MNG_FN_WRITE_LOOP 2821 #define MNG_FN_WRITE_ENDL 2822 #define MNG_FN_WRITE_DEFI 2823 #define MNG_FN_WRITE_BASI 2824 #define MNG_FN_WRITE_CLON 2825 #define MNG_FN_WRITE_PAST 2826 #define MNG_FN_WRITE_DISC 2827 #define MNG_FN_WRITE_BACK 2828 #define MNG_FN_WRITE_FRAM 2829 #define MNG_FN_WRITE_MOVE 2830 #define MNG_FN_WRITE_CLIP 2831 #define MNG_FN_WRITE_SHOW 2832 #define MNG_FN_WRITE_TERM 2833 #define MNG_FN_WRITE_SAVE 2834 #define MNG_FN_WRITE_SEEK 2835 #define MNG_FN_WRITE_EXPI 2836 #define MNG_FN_WRITE_FPRI 2837 #define MNG_FN_WRITE_NEED 2838 #define MNG_FN_WRITE_PHYG 2839 #define MNG_FN_WRITE_JHDR 2840 #define MNG_FN_WRITE_JDAT 2841 #define MNG_FN_WRITE_JSEP 2842 #define MNG_FN_WRITE_DHDR 2843 #define MNG_FN_WRITE_PROM 2844 #define MNG_FN_WRITE_IPNG 2845 #define MNG_FN_WRITE_PPLT 2846 #define MNG_FN_WRITE_IJNG 2847 #define MNG_FN_WRITE_DROP 2848 #define MNG_FN_WRITE_DBYK 2849 #define MNG_FN_WRITE_ORDR 2850 #define MNG_FN_WRITE_UNKNOWN 2851 #define MNG_FN_WRITE_MAGN 2852 #define MNG_FN_WRITE_JDAA 2853 #define MNG_FN_WRITE_EVNT 2854 #define MNG_FN_WRITE_MPNG 2855 /* ************************************************************************** */ #define MNG_FN_ZLIB_INITIALIZE 3001 #define MNG_FN_ZLIB_CLEANUP 3002 #define MNG_FN_ZLIB_INFLATEINIT 3003 #define MNG_FN_ZLIB_INFLATEROWS 3004 #define MNG_FN_ZLIB_INFLATEDATA 3005 #define MNG_FN_ZLIB_INFLATEFREE 3006 #define MNG_FN_ZLIB_DEFLATEINIT 3007 #define MNG_FN_ZLIB_DEFLATEROWS 3008 #define MNG_FN_ZLIB_DEFLATEDATA 3009 #define MNG_FN_ZLIB_DEFLATEFREE 3010 /* ************************************************************************** */ #define MNG_FN_PROCESS_DISPLAY_IHDR 3201 #define MNG_FN_PROCESS_DISPLAY_PLTE 3202 #define MNG_FN_PROCESS_DISPLAY_IDAT 3203 #define MNG_FN_PROCESS_DISPLAY_IEND 3204 #define MNG_FN_PROCESS_DISPLAY_TRNS 3205 #define MNG_FN_PROCESS_DISPLAY_GAMA 3206 #define MNG_FN_PROCESS_DISPLAY_CHRM 3207 #define MNG_FN_PROCESS_DISPLAY_SRGB 3208 #define MNG_FN_PROCESS_DISPLAY_ICCP 3209 #define MNG_FN_PROCESS_DISPLAY_BKGD 3210 #define MNG_FN_PROCESS_DISPLAY_PHYS 3211 #define MNG_FN_PROCESS_DISPLAY_SBIT 3212 #define MNG_FN_PROCESS_DISPLAY_SPLT 3213 #define MNG_FN_PROCESS_DISPLAY_HIST 3214 #define MNG_FN_PROCESS_DISPLAY_MHDR 3215 #define MNG_FN_PROCESS_DISPLAY_MEND 3216 #define MNG_FN_PROCESS_DISPLAY_LOOP 3217 #define MNG_FN_PROCESS_DISPLAY_ENDL 3218 #define MNG_FN_PROCESS_DISPLAY_DEFI 3219 #define MNG_FN_PROCESS_DISPLAY_BASI 3220 #define MNG_FN_PROCESS_DISPLAY_CLON 3221 #define MNG_FN_PROCESS_DISPLAY_PAST 3222 #define MNG_FN_PROCESS_DISPLAY_DISC 3223 #define MNG_FN_PROCESS_DISPLAY_BACK 3224 #define MNG_FN_PROCESS_DISPLAY_FRAM 3225 #define MNG_FN_PROCESS_DISPLAY_MOVE 3226 #define MNG_FN_PROCESS_DISPLAY_CLIP 3227 #define MNG_FN_PROCESS_DISPLAY_SHOW 3228 #define MNG_FN_PROCESS_DISPLAY_TERM 3229 #define MNG_FN_PROCESS_DISPLAY_SAVE 3230 #define MNG_FN_PROCESS_DISPLAY_SEEK 3231 #define MNG_FN_PROCESS_DISPLAY_EXPI 3232 #define MNG_FN_PROCESS_DISPLAY_FPRI 3233 #define MNG_FN_PROCESS_DISPLAY_NEED 3234 #define MNG_FN_PROCESS_DISPLAY_PHYG 3235 #define MNG_FN_PROCESS_DISPLAY_JHDR 3236 #define MNG_FN_PROCESS_DISPLAY_JDAT 3237 #define MNG_FN_PROCESS_DISPLAY_JSEP 3238 #define MNG_FN_PROCESS_DISPLAY_DHDR 3239 #define MNG_FN_PROCESS_DISPLAY_PROM 3240 #define MNG_FN_PROCESS_DISPLAY_IPNG 3241 #define MNG_FN_PROCESS_DISPLAY_PPLT 3242 #define MNG_FN_PROCESS_DISPLAY_IJNG 3243 #define MNG_FN_PROCESS_DISPLAY_DROP 3244 #define MNG_FN_PROCESS_DISPLAY_DBYK 3245 #define MNG_FN_PROCESS_DISPLAY_ORDR 3246 #define MNG_FN_PROCESS_DISPLAY_MAGN 3247 #define MNG_FN_PROCESS_DISPLAY_JDAA 3248 /* ************************************************************************** */ #define MNG_FN_JPEG_INITIALIZE 3401 #define MNG_FN_JPEG_CLEANUP 3402 #define MNG_FN_JPEG_DECOMPRESSINIT 3403 #define MNG_FN_JPEG_DECOMPRESSDATA 3404 #define MNG_FN_JPEG_DECOMPRESSFREE 3405 #define MNG_FN_STORE_JPEG_G8 3501 #define MNG_FN_STORE_JPEG_RGB8 3502 #define MNG_FN_STORE_JPEG_G12 3503 #define MNG_FN_STORE_JPEG_RGB12 3504 #define MNG_FN_STORE_JPEG_GA8 3505 #define MNG_FN_STORE_JPEG_RGBA8 3506 #define MNG_FN_STORE_JPEG_GA12 3507 #define MNG_FN_STORE_JPEG_RGBA12 3508 #define MNG_FN_STORE_JPEG_G8_ALPHA 3509 #define MNG_FN_STORE_JPEG_RGB8_ALPHA 3510 #define MNG_FN_INIT_JPEG_A1_NI 3511 #define MNG_FN_INIT_JPEG_A2_NI 3512 #define MNG_FN_INIT_JPEG_A4_NI 3513 #define MNG_FN_INIT_JPEG_A8_NI 3514 #define MNG_FN_INIT_JPEG_A16_NI 3515 #define MNG_FN_STORE_JPEG_G8_A1 3521 #define MNG_FN_STORE_JPEG_G8_A2 3522 #define MNG_FN_STORE_JPEG_G8_A4 3523 #define MNG_FN_STORE_JPEG_G8_A8 3524 #define MNG_FN_STORE_JPEG_G8_A16 3525 #define MNG_FN_STORE_JPEG_RGB8_A1 3531 #define MNG_FN_STORE_JPEG_RGB8_A2 3532 #define MNG_FN_STORE_JPEG_RGB8_A4 3533 #define MNG_FN_STORE_JPEG_RGB8_A8 3534 #define MNG_FN_STORE_JPEG_RGB8_A16 3535 #define MNG_FN_STORE_JPEG_G12_A1 3541 #define MNG_FN_STORE_JPEG_G12_A2 3542 #define MNG_FN_STORE_JPEG_G12_A4 3543 #define MNG_FN_STORE_JPEG_G12_A8 3544 #define MNG_FN_STORE_JPEG_G12_A16 3545 #define MNG_FN_STORE_JPEG_RGB12_A1 3551 #define MNG_FN_STORE_JPEG_RGB12_A2 3552 #define MNG_FN_STORE_JPEG_RGB12_A4 3553 #define MNG_FN_STORE_JPEG_RGB12_A8 3554 #define MNG_FN_STORE_JPEG_RGB12_A16 3555 #define MNG_FN_NEXT_JPEG_ALPHAROW 3591 #define MNG_FN_NEXT_JPEG_ROW 3592 #define MNG_FN_DISPLAY_JPEG_ROWS 3593 /* ************************************************************************** */ #define MNG_FN_MAGNIFY_G8_X1 3701 #define MNG_FN_MAGNIFY_G8_X2 3702 #define MNG_FN_MAGNIFY_RGB8_X1 3703 #define MNG_FN_MAGNIFY_RGB8_X2 3704 #define MNG_FN_MAGNIFY_GA8_X1 3705 #define MNG_FN_MAGNIFY_GA8_X2 3706 #define MNG_FN_MAGNIFY_GA8_X3 3707 #define MNG_FN_MAGNIFY_GA8_X4 3708 #define MNG_FN_MAGNIFY_RGBA8_X1 3709 #define MNG_FN_MAGNIFY_RGBA8_X2 3710 #define MNG_FN_MAGNIFY_RGBA8_X3 3711 #define MNG_FN_MAGNIFY_RGBA8_X4 3712 #define MNG_FN_MAGNIFY_G8_X3 3713 #define MNG_FN_MAGNIFY_RGB8_X3 3714 #define MNG_FN_MAGNIFY_GA8_X5 3715 #define MNG_FN_MAGNIFY_RGBA8_X5 3716 #define MNG_FN_MAGNIFY_G16_X1 3725 #define MNG_FN_MAGNIFY_G16_X2 3726 #define MNG_FN_MAGNIFY_RGB16_X1 3727 #define MNG_FN_MAGNIFY_RGB16_X2 3728 #define MNG_FN_MAGNIFY_GA16_X1 3729 #define MNG_FN_MAGNIFY_GA16_X2 3730 #define MNG_FN_MAGNIFY_GA16_X3 3731 #define MNG_FN_MAGNIFY_GA16_X4 3732 #define MNG_FN_MAGNIFY_RGBA16_X1 3733 #define MNG_FN_MAGNIFY_RGBA16_X2 3734 #define MNG_FN_MAGNIFY_RGBA16_X3 3735 #define MNG_FN_MAGNIFY_RGBA16_X4 3736 #define MNG_FN_MAGNIFY_G16_X3 3737 #define MNG_FN_MAGNIFY_RGB16_X3 3738 #define MNG_FN_MAGNIFY_GA16_X5 3739 #define MNG_FN_MAGNIFY_RGBA16_X5 3740 #define MNG_FN_MAGNIFY_G8_Y1 3751 #define MNG_FN_MAGNIFY_G8_Y2 3752 #define MNG_FN_MAGNIFY_RGB8_Y1 3753 #define MNG_FN_MAGNIFY_RGB8_Y2 3754 #define MNG_FN_MAGNIFY_GA8_Y1 3755 #define MNG_FN_MAGNIFY_GA8_Y2 3756 #define MNG_FN_MAGNIFY_GA8_Y3 3757 #define MNG_FN_MAGNIFY_GA8_Y4 3758 #define MNG_FN_MAGNIFY_RGBA8_Y1 3759 #define MNG_FN_MAGNIFY_RGBA8_Y2 3760 #define MNG_FN_MAGNIFY_RGBA8_Y3 3761 #define MNG_FN_MAGNIFY_RGBA8_Y4 3762 #define MNG_FN_MAGNIFY_G8_Y3 3763 #define MNG_FN_MAGNIFY_RGB8_Y3 3764 #define MNG_FN_MAGNIFY_GA8_Y5 3765 #define MNG_FN_MAGNIFY_RGBA8_Y5 3766 #define MNG_FN_MAGNIFY_G16_Y1 3775 #define MNG_FN_MAGNIFY_G16_Y2 3776 #define MNG_FN_MAGNIFY_RGB16_Y1 3777 #define MNG_FN_MAGNIFY_RGB16_Y2 3778 #define MNG_FN_MAGNIFY_GA16_Y1 3779 #define MNG_FN_MAGNIFY_GA16_Y2 3780 #define MNG_FN_MAGNIFY_GA16_Y3 3781 #define MNG_FN_MAGNIFY_GA16_Y4 3782 #define MNG_FN_MAGNIFY_RGBA16_Y1 3783 #define MNG_FN_MAGNIFY_RGBA16_Y2 3784 #define MNG_FN_MAGNIFY_RGBA16_Y3 3785 #define MNG_FN_MAGNIFY_RGBA16_Y4 3786 #define MNG_FN_MAGNIFY_G16_Y3 3787 #define MNG_FN_MAGNIFY_RGB16_Y3 3788 #define MNG_FN_MAGNIFY_GA16_Y5 3789 #define MNG_FN_MAGNIFY_RGBA16_Y5 3790 /* ************************************************************************** */ #define MNG_FN_DELTA_G1_G1 3801 #define MNG_FN_DELTA_G2_G2 3802 #define MNG_FN_DELTA_G4_G4 3803 #define MNG_FN_DELTA_G8_G8 3804 #define MNG_FN_DELTA_G16_G16 3805 #define MNG_FN_DELTA_RGB8_RGB8 3806 #define MNG_FN_DELTA_RGB16_RGB16 3807 #define MNG_FN_DELTA_GA8_GA8 3808 #define MNG_FN_DELTA_GA8_G8 3809 #define MNG_FN_DELTA_GA8_A8 3810 #define MNG_FN_DELTA_GA16_GA16 3811 #define MNG_FN_DELTA_GA16_G16 3812 #define MNG_FN_DELTA_GA16_A16 3813 #define MNG_FN_DELTA_RGBA8_RGBA8 3814 #define MNG_FN_DELTA_RGBA8_RGB8 3815 #define MNG_FN_DELTA_RGBA8_A8 3816 #define MNG_FN_DELTA_RGBA16_RGBA16 3817 #define MNG_FN_DELTA_RGBA16_RGB16 3818 #define MNG_FN_DELTA_RGBA16_A16 3819 #define MNG_FN_PROMOTE_G8_G8 3901 #define MNG_FN_PROMOTE_G8_G16 3902 #define MNG_FN_PROMOTE_G16_G16 3903 #define MNG_FN_PROMOTE_G8_GA8 3904 #define MNG_FN_PROMOTE_G8_GA16 3905 #define MNG_FN_PROMOTE_G16_GA16 3906 #define MNG_FN_PROMOTE_G8_RGB8 3907 #define MNG_FN_PROMOTE_G8_RGB16 3908 #define MNG_FN_PROMOTE_G16_RGB16 3909 #define MNG_FN_PROMOTE_G8_RGBA8 3910 #define MNG_FN_PROMOTE_G8_RGBA16 3911 #define MNG_FN_PROMOTE_G16_RGBA16 3912 #define MNG_FN_PROMOTE_GA8_GA16 3913 #define MNG_FN_PROMOTE_GA8_RGBA8 3914 #define MNG_FN_PROMOTE_GA8_RGBA16 3915 #define MNG_FN_PROMOTE_GA16_RGBA16 3916 #define MNG_FN_PROMOTE_RGB8_RGB16 3917 #define MNG_FN_PROMOTE_RGB8_RGBA8 3918 #define MNG_FN_PROMOTE_RGB8_RGBA16 3919 #define MNG_FN_PROMOTE_RGB16_RGBA16 3920 #define MNG_FN_PROMOTE_RGBA8_RGBA16 3921 #define MNG_FN_PROMOTE_IDX8_RGB8 3922 #define MNG_FN_PROMOTE_IDX8_RGB16 3923 #define MNG_FN_PROMOTE_IDX8_RGBA8 3924 #define MNG_FN_PROMOTE_IDX8_RGBA16 3925 #define MNG_FN_SCALE_G1_G2 4001 #define MNG_FN_SCALE_G1_G4 4002 #define MNG_FN_SCALE_G1_G8 4003 #define MNG_FN_SCALE_G1_G16 4004 #define MNG_FN_SCALE_G2_G4 4005 #define MNG_FN_SCALE_G2_G8 4006 #define MNG_FN_SCALE_G2_G16 4007 #define MNG_FN_SCALE_G4_G8 4008 #define MNG_FN_SCALE_G4_G16 4009 #define MNG_FN_SCALE_G8_G16 4010 #define MNG_FN_SCALE_GA8_GA16 4011 #define MNG_FN_SCALE_RGB8_RGB16 4012 #define MNG_FN_SCALE_RGBA8_RGBA16 4013 #define MNG_FN_SCALE_G2_G1 4021 #define MNG_FN_SCALE_G4_G1 4022 #define MNG_FN_SCALE_G8_G1 4023 #define MNG_FN_SCALE_G16_G1 4024 #define MNG_FN_SCALE_G4_G2 4025 #define MNG_FN_SCALE_G8_G2 4026 #define MNG_FN_SCALE_G16_G2 4027 #define MNG_FN_SCALE_G8_G4 4028 #define MNG_FN_SCALE_G16_G4 4029 #define MNG_FN_SCALE_G16_G8 4030 #define MNG_FN_SCALE_GA16_GA8 4031 #define MNG_FN_SCALE_RGB16_RGB8 4032 #define MNG_FN_SCALE_RGBA16_RGBA8 4033 #define MNG_FN_COMPOSEOVER_RGBA8 4501 #define MNG_FN_COMPOSEOVER_RGBA16 4502 #define MNG_FN_COMPOSEUNDER_RGBA8 4503 #define MNG_FN_COMPOSEUNDER_RGBA16 4504 #define MNG_FN_FLIP_RGBA8 4521 #define MNG_FN_FLIP_RGBA16 4522 #define MNG_FN_TILE_RGBA8 4523 #define MNG_FN_TILE_RGBA16 4524 /* ************************************************************************** */ /* * * */ /* * Trace string-table entry * */ /* * * */ /* ************************************************************************** */ typedef struct { mng_uint32 iFunction; mng_pchar zTracetext; } mng_trace_entry; typedef mng_trace_entry const * mng_trace_entryp; /* ************************************************************************** */ #endif /* MNG_INCLUDE_TRACE_PROCS */ /* ************************************************************************** */ #endif /* _libmng_trace_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_error.c0000644000000000000000000004067712005307152014317 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_error.c copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Error routines (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the general error handling routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.5.2 - 05/23/2000 - G.Juyn * */ /* * - added error telltaling * */ /* * 0.5.2 - 05/30/2000 - G.Juyn * */ /* * - added errorstrings for delta-image processing * */ /* * 0.5.2 - 05/31/2000 - G.Juyn * */ /* * - fixed up punctuation (contributed by Tim Rowley) * */ /* * 0.5.2 - 06/06/2000 - G.Juyn * */ /* * - added errorstring for delayed buffer-processing * */ /* * * */ /* * 0.9.1 - 07/06/2000 - G.Juyn * */ /* * - added MNG_NEEDTIMERWAIT errorstring * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - added NEEDSECTIONWAIT errorstring * */ /* * - added macro + routine to set returncode without * */ /* * calling error callback * */ /* * 0.9.1 - 07/19/2000 - G.Juyn * */ /* * - added errorstring for updatemngheader if not a MNG * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/09/2000 - G.Juyn * */ /* * - added check for simplicity-bits in MHDR * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - fixed processing of unknown critical chunks * */ /* * - added support for nEED * */ /* * 0.9.3 - 10/20/2000 - G.Juyn * */ /* * - added errorcode for delayed delta-processing * */ /* * * */ /* * 0.9.4 - 01/18/2001 - G.Juyn * */ /* * - added errorcode for MAGN methods * */ /* * * */ /* * 1.0.2 - 06/23/2001 - G.Juyn * */ /* * - added optimization option for MNG-video playback * */ /* * * */ /* * 1.0.5 - 07/04/2002 - G.Juyn * */ /* * - added errorcode for extreme chunk-sizes * */ /* * 1.0.5 - 08/15/2002 - G.Juyn * */ /* * - completed delta-image support * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * 1.0.5 - 09/15/2002 - G.Juyn * */ /* * - fixed LOOP iteration=0 special case * */ /* * 1.0.5 - 09/19/2002 - G.Juyn * */ /* * - warnings are ignored by default now! * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - added support for PAST * */ /* * 1.0.5 - 10/07/2002 - G.Juyn * */ /* * - added check for TERM placement during create/write * */ /* * * */ /* * 1.0.6 - 07/07/2003 - G. R-P * */ /* * - added MNG_SKIPCHUNK_CHNK, MNG_NO_DELTA_PNG reductions. * */ /* * - skipped more code when MNG_INCLUDE_JNG is not enabled. * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditional around evNT chunk support * */ /* * * */ /* * 1.0.7 - 03/24/2004 - G.R-P * */ /* * - fixed typo on SKIPCHUNK_evNT (->PAST) * */ /* * * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ERROR_STRINGS MNG_LOCAL mng_error_entry const error_table [] = { {MNG_NOERROR, "No error"}, {MNG_OUTOFMEMORY, "Out of memory"}, {MNG_INVALIDHANDLE, "The handle is invalid"}, {MNG_NOCALLBACK, "A required callback is not defined"}, {MNG_UNEXPECTEDEOF, "Encountered unexpected end-of-file"}, {MNG_ZLIBERROR, "zlib encountered an error"}, #ifdef MNG_INCLUDE_JNG {MNG_JPEGERROR, "ijgsrc6b encountered an error"}, #endif {MNG_LCMSERROR, "lcms encountered an error"}, {MNG_NOOUTPUTPROFILE, "No output-profile defined for CMS"}, {MNG_NOSRGBPROFILE, "No sRGB-profile defined for CMS"}, {MNG_BUFOVERFLOW, "Internal buffer-overflow"}, {MNG_FUNCTIONINVALID, "Function is invalid at this point"}, {MNG_OUTPUTERROR, "Writing was unsuccessful; disk full?"}, {MNG_JPEGBUFTOOSMALL, "Internal buffer for JPEG processing too small"}, {MNG_NEEDMOREDATA, "Reading suspended; waiting for I/O to catch up"}, {MNG_NEEDTIMERWAIT, "Timer suspension; normal animation delay"}, {MNG_NEEDSECTIONWAIT, "SEEK suspension; application decides"}, {MNG_LOOPWITHCACHEOFF, "LOOP encountered when playback cache is turned off"}, {MNG_APPIOERROR, "Application signalled I/O error"}, {MNG_APPTIMERERROR, "Application signalled timing error"}, {MNG_APPCMSERROR, "Application signalled CMS error"}, {MNG_APPMISCERROR, "Application signalled an error"}, {MNG_APPTRACEABORT, "Application signalled error during trace-callback"}, {MNG_INTERNALERROR, "Internal error in libmng"}, {MNG_INVALIDSIG, "The signature is invalid"}, {MNG_INVALIDCRC, "The CRC for this chunk is invalid"}, {MNG_INVALIDLENGTH, "Chunk-length is invalid"}, {MNG_SEQUENCEERROR, "Chunk out of sequence"}, {MNG_CHUNKNOTALLOWED, "Chunk not allowed at this point"}, {MNG_MULTIPLEERROR, "Chunk cannot occur multiple times"}, {MNG_PLTEMISSING, "Missing PLTE chunk"}, {MNG_IDATMISSING, "Missing IDAT chunk(s)"}, {MNG_CANNOTBEEMPTY, "Chunk cannot be empty"}, {MNG_GLOBALLENGTHERR, "Global data length invalid"}, {MNG_INVALIDBITDEPTH, "The bit_depth is invalid"}, {MNG_INVALIDCOLORTYPE, "The color_type is invalid"}, {MNG_INVALIDCOMPRESS, "The compression_method is invalid"}, {MNG_INVALIDFILTER, "The filter_method or filter_type is invalid"}, {MNG_INVALIDINTERLACE, "The interlace_method is invalid"}, {MNG_NOTENOUGHIDAT, "There is not enough data in the IDAT chunk(s)"}, {MNG_PLTEINDEXERROR, "Palette-index out of bounds"}, {MNG_NULLNOTFOUND, "NULL separator not found"}, {MNG_KEYWORDNULL, "Keyword cannot be zero-length"}, {MNG_OBJECTUNKNOWN, "Object does not exist"}, {MNG_OBJECTEXISTS, "Object already exists"}, {MNG_TOOMUCHIDAT, "Too much data in IDAT chunk(s)"}, {MNG_INVSAMPLEDEPTH, "The sample_depth is invalid"}, {MNG_INVOFFSETSIZE, "The offset_type is invalid"}, {MNG_INVENTRYTYPE, "The entry_type is invalid"}, {MNG_ENDWITHNULL, "Chunk must not end with NULL byte"}, {MNG_INVIMAGETYPE, "The image_type is invalid"}, #ifndef MNG_NO_DELTA_PNG {MNG_INVDELTATYPE, "The delta_type is invalid"}, #endif {MNG_INVALIDINDEX, "Index-value out of bounds"}, #ifdef MNG_INCLUDE_JNG {MNG_TOOMUCHJDAT, "Too much data in JDAT chunk(s)"}, {MNG_JPEGPARMSERR, "JHDR parameters & JFIF-data do not match"}, #endif {MNG_INVFILLMETHOD, "The fill_method is invalid"}, #ifndef MNG_NO_DELTA_PNG {MNG_OBJNOTCONCRETE, "Target object for DHDR must be concrete"}, #endif {MNG_TARGETNOALPHA, "Target object must have alpha-channel"}, {MNG_MNGTOOCOMPLEX, "MHDR simplicity indicates unsupported feature(s)"}, {MNG_UNKNOWNCRITICAL, "Unknown critical chunk encountered"}, #ifndef MNG_SKIPCHUNK_nEED {MNG_UNSUPPORTEDNEED, "Requested nEED resources are not supported"}, #endif {MNG_INVALIDDELTA, "The delta operation is invalid (mismatched color_types?)"}, {MNG_INVALIDMETHOD, "Method is invalid"}, {MNG_IMPROBABLELENGTH, "Chunklength is incredibly large"}, {MNG_INVALIDBLOCK, "Delta block width and or height invalid"}, {MNG_INVALIDEVENT, "Event type is invalid"}, {MNG_INVALIDMASK, "Mask type is invalid"}, {MNG_NOMATCHINGLOOP, "ENDL without matching LOOP"}, #ifndef MNG_SKIPCHUNK_evNT {MNG_SEEKNOTFOUND, "evNT points to unknown SEEK"}, #endif #ifndef MNG_SKIPCHUNK_PAST {MNG_OBJNOTABSTRACT, "Destination object for PAST must be abstract"}, #endif {MNG_TERMSEQERROR, "TERM misplaced during creation of MNG stream"}, {MNG_INVALIDFIELDVAL, "invalid fieldvalue (generic)"}, {MNG_INVALIDWIDTH, "invalid frame/image width"}, {MNG_INVALIDHEIGHT, "invalid frame/image height"}, {MNG_INVALIDCNVSTYLE, "Canvas_style is invalid"}, {MNG_WRONGCHUNK, "Attempt to access the wrong chunk"}, {MNG_INVALIDENTRYIX, "Attempt to access an non-existing entry"}, {MNG_NOHEADER, "No valid header-chunk"}, {MNG_NOCORRCHUNK, "Parent chunk not found"}, {MNG_NOMHDR, "No MNG header (MHDR) found"}, {MNG_IMAGETOOLARGE, "Image is larger than defined maximum"}, {MNG_NOTANANIMATION, "Image is not an animation"}, {MNG_FRAMENRTOOHIGH, "Framenr out of bounds"}, {MNG_LAYERNRTOOHIGH, "Layernr out of bounds"}, {MNG_PLAYTIMETOOHIGH, "Playtime out of bounds"}, {MNG_FNNOTIMPLEMENTED, "Function not yet implemented"}, {MNG_IMAGEFROZEN, "Image is frozen"}, {MNG_LCMS_NOHANDLE, "Handle could not be initialized"}, {MNG_LCMS_NOMEM, "No memory for gamma-table(s)"}, {MNG_LCMS_NOTRANS, "Transformation could not be initialized"} }; #endif /* MNG_INCLUDE_ERROR_STRINGS */ /* ************************************************************************** */ mng_bool mng_store_error (mng_datap pData, mng_retcode iError, mng_retcode iExtra1, mng_retcode iExtra2) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (pData, MNG_FN_STORE_ERROR, MNG_LC_START); #endif if (pData != 0) { pData->iErrorcode = iError; /* save also for getlasterror */ pData->iErrorx1 = iExtra1; pData->iErrorx2 = iExtra2; #ifdef MNG_INCLUDE_ERROR_STRINGS { /* binary search variables */ mng_int32 iTop, iLower, iUpper, iMiddle; mng_error_entryp pEntry; /* pointer to found entry */ /* determine max index of table */ iTop = (sizeof (error_table) / sizeof (error_table [0])) - 1; iLower = 0; /* initialize binary search */ iMiddle = iTop >> 1; /* start in the middle */ iUpper = iTop; pEntry = 0; /* no goods yet! */ do /* the binary search itself */ { if (error_table [iMiddle].iError < iError) iLower = iMiddle + 1; else if (error_table [iMiddle].iError > iError) iUpper = iMiddle - 1; else { pEntry = &error_table [iMiddle]; break; } iMiddle = (iLower + iUpper) >> 1; } while (iLower <= iUpper); if (pEntry) /* found it ? */ pData->zErrortext = pEntry->zErrortext; else pData->zErrortext = "Unknown error"; } #else /* MNG_INCLUDE_ERROR_STRINGS */ pData->zErrortext = 0; #endif /* MNG_INCLUDE_ERROR_STRINGS */ if (iError == 0) /* no error is not severe ! */ { pData->iSeverity = 0; } else { switch (iError&0x3C00) /* determine the severity */ { case 0x0800 : { pData->iSeverity = 5; break; } case 0x1000 : { pData->iSeverity = 2; break; } case 0x2000 : { pData->iSeverity = 1; break; } default : { pData->iSeverity = 9; } } } } #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (pData, MNG_FN_STORE_ERROR, MNG_LC_END); #endif return MNG_TRUE; } /* ************************************************************************** */ mng_bool mng_process_error (mng_datap pData, mng_retcode iError, mng_retcode iExtra1, mng_retcode iExtra2) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (pData, MNG_FN_PROCESS_ERROR, MNG_LC_START); #endif mng_store_error (pData, iError, iExtra1, iExtra2); if ((pData != MNG_NULL) && (pData->iMagic == MNG_MAGIC)) { if (pData->fErrorproc) /* callback defined ? */ return pData->fErrorproc (((mng_handle)pData), iError, pData->iSeverity, pData->iChunkname, pData->iChunkseq, pData->iErrorx1, pData->iErrorx2, pData->zErrortext); } #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (pData, MNG_FN_PROCESS_ERROR, MNG_LC_END); #endif return MNG_TRUE; /* warnings are ignored by default ! */ } /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_write.h0000644000000000000000000000564212005307152014316 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_write.h copyright (c) 2000-2004 G.Juyn * */ /* * version : 1.0.9 * */ /* * * */ /* * purpose : Write management (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the write management routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * * */ /* * 1.0.9 - 09/25/2004 - G.Juyn * */ /* * - replaced MNG_TWEAK_LARGE_FILES with permanent solution * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_write_h_ #define _libmng_write_h_ /* ************************************************************************** */ mng_retcode mng_drop_chunks (mng_datap pData); mng_retcode mng_write_graphic (mng_datap pData); /* ************************************************************************** */ #endif /* _libmng_write_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/CMakeLists.txt0000644000000000000000000002744312005307313014225 0ustar rootroot#libmng-VERSION CMAKE_MINIMUM_REQUIRED(VERSION 2.6) # IF(COMMAND CMAKE_POLICY) CMAKE_POLICY(SET CMP0003 NEW) ENDIF(COMMAND CMAKE_POLICY) # IF(NOT MNG_NAMESPACE) SET(MNG_NAMESPACE "MNG") SET(MNG_STANDALONE 1) ENDIF(NOT MNG_NAMESPACE) # STRING(TOLOWER ${MNG_NAMESPACE} MNG_LIBRARY_NAME) # project(${MNG_NAMESPACE} C) # INCLUDE(${CMAKE_SOURCE_DIR}/CMake/vers.cmake) # SET(MNG_VERSION "${MNG_VERSION_MAJOR}.${MNG_VERSION_MINOR}.${MNG_VERSION_PATCH}") # SET(PACKAGE_VERSION "${MNG_VERSION_MAJOR}.${MNG_VERSION_MINOR}.${MNG_VERSION_PATCH}") # SET(MNG_LIBRARY_PROPERTIES VERSION "${MNG_VERSION_MAJOR}.${MNG_VERSION_MINOR}.${MNG_VERSION_PATCH}" SOVERSION "${MNG_VERSION_MAJOR}") # # Path to additional CMake modules SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake ${CMAKE_MODULE_PATH}) FIND_PACKAGE(GZIP) FIND_PACKAGE(MAN) # STRING(TOLOWER ${PROJECT_NAME} projectname) SET(MNG_INSTALL_SUBDIR "${projectname}-${MNG_VERSION_MAJOR}.${MNG_VERSION_MINOR}") # IF(MSVC) ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) ENDIF(MSVC) # IF(DEBUG_LIBMNG) IF(UNIX) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wconversion -Wno-unused") ENDIF(UNIX) ENDIF(DEBUG_LIBMNG) # IF(NOT MNG_INSTALL_BIN_DIR) SET(MNG_INSTALL_BIN_DIR "bin") ENDIF(NOT MNG_INSTALL_BIN_DIR) # IF(NOT MNG_INSTALL_LIB_DIR) IF(UNIX) IF(CMAKE_SIZEOF_VOID_P EQUAL "8") SET(MNG_INSTALL_LIB_DIR "lib64") ELSE(CMAKE_SIZEOF_VOID_P EQUAL "8") SET(MNG_INSTALL_LIB_DIR "lib") ENDIF(CMAKE_SIZEOF_VOID_P EQUAL "8") ELSE(UNIX) SET(MNG_INSTALL_LIB_DIR "lib") ENDIF(UNIX) ENDIF(NOT MNG_INSTALL_LIB_DIR) # IF(NOT MNG_INSTALL_SHARE_DIR) SET(MNG_INSTALL_SHARE_DIR "share") ENDIF(NOT MNG_INSTALL_SHARE_DIR) # IF(NOT MNG_INSTALL_DATA_DIR) SET(MNG_INSTALL_DATA_DIR "${MNG_INSTALL_SHARE_DIR}/${MNG_INSTALL_SUBDIR}") ENDIF(NOT MNG_INSTALL_DATA_DIR) # IF(NOT MNG_INSTALL_PKGCONFIG_DIR) SET(MNG_INSTALL_PKGCONFIG_DIR "${MNG_INSTALL_LIB_DIR}/pkgconfig") ENDIF(NOT MNG_INSTALL_PKGCONFIG_DIR) # IF(NOT MNG_INSTALL_INCLUDE_DIR) SET(MNG_INSTALL_INCLUDE_DIR "include") ENDIF(NOT MNG_INSTALL_INCLUDE_DIR) # IF(NOT MNG_INSTALL_DOC_DIR) SET(MNG_INSTALL_DOC_DIR "share/doc/${MNG_INSTALL_SUBDIR}") ENDIF(NOT MNG_INSTALL_DOC_DIR) # IF(NOT MNG_INSTALL_PACKAGE_DIR) SET(MNG_INSTALL_PACKAGE_DIR "${MNG_INSTALL_SHARE_DIR}/${MNG_INSTALL_SUBDIR}") ENDIF(NOT MNG_INSTALL_PACKAGE_DIR) # INCLUDE (${CMAKE_ROOT}/Modules/TestBigEndian.cmake) TEST_BIG_ENDIAN(WORDS_BIGENDIAN) # IF(WORDS_BIGENDIAN) SET(WORDS_BIGENDIAN_S "#define WORDS_BIGENDIAN 1") ELSE(WORDS_BIGENDIAN) SET(WORDS_BIGENDIAN_S "/* #undef WORDS_BIGENDIAN */") ENDIF(WORDS_BIGENDIAN) # OPTION(BUILD_STATIC_LIBS "Build MNG static library and link executables against it." ON) OPTION(BUILD_SHARED_LIBS "Build MNG shared library and link executables against it." ON) # OPTION(BUILD_MAN "Build MAN pages" OFF) # OPTION(WITH_LCMS2 "Build MNG library with liblcms version 2" ON) # OPTION(WITH_LCMS1 "Build MNG library with liblcms version 1" OFF) # OPTION(ENABLE_SUPPORT_FULL "Enable full support for MNG library; no LC or VLC" ON) # OPTION(DISABLE_BUILD_SO "Do not build MNG library with standard shared object" OFF) # OPTION(DISABLE_READ "Disable read support for MNG library" OFF) # OPTION(DISABLE_WRITE "Disable write support for MNG library" OFF) # OPTION(DISABLE_DISPLAY "Disable image display support for MNG library" OFF) # OPTION(DISABLE_DYNAMIC "Disable dynamic support for MNG library" OFF) # OPTION(DISABLE_CHUNKS "Remove support in MNG library to access chunks" OFF) # OPTION(DISABLE_STORE_CHUNKS "Disable support for accessing chunks that have been previously read" OFF) # OPTION(ENABLE_TRACE "Enable support for debug tracing callbacks and messages" OFF) # OPTION(WITH_JPEG "Enable JPEG support" ON) # FIND_PACKAGE(ZLIB REQUIRED) # IF(ZLIB_FOUND) INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) SET(HAVE_LIBZ 1) ENDIF(ZLIB_FOUND) # #---------- local build output path for testing --------- SET(EXECUTABLE_OUTPUT_PATH ${MNG_BINARY_DIR}/bin CACHE PATH "Single output directory for building all executables.") # SET(LIBRARY_OUTPUT_PATH ${MNG_BINARY_DIR}/bin CACHE PATH "Single output directory for building all libraries.") MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH) # #------------------ installation RPATH ------------------- # use, i.e. don't skip the full RPATH for the build tree SET(CMAKE_SKIP_BUILD_RPATH FALSE) # # when building, don't use the install RPATH already # (but later on when installing) SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) # SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") # # add the automatically determined parts of the RPATH # which point to directories outside the build tree to the install RPATH SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # # the RPATH to be used when installing, # but only if it's not a system directory LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) IF("${isSystemDir}" STREQUAL "-1") SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") ENDIF("${isSystemDir}" STREQUAL "-1") # #----- # INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake) CHECK_INCLUDE_FILE("strings.h" HAVE_STRINGS_H) CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H) CHECK_INCLUDE_FILE("memory.h" HAVE_MEMORY_H) CHECK_INCLUDE_FILE("stdint.h" HAVE_STDINT_H) CHECK_INCLUDE_FILE("stdlib.h" HAVE_STDLIB_H) CHECK_INCLUDE_FILE("string.h" HAVE_STRING_H) CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H) CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H) CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H) CHECK_INCLUDE_FILE("stddef.h" HAVE_STDDEF_H) CHECK_INCLUDE_FILE("io.h" HAVE_IO_H) CHECK_INCLUDE_FILE("fcntl.h" HAVE_FCNTL_H) CHECK_INCLUDE_FILE("assert.h" HAVE_ASSERT_H) CHECK_INCLUDE_FILE("limits.h" HAVE_LIMITS_H) CHECK_INCLUDE_FILE("math.h" HAVE_LIBM) CHECK_INCLUDE_FILE("malloc.h" HAVE_MALLOC_H) CHECK_INCLUDE_FILE("search.h" HAVE_SEARCH_H) CHECK_INCLUDE_FILE("sys/time.h" HAVE_SYS_TIME_H) CHECK_INCLUDE_FILE("windows.h" HAVE_WINDOWS_H) CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H) # IF(NOT HAVE_LIBM) MESSAGE(FATAL_ERROR "pow() REQUIRED: not found. Quitting.") ENDIF(NOT HAVE_LIBM) # FIND_PACKAGE(JPEG) # IF(JPEG_FOUND) INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR}) SET(HAVE_LIBJPEG 1) ENDIF(JPEG_FOUND) # IF(WITH_LCMS2) FIND_PACKAGE(LCMS2) IF(LCMS2_FOUND) INCLUDE_DIRECTORIES(${LCMS2_INCLUDE_DIR}) SET(HAVE_LIBLCMS2 1) SET(MNG_FULL_CMS 1) ENDIF(LCMS2_FOUND) ENDIF(WITH_LCMS2) # IF(WITH_LCMS1) FIND_PACKAGE(LCMS1) IF(LCMS1_FOUND) INCLUDE_DIRECTORIES(${LCMS1_INCLUDE_DIR}) SET(HAVE_LIBLCMS1 1) SET(MNG_FULL_CMS 1) ENDIF(LCMS1_FOUND) ENDIF(WITH_LCMS1) # IF(ENABLE_SUPPORT_FULL) SET(MNG_SUPPORT_FULL 1) ENDIF(ENABLE_SUPPORT_FULL) # IF(NOT DISABLE_BUILD_SO) SET(MNG_BUILD_SO 1) ENDIF(NOT DISABLE_BUILD_SO) # IF(NOT DISABLE_READ) SET(MNG_SUPPORT_READ 1) ENDIF(NOT DISABLE_READ) # IF(NOT DISABLE_WRITE) SET(MNG_SUPPORT_WRITE 1) ENDIF(NOT DISABLE_WRITE) # IF(NOT DISABLE_DISPLAY) SET(MNG_SUPPORT_DISPLAY 1) ENDIF(NOT DISABLE_DISPLAY) # IF(NOT DISABLE_DYNAMIC) SET(MNG_SUPPORT_DYNAMICMNG 1) ENDIF(NOT DISABLE_DYNAMIC) # IF(NOT DISABLE_CHUNKS) SET(MNG_ACCESS_CHUNKS 1) ENDIF(NOT DISABLE_CHUNKS) # IF(NOT DISABLE_STORE_CHUNKS) SET(MNG_STORE_CHUNKS 1) ENDIF(NOT DISABLE_STORE_CHUNKS) # IF(ENABLE_TRACE) SET(MNG_SUPPORT_TRACE 1) SET(MNG_TRACE_TELLTALE 1) ENDIF(ENABLE_TRACE) # SET(MNG_ERROR_TELLTALE 1) # #----------------- end of configuration ---------------------- CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/config.h.cmake.in" "${CMAKE_BINARY_DIR}/config.h" @ONLY ) # INCLUDE_DIRECTORIES(BEFORE ${MNG_BINARY_DIR}) # INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}) # FIND_PACKAGE(MAN) FIND_PACKAGE(GZIP) # ADD_SUBDIRECTORY(doc) # #--------------------------------------------------- # SET(TARGET_FILES libmng.h libmng_chunk_descr.h libmng_chunk_io.h libmng_chunk_prc.h libmng_chunks.h libmng_cms.h libmng_conf.h libmng_data.h libmng_display.h libmng_dither.h libmng_error.h libmng_filter.h libmng_jpeg.h libmng_memory.h libmng_object_prc.h libmng_objects.h libmng_pixels.h libmng_read.h libmng_trace.h libmng_types.h libmng_write.h libmng_zlib.h libmng_callback_xs.c libmng_chunk_descr.c libmng_chunk_io.c libmng_chunk_prc.c libmng_chunk_xs.c libmng_cms.c libmng_display.c libmng_dither.c libmng_error.c libmng_filter.c libmng_hlapi.c libmng_jpeg.c libmng_object_prc.c libmng_pixels.c libmng_prop_xs.c libmng_read.c libmng_trace.c libmng_write.c libmng_zlib.c ) # #------------------ STATIC --------------------- IF(BUILD_STATIC_LIBS) ADD_LIBRARY(${MNG_LIBRARY_NAME} STATIC ${TARGET_FILES}) # IF(JPEG_FOUND) TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME} ${JPEG_LIBRARY}) ENDIF(JPEG_FOUND) # IF(ZLIB_FOUND) TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME} ${ZLIB_LIBRARY}) ENDIF(ZLIB_FOUND) # IF(LCMS2_FOUND) TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME} ${LCMS2_LIBRARY}) ENDIF(LCMS2_FOUND) # IF(LCMS1_FOUND) TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME} ${LCMS1_LIBRARY}) ENDIF(LCMS1_FOUND) # IF(UNIX) TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME} m) ENDIF(UNIX) # IF(MSVC) SET_TARGET_PROPERTIES(${MNG_LIBRARY_NAME} PROPERTIES PREFIX "lib") ENDIF(MSVC) # SET_TARGET_PROPERTIES(${MNG_LIBRARY_NAME} PROPERTIES LINKER_LANGUAGE C) # # INSTALL(TARGETS ${MNG_LIBRARY_NAME} EXPORT MNG_TARGETS RUNTIME DESTINATION ${MNG_INSTALL_BIN_DIR} COMPONENT Applications LIBRARY DESTINATION ${MNG_INSTALL_LIB_DIR} COMPONENT Libraries ARCHIVE DESTINATION ${MNG_INSTALL_LIB_DIR} COMPONENT Libraries ) ENDIF(BUILD_STATIC_LIBS) #---------------- SHARED ------------- IF(BUILD_SHARED_LIBS) IF(WIN32) #-DMNG_BUILD_DLL or -DMNG_DLL or -DMNG_USE_DLL : cnf. libmng_types.h ADD_DEFINITIONS(-DMNG_BUILD_DLL) ENDIF(WIN32) ADD_LIBRARY(${MNG_LIBRARY_NAME}-shared ${TARGET_FILES} ) # IF(JPEG_FOUND) TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME}-shared ${JPEG_LIBRARY}) ENDIF(JPEG_FOUND) # IF(ZLIB_FOUND) TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME}-shared ${ZLIB_LIBRARY}) ENDIF(ZLIB_FOUND) # IF(LCMS2_FOUND) TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME}-shared ${LCMS2_LIBRARY}) ENDIF(LCMS2_FOUND) # IF(LCMS1_FOUND) TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME}-shared ${LCMS1_LIBRARY}) ENDIF(LCMS1_FOUND) # IF(UNIX) TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME}-shared m) ENDIF(UNIX) # IF(MSVC) SET_TARGET_PROPERTIES(${MNG_LIBRARY_NAME}-shared PROPERTIES PREFIX "lib") ENDIF(MSVC) # SET_TARGET_PROPERTIES(${MNG_LIBRARY_NAME}-shared PROPERTIES LINKER_LANGUAGE C) # SET_TARGET_PROPERTIES(${MNG_LIBRARY_NAME}-shared PROPERTIES OUTPUT_NAME ${MNG_LIBRARY_NAME} ${MNG_LIBRARY_PROPERTIES} ) # INSTALL(TARGETS ${MNG_LIBRARY_NAME}-shared EXPORT MNG_TARGETS RUNTIME DESTINATION ${MNG_INSTALL_BIN_DIR} COMPONENT Applications LIBRARY DESTINATION ${MNG_INSTALL_LIB_DIR} COMPONENT Libraries ARCHIVE DESTINATION ${MNG_INSTALL_LIB_DIR} COMPONENT Libraries ) # ENDIF(BUILD_SHARED_LIBS) #------------ libmng.pc --------------- IF(UNIX) SET(MNG_LIBS_PRIVATE "") IF(JPEG_FOUND) SET(MNG_LIBS_PRIVATE "${MNG_LIBS_PRIVATE} -ljpeg") ENDIF(JPEG_FOUND) IF(ZLIB_FOUND) SET(MNG_LIBS_PRIVATE "${MNG_LIBS_PRIVATE} -lz") ENDIF(ZLIB_FOUND) IF(LCMS2_FOUND) SET(MNG_LIBS_PRIVATE "${MNG_LIBS_PRIVATE} -llcms2") ENDIF(LCMS2_FOUND) IF(LCMS1_FOUND) SET(MNG_LIBS_PRIVATE "${MNG_LIBS_PRIVATE} -llcms") ENDIF(LCMS1_FOUND) # SET(MNG_LIBS_PRIVATE "${MNG_LIBS_PRIVATE} -lm") # CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/CMake/libmng.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/libmng.pc @ONLY) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libmng.pc DESTINATION ${MNG_INSTALL_PKGCONFIG_DIR} ) ENDIF(UNIX) # INSTALL(EXPORT MNG_TARGETS DESTINATION ${MNG_INSTALL_PACKAGE_DIR}) # INSTALL(FILES libmng.h libmng_conf.h libmng_types.h DESTINATION ${MNG_INSTALL_INCLUDE_DIR} COMPONENT Headers ) INSTALL(FILES README README.config README.dll README.footprint README.autoconf README.contrib README.examples README.packaging CHANGES LICENSE DESTINATION ${MNG_INSTALL_DOC_DIR} ) #--- fin libmng-2.0.2/contrib/0000755000000000000000000000000012120335651013117 5ustar rootrootlibmng-2.0.2/contrib/GTK/0000755000000000000000000000000012005307152013541 5ustar rootrootlibmng-2.0.2/contrib/GTK/gtk-mng-view/0000755000000000000000000000000012005307152016055 5ustar rootrootlibmng-2.0.2/contrib/mngplg/0000755000000000000000000000000012005307152014400 5ustar rootrootlibmng-2.0.2/contrib/delphi/0000755000000000000000000000000012005307152014361 5ustar rootrootlibmng-2.0.2/contrib/delphi/libmng.pas0000644000000000000000000032235512005307152016350 0ustar rootrootunit libmng; {****************************************************************************} {* *} {* COPYRIGHT NOTICE: *} {* *} {* Copyright (c) 2000-2004 Gerard Juyn (gerard@libmng.com) *} {* [You may insert additional notices after this sentence if you modify *} {* this source] *} {* *} {* For the purposes of this copyright and license, "Contributing Authors" *} {* is defined as the following set of individuals: *} {* *} {* Gerard Juyn *} {* (hopefully some more to come...) *} {* *} {* The MNG Library is supplied "AS IS". The Contributing Authors *} {* disclaim all warranties, expressed or implied, including, without *} {* limitation, the warranties of merchantability and of fitness for any *} {* purpose. The Contributing Authors assume no liability for direct, *} {* indirect, incidental, special, exemplary, or consequential damages, *} {* which may result from the use of the MNG Library, even if advised of *} {* the possibility of such damage. *} {* *} {* Permission is hereby granted to use, copy, modify, and distribute this *} {* source code, or portions hereof, for any purpose, without fee, subject *} {* to the following restrictions: *} {* *} {* 1. The origin of this source code must not be misrepresented; *} {* you must not claim that you wrote the original software. *} {* *} {* 2. Altered versions must be plainly marked as such and must not be *} {* misrepresented as being the original source. *} {* *} {* 3. This Copyright notice may not be removed or altered from any source *} {* or altered source distribution. *} {* *} {* The Contributing Authors specifically permit, without fee, and *} {* encourage the use of this source code as a component to supporting *} {* the MNG and JNG file format in commercial products. If you use this *} {* source code in a product, acknowledgment would be highly appreciated. *} {* *} {****************************************************************************} {* *} {* project : libmng *} {* file : libmng.pas copyright (c) 2000-2004 G.Juyn *} {* version : 1.0.8 *} {* *} {* purpose : libmng.dll wrapper unit *} {* *} {* author : G.Juyn *} {* web : http://www.3-t.com *} {* email : mailto:info (at) 3-t (dot) com *} {* *} {* comment : contains the pascal-translation of libmng.h *} {* can be used by Delphi programs to access the libmng.dll *} {* *} {* changes : 0.5.1 - 05/02/2000 - G.Juyn *} {* - added this version block *} {* 0.5.1 - 05/08/2000 - G.Juyn *} {* - changed to stdcall convention *} {* 0.5.1 - 05/11/2000 - G.Juyn *} {* - changed callback prototypes *} {* - added TRUE/FALSE/NULL constants *} {* - added setoutputprofile2 & setsrgbprofile2 *} {* - added several new types *} {* - added chunk-access functions *} {* - added new error- & tracecodes *} {* *} {* 0.5.2 - 05/24/2000 - G.Juyn *} {* - removed error- & trace-strings since they are now *} {* provided by the library *} {* *} {* 0.5.3 - 06/21/2000 - G.Juyn *} {* - fixed definition of imagetype *} {* - added definition of speedtype *} {* - added get/set speed parameter *} {* - added get imagelevel parameter *} {* 0.5.3 - 06/26/2000 - G.Juyn *} {* - changed definition of userdata to mng_ptr *} {* 0.5.3 - 06/28/2000 - G.Juyn *} {* - added mng_size_t definition *} {* - changed definition of memory alloc size to mng_size_t *} {* 0.5.3 - 06/29/2000 - G.Juyn *} {* - changed order of refresh parameters *} {* - changed definition of mng_handle *} {* *} {* 0.9.0 - 06/30/2000 - G.Juyn *} {* - changed refresh parameters to 'x,y,width,height' *} {* *} {* 0.9.1 - 07/08/2000 - G.Juyn *} {* - added libmng errorcode constants *} {* 0.9.1 - 07/10/2000 - G.Juyn *} {* - added new libmng functions *} {* 0.9.1 - 07/19/2000 - G.Juyn *} {* - fixed several type definitions *} {* 0.9.1 - 07/25/2000 - G.Juyn *} {* - fixed definition of mng_imgtype *} {* *} {* 0.9.2 - 08/04/2000 - G.Juyn *} {* - fixed in line with libmng.h *} {* 0.9.2 - 08/05/2000 - G.Juyn *} {* - added function to set simplicity field *} {* *} {* 0.9.3 - 10/21/2000 - G.Juyn *} {* - added several new HLAPI entry points *} {* *} {* 1.0.5 - 09/16/2002 - G.Juyn *} {* - added dynamic MNG features *} {* *} {* 1.0.8 - 04/12/2004 - G.Juyn *} {* - added CRC existence & checking flags *} {* - added push mechanisms *} {* *} {****************************************************************************} interface {****************************************************************************} const MNG_TRUE = TRUE; MNG_FALSE = FALSE; MNG_NULL = nil; type mng_uint32 = cardinal; mng_int32 = integer; mng_uint16 = word; mng_int16 = smallint; mng_uint8 = byte; mng_int8 = shortint; mng_bool = boolean; mng_ptr = pointer; mng_pchar = pchar; mng_handle = pointer; mng_retcode = mng_int32; mng_chunkid = mng_uint32; mng_size_t = cardinal; mng_imgtype = (mng_it_unknown, mng_it_png, mng_it_mng, mng_it_jng); mng_speedtype = (mng_st_normal, mng_st_fast, mng_st_slow, mng_st_slowest); mng_uint32p = ^mng_uint32; mng_uint16p = ^mng_uint16; mng_uint8p = ^mng_uint8; mng_chunkidp = ^mng_chunkid; mng_palette8e = packed record { 8-bit palette element } iRed : mng_uint8; iGreen : mng_uint8; iBlue : mng_uint8; end; mng_palette8 = packed array [0 .. 255] of mng_palette8e; mng_uint8arr = packed array [0 .. 255] of mng_uint8; mng_uint8arr4 = packed array [0 .. 3] of mng_uint8; mng_uint16arr = packed array [0 .. 255] of mng_uint16; mng_uint32arr2 = packed array [0 .. 1] of mng_uint32; {****************************************************************************} type mng_memalloc = function ( iLen : mng_size_t) : mng_ptr; stdcall; type mng_memfree = procedure ( pPtr : mng_ptr; iLen : mng_size_t); stdcall; type mng_releasedata = procedure ( pUserData : mng_ptr; pData : mng_ptr; iLength : mng_size_t); stdcall; type mng_openstream = function ( hHandle : mng_handle) : mng_bool; stdcall; type mng_closestream = function ( hHandle : mng_handle) : mng_bool; stdcall; type mng_readdata = function ( hHandle : mng_handle; pBuf : mng_ptr; iBuflen : mng_uint32; var pRead : mng_uint32) : mng_bool; stdcall; type mng_writedata = function ( hHandle : mng_handle; pBuf : mng_ptr; iBuflen : mng_uint32; var pWritten : mng_uint32) : mng_bool; stdcall; type mng_errorproc = function ( hHandle : mng_handle; iErrorcode : mng_retcode; iSeverity : mng_uint8; iChunkname : mng_chunkid; iChunkseq : mng_uint32; iExtra1 : mng_int32; iExtra2 : mng_int32; zErrortext : mng_pchar ) : mng_bool; stdcall; type mng_traceproc = function ( hHandle : mng_handle; iFuncnr : mng_int32; iFuncseq : mng_uint32; zFuncname : mng_pchar ) : mng_bool; stdcall; type mng_processheader = function ( hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32) : mng_bool; stdcall; type mng_processtext = function ( hHandle : mng_handle; iType : mng_uint8; zKeyword : mng_pchar; zText : mng_pchar; zLanguage : mng_pchar; zTranslation : mng_pchar ) : mng_bool; stdcall; type mng_processsave = function ( hHandle : mng_handle) : mng_bool; stdcall; type mng_processseek = function ( hHandle : mng_handle; zName : mng_pchar ) : mng_bool; stdcall; type mng_processneed = function ( hHandle : mng_handle; zKeyword : mng_pchar ) : mng_bool; stdcall; type mng_processunknown = function ( hHandle : mng_handle; iChunkid : mng_chunkid; iRawlen : mng_uint32; pRawdata : mng_ptr ) : mng_bool; stdcall; type mng_getcanvasline = function ( hHandle : mng_handle; iLinenr : mng_uint32) : mng_ptr; stdcall; type mng_getalphaline = function ( hHandle : mng_handle; iLinenr : mng_uint32) : mng_ptr; stdcall; type mng_getbkgdline = function ( hHandle : mng_handle; iLinenr : mng_uint32) : mng_ptr; stdcall; type mng_refresh = function ( hHandle : mng_handle; iX : mng_uint32; iY : mng_uint32; iWidth : mng_uint32; iHeight : mng_uint32) : mng_bool; stdcall; type mng_gettickcount = function ( hHandle : mng_handle) : mng_uint32; stdcall; type mng_settimer = function ( hHandle : mng_handle; iMsecs : mng_uint32) : mng_bool; stdcall; type mng_processgamma = function ( hHandle : mng_handle; iGamma : mng_uint32) : mng_bool; stdcall; type mng_processchroma = function ( hHandle : mng_handle; iWhitex : mng_uint32; iWhitey : mng_uint32; iRedx : mng_uint32; iRedy : mng_uint32; iGreenx : mng_uint32; iGreeny : mng_uint32; iBluex : mng_uint32; iBluey : mng_uint32) : mng_bool; stdcall; type mng_processsrgb = function ( hHandle : mng_handle; iIntent : mng_uint8 ) : mng_bool; stdcall; type mng_processiccp = function ( hHandle : mng_handle; iProfilesize : mng_uint32; pProfile : mng_ptr ) : mng_bool; stdcall; type mng_processarow = function ( hHandle : mng_handle; iRowsamples : mng_uint32; bIsRGBA16 : mng_bool; pRow : mng_ptr ) : mng_bool; stdcall; type mng_iteratechunk = function ( hHandle : mng_handle; hChunk : mng_handle; iChunkid : mng_chunkid; iChunkseq : mng_uint32) : mng_bool; stdcall; {****************************************************************************} function mng_initialize ( pUserdata : mng_ptr; fMemalloc : mng_memalloc; fMemfree : mng_memfree; fTraceproc : mng_traceproc ) : mng_handle; stdcall; function mng_reset ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_cleanup (var hHandle : mng_handle ) : mng_retcode; stdcall; function mng_read ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_read_pushdata ( hHandle : mng_handle; pData : mng_ptr; iLength : mng_uint32; bTakeownership : mng_bool ) : mng_retcode; stdcall; function mng_read_pushsig ( hHandle : mng_handle; eSigtype : mng_imgtype ) : mng_retcode; stdcall; function mng_read_pushchunk ( hHandle : mng_handle; pData : mng_ptr; iLength : mng_uint32; bTakeownership : mng_bool ) : mng_retcode; stdcall; function mng_read_resume ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_write ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_create ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_readdisplay ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_display ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_display_resume ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_display_freeze ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_display_reset ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_display_goframe ( hHandle : mng_handle; iFramenr : mng_uint32 ) : mng_retcode; stdcall; function mng_display_golayer ( hHandle : mng_handle; iLayernr : mng_uint32 ) : mng_retcode; stdcall; function mng_display_gotime ( hHandle : mng_handle; iPlaytime : mng_uint32 ) : mng_retcode; stdcall; function mng_trapevent ( hHandle : mng_handle; iEventtype : mng_uint8; iX : mng_int32; iY : mng_int32 ) : mng_retcode; stdcall; function mng_getlasterror ( hHandle : mng_handle; var iSeverity : mng_uint8; var iChunkname : mng_chunkid; var iChunkseq : mng_uint32; var iExtra1 : mng_int32; var iExtra2 : mng_int32; var zErrortext : mng_pchar ) : mng_retcode; stdcall; {****************************************************************************} function mng_setcb_memalloc ( hHandle : mng_handle; fProc : mng_memalloc ) : mng_retcode; stdcall; function mng_setcb_memfree ( hHandle : mng_handle; fProc : mng_memfree ) : mng_retcode; stdcall; function mng_setcb_releasedata ( hHandle : mng_handle; fProc : mng_releasedata ) : mng_retcode; stdcall; function mng_setcb_openstream ( hHandle : mng_handle; fProc : mng_openstream ) : mng_retcode; stdcall; function mng_setcb_closestream ( hHandle : mng_handle; fProc : mng_closestream ) : mng_retcode; stdcall; function mng_setcb_readdata ( hHandle : mng_handle; fProc : mng_readdata ) : mng_retcode; stdcall; function mng_setcb_writedata ( hHandle : mng_handle; fProc : mng_writedata ) : mng_retcode; stdcall; function mng_setcb_errorproc ( hHandle : mng_handle; fProc : mng_errorproc ) : mng_retcode; stdcall; function mng_setcb_traceproc ( hHandle : mng_handle; fProc : mng_traceproc ) : mng_retcode; stdcall; function mng_setcb_processheader ( hHandle : mng_handle; fProc : mng_processheader) : mng_retcode; stdcall; function mng_setcb_processtext ( hHandle : mng_handle; fProc : mng_processtext ) : mng_retcode; stdcall; function mng_setcb_getcanvasline ( hHandle : mng_handle; fProc : mng_getcanvasline) : mng_retcode; stdcall; function mng_setcb_getalphaline ( hHandle : mng_handle; fProc : mng_getalphaline ) : mng_retcode; stdcall; function mng_setcb_getbkgdline ( hHandle : mng_handle; fProc : mng_getbkgdline ) : mng_retcode; stdcall; function mng_setcb_refresh ( hHandle : mng_handle; fProc : mng_refresh ) : mng_retcode; stdcall; function mng_setcb_gettickcount ( hHandle : mng_handle; fProc : mng_gettickcount ) : mng_retcode; stdcall; function mng_setcb_settimer ( hHandle : mng_handle; fProc : mng_settimer ) : mng_retcode; stdcall; function mng_setcb_processgamma ( hHandle : mng_handle; fProc : mng_processgamma ) : mng_retcode; stdcall; function mng_setcb_processchroma ( hHandle : mng_handle; fProc : mng_processchroma) : mng_retcode; stdcall; function mng_setcb_processsrgb ( hHandle : mng_handle; fProc : mng_processsrgb ) : mng_retcode; stdcall; function mng_setcb_processiccp ( hHandle : mng_handle; fProc : mng_processiccp ) : mng_retcode; stdcall; function mng_setcb_processarow ( hHandle : mng_handle; fProc : mng_processarow ) : mng_retcode; stdcall; {****************************************************************************} function mng_getcb_memalloc ( hHandle : mng_handle ) : mng_memalloc; stdcall; function mng_getcb_memfree ( hHandle : mng_handle ) : mng_memfree; stdcall; function mng_getcb_releasedata ( hHandle : mng_handle ) : mng_releasedata; stdcall; function mng_getcb_openstream ( hHandle : mng_handle ) : mng_openstream; stdcall; function mng_getcb_closestream ( hHandle : mng_handle ) : mng_closestream; stdcall; function mng_getcb_readdata ( hHandle : mng_handle ) : mng_readdata; stdcall; function mng_getcb_writedata ( hHandle : mng_handle ) : mng_writedata; stdcall; function mng_getcb_errorproc ( hHandle : mng_handle ) : mng_errorproc; stdcall; function mng_getcb_traceproc ( hHandle : mng_handle ) : mng_traceproc; stdcall; function mng_getcb_processheader ( hHandle : mng_handle ) : mng_processheader; stdcall; function mng_getcb_processtext ( hHandle : mng_handle ) : mng_processtext; stdcall; function mng_getcb_getcanvasline ( hHandle : mng_handle ) : mng_getcanvasline; stdcall; function mng_getcb_getalphaline ( hHandle : mng_handle ) : mng_getalphaline; stdcall; function mng_getcb_getbkgdline ( hHandle : mng_handle ) : mng_getbkgdline; stdcall; function mng_getcb_refresh ( hHandle : mng_handle ) : mng_refresh; stdcall; function mng_getcb_gettickcount ( hHandle : mng_handle ) : mng_gettickcount; stdcall; function mng_getcb_settimer ( hHandle : mng_handle ) : mng_settimer; stdcall; function mng_getcb_processgamma ( hHandle : mng_handle ) : mng_processgamma; stdcall; function mng_getcb_processchroma ( hHandle : mng_handle ) : mng_processchroma; stdcall; function mng_getcb_processsrgb ( hHandle : mng_handle ) : mng_processsrgb; stdcall; function mng_getcb_processiccp ( hHandle : mng_handle ) : mng_processiccp; stdcall; function mng_getcb_processarow ( hHandle : mng_handle ) : mng_processarow; stdcall; {****************************************************************************} function mng_set_userdata ( hHandle : mng_handle; pUserdata : mng_ptr ) : mng_retcode; stdcall; function mng_set_canvasstyle ( hHandle : mng_handle; iStyle : mng_uint32 ) : mng_retcode; stdcall; function mng_set_bkgdstyle ( hHandle : mng_handle; iStyle : mng_uint32 ) : mng_retcode; stdcall; function mng_set_bgcolor ( hHandle : mng_handle; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16 ) : mng_retcode; stdcall; function mng_set_usebkgd ( hHandle : mng_handle; bUseBKGD : mng_bool ) : mng_retcode; stdcall; function mng_set_storechunks ( hHandle : mng_handle; bStorechunks : mng_bool ) : mng_retcode; stdcall; function mng_set_cacheplayback ( hHandle : mng_handle; bCacheplayback : mng_bool ) : mng_retcode; stdcall; function mng_set_viewgammaint ( hHandle : mng_handle; iGamma : mng_uint32 ) : mng_retcode; stdcall; function mng_set_displaygammaint ( hHandle : mng_handle; iGamma : mng_uint32 ) : mng_retcode; stdcall; function mng_set_dfltimggammaint ( hHandle : mng_handle; iGamma : mng_uint32 ) : mng_retcode; stdcall; function mng_set_srgb ( hHandle : mng_handle; bIssRGB : mng_bool ) : mng_retcode; stdcall; function mng_set_outputprofile ( hHandle : mng_handle; zFilename : mng_pchar ) : mng_retcode; stdcall; function mng_set_outputprofile2 ( hHandle : mng_handle; iProfilesize : mng_uint32; pProfile : mng_ptr ) : mng_retcode; stdcall; function mng_set_srgbprofile ( hHandle : mng_handle; zFilename : mng_pchar ) : mng_retcode; stdcall; function mng_set_srgbprofile2 ( hHandle : mng_handle; iProfilesize : mng_uint32; pProfile : mng_ptr ) : mng_retcode; stdcall; function mng_set_maxcanvaswidth ( hHandle : mng_handle; iMaxwidth : mng_uint32 ) : mng_retcode; stdcall; function mng_set_maxcanvasheight ( hHandle : mng_handle; iMaxheight : mng_uint32 ) : mng_retcode; stdcall; function mng_set_maxcanvassize ( hHandle : mng_handle; iMaxwidth : mng_uint32; iMaxheight : mng_uint32 ) : mng_retcode; stdcall; function mng_set_suspensionmode ( hHandle : mng_handle; bSuspensionmode : mng_bool ) : mng_retcode; stdcall; function mng_set_speed ( hHandle : mng_handle; iSpeed : mng_speedtype ) : mng_retcode; stdcall; function mng_set_crcmode ( hHandle : mng_handle; iCrcmode : mng_uint32 ) : mng_retcode; stdcall; {****************************************************************************} function mng_get_userdata ( hHandle : mng_handle ) : mng_ptr; stdcall; function mng_get_sigtype ( hHandle : mng_handle ) : mng_imgtype; stdcall; function mng_get_imagetype ( hHandle : mng_handle ) : mng_imgtype; stdcall; function mng_get_imagewidth ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_imageheight ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_ticks ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_framecount ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_layercount ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_playtime ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_simplicity ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_canvasstyle ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_bkgdstyle ( hHandle : mng_handle ) : mng_uint32; stdcall; procedure mng_get_bgcolor ( hHandle : mng_handle; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16 ); stdcall; function mng_get_usebkgd ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_get_storechunks ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_get_cacheplayback ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_get_viewgammaint ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_displaygammaint ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_dfltimggammaint ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_srgb ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_get_maxcanvaswidth ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_maxcanvasheight ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_suspensionmode ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_get_speed ( hHandle : mng_handle ) : mng_speedtype; stdcall; function mng_get_imagelevel ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_starttime ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_runtime ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_currentframe ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_currentlayer ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_currentplaytime ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_totalframes ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_totallayers ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_get_totalplaytime ( hHandle : mng_handle ) : mng_uint32; stdcall; function mng_status_error ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_status_reading ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_status_suspendbreak ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_status_creating ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_status_writing ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_status_displaying ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_status_running ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_status_timerbreak ( hHandle : mng_handle ) : mng_bool; stdcall; function mng_status_dynamic ( hHandle : mng_handle ) : mng_bool; stdcall; {****************************************************************************} function mng_iterate_chunks ( hHandle : mng_handle; iChunkseq : mng_uint32; fProc : mng_iteratechunk ) : mng_retcode; stdcall; {****************************************************************************} function mng_getchunk_ihdr ( hHandle : mng_handle; hChunk : mng_handle; var iWidth : mng_uint32; var iHeight : mng_uint32; var iBitdepth : mng_uint8; var iColortype : mng_uint8; var iCompression : mng_uint8; var iFilter : mng_uint8; var iInterlace : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_plte ( hHandle : mng_handle; hChunk : mng_handle; var iCount : mng_uint32; var aPalette : mng_palette8 ) : mng_retcode; stdcall; function mng_getchunk_idat ( hHandle : mng_handle; hChunk : mng_handle; var iRawlen : mng_uint32; var pRawdata : mng_ptr ) : mng_retcode; stdcall; function mng_getchunk_trns ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var bGlobal : mng_bool; var iType : mng_uint8; var iCount : mng_uint32; var aAlphas : mng_uint8arr; var iGray : mng_uint16; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16; var iRawlen : mng_uint32; var aRawdata : mng_uint8arr ) : mng_retcode; stdcall; function mng_getchunk_gama ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iGamma : mng_uint32 ) : mng_retcode; stdcall; function mng_getchunk_chrm ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iWhitepointx : mng_uint32; var iWhitepointy : mng_uint32; var iRedx : mng_uint32; var iRedy : mng_uint32; var iGreenx : mng_uint32; var iGreeny : mng_uint32; var iBluex : mng_uint32; var iBluey : mng_uint32 ) : mng_retcode; stdcall; function mng_getchunk_srgb ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iRenderingintent : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_iccp ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iNamesize : mng_uint32; var zName : mng_pchar; var iCompression : mng_uint8; var iProfilesize : mng_uint32; var pProfile : mng_ptr ) : mng_retcode; stdcall; function mng_getchunk_text ( hHandle : mng_handle; hChunk : mng_handle; var iKeywordsize : mng_uint32; var zKeyword : mng_pchar; var iTextsize : mng_uint32; var zText : mng_pchar ) : mng_retcode; stdcall; function mng_getchunk_ztxt ( hHandle : mng_handle; hChunk : mng_handle; var iKeywordsize : mng_uint32; var zKeyword : mng_pchar; var iCompression : mng_uint8; var iTextsize : mng_uint32; var zText : mng_pchar ) : mng_retcode; stdcall; function mng_getchunk_itxt ( hHandle : mng_handle; hChunk : mng_handle; var iKeywordsize : mng_uint32; var zKeyword : mng_pchar; var iCompressionflag : mng_uint8; var iCompressionmethod : mng_uint8; var iLanguagesize : mng_uint32; var zLanguage : mng_pchar; var iTranslationsize : mng_uint32; var zTranslation : mng_pchar; var iTextsize : mng_uint32; var zText : mng_pchar ) : mng_retcode; stdcall; function mng_getchunk_bkgd ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iType : mng_uint8; var iIndex : mng_uint8; var iGray : mng_uint16; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16 ) : mng_retcode; stdcall; function mng_getchunk_phys ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iSizex : mng_uint32; var iSizey : mng_uint32; var iUnit : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_sbit ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iType : mng_uint8; var aBits : mng_uint8arr4) : mng_retcode; stdcall; function mng_getchunk_splt ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iNamesize : mng_uint32; var zName : mng_pchar; var iSampledepth : mng_uint8; var iEntrycount : mng_uint32; var pEntries : mng_ptr ) : mng_retcode; stdcall; function mng_getchunk_hist ( hHandle : mng_handle; hChunk : mng_handle; var iEntrycount : mng_uint32; var aEntries : mng_uint16arr) : mng_retcode; stdcall; function mng_getchunk_time ( hHandle : mng_handle; hChunk : mng_handle; var iYear : mng_uint16; var iMonth : mng_uint8; var iDay : mng_uint8; var iHour : mng_uint8; var iMinute : mng_uint8; var iSecond : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_mhdr ( hHandle : mng_handle; hChunk : mng_handle; var iWidth : mng_uint32; var iHeight : mng_uint32; var iTicks : mng_uint32; var iLayercount : mng_uint32; var iFramecount : mng_uint32; var iPlaytime : mng_uint32; var iSimplicity : mng_uint32 ) : mng_retcode; stdcall; function mng_getchunk_loop ( hHandle : mng_handle; hChunk : mng_handle; var iLevel : mng_uint8; var iRepeat : mng_uint32; var iTermination : mng_uint8; var iItermin : mng_uint32; var iItermax : mng_uint32; var iCount : mng_uint32; var pSignals : mng_uint32p ) : mng_retcode; stdcall; function mng_getchunk_endl ( hHandle : mng_handle; hChunk : mng_handle; var iLevel : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_defi ( hHandle : mng_handle; hChunk : mng_handle; var iObjectid : mng_uint16; var iDonotshow : mng_uint8; var iConcrete : mng_uint8; var bHasloca : mng_bool; var iXlocation : mng_int32; var iYlocation : mng_int32; var bHasclip : mng_bool; var iLeftcb : mng_int32; var iRightcb : mng_int32; var iTopcb : mng_int32; var iBottomcb : mng_int32 ) : mng_retcode; stdcall; function mng_getchunk_basi ( hHandle : mng_handle; hChunk : mng_handle; var iWidth : mng_uint32; var iHeight : mng_uint32; var iBitdepth : mng_uint8; var iColortype : mng_uint8; var iCompression : mng_uint8; var iFilter : mng_uint8; var iInterlace : mng_uint8; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16; var iAlpha : mng_uint16; var iViewable : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_clon ( hHandle : mng_handle; hChunk : mng_handle; var iSourceid : mng_uint16; var iCloneid : mng_uint16; var iClonetype : mng_uint8; var iDonotshow : mng_uint8; var iConcrete : mng_uint8; var bHasloca : mng_bool; var iLocationtype : mng_uint8; var iLocationx : mng_int32; var iLocationy : mng_int32 ) : mng_retcode; stdcall; function mng_getchunk_past ( hHandle : mng_handle; hChunk : mng_handle; var iDestid : mng_uint16; var iTargettype : mng_uint8; var iTargetx : mng_int32; var iTargety : mng_int32; var iCount : mng_uint32 ) : mng_retcode; stdcall; function mng_getchunk_past_src ( hHandle : mng_handle; hChunk : mng_handle; iEntry : mng_uint32; var iSourceid : mng_uint16; var iComposition : mng_uint8; var iOrientation : mng_uint8; var iOffsettype : mng_uint8; var iOffsetx : mng_int32; var iOffsety : mng_int32; var iBoundarytype : mng_uint8; var iBoundaryl : mng_int32; var iBoundaryr : mng_int32; var iBoundaryt : mng_int32; var iBoundaryb : mng_int32 ) : mng_retcode; stdcall; function mng_getchunk_disc ( hHandle : mng_handle; hChunk : mng_handle; var iCount : mng_uint32; var pObjectids : mng_uint16p ) : mng_retcode; stdcall; function mng_getchunk_back ( hHandle : mng_handle; hChunk : mng_handle; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16; var iMandatory : mng_uint8; var iImageid : mng_uint16; var iTile : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_fram ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iMode : mng_uint8; var iNamesize : mng_uint32; var zName : mng_pchar; var iChangedelay : mng_uint8; var iChangetimeout : mng_uint8; var iChangeclipping : mng_uint8; var iChangesyncid : mng_uint8; var iDelay : mng_uint32; var iTimeout : mng_uint32; var iBoundarytype : mng_uint8; var iBoundaryl : mng_int32; var iBoundaryr : mng_int32; var iBoundaryt : mng_int32; var iBoundaryb : mng_int32; var iCount : mng_uint32; var pSyncids : mng_uint32p ) : mng_retcode; stdcall; function mng_getchunk_move ( hHandle : mng_handle; hChunk : mng_handle; var iFirstid : mng_uint16; var iLastid : mng_uint16; var iMovetype : mng_uint8; var iMovex : mng_int32; var iMovey : mng_int32 ) : mng_retcode; stdcall; function mng_getchunk_clip ( hHandle : mng_handle; hChunk : mng_handle; var iFirstid : mng_uint16; var iLastid : mng_uint16; var iCliptype : mng_uint8; var iClipl : mng_int32; var iClipr : mng_int32; var iClipt : mng_int32; var iClipb : mng_int32 ) : mng_retcode; stdcall; function mng_getchunk_show ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iFirstid : mng_uint16; var iLastid : mng_uint16; var iMode : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_term ( hHandle : mng_handle; hChunk : mng_handle; var iTermaction : mng_uint8; var iIteraction : mng_uint8; var iDelay : mng_uint32; var iItermax : mng_uint32 ) : mng_retcode; stdcall; function mng_getchunk_save ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iOffsettype : mng_uint8; var iCount : mng_uint32 ) : mng_retcode; stdcall; function mng_getchunk_save_entry ( hHandle : mng_handle; hChunk : mng_handle; iEntry : mng_uint32; var iEntrytype : mng_uint8; var iOffset : mng_uint32arr2; var iStarttime : mng_uint32arr2; var iLayernr : mng_uint32; var iFramenr : mng_uint32; var iNamesize : mng_uint32; var zName : mng_pchar ) : mng_retcode; stdcall; function mng_getchunk_seek ( hHandle : mng_handle; hChunk : mng_handle; var iNamesize : mng_uint32; var zName : mng_pchar ) : mng_retcode; stdcall; function mng_getchunk_expi ( hHandle : mng_handle; hChunk : mng_handle; var iSnapshotid : mng_uint16; var iNamesize : mng_uint32; var zName : mng_pchar ) : mng_retcode; stdcall; function mng_getchunk_fpri ( hHandle : mng_handle; hChunk : mng_handle; var iDeltatype : mng_uint8; var iPriority : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_need ( hHandle : mng_handle; hChunk : mng_handle; var iKeywordssize : mng_uint32; var zKeywords : mng_pchar ) : mng_retcode; stdcall; function mng_getchunk_phyg ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iSizex : mng_uint32; var iSizey : mng_uint32; var iUnit : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_jhdr ( hHandle : mng_handle; hChunk : mng_handle; var iWidth : mng_uint32; var iHeight : mng_uint32; var iColortype : mng_uint8; var iImagesampledepth : mng_uint8; var iImagecompression : mng_uint8; var iImageinterlace : mng_uint8; var iAlphasampledepth : mng_uint8; var iAlphacompression : mng_uint8; var iAlphafilter : mng_uint8; var iAlphainterlace : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_jdat ( hHandle : mng_handle; hChunk : mng_handle; var iRawlen : mng_uint32; var pRawdata : mng_ptr ) : mng_retcode; stdcall; function mng_getchunk_dhdr ( hHandle : mng_handle; hChunk : mng_handle; var iObjectid : mng_uint16; var iImagetype : mng_uint8; var iDeltatype : mng_uint8; var iBlockwidth : mng_uint32; var iBlockheight : mng_uint32; var iBlockx : mng_uint32; var iBlocky : mng_uint32 ) : mng_retcode; stdcall; function mng_getchunk_prom ( hHandle : mng_handle; hChunk : mng_handle; var iColortype : mng_uint8; var iSampledepth : mng_uint8; var iFilltype : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_pplt ( hHandle : mng_handle; hChunk : mng_handle; var iCount : mng_uint32 ) : mng_retcode; stdcall; function mng_getchunk_pplt_entry ( hHandle : mng_handle; hChunk : mng_handle; iEntry : mng_uint32; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16; var iAlpha : mng_uint16; var bUsed : mng_bool ) : mng_retcode; stdcall; function mng_getchunk_drop ( hHandle : mng_handle; hChunk : mng_handle; var iCount : mng_uint32; var pChunknames : mng_chunkidp ) : mng_retcode; stdcall; function mng_getchunk_dbyk ( hHandle : mng_handle; hChunk : mng_handle; var iChunkname : mng_chunkid; var iPolarity : mng_uint8; var iKeywordssize : mng_uint32; var zKeywords : mng_pchar ) : mng_retcode; stdcall; function mng_getchunk_ordr ( hHandle : mng_handle; hChunk : mng_handle; var iCount : mng_uint32 ) : mng_retcode; stdcall; function mng_getchunk_ordr_entry ( hHandle : mng_handle; hChunk : mng_handle; iEntry : mng_uint32; var iChunkname : mng_chunkid; var iOrdertype : mng_uint8 ) : mng_retcode; stdcall; function mng_getchunk_unknown ( hHandle : mng_handle; hChunk : mng_handle; var iChunkname : mng_chunkid; var iRawlen : mng_uint32; var pRawdata : mng_ptr ) : mng_retcode; stdcall; {****************************************************************************} function mng_putchunk_ihdr ( hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32; iBitdepth : mng_uint8; iColortype : mng_uint8; iCompression : mng_uint8; iFilter : mng_uint8; iInterlace : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_plte ( hHandle : mng_handle; iCount : mng_uint32; aPalette : mng_palette8 ) : mng_retcode; stdcall; function mng_putchunk_idat ( hHandle : mng_handle; iRawlen : mng_uint32; pRawdata : mng_ptr ) : mng_retcode; stdcall; function mng_putchunk_iend ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_putchunk_trns ( hHandle : mng_handle; bEmpty : mng_bool; bGlobal : mng_bool; iType : mng_uint8; iCount : mng_uint32; aAlphas : mng_uint8arr; iGray : mng_uint16; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16; iRawlen : mng_uint32; aRawdata : mng_uint8arr ) : mng_retcode; stdcall; function mng_putchunk_gama ( hHandle : mng_handle; bEmpty : mng_bool; iGamma : mng_uint32 ) : mng_retcode; stdcall; function mng_putchunk_chrm ( hHandle : mng_handle; bEmpty : mng_bool; iWhitepointx : mng_uint32; iWhitepointy : mng_uint32; iRedx : mng_uint32; iRedy : mng_uint32; iGreenx : mng_uint32; iGreeny : mng_uint32; iBluex : mng_uint32; iBluey : mng_uint32 ) : mng_retcode; stdcall; function mng_putchunk_srgb ( hHandle : mng_handle; bEmpty : mng_bool; iRenderingintent : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_iccp ( hHandle : mng_handle; bEmpty : mng_bool; iNamesize : mng_uint32; zName : mng_pchar; iCompression : mng_uint8; iProfilesize : mng_uint32; pProfile : mng_ptr ) : mng_retcode; stdcall; function mng_putchunk_text ( hHandle : mng_handle; iKeywordsize : mng_uint32; zKeyword : mng_pchar; iTextsize : mng_uint32; zText : mng_pchar ) : mng_retcode; stdcall; function mng_putchunk_ztxt ( hHandle : mng_handle; iKeywordsize : mng_uint32; zKeyword : mng_pchar; iCompression : mng_uint8; iTextsize : mng_uint32; zText : mng_pchar ) : mng_retcode; stdcall; function mng_putchunk_itxt ( hHandle : mng_handle; iKeywordsize : mng_uint32; zKeyword : mng_pchar; iCompressionflag : mng_uint8; iCompressionmethod : mng_uint8; iLanguagesize : mng_uint32; zLanguage : mng_pchar; iTranslationsize : mng_uint32; zTranslation : mng_pchar; iTextsize : mng_uint32; zText : mng_pchar ) : mng_retcode; stdcall; function mng_putchunk_bkgd ( hHandle : mng_handle; bEmpty : mng_bool; iType : mng_uint8; iIndex : mng_uint8; iGray : mng_uint16; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16 ) : mng_retcode; stdcall; function mng_putchunk_phys ( hHandle : mng_handle; bEmpty : mng_bool; iSizex : mng_uint32; iSizey : mng_uint32; iUnit : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_sbit ( hHandle : mng_handle; bEmpty : mng_bool; iType : mng_uint8; aBits : mng_uint8arr4) : mng_retcode; stdcall; function mng_putchunk_splt ( hHandle : mng_handle; bEmpty : mng_bool; iNamesize : mng_uint32; zName : mng_pchar; iSampledepth : mng_uint8; iEntrycount : mng_uint32; pEntries : mng_ptr ) : mng_retcode; stdcall; function mng_putchunk_hist ( hHandle : mng_handle; iEntrycount : mng_uint32; aEntries : mng_uint16arr) : mng_retcode; stdcall; function mng_putchunk_time ( hHandle : mng_handle; iYear : mng_uint16; iMonth : mng_uint8; iDay : mng_uint8; iHour : mng_uint8; iMinute : mng_uint8; iSecond : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_mhdr ( hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32; iTicks : mng_uint32; iLayercount : mng_uint32; iFramecount : mng_uint32; iPlaytime : mng_uint32; iSimplicity : mng_uint32 ) : mng_retcode; stdcall; function mng_putchunk_mend ( hHandle : mng_handle ) : mng_retcode; stdcall; function mng_putchunk_loop ( hHandle : mng_handle; iLevel : mng_uint8; iRepeat : mng_uint32; iTermination : mng_uint8; iItermin : mng_uint32; iItermax : mng_uint32; iCount : mng_uint32; pSignals : mng_uint32p ) : mng_retcode; stdcall; function mng_putchunk_endl ( hHandle : mng_handle; iLevel : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_defi ( hHandle : mng_handle; iObjectid : mng_uint16; iDonotshow : mng_uint8; iConcrete : mng_uint8; bHasloca : mng_bool; iXlocation : mng_int32; iYlocation : mng_int32; bHasclip : mng_bool; iLeftcb : mng_int32; iRightcb : mng_int32; iTopcb : mng_int32; iBottomcb : mng_int32 ) : mng_retcode; stdcall; function mng_putchunk_basi ( hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32; iBitdepth : mng_uint8; iColortype : mng_uint8; iCompression : mng_uint8; iFilter : mng_uint8; iInterlace : mng_uint8; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16; iAlpha : mng_uint16; iViewable : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_clon ( hHandle : mng_handle; iSourceid : mng_uint16; iCloneid : mng_uint16; iClonetype : mng_uint8; iDonotshow : mng_uint8; iConcrete : mng_uint8; bHasloca : mng_bool; iLocationtype : mng_uint8; iLocationx : mng_int32; iLocationy : mng_int32 ) : mng_retcode; stdcall; function mng_putchunk_past ( hHandle : mng_handle; iDestid : mng_uint16; iTargettype : mng_uint8; iTargetx : mng_int32; iTargety : mng_int32; iCount : mng_uint32 ) : mng_retcode; stdcall; function mng_putchunk_past_src ( hHandle : mng_handle; iEntry : mng_uint32; iSourceid : mng_uint16; iComposition : mng_uint8; iOrientation : mng_uint8; iOffsettype : mng_uint8; iOffsetx : mng_int32; iOffsety : mng_int32; iBoundarytype : mng_uint8; iBoundaryl : mng_int32; iBoundaryr : mng_int32; iBoundaryt : mng_int32; iBoundaryb : mng_int32 ) : mng_retcode; stdcall; function mng_putchunk_disc ( hHandle : mng_handle; iCount : mng_uint32; pObjectids : mng_uint16p ) : mng_retcode; stdcall; function mng_putchunk_back ( hHandle : mng_handle; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16; iMandatory : mng_uint8; iImageid : mng_uint16; iTile : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_fram ( hHandle : mng_handle; bEmpty : mng_bool; iMode : mng_uint8; iNamesize : mng_uint32; zName : mng_pchar; iChangedelay : mng_uint8; iChangetimeout : mng_uint8; iChangeclipping : mng_uint8; iChangesyncid : mng_uint8; iDelay : mng_uint32; iTimeout : mng_uint32; iBoundarytype : mng_uint8; iBoundaryl : mng_int32; iBoundaryr : mng_int32; iBoundaryt : mng_int32; iBoundaryb : mng_int32; iCount : mng_uint32; pSyncids : mng_uint32p ) : mng_retcode; stdcall; function mng_putchunk_move ( hHandle : mng_handle; iFirstid : mng_uint16; iLastid : mng_uint16; iMovetype : mng_uint8; iMovex : mng_int32; iMovey : mng_int32 ) : mng_retcode; stdcall; function mng_putchunk_clip ( hHandle : mng_handle; iFirstid : mng_uint16; iLastid : mng_uint16; iCliptype : mng_uint8; iClipl : mng_int32; iClipr : mng_int32; iClipt : mng_int32; iClipb : mng_int32 ) : mng_retcode; stdcall; function mng_putchunk_show ( hHandle : mng_handle; bEmpty : mng_bool; iFirstid : mng_uint16; iLastid : mng_uint16; iMode : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_term ( hHandle : mng_handle; iTermaction : mng_uint8; iIteraction : mng_uint8; iDelay : mng_uint32; iItermax : mng_uint32 ) : mng_retcode; stdcall; function mng_putchunk_save ( hHandle : mng_handle; bEmpty : mng_bool; iOffsettype : mng_uint8; iCount : mng_uint32 ) : mng_retcode; stdcall; function mng_putchunk_save_entry ( hHandle : mng_handle; iEntry : mng_uint32; iEntrytype : mng_uint8; iOffset : mng_uint32arr2; iStarttime : mng_uint32arr2; iLayernr : mng_uint32; iFramenr : mng_uint32; iNamesize : mng_uint32; zName : mng_pchar ) : mng_retcode; stdcall; function mng_putchunk_seek ( hHandle : mng_handle; iNamesize : mng_uint32; zName : mng_pchar ) : mng_retcode; stdcall; function mng_putchunk_expi ( hHandle : mng_handle; iSnapshotid : mng_uint16; iNamesize : mng_uint32; zName : mng_pchar ) : mng_retcode; stdcall; function mng_putchunk_fpri ( hHandle : mng_handle; iDeltatype : mng_uint8; iPriority : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_need ( hHandle : mng_handle; iKeywordssize : mng_uint32; zKeywords : mng_pchar ) : mng_retcode; stdcall; function mng_putchunk_phyg ( hHandle : mng_handle; bEmpty : mng_bool; iSizex : mng_uint32; iSizey : mng_uint32; iUnit : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_jhdr ( hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32; iColortype : mng_uint8; iImagesampledepth : mng_uint8; iImagecompression : mng_uint8; iImageinterlace : mng_uint8; iAlphasampledepth : mng_uint8; iAlphacompression : mng_uint8; iAlphafilter : mng_uint8; iAlphainterlace : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_jdat ( hHandle : mng_handle; iRawlen : mng_uint32; pRawdata : mng_ptr ) : mng_retcode; stdcall; function mng_putchunk_dhdr ( hHandle : mng_handle; iObjectid : mng_uint16; iImagetype : mng_uint8; iDeltatype : mng_uint8; iBlockwidth : mng_uint32; iBlockheight : mng_uint32; iBlockx : mng_uint32; iBlocky : mng_uint32 ) : mng_retcode; stdcall; function mng_putchunk_prom ( hHandle : mng_handle; iColortype : mng_uint8; iSampledepth : mng_uint8; iFilltype : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_pplt ( hHandle : mng_handle; iCount : mng_uint32 ) : mng_retcode; stdcall; function mng_putchunk_pplt_entry ( hHandle : mng_handle; iEntry : mng_uint32; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16; iAlpha : mng_uint16; bUsed : mng_bool ) : mng_retcode; stdcall; function mng_putchunk_drop ( hHandle : mng_handle; iCount : mng_uint32; pChunknames : mng_chunkidp ) : mng_retcode; stdcall; function mng_putchunk_dbyk ( hHandle : mng_handle; iChunkname : mng_chunkid; iPolarity : mng_uint8; iKeywordssize : mng_uint32; zKeywords : mng_pchar ) : mng_retcode; stdcall; function mng_putchunk_ordr ( hHandle : mng_handle; iCount : mng_uint32 ) : mng_retcode; stdcall; function mng_putchunk_ordr_entry ( hHandle : mng_handle; iEntry : mng_uint32; iChunkname : mng_chunkid; iOrdertype : mng_uint8 ) : mng_retcode; stdcall; function mng_putchunk_unknown ( hHandle : mng_handle; iChunkname : mng_chunkid; iRawlen : mng_uint32; pRawdata : mng_ptr ) : mng_retcode; stdcall; {****************************************************************************} function mng_updatemngheader ( hHandle : mng_handle; iFramecount : mng_uint32; iLayercount : mng_uint32; iPlaytime : mng_uint32 ) : mng_retcode; stdcall; function mng_updatemngsimplicity ( hHandle : mng_handle; iSimplicity : mng_uint32 ) : mng_retcode; stdcall; {****************************************************************************} const MNG_NOERROR = 0; MNG_OUTOFMEMORY = 1; MNG_INVALIDHANDLE = 2; MNG_NOCALLBACK = 3; MNG_UNEXPECTEDEOF = 4; MNG_ZLIBERROR = 5; MNG_JPEGERROR = 6; MNG_LCMSERROR = 7; MNG_NOOUTPUTPROFILE = 8; MNG_NOSRGBPROFILE = 9; MNG_BUFOVERFLOW = 10; MNG_FUNCTIONINVALID = 11; MNG_OUTPUTERROR = 12; MNG_JPEGBUFTOOSMALL = 13; MNG_NEEDMOREDATA = 14; MNG_NEEDTIMERWAIT = 15; MNG_NEEDSECTIONWAIT = 16; MNG_APPIOERROR = 901; MNG_APPTIMERERROR = 902; MNG_APPCMSERROR = 903; MNG_APPMISCERROR = 904; MNG_APPTRACEABORT = 905; MNG_INTERNALERROR = 999; MNG_INVALIDSIG = 1025; MNG_INVALIDCRC = 1027; MNG_INVALIDLENGTH = 1028; MNG_SEQUENCEERROR = 1029; MNG_CHUNKNOTALLOWED = 1030; MNG_MULTIPLEERROR = 1031; MNG_PLTEMISSING = 1032; MNG_IDATMISSING = 1033; MNG_CANNOTBEEMPTY = 1034; MNG_GLOBALLENGTHERR = 1035; MNG_INVALIDBITDEPTH = 1036; MNG_INVALIDCOLORTYPE = 1037; MNG_INVALIDCOMPRESS = 1038; MNG_INVALIDFILTER = 1039; MNG_INVALIDINTERLACE = 1040; MNG_NOTENOUGHIDAT = 1041; MNG_PLTEINDEXERROR = 1042; MNG_NULLNOTFOUND = 1043; MNG_KEYWORDNULL = 1044; MNG_OBJECTUNKNOWN = 1045; MNG_OBJECTEXISTS = 1046; MNG_TOOMUCHIDAT = 1047; MNG_INVSAMPLEDEPTH = 1048; MNG_INVOFFSETSIZE = 1049; MNG_INVENTRYTYPE = 1050; MNG_ENDWITHNULL = 1051; MNG_INVIMAGETYPE = 1052; MNG_INVDELTATYPE = 1053; MNG_INVALIDINDEX = 1054; MNG_TOOMUCHJDAT = 1055; MNG_JPEGPARMSERR = 1056; MNG_INVFILLMETHOD = 1057; MNG_OBJNOTCONCRETE = 1058; MNG_TARGETNOALPHA = 1059; MNG_MNGTOOCOMPLEX = 1060; MNG_UNKNOWNCRITICAL = 1061; MNG_UNSUPPORTEDNEED = 1062; MNG_INVALIDDELTA = 1063; MNG_INVALIDMETHOD = 1064; MNG_IMPROBABLELENGTH = 1065; MNG_INVALIDBLOCK = 1066; MNG_INVALIDEVENT = 1067; MNG_INVALIDMASK = 1068; MNG_NOMATCHINGLOOP = 1069; MNG_SEEKNOTFOUND = 1070; MNG_INVALIDCNVSTYLE = 2049; MNG_WRONGCHUNK = 2050; MNG_INVALIDENTRYIX = 2051; MNG_NOHEADER = 2052; MNG_NOCORRCHUNK = 2053; MNG_NOMHDR = 2054; MNG_IMAGETOOLARGE = 4097; MNG_NOTANANIMATION = 4098; MNG_FRAMENRTOOHIGH = 4099; MNG_LAYERNRTOOHIGH = 4100; MNG_PLAYTIMETOOHIGH = 4101; MNG_FNNOTIMPLEMENTED = 4102; MNG_IMAGEFROZEN = 8193; {****************************************************************************} const MNG_CANVAS_RGB8 = $00000000; MNG_CANVAS_RGBA8 = $00001000; MNG_CANVAS_ARGB8 = $00003000; MNG_CANVAS_RGB8_A8 = $00005000; MNG_CANVAS_BGR8 = $00000001; MNG_CANVAS_BGRX8 = $00010001; MNG_CANVAS_BGRA8 = $00001001; MNG_CANVAS_ABGR8 = $00003001; MNG_CANVAS_RGB16 = $00000100; { not supported yet } MNG_CANVAS_RGBA16 = $00001100; { not supported yet } MNG_CANVAS_ARGB16 = $00003100; { not supported yet } MNG_CANVAS_BGR16 = $00000101; { not supported yet } MNG_CANVAS_BGRA16 = $00001101; { not supported yet } MNG_CANVAS_ABGR16 = $00003101; { not supported yet } MNG_CANVAS_GRAY8 = $00000002; { not supported yet } MNG_CANVAS_GRAY16 = $00000102; { not supported yet } MNG_CANVAS_GRAYA8 = $00001002; { not supported yet } MNG_CANVAS_GRAYA16 = $00001102; { not supported yet } MNG_CANVAS_AGRAY8 = $00003002; { not supported yet } MNG_CANVAS_AGRAY16 = $00003102; { not supported yet } MNG_CANVAS_DX15 = $00000003; { not supported yet } MNG_CANVAS_DX16 = $00000004; { not supported yet } {****************************************************************************} const MNG_UINT_HUH = $40404040; MNG_UINT_BACK = $4241434b; MNG_UINT_BASI = $42415349; MNG_UINT_CLIP = $434c4950; MNG_UINT_CLON = $434c4f4e; MNG_UINT_DBYK = $4442594b; MNG_UINT_DEFI = $44454649; MNG_UINT_DHDR = $44484452; MNG_UINT_DISC = $44495343; MNG_UINT_DROP = $44524f50; MNG_UINT_ENDL = $454e444c; MNG_UINT_FRAM = $4652414d; MNG_UINT_IDAT = $49444154; MNG_UINT_IEND = $49454e44; MNG_UINT_IHDR = $49484452; MNG_UINT_IJNG = $494a4e47; MNG_UINT_IPNG = $49504e47; MNG_UINT_JDAT = $4a444154; MNG_UINT_JHDR = $4a484452; MNG_UINT_JSEP = $4a534550; MNG_UINT_LOOP = $4c4f4f50; MNG_UINT_MEND = $4d454e44; MNG_UINT_MHDR = $4d484452; MNG_UINT_MOVE = $4d4f5645; MNG_UINT_ORDR = $4f524452; MNG_UINT_PAST = $50415354; MNG_UINT_PLTE = $504c5445; MNG_UINT_PPLT = $50504c54; MNG_UINT_PROM = $50524f4d; MNG_UINT_SAVE = $53415645; MNG_UINT_SEEK = $5345454b; MNG_UINT_SHOW = $53484f57; MNG_UINT_TERM = $5445524d; MNG_UINT_bKGD = $624b4744; MNG_UINT_cHRM = $6348524d; MNG_UINT_eXPI = $65585049; MNG_UINT_fPRI = $66505249; MNG_UINT_gAMA = $67414d41; MNG_UINT_hIST = $68495354; MNG_UINT_iCCP = $69434350; MNG_UINT_iTXt = $69545874; MNG_UINT_nEED = $6e454544; MNG_UINT_oFFs = $6f464673; MNG_UINT_pCAL = $7043414c; MNG_UINT_pHYg = $70444167; MNG_UINT_pHYs = $70485973; MNG_UINT_sBIT = $73424954; MNG_UINT_sCAL = $7343414c; MNG_UINT_sPLT = $73504c54; MNG_UINT_sRGB = $73524742; MNG_UINT_tEXt = $74455874; MNG_UINT_tIME = $74494d45; MNG_UINT_tRNS = $74524e53; MNG_UINT_zTXt = $7a545874; MNG_UINT_evNT = $65764e54; {****************************************************************************} implementation {****************************************************************************} const mngdll = 'libmng.dll'; {****************************************************************************} function mng_initialize; external mngdll; function mng_reset; external mngdll; function mng_cleanup; external mngdll; function mng_read; external mngdll; function mng_read_pushdata; external mngdll; function mng_read_pushsig; external mngdll; function mng_read_pushchunk; external mngdll; function mng_read_resume; external mngdll; function mng_write; external mngdll; function mng_create; external mngdll; function mng_readdisplay; external mngdll; function mng_display; external mngdll; function mng_display_resume; external mngdll; function mng_display_freeze; external mngdll; function mng_display_reset; external mngdll; function mng_display_goframe; external mngdll; function mng_display_golayer; external mngdll; function mng_display_gotime; external mngdll; function mng_trapevent; external mngdll; function mng_getlasterror; external mngdll; {****************************************************************************} function mng_setcb_memalloc; external mngdll; function mng_setcb_memfree; external mngdll; function mng_setcb_releasedata; external mngdll; function mng_setcb_openstream; external mngdll; function mng_setcb_closestream; external mngdll; function mng_setcb_readdata; external mngdll; function mng_setcb_writedata; external mngdll; function mng_setcb_errorproc; external mngdll; function mng_setcb_traceproc; external mngdll; function mng_setcb_processheader; external mngdll; function mng_setcb_processtext; external mngdll; function mng_setcb_getcanvasline; external mngdll; function mng_setcb_getalphaline; external mngdll; function mng_setcb_getbkgdline; external mngdll; function mng_setcb_refresh; external mngdll; function mng_setcb_gettickcount; external mngdll; function mng_setcb_settimer; external mngdll; function mng_setcb_processgamma; external mngdll; function mng_setcb_processchroma; external mngdll; function mng_setcb_processsrgb; external mngdll; function mng_setcb_processiccp; external mngdll; function mng_setcb_processarow; external mngdll; {****************************************************************************} function mng_getcb_memalloc; external mngdll; function mng_getcb_memfree; external mngdll; function mng_getcb_releasedata; external mngdll; function mng_getcb_openstream; external mngdll; function mng_getcb_closestream; external mngdll; function mng_getcb_readdata; external mngdll; function mng_getcb_writedata; external mngdll; function mng_getcb_errorproc; external mngdll; function mng_getcb_traceproc; external mngdll; function mng_getcb_processheader; external mngdll; function mng_getcb_processtext; external mngdll; function mng_getcb_getcanvasline; external mngdll; function mng_getcb_getalphaline; external mngdll; function mng_getcb_getbkgdline; external mngdll; function mng_getcb_refresh; external mngdll; function mng_getcb_gettickcount; external mngdll; function mng_getcb_settimer; external mngdll; function mng_getcb_processgamma; external mngdll; function mng_getcb_processchroma; external mngdll; function mng_getcb_processsrgb; external mngdll; function mng_getcb_processiccp; external mngdll; function mng_getcb_processarow; external mngdll; {****************************************************************************} function mng_set_userdata; external mngdll; function mng_set_canvasstyle; external mngdll; function mng_set_bkgdstyle; external mngdll; function mng_set_bgcolor; external mngdll; function mng_set_usebkgd; external mngdll; function mng_set_storechunks; external mngdll; function mng_set_cacheplayback; external mngdll; // function mng_set_viewgamma; external mngdll; // function mng_set_displaygamma; external mngdll; // function mng_set_dfltimggamma; external mngdll; function mng_set_viewgammaint; external mngdll; function mng_set_displaygammaint; external mngdll; function mng_set_dfltimggammaint; external mngdll; function mng_set_srgb; external mngdll; function mng_set_outputprofile; external mngdll; function mng_set_outputprofile2; external mngdll; function mng_set_srgbprofile; external mngdll; function mng_set_srgbprofile2; external mngdll; function mng_set_maxcanvaswidth; external mngdll; function mng_set_maxcanvasheight; external mngdll; function mng_set_maxcanvassize; external mngdll; function mng_set_suspensionmode; external mngdll; function mng_set_speed; external mngdll; function mng_set_crcmode; external mngdll; {****************************************************************************} function mng_get_userdata; external mngdll; function mng_get_sigtype; external mngdll; function mng_get_imagetype; external mngdll; function mng_get_imagewidth; external mngdll; function mng_get_imageheight; external mngdll; function mng_get_ticks; external mngdll; function mng_get_framecount; external mngdll; function mng_get_layercount; external mngdll; function mng_get_playtime; external mngdll; function mng_get_simplicity; external mngdll; function mng_get_canvasstyle; external mngdll; function mng_get_bkgdstyle; external mngdll; procedure mng_get_bgcolor; external mngdll; function mng_get_usebkgd; external mngdll; function mng_get_storechunks; external mngdll; function mng_get_cacheplayback; external mngdll; // function mng_get_viewgamma; external mngdll; // function mng_get_displaygamma; external mngdll; // function mng_get_dfltimggamma; external mngdll; function mng_get_viewgammaint; external mngdll; function mng_get_displaygammaint; external mngdll; function mng_get_dfltimggammaint; external mngdll; function mng_get_srgb; external mngdll; function mng_get_maxcanvaswidth; external mngdll; function mng_get_maxcanvasheight; external mngdll; function mng_get_suspensionmode; external mngdll; function mng_get_speed; external mngdll; function mng_get_imagelevel; external mngdll; function mng_get_starttime; external mngdll; function mng_get_runtime; external mngdll; function mng_get_currentframe; external mngdll; function mng_get_currentlayer; external mngdll; function mng_get_currentplaytime; external mngdll; function mng_get_totalframes; external mngdll; function mng_get_totallayers; external mngdll; function mng_get_totalplaytime; external mngdll; function mng_status_error; external mngdll; function mng_status_reading; external mngdll; function mng_status_suspendbreak; external mngdll; function mng_status_creating; external mngdll; function mng_status_writing; external mngdll; function mng_status_displaying; external mngdll; function mng_status_running; external mngdll; function mng_status_timerbreak; external mngdll; function mng_status_dynamic; external mngdll; {****************************************************************************} function mng_iterate_chunks; external mngdll; {****************************************************************************} function mng_getchunk_ihdr; external mngdll; function mng_getchunk_plte; external mngdll; function mng_getchunk_idat; external mngdll; function mng_getchunk_trns; external mngdll; function mng_getchunk_gama; external mngdll; function mng_getchunk_chrm; external mngdll; function mng_getchunk_srgb; external mngdll; function mng_getchunk_iccp; external mngdll; function mng_getchunk_text; external mngdll; function mng_getchunk_ztxt; external mngdll; function mng_getchunk_itxt; external mngdll; function mng_getchunk_bkgd; external mngdll; function mng_getchunk_phys; external mngdll; function mng_getchunk_sbit; external mngdll; function mng_getchunk_splt; external mngdll; function mng_getchunk_hist; external mngdll; function mng_getchunk_time; external mngdll; function mng_getchunk_mhdr; external mngdll; function mng_getchunk_loop; external mngdll; function mng_getchunk_endl; external mngdll; function mng_getchunk_defi; external mngdll; function mng_getchunk_basi; external mngdll; function mng_getchunk_clon; external mngdll; function mng_getchunk_past; external mngdll; function mng_getchunk_past_src; external mngdll; function mng_getchunk_disc; external mngdll; function mng_getchunk_back; external mngdll; function mng_getchunk_fram; external mngdll; function mng_getchunk_move; external mngdll; function mng_getchunk_clip; external mngdll; function mng_getchunk_show; external mngdll; function mng_getchunk_term; external mngdll; function mng_getchunk_save; external mngdll; function mng_getchunk_save_entry; external mngdll; function mng_getchunk_seek; external mngdll; function mng_getchunk_expi; external mngdll; function mng_getchunk_fpri; external mngdll; function mng_getchunk_need; external mngdll; function mng_getchunk_phyg; external mngdll; function mng_getchunk_jhdr; external mngdll; function mng_getchunk_jdat; external mngdll; function mng_getchunk_dhdr; external mngdll; function mng_getchunk_prom; external mngdll; function mng_getchunk_pplt; external mngdll; function mng_getchunk_pplt_entry; external mngdll; function mng_getchunk_drop; external mngdll; function mng_getchunk_dbyk; external mngdll; function mng_getchunk_ordr; external mngdll; function mng_getchunk_ordr_entry; external mngdll; function mng_getchunk_unknown; external mngdll; {****************************************************************************} function mng_putchunk_ihdr; external mngdll; function mng_putchunk_plte; external mngdll; function mng_putchunk_idat; external mngdll; function mng_putchunk_iend; external mngdll; function mng_putchunk_trns; external mngdll; function mng_putchunk_gama; external mngdll; function mng_putchunk_chrm; external mngdll; function mng_putchunk_srgb; external mngdll; function mng_putchunk_iccp; external mngdll; function mng_putchunk_text; external mngdll; function mng_putchunk_ztxt; external mngdll; function mng_putchunk_itxt; external mngdll; function mng_putchunk_bkgd; external mngdll; function mng_putchunk_phys; external mngdll; function mng_putchunk_sbit; external mngdll; function mng_putchunk_splt; external mngdll; function mng_putchunk_hist; external mngdll; function mng_putchunk_time; external mngdll; function mng_putchunk_mhdr; external mngdll; function mng_putchunk_mend; external mngdll; function mng_putchunk_loop; external mngdll; function mng_putchunk_endl; external mngdll; function mng_putchunk_defi; external mngdll; function mng_putchunk_basi; external mngdll; function mng_putchunk_clon; external mngdll; function mng_putchunk_past; external mngdll; function mng_putchunk_past_src; external mngdll; function mng_putchunk_disc; external mngdll; function mng_putchunk_back; external mngdll; function mng_putchunk_fram; external mngdll; function mng_putchunk_move; external mngdll; function mng_putchunk_clip; external mngdll; function mng_putchunk_show; external mngdll; function mng_putchunk_term; external mngdll; function mng_putchunk_save; external mngdll; function mng_putchunk_save_entry; external mngdll; function mng_putchunk_seek; external mngdll; function mng_putchunk_expi; external mngdll; function mng_putchunk_fpri; external mngdll; function mng_putchunk_need; external mngdll; function mng_putchunk_phyg; external mngdll; function mng_putchunk_jhdr; external mngdll; function mng_putchunk_jdat; external mngdll; function mng_putchunk_dhdr; external mngdll; function mng_putchunk_prom; external mngdll; function mng_putchunk_pplt; external mngdll; function mng_putchunk_pplt_entry; external mngdll; function mng_putchunk_drop; external mngdll; function mng_putchunk_dbyk; external mngdll; function mng_putchunk_ordr; external mngdll; function mng_putchunk_ordr_entry; external mngdll; function mng_putchunk_unknown; external mngdll; {****************************************************************************} function mng_updatemngheader; external mngdll; function mng_updatemngsimplicity; external mngdll; {****************************************************************************} end. libmng-2.0.2/contrib/delphi/mngview/0000755000000000000000000000000012005307152016035 5ustar rootrootlibmng-2.0.2/contrib/delphi/mngview/Main.dfm0000644000000000000000000000707212005307152017417 0ustar rootrootÿ TMAINFORM0'TPF0 TMainFormMainFormLeft TopoWidth4Height'Captionmngview v1.0.1ColorclGray Font.CharsetDEFAULT_CHARSET Font.Color clWindowText Font.Heightó Font.Name MS Sans Serif Font.Style Icon.Data þ è( @€€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ37337w33w03s333s3w0s3337s7s733s33333333s077333373333333337773733s30w3ss737s3w3s37sss307s330s333077330377s730ww3s077w3÷s÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿþüøðàÀ€À?øÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ KeyPreview Menu OFMainMenuPositionpoScreenCenter OnCloseQueryFormCloseQueryOnCreate FormCreate OnKeyDown FormKeyDown OnMouseMove FormMouseMoveOnResize FormResizeOnShowFormShow PixelsPerInchx TextHeightTImageOFImageLeftTop@WidthiHeightiIncrementalDisplay Picture.Data ‚TBitmapvBMvv( €€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùŸÿÿÿÿÿÿÿÿÿÿÿÿùŸù™ÿÿÿÿÿÿÿÿÿÿÿÿ™Ÿÿ™Ÿÿÿÿÿÿÿÿÿÿÿù™ÿÿù™ÿÿÿÿÿÿÿÿÿÿ™Ÿÿÿÿ™Ÿÿÿÿÿÿÿÿÿù™ÿÿÿÿù™ÿÿÿÿÿÿÿÿ™Ÿÿÿÿÿÿ™Ÿÿÿÿÿÿÿù™ÿÿÿÿÿÿù™ÿÿÿÿÿÿ™Ÿÿÿÿÿÿÿÿ™Ÿÿÿÿÿù™ÿÿÿÿÿÿÿÿù™ÿÿÿÿ™Ÿÿÿÿÿÿÿÿÿÿ™Ÿÿÿù™ÿÿÿÿÿÿÿÿÿÿù™ÿÿ™Ÿÿÿÿÿÿÿÿÿÿÿÿ™Ÿù™ÿÿÿÿÿÿÿÿÿÿÿÿù™™Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™ÿÿÿÿÿÿÿÿÿÿÿÿÿù™™Ÿÿÿÿÿÿÿÿÿÿÿÿÿ™Ÿù™ÿÿÿÿÿÿÿÿÿÿÿù™ÿÿ™Ÿÿÿÿÿÿÿÿÿÿÿ™Ÿÿÿù™ÿÿÿÿÿÿÿÿÿù™ÿÿÿÿ™Ÿÿÿÿÿÿÿÿÿ™Ÿÿÿÿÿù™ÿÿÿÿÿÿÿù™ÿÿÿÿÿÿ™Ÿÿÿÿÿÿÿ™Ÿÿÿÿÿÿÿù™ÿÿÿÿÿù™ÿÿÿÿÿÿÿÿ™Ÿÿÿÿÿ™Ÿÿÿÿÿÿÿÿÿù™ÿÿÿù™ÿÿÿÿÿÿÿÿÿÿ™Ÿÿÿ™Ÿÿÿÿÿÿÿÿÿÿÿù™ÿù™ÿÿÿÿÿÿÿÿÿÿÿÿ™ŸùŸÿÿÿÿÿÿÿÿÿÿÿÿùŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿStretch OnMouseDownOFImageMouseDown OnMouseMoveOFImageMouseMove OnMouseUpOFImageMouseUp TMainMenu OFMainMenuLeftTop TMenuItem OFMenuFileCaption&File TMenuItemOFMenuFileOpenCaption&OpenOnClickOFMenuFileOpenClick TMenuItemOFMenuFileProfileCaption&ProfileOnClickOFMenuFileProfileClick TMenuItem OFMenuFileN1Caption- TMenuItemOFMenuFileExitCaptionE&xitOnClickOFMenuFileExitClick TMenuItem OFMenuOptionsCaption&Options TMenuItemOFMenuOptionsModemSpeedCaption Modem speedOnClickOFMenuOptionsModemSpeedClick TMenuItemOFMenuOptionsModem28k8Tag€pCaption28k8 GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModem33k6Tag@ƒCaption33k6 GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModem56kTagÀÚCaption56k GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModemISDN64TagúCaptionISDN64 GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModemISDN128TagôCaptionISDN128 GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModemCable512TagÐCaptionCable512 GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModemUnlimitedTagÿÉš;Caption UnlimitedChecked GroupIndexOnClickOFMenuOptionsModemXClick TOpenDialog OFOpenDialogFilter"Network Graphics|*.mng;*.jng;*.png FilterIndexOptions ofHideReadOnlyofPathMustExistofFileMustExistTitle Open fileLeft8TopTTimerOFTimerEnabledIntervaldOnTimer OFTimerTimerLeft`Top TOpenDialogOFOpenDialogProfile DefaultExticmFilterColor profiles (*.icm)|*.icm FilterIndexLeftˆToplibmng-2.0.2/contrib/delphi/mngview/Main.pas0000644000000000000000000006057712005307152017445 0ustar rootrootunit Main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ExtCtrls, Buttons, libmng; {****************************************************************************} {* For conditions of distribution and use, *} {* see copyright notice in libmng.pas *} {****************************************************************************} {* *} {* project : libmng *} {* file : main.pas copyright (c) 2000-2002 G.Juyn *} {* version : 1.0.5 *} {* *} {* purpose : Main form for mngview application *} {* *} {* author : G.Juyn *} {* web : http://www.3-t.com *} {* email : mailto:info@3-t.com *} {* *} {* comment : this is the heart of the mngview applciation *} {* *} {* changes : 0.5.1 - 05/02/2000 - G.Juyn *} {* - added this version block *} {* - made the initialization part more robust *} {* eg. program aborts on initialization errors *} {* - B002(105797) - added check for existence of default sRGB *} {* profile (now included in distribution) *} {* - added mng_cleanup to program exit *} {* 0.5.1 - 05/08/2000 - G.Juyn *} {* - changed to stdcall convention *} {* 0.5.1 - 05/11/2000 - G.Juyn *} {* - changed callback function declarations *} {* *} {* 0.5.3 - 06/16/2000 - G.Juyn *} {* - removed processmessages call from refresh callback *} {* 0.5.3 - 06/17/2000 - G.Juyn *} {* - switched "storechunks" off *} {* 0.5.3 - 06/26/2000 - G.Juyn *} {* - changed definition of userdata to mng_ptr *} {* 0.5.3 - 06/28/2000 - G.Juyn *} {* - changed the default icon to something more appropriate *} {* - changed definition of memory alloc size to mng_size_t *} {* 0.5.3 - 06/29/2000 - G.Juyn *} {* - changed order of refresh parameters *} {* *} {* 0.9.0 - 06/30/2000 - G.Juyn *} {* - changed refresh parameters to 'x,y,width,height' *} {* *} {* 0.9.1 - 07/08/2000 - G.Juyn *} {* - fixed to use returncode constants *} {* - changed to accomodate MNG_NEEDTIMERWAIT returncode *} {* 0.9.1 - 07/10/2000 - G.Juyn *} {* - changed to use suspension-mode *} {* *} {* 0.9.3 - 09/11/2000 - G.Juyn *} {* - removed some tesst-stuff *} {* *} {* 1.0.1 - 05/02/2000 - G.Juyn *} {* - removed loading default sRGB profile (auto in libmng) *} {* *} {* 1.0.5 - 09/16/2002 - G.Juyn *} {* - added dynamic MNG features *} {* 1.0.5 - 11/27/2002 - G.Juyn *} {* - fixed freeze during read-cycle *} {* *} {****************************************************************************} type TMainForm = class(TForm) OFMainMenu: TMainMenu; OFMenuFile: TMenuItem; OFMenuFileOpen: TMenuItem; OFMenuFileProfile: TMenuItem; OFMenuFileN1: TMenuItem; OFMenuFileExit: TMenuItem; OFMenuOptions: TMenuItem; OFMenuOptionsModemSpeed: TMenuItem; OFMenuOptionsModem28k8: TMenuItem; OFMenuOptionsModem33k6: TMenuItem; OFMenuOptionsModem56k: TMenuItem; OFMenuOptionsModemISDN64: TMenuItem; OFMenuOptionsModemISDN128: TMenuItem; OFMenuOptionsModemCable512: TMenuItem; OFMenuOptionsModemUnlimited: TMenuItem; OFTimer: TTimer; OFOpenDialog: TOpenDialog; OFOpenDialogProfile: TOpenDialog; OFImage: TImage; procedure FormCreate(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormShow(Sender: TObject); procedure FormResize(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure OFImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure OFImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure OFImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure OFTimerTimer(Sender: TObject); procedure OFMenuFileOpenClick(Sender: TObject); procedure OFMenuFileProfileClick(Sender: TObject); procedure OFMenuFileExitClick(Sender: TObject); procedure OFMenuOptionsModemSpeedClick(Sender: TObject); procedure OFMenuOptionsModemXClick(Sender: TObject); private { Private declarations } SFFileName : string; { filename of the input stream } OFFile : TFileStream; { input stream } IFHandle : mng_handle; { the libray handle } OFBitmap : TBitmap; { drawing canvas } BFCancelled : boolean; { or app-exit } BFHasMouse : boolean; { mouse is/was over image } IFTicks : cardinal; { used to fake slow connections } IFBytes : cardinal; IFBytesPerSec : integer; procedure MNGerror (SHMsg : string); public { Public declarations } end; var MainForm: TMainForm; {****************************************************************************} implementation {$R *.DFM} {****************************************************************************} {$F+} function Memalloc (iLen : mng_uint32) : mng_ptr; stdcall; {$F-} begin getmem (Result, iLen); { get memory from the heap } fillchar (Result^, iLen, 0); { and initialize it } end; {****************************************************************************} {$F+} procedure Memfree (iPtr : mng_ptr; iLen : mng_size_t); stdcall; {$F-} begin freemem (iPtr, iLen); { free the memory } end; {****************************************************************************} {$F+} function Openstream (hHandle : mng_handle) : mng_bool; stdcall; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); with OHFORM do begin if OFFile <> nil then { free previous stream (if any) } OFFile.Free; { open a new stream } OFFile := TFileStream.Create (SFFileName, fmOpenRead or fmShareDenyWrite); end; Result := MNG_TRUE; end; {****************************************************************************} {$F+} function Closestream (hHandle : mng_handle) : mng_bool; stdcall; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); with OHFORM do begin OFFile.Free; { cleanup the stream } OFFile := nil; { don't use it again ! } end; Result := MNG_TRUE; end; {****************************************************************************} {$F+} function Readdata ( hHandle : mng_handle; pBuf : mng_ptr; iBuflen : mng_uint32; var pRead : mng_uint32) : mng_bool; stdcall; {$F-} var OHForm : TMainForm; IHTicks : cardinal; IHByte1 : cardinal; IHByte2 : cardinal; IHBytesPerSec : cardinal; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); with OHForm do begin { are we at EOF ? } if OFFile.Position >= OFFile.Size then begin pRead := 0; { indicate so } end else begin IHBytesPerSec := IFBytesPerSec; { fake a slow connection } if IHBytesPerSec > 0 then begin IHTicks := Windows.GetTickCount; IHByte1 := round (((IHTicks - IFTicks) / 1000) * IHBytesPerSec); IHByte2 := (IFBytes + iBuflen); if ((IHByte2 - IHByte1) div IHBytesPerSec) > 10 then Windows.Sleep ((IHByte2 - IHByte1) div IHBytesPerSec); end; { read the requested data } pRead := OFFile.Read (pBuf^, iBuflen); IFBytes := IFBytes + pRead; end; end; Result := MNG_TRUE; end; {****************************************************************************} {$F+} function ProcessHeader (hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32) : mng_bool; stdcall; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); with OHForm do begin OFBitmap.Width := iWidth; { store the new dimensions } OFBitmap.Height := iHeight; OFImage.Left := 0; { adjust the visible component } OFImage.Top := 0; OFImage.Width := iWidth; OFImage.Height := iHeight; FormResize (OHForm); { force re-centering the image} { clear the canvas & draw an outline } OFBitmap.Canvas.Brush.Color := clGray; OFBitmap.Canvas.Brush.Style := bsSolid; OFBitmap.Canvas.FillRect (OFBitmap.Canvas.ClipRect); OFBitmap.Canvas.Brush.Color := clRed; OFBitmap.Canvas.Brush.Style := bsSolid; OFBitmap.Canvas.Pen.Color := clRed; OFBitmap.Canvas.Pen.Style := psSolid; OFBitmap.Canvas.FrameRect (OFBitmap.Canvas.ClipRect); OFImage.Picture.Assign (OFBitmap); { make sure it gets out there } { tell the library we want funny windows-bgr} if mng_set_canvasstyle (hHandle, MNG_CANVAS_BGRX8) <> 0 then MNGerror ('libmng reported an error setting the canvas style'); end; Result := MNG_TRUE; end; {****************************************************************************} {$F+} function GetCanvasLine (hHandle : mng_handle; iLinenr : mng_uint32) : mng_ptr; stdcall; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); { easy with these bitmap objects ! } Result := OHForm.OFBitmap.ScanLine [iLinenr]; end; {****************************************************************************} {$F+} function ImageRefresh (hHandle : mng_handle; iX : mng_uint32; iY : mng_uint32; iWidth : mng_uint32; iHeight : mng_uint32) : mng_bool; stdcall; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); { force redraw } OHForm.OFImage.Picture.Assign (OHForm.OFBitmap); Result := MNG_TRUE; end; {****************************************************************************} {$F+} function GetTickCount (hHandle : mng_handle) : mng_uint32; stdcall; {$F-} begin Result := Windows.GetTickCount; { windows knows that } end; {****************************************************************************} {$F+} function SetTimer (hHandle : mng_handle; iMsecs : mng_uint32) : mng_bool; stdcall; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); OHForm.OFTimer.Interval := iMsecs; { and set the timer } OHForm.OFTimer.Enabled := true; Result := MNG_TRUE; end; {****************************************************************************} procedure TMainForm.FormCreate(Sender: TObject); var IHRed, IHGreen, IHBlue : word; begin { initialize } OFBitmap := TBitmap.Create; IFBytesPerSec := 10000000; BFHasMouse := false; OFFile := nil; OFOpenDialog.Initialdir := ''; OFBitmap.HandleType := bmDIB; { make it a 24-bit DIB } OFBitmap.PixelFormat := pf32bit; { now initialize the library } IFHandle := mng_initialize (mng_ptr(self), Memalloc, Memfree, nil); if IFHandle = NIL then begin MNGerror ('libmng initialization error' + #13#10 + 'Program aborted'); Windows.Postmessage (handle, WM_Close, 0, 0); Exit; end; { no need to store chunk-info ! } mng_set_storechunks (IFHandle, MNG_FALSE); { do not use suspension-buffer } mng_set_suspensionmode (IFHandle, MNG_FALSE); { set all the callbacks } if (mng_setcb_openstream (IFHandle, Openstream ) <> MNG_NOERROR) or (mng_setcb_closestream (IFHandle, Closestream ) <> MNG_NOERROR) or (mng_setcb_readdata (IFHandle, Readdata ) <> MNG_NOERROR) or (mng_setcb_processheader (IFHandle, ProcessHeader) <> MNG_NOERROR) or (mng_setcb_getcanvasline (IFHandle, GetCanvasLine) <> MNG_NOERROR) or (mng_setcb_refresh (IFHandle, ImageRefresh ) <> MNG_NOERROR) or (mng_setcb_gettickcount (IFHandle, GetTickCount ) <> MNG_NOERROR) or (mng_setcb_settimer (IFHandle, SetTimer ) <> MNG_NOERROR) then begin MNGerror ('libmng reported an error setting a callback function!' + #13#10 + 'Program aborted'); Windows.Postmessage (handle, WM_Close, 0, 0); Exit; end; IHRed := (Color ) and $FF; { supply our own bg-color } IHGreen := (Color shr 8) and $FF; IHBlue := (Color shr 16) and $FF; IHRed := (IHRed shl 8) + IHRed; IHGreen := (IHGreen shl 8) + IHGreen; IHBlue := (IHBlue shl 8) + IHBlue; if mng_set_bgcolor (IFHandle, IHRed, IHGreen, IHBlue) <> MNG_NOERROR then MNGerror ('libmng reported an error setting the background color!'); end; {****************************************************************************} procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin OFTimer.Enabled := false; BFCancelled := true; { if we're still animating then stop it } if mng_status_running (IFHandle) and not mng_status_reading (IFHandle) then if mng_display_freeze (IFHandle) <> MNG_NOERROR then MNGerror ('libmng reported an error during display_freeze!'); mng_cleanup (IFHandle); end; {****************************************************************************} procedure TMainForm.FormShow(Sender: TObject); begin FormResize (self); end; {****************************************************************************} procedure TMainForm.FormResize(Sender: TObject); begin { center the image in the window } if ClientWidth < OFImage.Width then OFImage.Left := 0 else OFImage.Left := (ClientWidth - OFImage.Width ) div 2; if ClientHeight < OFImage.Height then OFImage.Top := 0 else OFImage.Top := (ClientHeight - OFImage.Height) div 2; end; {****************************************************************************} procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = vk_Escape then { pressing will freeze an animation } begin OFTimer.Enabled := false; { don't let that timer go off then ! } BFCancelled := true; if mng_status_running (IFHandle) and not mng_status_reading (IFHandle) then if mng_display_freeze (IFHandle) <> MNG_NOERROR then MNGerror ('libmng reported an error during display_freeze!'); end; end; {****************************************************************************} procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if mng_status_dynamic (IFHandle) then begin if BFHasMouse then { if we had the mouse, it's left ! } begin if mng_trapevent (IFHandle, 3, 0, 0) <> MNG_NOERROR then MNGerror ('libmng reported an error during trapevent!'); BFHasMouse := false; end; end; end; {****************************************************************************} procedure TMainForm.OFImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if mng_status_dynamic (IFHandle) then begin if BFHasMouse then { did we have the mouse already ? } begin if mng_trapevent (IFHandle, 2, X, Y) <> MNG_NOERROR then MNGerror ('libmng reported an error during trapevent!'); end else begin { if not, it has entered ! } if mng_trapevent (IFHandle, 1, X, Y) <> MNG_NOERROR then MNGerror ('libmng reported an error during trapevent!'); BFHasMouse := true; end; end; end; {****************************************************************************} procedure TMainForm.OFImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if mng_status_dynamic (IFHandle) then if mng_trapevent (IFHandle, 4, X, Y) <> MNG_NOERROR then MNGerror ('libmng reported an error during trapevent!'); end; {****************************************************************************} procedure TMainForm.OFImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if mng_status_dynamic (IFHandle) then if mng_trapevent (IFHandle, 5, X, Y) <> MNG_NOERROR then MNGerror ('libmng reported an error during trapevent!'); end; {****************************************************************************} procedure TMainForm.OFTimerTimer(Sender: TObject); var IHRslt : mng_retcode; begin OFTimer.Enabled := false; { only once ! } if not BFCancelled then begin { and inform the library } IHRslt := mng_display_resume (IFHandle); if (IHRslt <> MNG_NOERROR) and (IHRslt <> MNG_NEEDTIMERWAIT) then MNGerror ('libmng reported an error during display_resume!'); end; end; {****************************************************************************} procedure TMainForm.OFMenuFileOpenClick(Sender: TObject); var IHRslt : mng_retcode; begin OFOpenDialog.InitialDir := ''; OFOpenDialog.FileName := SFFileName; if OFOpenDialog.Execute then { get the filename } begin if OFTimer.Enabled then { if the lib was active; stop it } begin OFTimer.Enabled := false; Application.ProcessMessages; { process any timer requests (for safety) } { now freeze the animation } if mng_display_freeze (IFHandle) <> MNG_NOERROR then MNGerror ('libmng reported an error during display_freeze!'); end; { save interesting fields } SFFileName := OFOpenDialog.FileName; IFTicks := Windows.GetTickCount; IFBytes := 0; BFCancelled := false; { always reset (just in case) } if mng_reset (IFHandle) <> MNG_NOERROR then MNGerror ('libmng reported an error during reset!') else begin { and let the lib do it's job ! } IHRslt := mng_readdisplay (IFHandle); if (IHRslt <> MNG_NOERROR) and (IHRSLT <> MNG_NEEDTIMERWAIT) then MNGerror ('libmng reported an error reading the input file!'); end; end; end; {****************************************************************************} procedure TMainForm.OFMenuFileProfileClick(Sender: TObject); var SHProfileDir : array [0 .. MAX_PATH + 20] of char; begin GetSystemDirectory (@SHProfileDir, MAX_PATH); strcat (@SHProfileDir, '\Color'); OFOpenDialogProfile.InitialDir := strpas (@SHProfileDir); if OFOpenDialogProfile.Execute then if mng_set_outputprofile (IFHandle, pchar (OFOpenDialogProfile.FileName)) <> 0 then MNGerror ('libmng reported an error setting the output-profile!'); end; {****************************************************************************} procedure TMainForm.OFMenuFileExitClick(Sender: TObject); begin if mng_cleanup (IFHandle) <> MNG_NOERROR then MNGerror ('libmng cleanup error'); Close; end; {****************************************************************************} procedure TMainForm.OFMenuOptionsModemSpeedClick(Sender: TObject); begin OFMenuOptionsModem28k8.Checked := false; OFMenuOptionsModem33k6.Checked := false; OFMenuOptionsModem56k.Checked := false; OFMenuOptionsModemISDN64.Checked := false; OFMenuOptionsModemISDN128.Checked := false; OFMenuOptionsModemCable512.Checked := false; OFMenuOptionsModemUnlimited.Checked := false; if IFBytesPerSec = OFMenuOptionsModem28k8.Tag div 10 then OFMenuOptionsModem28k8.Checked := true else if IFBytesPerSec = OFMenuOptionsModem33k6.Tag div 10 then OFMenuOptionsModem33k6.Checked := true else if IFBytesPerSec = OFMenuOptionsModem56k.Tag div 10 then OFMenuOptionsModem56k.Checked := true else if IFBytesPerSec = OFMenuOptionsModemISDN64.Tag div 10 then OFMenuOptionsModemISDN64.Checked := true else if IFBytesPerSec = OFMenuOptionsModemISDN128.Tag div 10 then OFMenuOptionsModemISDN128.Checked := true else if IFBytesPerSec = OFMenuOptionsModemUnlimited.Tag div 10 then OFMenuOptionsModemCable512.Checked := true else OFMenuOptionsModemUnlimited.Checked := true; end; {****************************************************************************} procedure TMainForm.OFMenuOptionsModemXClick(Sender: TObject); begin IFBytesPerSec := TMenuItem (Sender).Tag div 10; end; {****************************************************************************} procedure TMainForm.MNGerror; var iErrorcode : mng_uint32; iSeverity : mng_uint8; iChunkname : mng_chunkid; iChunkseq : mng_uint32; iExtra1 : mng_int32; iExtra2 : mng_int32; zErrortext : mng_pchar; begin { get extended info } iErrorcode := mng_getlasterror (IFHandle, iSeverity, iChunkname, iChunkseq, iExtra1, iExtra2, zErrortext); MessageDlg (SHMsg + #13#10#13#10 + strpas (zErrortext) + #13#10#13#10 + Format ('Error = %d; Severity = %d; Chunknr = %d; Extra1 = %d', [iErrorcode, iSeverity, iChunkseq, iExtra1]), mtError, [mbOK], 0); end; {****************************************************************************} end. libmng-2.0.2/contrib/delphi/mngview/mngview.dpr0000644000000000000000000000032212005307152020215 0ustar rootrootprogram mngview; uses Forms, Main in 'Main.pas' {MainForm}, libmng in '..\libmng.pas'; {$R *.RES} begin Application.Initialize; Application.CreateForm(TMainForm, MainForm); Application.Run; end. libmng-2.0.2/contrib/mngplay/0000755000000000000000000000000012005307152014563 5ustar rootrootlibmng-2.0.2/contrib/sdl/0000755000000000000000000000000012005307152013676 5ustar rootrootlibmng-2.0.2/contrib/sdl/mngplay/0000755000000000000000000000000012005307152015345 5ustar rootrootlibmng-2.0.2/contrib/sdl/mngplay/.deps/0000755000000000000000000000000012005307152016356 5ustar rootrootlibmng-2.0.2/contrib/sdl/mngplay/.deps/CVS/0000755000000000000000000000000012005307152017011 5ustar rootrootlibmng-2.0.2/contrib/sdl/mngplay/.deps/CVS/Entries0000644000000000000000000000000212005307152020335 0ustar rootrootD libmng-2.0.2/contrib/sdl/mngplay/.deps/CVS/Repository0000644000000000000000000000004712005307152021114 0ustar rootrootlibmng-devel/contrib/sdl/mngplay/.deps libmng-2.0.2/contrib/sdl/mngplay/.deps/CVS/Root0000644000000000000000000000005712005307152017661 0ustar rootroot:ext:glennrp@libmng.cvs.sf.net:/cvsroot/libmng libmng-2.0.2/contrib/kylix/0000755000000000000000000000000012005307152014254 5ustar rootrootlibmng-2.0.2/contrib/kylix/libmng.pas0000644000000000000000000030460212005307152016236 0ustar rootrootunit libmng; {****************************************************************************} {* *} {* COPYRIGHT NOTICE: *} {* *} {* Copyright (c) 2000-2002 Gerard Juyn (gerard@libmng.com) *} {* [You may insert additional notices after this sentence if you modify *} {* this source] *} {* *} {* For the purposes of this copyright and license, "Contributing Authors" *} {* is defined as the following set of individuals: *} {* *} {* Gerard Juyn *} {* (hopefully some more to come...) *} {* *} {* The MNG Library is supplied "AS IS". The Contributing Authors *} {* disclaim all warranties, expressed or implied, including, without *} {* limitation, the warranties of merchantability and of fitness for any *} {* purpose. The Contributing Authors assume no liability for direct, *} {* indirect, incidental, special, exemplary, or consequential damages, *} {* which may result from the use of the MNG Library, even if advised of *} {* the possibility of such damage. *} {* *} {* Permission is hereby granted to use, copy, modify, and distribute this *} {* source code, or portions hereof, for any purpose, without fee, subject *} {* to the following restrictions: *} {* *} {* 1. The origin of this source code must not be misrepresented; *} {* you must not claim that you wrote the original software. *} {* *} {* 2. Altered versions must be plainly marked as such and must not be *} {* misrepresented as being the original source. *} {* *} {* 3. This Copyright notice may not be removed or altered from any source *} {* or altered source distribution. *} {* *} {* The Contributing Authors specifically permit, without fee, and *} {* encourage the use of this source code as a component to supporting *} {* the MNG and JNG file format in commercial products. If you use this *} {* source code in a product, acknowledgment would be highly appreciated. *} {* *} {****************************************************************************} {* *} {* project : libmng *} {* file : libmng.pas copyright (c) 2000-2002 G.Juyn *} {* version : 1.0.5 *} {* *} {* purpose : libmng.so wrapper unit *} {* *} {* author : G.Juyn *} {* web : http://www.3-t.com *} {* email : mailto:info@3-t.com *} {* *} {* comment : contains the pascal-translation of libmng.h *} {* can be used by Kylix programs to access the libmng.so *} {* *} {* changes : 1.0.5 - 09/21/2002 - G.Juyn *} {* - modified for Kylix use *} {* *} {****************************************************************************} interface {****************************************************************************} const MNG_TRUE = TRUE; MNG_FALSE = FALSE; MNG_NULL = nil; type mng_uint32 = cardinal; mng_int32 = integer; mng_uint16 = word; mng_int16 = smallint; mng_uint8 = byte; mng_int8 = shortint; mng_bool = boolean; mng_ptr = pointer; mng_pchar = pchar; mng_handle = pointer; mng_retcode = mng_int32; mng_chunkid = mng_uint32; mng_size_t = cardinal; mng_imgtype = (mng_it_unknown, mng_it_png, mng_it_mng, mng_it_jng); mng_speedtype = (mng_st_normal, mng_st_fast, mng_st_slow, mng_st_slowest); mng_uint32p = ^mng_uint32; mng_uint16p = ^mng_uint16; mng_uint8p = ^mng_uint8; mng_chunkidp = ^mng_chunkid; mng_palette8e = packed record { 8-bit palette element } iRed : mng_uint8; iGreen : mng_uint8; iBlue : mng_uint8; end; mng_palette8 = packed array [0 .. 255] of mng_palette8e; mng_uint8arr = packed array [0 .. 255] of mng_uint8; mng_uint8arr4 = packed array [0 .. 3] of mng_uint8; mng_uint16arr = packed array [0 .. 255] of mng_uint16; mng_uint32arr2 = packed array [0 .. 1] of mng_uint32; {****************************************************************************} type mng_memalloc = function ( iLen : mng_size_t) : mng_ptr; cdecl; mng_memfree = procedure ( iPtr : mng_ptr; iLen : mng_size_t); cdecl; type mng_openstream = function ( hHandle : mng_handle) : mng_bool; cdecl; type mng_closestream = function ( hHandle : mng_handle) : mng_bool; cdecl; type mng_readdata = function ( hHandle : mng_handle; pBuf : mng_ptr; iBuflen : mng_uint32; var pRead : mng_uint32) : mng_bool; cdecl; type mng_writedata = function ( hHandle : mng_handle; pBuf : mng_ptr; iBuflen : mng_uint32; var pWritten : mng_uint32) : mng_bool; cdecl; type mng_errorproc = function ( hHandle : mng_handle; iErrorcode : mng_retcode; iSeverity : mng_uint8; iChunkname : mng_chunkid; iChunkseq : mng_uint32; iExtra1 : mng_int32; iExtra2 : mng_int32; zErrortext : mng_pchar ) : mng_bool; cdecl; type mng_traceproc = function ( hHandle : mng_handle; iFuncnr : mng_int32; iFuncseq : mng_uint32; zFuncname : mng_pchar ) : mng_bool; cdecl; type mng_processheader = function ( hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32) : mng_bool; cdecl; type mng_processtext = function ( hHandle : mng_handle; iType : mng_uint8; zKeyword : mng_pchar; zText : mng_pchar; zLanguage : mng_pchar; zTranslation : mng_pchar ) : mng_bool; cdecl; type mng_processsave = function ( hHandle : mng_handle) : mng_bool; cdecl; type mng_processseek = function ( hHandle : mng_handle; zName : mng_pchar ) : mng_bool; cdecl; type mng_processneed = function ( hHandle : mng_handle; zKeyword : mng_pchar ) : mng_bool; cdecl; type mng_processunknown = function ( hHandle : mng_handle; iChunkid : mng_chunkid; iRawlen : mng_uint32; pRawdata : mng_ptr ) : mng_bool; cdecl; type mng_getcanvasline = function ( hHandle : mng_handle; iLinenr : mng_uint32) : mng_ptr; cdecl; type mng_getalphaline = function ( hHandle : mng_handle; iLinenr : mng_uint32) : mng_ptr; cdecl; type mng_getbkgdline = function ( hHandle : mng_handle; iLinenr : mng_uint32) : mng_ptr; cdecl; type mng_refresh = function ( hHandle : mng_handle; iX : mng_uint32; iY : mng_uint32; iWidth : mng_uint32; iHeight : mng_uint32) : mng_bool; cdecl; type mng_gettickcount = function ( hHandle : mng_handle) : mng_uint32; cdecl; type mng_settimer = function ( hHandle : mng_handle; iMsecs : mng_uint32) : mng_bool; cdecl; type mng_processgamma = function ( hHandle : mng_handle; iGamma : mng_uint32) : mng_bool; cdecl; type mng_processchroma = function ( hHandle : mng_handle; iWhitex : mng_uint32; iWhitey : mng_uint32; iRedx : mng_uint32; iRedy : mng_uint32; iGreenx : mng_uint32; iGreeny : mng_uint32; iBluex : mng_uint32; iBluey : mng_uint32) : mng_bool; cdecl; type mng_processsrgb = function ( hHandle : mng_handle; iIntent : mng_uint8 ) : mng_bool; cdecl; type mng_processiccp = function ( hHandle : mng_handle; iProfilesize : mng_uint32; pProfile : mng_ptr ) : mng_bool; cdecl; type mng_processarow = function ( hHandle : mng_handle; iRowsamples : mng_uint32; bIsRGBA16 : mng_bool; pRow : mng_ptr ) : mng_bool; cdecl; type mng_iteratechunk = function ( hHandle : mng_handle; hChunk : mng_handle; iChunkid : mng_chunkid; iChunkseq : mng_uint32) : mng_bool; cdecl; {****************************************************************************} function mng_initialize ( pUserdata : mng_ptr; fMemalloc : mng_memalloc; fMemfree : mng_memfree; fTraceproc : mng_traceproc ) : mng_handle; cdecl; function mng_reset ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_cleanup (var hHandle : mng_handle ) : mng_retcode; cdecl; function mng_read ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_read_resume ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_write ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_create ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_readdisplay ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_display ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_display_resume ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_display_freeze ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_display_reset ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_display_goframe ( hHandle : mng_handle; iFramenr : mng_uint32 ) : mng_retcode; cdecl; function mng_display_golayer ( hHandle : mng_handle; iLayernr : mng_uint32 ) : mng_retcode; cdecl; function mng_display_gotime ( hHandle : mng_handle; iPlaytime : mng_uint32 ) : mng_retcode; cdecl; function mng_trapevent ( hHandle : mng_handle; iEventtype : mng_uint8; iX : mng_int32; iY : mng_int32 ) : mng_retcode; cdecl; function mng_getlasterror ( hHandle : mng_handle; var iSeverity : mng_uint8; var iChunkname : mng_chunkid; var iChunkseq : mng_uint32; var iExtra1 : mng_int32; var iExtra2 : mng_int32; var zErrortext : mng_pchar ) : mng_retcode; cdecl; {****************************************************************************} function mng_setcb_memalloc ( hHandle : mng_handle; fProc : mng_memalloc ) : mng_retcode; cdecl; function mng_setcb_memfree ( hHandle : mng_handle; fProc : mng_memfree ) : mng_retcode; cdecl; function mng_setcb_openstream ( hHandle : mng_handle; fProc : mng_openstream ) : mng_retcode; cdecl; function mng_setcb_closestream ( hHandle : mng_handle; fProc : mng_closestream ) : mng_retcode; cdecl; function mng_setcb_readdata ( hHandle : mng_handle; fProc : mng_readdata ) : mng_retcode; cdecl; function mng_setcb_writedata ( hHandle : mng_handle; fProc : mng_writedata ) : mng_retcode; cdecl; function mng_setcb_errorproc ( hHandle : mng_handle; fProc : mng_errorproc ) : mng_retcode; cdecl; function mng_setcb_traceproc ( hHandle : mng_handle; fProc : mng_traceproc ) : mng_retcode; cdecl; function mng_setcb_processheader ( hHandle : mng_handle; fProc : mng_processheader) : mng_retcode; cdecl; function mng_setcb_processtext ( hHandle : mng_handle; fProc : mng_processtext ) : mng_retcode; cdecl; function mng_setcb_getcanvasline ( hHandle : mng_handle; fProc : mng_getcanvasline) : mng_retcode; cdecl; function mng_setcb_getalphaline ( hHandle : mng_handle; fProc : mng_getalphaline ) : mng_retcode; cdecl; function mng_setcb_getbkgdline ( hHandle : mng_handle; fProc : mng_getbkgdline ) : mng_retcode; cdecl; function mng_setcb_refresh ( hHandle : mng_handle; fProc : mng_refresh ) : mng_retcode; cdecl; function mng_setcb_gettickcount ( hHandle : mng_handle; fProc : mng_gettickcount ) : mng_retcode; cdecl; function mng_setcb_settimer ( hHandle : mng_handle; fProc : mng_settimer ) : mng_retcode; cdecl; function mng_setcb_processgamma ( hHandle : mng_handle; fProc : mng_processgamma ) : mng_retcode; cdecl; function mng_setcb_processchroma ( hHandle : mng_handle; fProc : mng_processchroma) : mng_retcode; cdecl; function mng_setcb_processsrgb ( hHandle : mng_handle; fProc : mng_processsrgb ) : mng_retcode; cdecl; function mng_setcb_processiccp ( hHandle : mng_handle; fProc : mng_processiccp ) : mng_retcode; cdecl; function mng_setcb_processarow ( hHandle : mng_handle; fProc : mng_processarow ) : mng_retcode; cdecl; {****************************************************************************} function mng_getcb_memalloc ( hHandle : mng_handle ) : mng_memalloc; cdecl; function mng_getcb_memfree ( hHandle : mng_handle ) : mng_memfree; cdecl; function mng_getcb_openstream ( hHandle : mng_handle ) : mng_openstream; cdecl; function mng_getcb_closestream ( hHandle : mng_handle ) : mng_closestream; cdecl; function mng_getcb_readdata ( hHandle : mng_handle ) : mng_readdata; cdecl; function mng_getcb_writedata ( hHandle : mng_handle ) : mng_writedata; cdecl; function mng_getcb_errorproc ( hHandle : mng_handle ) : mng_errorproc; cdecl; function mng_getcb_traceproc ( hHandle : mng_handle ) : mng_traceproc; cdecl; function mng_getcb_processheader ( hHandle : mng_handle ) : mng_processheader; cdecl; function mng_getcb_processtext ( hHandle : mng_handle ) : mng_processtext; cdecl; function mng_getcb_getcanvasline ( hHandle : mng_handle ) : mng_getcanvasline; cdecl; function mng_getcb_getalphaline ( hHandle : mng_handle ) : mng_getalphaline; cdecl; function mng_getcb_getbkgdline ( hHandle : mng_handle ) : mng_getbkgdline; cdecl; function mng_getcb_refresh ( hHandle : mng_handle ) : mng_refresh; cdecl; function mng_getcb_gettickcount ( hHandle : mng_handle ) : mng_gettickcount; cdecl; function mng_getcb_settimer ( hHandle : mng_handle ) : mng_settimer; cdecl; function mng_getcb_processgamma ( hHandle : mng_handle ) : mng_processgamma; cdecl; function mng_getcb_processchroma ( hHandle : mng_handle ) : mng_processchroma; cdecl; function mng_getcb_processsrgb ( hHandle : mng_handle ) : mng_processsrgb; cdecl; function mng_getcb_processiccp ( hHandle : mng_handle ) : mng_processiccp; cdecl; function mng_getcb_processarow ( hHandle : mng_handle ) : mng_processarow; cdecl; {****************************************************************************} function mng_set_userdata ( hHandle : mng_handle; pUserdata : mng_ptr ) : mng_retcode; cdecl; function mng_set_canvasstyle ( hHandle : mng_handle; iStyle : mng_uint32 ) : mng_retcode; cdecl; function mng_set_bkgdstyle ( hHandle : mng_handle; iStyle : mng_uint32 ) : mng_retcode; cdecl; function mng_set_bgcolor ( hHandle : mng_handle; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16 ) : mng_retcode; cdecl; function mng_set_usebkgd ( hHandle : mng_handle; bUseBKGD : mng_bool ) : mng_retcode; cdecl; function mng_set_storechunks ( hHandle : mng_handle; bStorechunks : mng_bool ) : mng_retcode; cdecl; function mng_set_cacheplayback ( hHandle : mng_handle; bCacheplayback : mng_bool ) : mng_retcode; cdecl; function mng_set_viewgammaint ( hHandle : mng_handle; iGamma : mng_uint32 ) : mng_retcode; cdecl; function mng_set_displaygammaint ( hHandle : mng_handle; iGamma : mng_uint32 ) : mng_retcode; cdecl; function mng_set_dfltimggammaint ( hHandle : mng_handle; iGamma : mng_uint32 ) : mng_retcode; cdecl; function mng_set_srgb ( hHandle : mng_handle; bIssRGB : mng_bool ) : mng_retcode; cdecl; function mng_set_outputprofile ( hHandle : mng_handle; zFilename : mng_pchar ) : mng_retcode; cdecl; function mng_set_outputprofile2 ( hHandle : mng_handle; iProfilesize : mng_uint32; pProfile : mng_ptr ) : mng_retcode; cdecl; function mng_set_srgbprofile ( hHandle : mng_handle; zFilename : mng_pchar ) : mng_retcode; cdecl; function mng_set_srgbprofile2 ( hHandle : mng_handle; iProfilesize : mng_uint32; pProfile : mng_ptr ) : mng_retcode; cdecl; function mng_set_maxcanvaswidth ( hHandle : mng_handle; iMaxwidth : mng_uint32 ) : mng_retcode; cdecl; function mng_set_maxcanvasheight ( hHandle : mng_handle; iMaxheight : mng_uint32 ) : mng_retcode; cdecl; function mng_set_maxcanvassize ( hHandle : mng_handle; iMaxwidth : mng_uint32; iMaxheight : mng_uint32 ) : mng_retcode; cdecl; function mng_set_suspensionmode ( hHandle : mng_handle; bSuspensionmode : mng_bool ) : mng_retcode; cdecl; function mng_set_speed ( hHandle : mng_handle; iSpeed : mng_speedtype ) : mng_retcode; cdecl; {****************************************************************************} function mng_get_userdata ( hHandle : mng_handle ) : mng_ptr; cdecl; function mng_get_sigtype ( hHandle : mng_handle ) : mng_imgtype; cdecl; function mng_get_imagetype ( hHandle : mng_handle ) : mng_imgtype; cdecl; function mng_get_imagewidth ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_imageheight ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_ticks ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_framecount ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_layercount ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_playtime ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_simplicity ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_canvasstyle ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_bkgdstyle ( hHandle : mng_handle ) : mng_uint32; cdecl; procedure mng_get_bgcolor ( hHandle : mng_handle; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16 ); cdecl; function mng_get_usebkgd ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_get_storechunks ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_get_cacheplayback ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_get_viewgammaint ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_displaygammaint ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_dfltimggammaint ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_srgb ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_get_maxcanvaswidth ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_maxcanvasheight ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_suspensionmode ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_get_speed ( hHandle : mng_handle ) : mng_speedtype; cdecl; function mng_get_imagelevel ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_starttime ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_runtime ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_currentframe ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_currentlayer ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_get_currentplaytime ( hHandle : mng_handle ) : mng_uint32; cdecl; function mng_status_error ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_status_reading ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_status_suspendbreak ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_status_creating ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_status_writing ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_status_displaying ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_status_running ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_status_timerbreak ( hHandle : mng_handle ) : mng_bool; cdecl; function mng_status_dynamic ( hHandle : mng_handle ) : mng_bool; cdecl; {****************************************************************************} function mng_iterate_chunks ( hHandle : mng_handle; iChunkseq : mng_uint32; fProc : mng_iteratechunk ) : mng_retcode; cdecl; {****************************************************************************} function mng_getchunk_ihdr ( hHandle : mng_handle; hChunk : mng_handle; var iWidth : mng_uint32; var iHeight : mng_uint32; var iBitdepth : mng_uint8; var iColortype : mng_uint8; var iCompression : mng_uint8; var iFilter : mng_uint8; var iInterlace : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_plte ( hHandle : mng_handle; hChunk : mng_handle; var iCount : mng_uint32; var aPalette : mng_palette8 ) : mng_retcode; cdecl; function mng_getchunk_idat ( hHandle : mng_handle; hChunk : mng_handle; var iRawlen : mng_uint32; var pRawdata : mng_ptr ) : mng_retcode; cdecl; function mng_getchunk_trns ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var bGlobal : mng_bool; var iType : mng_uint8; var iCount : mng_uint32; var aAlphas : mng_uint8arr; var iGray : mng_uint16; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16; var iRawlen : mng_uint32; var aRawdata : mng_uint8arr ) : mng_retcode; cdecl; function mng_getchunk_gama ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iGamma : mng_uint32 ) : mng_retcode; cdecl; function mng_getchunk_chrm ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iWhitepointx : mng_uint32; var iWhitepointy : mng_uint32; var iRedx : mng_uint32; var iRedy : mng_uint32; var iGreenx : mng_uint32; var iGreeny : mng_uint32; var iBluex : mng_uint32; var iBluey : mng_uint32 ) : mng_retcode; cdecl; function mng_getchunk_srgb ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iRenderingintent : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_iccp ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iNamesize : mng_uint32; var zName : mng_pchar; var iCompression : mng_uint8; var iProfilesize : mng_uint32; var pProfile : mng_ptr ) : mng_retcode; cdecl; function mng_getchunk_text ( hHandle : mng_handle; hChunk : mng_handle; var iKeywordsize : mng_uint32; var zKeyword : mng_pchar; var iTextsize : mng_uint32; var zText : mng_pchar ) : mng_retcode; cdecl; function mng_getchunk_ztxt ( hHandle : mng_handle; hChunk : mng_handle; var iKeywordsize : mng_uint32; var zKeyword : mng_pchar; var iCompression : mng_uint8; var iTextsize : mng_uint32; var zText : mng_pchar ) : mng_retcode; cdecl; function mng_getchunk_itxt ( hHandle : mng_handle; hChunk : mng_handle; var iKeywordsize : mng_uint32; var zKeyword : mng_pchar; var iCompressionflag : mng_uint8; var iCompressionmethod : mng_uint8; var iLanguagesize : mng_uint32; var zLanguage : mng_pchar; var iTranslationsize : mng_uint32; var zTranslation : mng_pchar; var iTextsize : mng_uint32; var zText : mng_pchar ) : mng_retcode; cdecl; function mng_getchunk_bkgd ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iType : mng_uint8; var iIndex : mng_uint8; var iGray : mng_uint16; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16 ) : mng_retcode; cdecl; function mng_getchunk_phys ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iSizex : mng_uint32; var iSizey : mng_uint32; var iUnit : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_sbit ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iType : mng_uint8; var aBits : mng_uint8arr4) : mng_retcode; cdecl; function mng_getchunk_splt ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iNamesize : mng_uint32; var zName : mng_pchar; var iSampledepth : mng_uint8; var iEntrycount : mng_uint32; var pEntries : mng_ptr ) : mng_retcode; cdecl; function mng_getchunk_hist ( hHandle : mng_handle; hChunk : mng_handle; var iEntrycount : mng_uint32; var aEntries : mng_uint16arr) : mng_retcode; cdecl; function mng_getchunk_time ( hHandle : mng_handle; hChunk : mng_handle; var iYear : mng_uint16; var iMonth : mng_uint8; var iDay : mng_uint8; var iHour : mng_uint8; var iMinute : mng_uint8; var iSecond : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_mhdr ( hHandle : mng_handle; hChunk : mng_handle; var iWidth : mng_uint32; var iHeight : mng_uint32; var iTicks : mng_uint32; var iLayercount : mng_uint32; var iFramecount : mng_uint32; var iPlaytime : mng_uint32; var iSimplicity : mng_uint32 ) : mng_retcode; cdecl; function mng_getchunk_loop ( hHandle : mng_handle; hChunk : mng_handle; var iLevel : mng_uint8; var iRepeat : mng_uint32; var iTermination : mng_uint8; var iItermin : mng_uint32; var iItermax : mng_uint32; var iCount : mng_uint32; var pSignals : mng_uint32p ) : mng_retcode; cdecl; function mng_getchunk_endl ( hHandle : mng_handle; hChunk : mng_handle; var iLevel : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_defi ( hHandle : mng_handle; hChunk : mng_handle; var iObjectid : mng_uint16; var iDonotshow : mng_uint8; var iConcrete : mng_uint8; var bHasloca : mng_bool; var iXlocation : mng_int32; var iYlocation : mng_int32; var bHasclip : mng_bool; var iLeftcb : mng_int32; var iRightcb : mng_int32; var iTopcb : mng_int32; var iBottomcb : mng_int32 ) : mng_retcode; cdecl; function mng_getchunk_basi ( hHandle : mng_handle; hChunk : mng_handle; var iWidth : mng_uint32; var iHeight : mng_uint32; var iBitdepth : mng_uint8; var iColortype : mng_uint8; var iCompression : mng_uint8; var iFilter : mng_uint8; var iInterlace : mng_uint8; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16; var iAlpha : mng_uint16; var iViewable : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_clon ( hHandle : mng_handle; hChunk : mng_handle; var iSourceid : mng_uint16; var iCloneid : mng_uint16; var iClonetype : mng_uint8; var iDonotshow : mng_uint8; var iConcrete : mng_uint8; var bHasloca : mng_bool; var iLocationtype : mng_uint8; var iLocationx : mng_int32; var iLocationy : mng_int32 ) : mng_retcode; cdecl; function mng_getchunk_past ( hHandle : mng_handle; hChunk : mng_handle; var iDestid : mng_uint16; var iTargettype : mng_uint8; var iTargetx : mng_int32; var iTargety : mng_int32; var iCount : mng_uint32 ) : mng_retcode; cdecl; function mng_getchunk_past_src ( hHandle : mng_handle; hChunk : mng_handle; iEntry : mng_uint32; var iSourceid : mng_uint16; var iComposition : mng_uint8; var iOrientation : mng_uint8; var iOffsettype : mng_uint8; var iOffsetx : mng_int32; var iOffsety : mng_int32; var iBoundarytype : mng_uint8; var iBoundaryl : mng_int32; var iBoundaryr : mng_int32; var iBoundaryt : mng_int32; var iBoundaryb : mng_int32 ) : mng_retcode; cdecl; function mng_getchunk_disc ( hHandle : mng_handle; hChunk : mng_handle; var iCount : mng_uint32; var pObjectids : mng_uint16p ) : mng_retcode; cdecl; function mng_getchunk_back ( hHandle : mng_handle; hChunk : mng_handle; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16; var iMandatory : mng_uint8; var iImageid : mng_uint16; var iTile : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_fram ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iMode : mng_uint8; var iNamesize : mng_uint32; var zName : mng_pchar; var iChangedelay : mng_uint8; var iChangetimeout : mng_uint8; var iChangeclipping : mng_uint8; var iChangesyncid : mng_uint8; var iDelay : mng_uint32; var iTimeout : mng_uint32; var iBoundarytype : mng_uint8; var iBoundaryl : mng_int32; var iBoundaryr : mng_int32; var iBoundaryt : mng_int32; var iBoundaryb : mng_int32; var iCount : mng_uint32; var pSyncids : mng_uint32p ) : mng_retcode; cdecl; function mng_getchunk_move ( hHandle : mng_handle; hChunk : mng_handle; var iFirstid : mng_uint16; var iLastid : mng_uint16; var iMovetype : mng_uint8; var iMovex : mng_int32; var iMovey : mng_int32 ) : mng_retcode; cdecl; function mng_getchunk_clip ( hHandle : mng_handle; hChunk : mng_handle; var iFirstid : mng_uint16; var iLastid : mng_uint16; var iCliptype : mng_uint8; var iClipl : mng_int32; var iClipr : mng_int32; var iClipt : mng_int32; var iClipb : mng_int32 ) : mng_retcode; cdecl; function mng_getchunk_show ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iFirstid : mng_uint16; var iLastid : mng_uint16; var iMode : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_term ( hHandle : mng_handle; hChunk : mng_handle; var iTermaction : mng_uint8; var iIteraction : mng_uint8; var iDelay : mng_uint32; var iItermax : mng_uint32 ) : mng_retcode; cdecl; function mng_getchunk_save ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iOffsettype : mng_uint8; var iCount : mng_uint32 ) : mng_retcode; cdecl; function mng_getchunk_save_entry ( hHandle : mng_handle; hChunk : mng_handle; iEntry : mng_uint32; var iEntrytype : mng_uint8; var iOffset : mng_uint32arr2; var iStarttime : mng_uint32arr2; var iLayernr : mng_uint32; var iFramenr : mng_uint32; var iNamesize : mng_uint32; var zName : mng_pchar ) : mng_retcode; cdecl; function mng_getchunk_seek ( hHandle : mng_handle; hChunk : mng_handle; var iNamesize : mng_uint32; var zName : mng_pchar ) : mng_retcode; cdecl; function mng_getchunk_expi ( hHandle : mng_handle; hChunk : mng_handle; var iSnapshotid : mng_uint16; var iNamesize : mng_uint32; var zName : mng_pchar ) : mng_retcode; cdecl; function mng_getchunk_fpri ( hHandle : mng_handle; hChunk : mng_handle; var iDeltatype : mng_uint8; var iPriority : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_need ( hHandle : mng_handle; hChunk : mng_handle; var iKeywordssize : mng_uint32; var zKeywords : mng_pchar ) : mng_retcode; cdecl; function mng_getchunk_phyg ( hHandle : mng_handle; hChunk : mng_handle; var bEmpty : mng_bool; var iSizex : mng_uint32; var iSizey : mng_uint32; var iUnit : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_jhdr ( hHandle : mng_handle; hChunk : mng_handle; var iWidth : mng_uint32; var iHeight : mng_uint32; var iColortype : mng_uint8; var iImagesampledepth : mng_uint8; var iImagecompression : mng_uint8; var iImageinterlace : mng_uint8; var iAlphasampledepth : mng_uint8; var iAlphacompression : mng_uint8; var iAlphafilter : mng_uint8; var iAlphainterlace : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_jdat ( hHandle : mng_handle; hChunk : mng_handle; var iRawlen : mng_uint32; var pRawdata : mng_ptr ) : mng_retcode; cdecl; function mng_getchunk_dhdr ( hHandle : mng_handle; hChunk : mng_handle; var iObjectid : mng_uint16; var iImagetype : mng_uint8; var iDeltatype : mng_uint8; var iBlockwidth : mng_uint32; var iBlockheight : mng_uint32; var iBlockx : mng_uint32; var iBlocky : mng_uint32 ) : mng_retcode; cdecl; function mng_getchunk_prom ( hHandle : mng_handle; hChunk : mng_handle; var iColortype : mng_uint8; var iSampledepth : mng_uint8; var iFilltype : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_pplt ( hHandle : mng_handle; hChunk : mng_handle; var iCount : mng_uint32 ) : mng_retcode; cdecl; function mng_getchunk_pplt_entry ( hHandle : mng_handle; hChunk : mng_handle; iEntry : mng_uint32; var iRed : mng_uint16; var iGreen : mng_uint16; var iBlue : mng_uint16; var iAlpha : mng_uint16; var bUsed : mng_bool ) : mng_retcode; cdecl; function mng_getchunk_drop ( hHandle : mng_handle; hChunk : mng_handle; var iCount : mng_uint32; var pChunknames : mng_chunkidp ) : mng_retcode; cdecl; function mng_getchunk_dbyk ( hHandle : mng_handle; hChunk : mng_handle; var iChunkname : mng_chunkid; var iPolarity : mng_uint8; var iKeywordssize : mng_uint32; var zKeywords : mng_pchar ) : mng_retcode; cdecl; function mng_getchunk_ordr ( hHandle : mng_handle; hChunk : mng_handle; var iCount : mng_uint32 ) : mng_retcode; cdecl; function mng_getchunk_ordr_entry ( hHandle : mng_handle; hChunk : mng_handle; iEntry : mng_uint32; var iChunkname : mng_chunkid; var iOrdertype : mng_uint8 ) : mng_retcode; cdecl; function mng_getchunk_unknown ( hHandle : mng_handle; hChunk : mng_handle; var iChunkname : mng_chunkid; var iRawlen : mng_uint32; var pRawdata : mng_ptr ) : mng_retcode; cdecl; {****************************************************************************} function mng_putchunk_ihdr ( hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32; iBitdepth : mng_uint8; iColortype : mng_uint8; iCompression : mng_uint8; iFilter : mng_uint8; iInterlace : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_plte ( hHandle : mng_handle; iCount : mng_uint32; aPalette : mng_palette8 ) : mng_retcode; cdecl; function mng_putchunk_idat ( hHandle : mng_handle; iRawlen : mng_uint32; pRawdata : mng_ptr ) : mng_retcode; cdecl; function mng_putchunk_iend ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_putchunk_trns ( hHandle : mng_handle; bEmpty : mng_bool; bGlobal : mng_bool; iType : mng_uint8; iCount : mng_uint32; aAlphas : mng_uint8arr; iGray : mng_uint16; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16; iRawlen : mng_uint32; aRawdata : mng_uint8arr ) : mng_retcode; cdecl; function mng_putchunk_gama ( hHandle : mng_handle; bEmpty : mng_bool; iGamma : mng_uint32 ) : mng_retcode; cdecl; function mng_putchunk_chrm ( hHandle : mng_handle; bEmpty : mng_bool; iWhitepointx : mng_uint32; iWhitepointy : mng_uint32; iRedx : mng_uint32; iRedy : mng_uint32; iGreenx : mng_uint32; iGreeny : mng_uint32; iBluex : mng_uint32; iBluey : mng_uint32 ) : mng_retcode; cdecl; function mng_putchunk_srgb ( hHandle : mng_handle; bEmpty : mng_bool; iRenderingintent : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_iccp ( hHandle : mng_handle; bEmpty : mng_bool; iNamesize : mng_uint32; zName : mng_pchar; iCompression : mng_uint8; iProfilesize : mng_uint32; pProfile : mng_ptr ) : mng_retcode; cdecl; function mng_putchunk_text ( hHandle : mng_handle; iKeywordsize : mng_uint32; zKeyword : mng_pchar; iTextsize : mng_uint32; zText : mng_pchar ) : mng_retcode; cdecl; function mng_putchunk_ztxt ( hHandle : mng_handle; iKeywordsize : mng_uint32; zKeyword : mng_pchar; iCompression : mng_uint8; iTextsize : mng_uint32; zText : mng_pchar ) : mng_retcode; cdecl; function mng_putchunk_itxt ( hHandle : mng_handle; iKeywordsize : mng_uint32; zKeyword : mng_pchar; iCompressionflag : mng_uint8; iCompressionmethod : mng_uint8; iLanguagesize : mng_uint32; zLanguage : mng_pchar; iTranslationsize : mng_uint32; zTranslation : mng_pchar; iTextsize : mng_uint32; zText : mng_pchar ) : mng_retcode; cdecl; function mng_putchunk_bkgd ( hHandle : mng_handle; bEmpty : mng_bool; iType : mng_uint8; iIndex : mng_uint8; iGray : mng_uint16; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16 ) : mng_retcode; cdecl; function mng_putchunk_phys ( hHandle : mng_handle; bEmpty : mng_bool; iSizex : mng_uint32; iSizey : mng_uint32; iUnit : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_sbit ( hHandle : mng_handle; bEmpty : mng_bool; iType : mng_uint8; aBits : mng_uint8arr4) : mng_retcode; cdecl; function mng_putchunk_splt ( hHandle : mng_handle; bEmpty : mng_bool; iNamesize : mng_uint32; zName : mng_pchar; iSampledepth : mng_uint8; iEntrycount : mng_uint32; pEntries : mng_ptr ) : mng_retcode; cdecl; function mng_putchunk_hist ( hHandle : mng_handle; iEntrycount : mng_uint32; aEntries : mng_uint16arr) : mng_retcode; cdecl; function mng_putchunk_time ( hHandle : mng_handle; iYear : mng_uint16; iMonth : mng_uint8; iDay : mng_uint8; iHour : mng_uint8; iMinute : mng_uint8; iSecond : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_mhdr ( hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32; iTicks : mng_uint32; iLayercount : mng_uint32; iFramecount : mng_uint32; iPlaytime : mng_uint32; iSimplicity : mng_uint32 ) : mng_retcode; cdecl; function mng_putchunk_mend ( hHandle : mng_handle ) : mng_retcode; cdecl; function mng_putchunk_loop ( hHandle : mng_handle; iLevel : mng_uint8; iRepeat : mng_uint32; iTermination : mng_uint8; iItermin : mng_uint32; iItermax : mng_uint32; iCount : mng_uint32; pSignals : mng_uint32p ) : mng_retcode; cdecl; function mng_putchunk_endl ( hHandle : mng_handle; iLevel : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_defi ( hHandle : mng_handle; iObjectid : mng_uint16; iDonotshow : mng_uint8; iConcrete : mng_uint8; bHasloca : mng_bool; iXlocation : mng_int32; iYlocation : mng_int32; bHasclip : mng_bool; iLeftcb : mng_int32; iRightcb : mng_int32; iTopcb : mng_int32; iBottomcb : mng_int32 ) : mng_retcode; cdecl; function mng_putchunk_basi ( hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32; iBitdepth : mng_uint8; iColortype : mng_uint8; iCompression : mng_uint8; iFilter : mng_uint8; iInterlace : mng_uint8; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16; iAlpha : mng_uint16; iViewable : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_clon ( hHandle : mng_handle; iSourceid : mng_uint16; iCloneid : mng_uint16; iClonetype : mng_uint8; iDonotshow : mng_uint8; iConcrete : mng_uint8; bHasloca : mng_bool; iLocationtype : mng_uint8; iLocationx : mng_int32; iLocationy : mng_int32 ) : mng_retcode; cdecl; function mng_putchunk_past ( hHandle : mng_handle; iDestid : mng_uint16; iTargettype : mng_uint8; iTargetx : mng_int32; iTargety : mng_int32; iCount : mng_uint32 ) : mng_retcode; cdecl; function mng_putchunk_past_src ( hHandle : mng_handle; iEntry : mng_uint32; iSourceid : mng_uint16; iComposition : mng_uint8; iOrientation : mng_uint8; iOffsettype : mng_uint8; iOffsetx : mng_int32; iOffsety : mng_int32; iBoundarytype : mng_uint8; iBoundaryl : mng_int32; iBoundaryr : mng_int32; iBoundaryt : mng_int32; iBoundaryb : mng_int32 ) : mng_retcode; cdecl; function mng_putchunk_disc ( hHandle : mng_handle; iCount : mng_uint32; pObjectids : mng_uint16p ) : mng_retcode; cdecl; function mng_putchunk_back ( hHandle : mng_handle; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16; iMandatory : mng_uint8; iImageid : mng_uint16; iTile : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_fram ( hHandle : mng_handle; bEmpty : mng_bool; iMode : mng_uint8; iNamesize : mng_uint32; zName : mng_pchar; iChangedelay : mng_uint8; iChangetimeout : mng_uint8; iChangeclipping : mng_uint8; iChangesyncid : mng_uint8; iDelay : mng_uint32; iTimeout : mng_uint32; iBoundarytype : mng_uint8; iBoundaryl : mng_int32; iBoundaryr : mng_int32; iBoundaryt : mng_int32; iBoundaryb : mng_int32; iCount : mng_uint32; pSyncids : mng_uint32p ) : mng_retcode; cdecl; function mng_putchunk_move ( hHandle : mng_handle; iFirstid : mng_uint16; iLastid : mng_uint16; iMovetype : mng_uint8; iMovex : mng_int32; iMovey : mng_int32 ) : mng_retcode; cdecl; function mng_putchunk_clip ( hHandle : mng_handle; iFirstid : mng_uint16; iLastid : mng_uint16; iCliptype : mng_uint8; iClipl : mng_int32; iClipr : mng_int32; iClipt : mng_int32; iClipb : mng_int32 ) : mng_retcode; cdecl; function mng_putchunk_show ( hHandle : mng_handle; bEmpty : mng_bool; iFirstid : mng_uint16; iLastid : mng_uint16; iMode : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_term ( hHandle : mng_handle; iTermaction : mng_uint8; iIteraction : mng_uint8; iDelay : mng_uint32; iItermax : mng_uint32 ) : mng_retcode; cdecl; function mng_putchunk_save ( hHandle : mng_handle; bEmpty : mng_bool; iOffsettype : mng_uint8; iCount : mng_uint32 ) : mng_retcode; cdecl; function mng_putchunk_save_entry ( hHandle : mng_handle; iEntry : mng_uint32; iEntrytype : mng_uint8; iOffset : mng_uint32arr2; iStarttime : mng_uint32arr2; iLayernr : mng_uint32; iFramenr : mng_uint32; iNamesize : mng_uint32; zName : mng_pchar ) : mng_retcode; cdecl; function mng_putchunk_seek ( hHandle : mng_handle; iNamesize : mng_uint32; zName : mng_pchar ) : mng_retcode; cdecl; function mng_putchunk_expi ( hHandle : mng_handle; iSnapshotid : mng_uint16; iNamesize : mng_uint32; zName : mng_pchar ) : mng_retcode; cdecl; function mng_putchunk_fpri ( hHandle : mng_handle; iDeltatype : mng_uint8; iPriority : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_need ( hHandle : mng_handle; iKeywordssize : mng_uint32; zKeywords : mng_pchar ) : mng_retcode; cdecl; function mng_putchunk_phyg ( hHandle : mng_handle; bEmpty : mng_bool; iSizex : mng_uint32; iSizey : mng_uint32; iUnit : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_jhdr ( hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32; iColortype : mng_uint8; iImagesampledepth : mng_uint8; iImagecompression : mng_uint8; iImageinterlace : mng_uint8; iAlphasampledepth : mng_uint8; iAlphacompression : mng_uint8; iAlphafilter : mng_uint8; iAlphainterlace : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_jdat ( hHandle : mng_handle; iRawlen : mng_uint32; pRawdata : mng_ptr ) : mng_retcode; cdecl; function mng_putchunk_dhdr ( hHandle : mng_handle; iObjectid : mng_uint16; iImagetype : mng_uint8; iDeltatype : mng_uint8; iBlockwidth : mng_uint32; iBlockheight : mng_uint32; iBlockx : mng_uint32; iBlocky : mng_uint32 ) : mng_retcode; cdecl; function mng_putchunk_prom ( hHandle : mng_handle; iColortype : mng_uint8; iSampledepth : mng_uint8; iFilltype : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_pplt ( hHandle : mng_handle; iCount : mng_uint32 ) : mng_retcode; cdecl; function mng_putchunk_pplt_entry ( hHandle : mng_handle; iEntry : mng_uint32; iRed : mng_uint16; iGreen : mng_uint16; iBlue : mng_uint16; iAlpha : mng_uint16; bUsed : mng_bool ) : mng_retcode; cdecl; function mng_putchunk_drop ( hHandle : mng_handle; iCount : mng_uint32; pChunknames : mng_chunkidp ) : mng_retcode; cdecl; function mng_putchunk_dbyk ( hHandle : mng_handle; iChunkname : mng_chunkid; iPolarity : mng_uint8; iKeywordssize : mng_uint32; zKeywords : mng_pchar ) : mng_retcode; cdecl; function mng_putchunk_ordr ( hHandle : mng_handle; iCount : mng_uint32 ) : mng_retcode; cdecl; function mng_putchunk_ordr_entry ( hHandle : mng_handle; iEntry : mng_uint32; iChunkname : mng_chunkid; iOrdertype : mng_uint8 ) : mng_retcode; cdecl; function mng_putchunk_unknown ( hHandle : mng_handle; iChunkname : mng_chunkid; iRawlen : mng_uint32; pRawdata : mng_ptr ) : mng_retcode; cdecl; {****************************************************************************} function mng_updatemngheader ( hHandle : mng_handle; iFramecount : mng_uint32; iLayercount : mng_uint32; iPlaytime : mng_uint32 ) : mng_retcode; cdecl; function mng_updatemngsimplicity ( hHandle : mng_handle; iSimplicity : mng_uint32 ) : mng_retcode; cdecl; {****************************************************************************} const MNG_NOERROR = 0; MNG_OUTOFMEMORY = 1; MNG_INVALIDHANDLE = 2; MNG_NOCALLBACK = 3; MNG_UNEXPECTEDEOF = 4; MNG_ZLIBERROR = 5; MNG_JPEGERROR = 6; MNG_LCMSERROR = 7; MNG_NOOUTPUTPROFILE = 8; MNG_NOSRGBPROFILE = 9; MNG_BUFOVERFLOW = 10; MNG_FUNCTIONINVALID = 11; MNG_OUTPUTERROR = 12; MNG_JPEGBUFTOOSMALL = 13; MNG_NEEDMOREDATA = 14; MNG_NEEDTIMERWAIT = 15; MNG_NEEDSECTIONWAIT = 16; MNG_APPIOERROR = 901; MNG_APPTIMERERROR = 902; MNG_APPCMSERROR = 903; MNG_APPMISCERROR = 904; MNG_APPTRACEABORT = 905; MNG_INTERNALERROR = 999; MNG_INVALIDSIG = 1025; MNG_INVALIDCRC = 1027; MNG_INVALIDLENGTH = 1028; MNG_SEQUENCEERROR = 1029; MNG_CHUNKNOTALLOWED = 1030; MNG_MULTIPLEERROR = 1031; MNG_PLTEMISSING = 1032; MNG_IDATMISSING = 1033; MNG_CANNOTBEEMPTY = 1034; MNG_GLOBALLENGTHERR = 1035; MNG_INVALIDBITDEPTH = 1036; MNG_INVALIDCOLORTYPE = 1037; MNG_INVALIDCOMPRESS = 1038; MNG_INVALIDFILTER = 1039; MNG_INVALIDINTERLACE = 1040; MNG_NOTENOUGHIDAT = 1041; MNG_PLTEINDEXERROR = 1042; MNG_NULLNOTFOUND = 1043; MNG_KEYWORDNULL = 1044; MNG_OBJECTUNKNOWN = 1045; MNG_OBJECTEXISTS = 1046; MNG_TOOMUCHIDAT = 1047; MNG_INVSAMPLEDEPTH = 1048; MNG_INVOFFSETSIZE = 1049; MNG_INVENTRYTYPE = 1050; MNG_ENDWITHNULL = 1051; MNG_INVIMAGETYPE = 1052; MNG_INVDELTATYPE = 1053; MNG_INVALIDINDEX = 1054; MNG_TOOMUCHJDAT = 1055; MNG_JPEGPARMSERR = 1056; MNG_INVFILLMETHOD = 1057; MNG_OBJNOTCONCRETE = 1058; MNG_TARGETNOALPHA = 1059; MNG_MNGTOOCOMPLEX = 1060; MNG_UNKNOWNCRITICAL = 1061; MNG_UNSUPPORTEDNEED = 1062; MNG_INVALIDDELTA = 1063; MNG_INVALIDMETHOD = 1064; MNG_IMPROBABLELENGTH = 1065; MNG_INVALIDBLOCK = 1066; MNG_INVALIDEVENT = 1067; MNG_INVALIDMASK = 1068; MNG_NOMATCHINGLOOP = 1069; MNG_SEEKNOTFOUND = 1070; MNG_INVALIDCNVSTYLE = 2049; MNG_WRONGCHUNK = 2050; MNG_INVALIDENTRYIX = 2051; MNG_NOHEADER = 2052; MNG_NOCORRCHUNK = 2053; MNG_NOMHDR = 2054; MNG_IMAGETOOLARGE = 4097; MNG_NOTANANIMATION = 4098; MNG_FRAMENRTOOHIGH = 4099; MNG_LAYERNRTOOHIGH = 4100; MNG_PLAYTIMETOOHIGH = 4101; MNG_FNNOTIMPLEMENTED = 4102; MNG_IMAGEFROZEN = 8193; {****************************************************************************} const MNG_CANVAS_RGB8 = $00000000; MNG_CANVAS_RGBA8 = $00001000; MNG_CANVAS_ARGB8 = $00003000; MNG_CANVAS_RGB8_A8 = $00005000; MNG_CANVAS_BGR8 = $00000001; MNG_CANVAS_BGRX8 = $00010001; MNG_CANVAS_BGRA8 = $00001001; MNG_CANVAS_ABGR8 = $00003001; MNG_CANVAS_RGB16 = $00000100; { not supported yet } MNG_CANVAS_RGBA16 = $00001100; { not supported yet } MNG_CANVAS_ARGB16 = $00003100; { not supported yet } MNG_CANVAS_BGR16 = $00000101; { not supported yet } MNG_CANVAS_BGRA16 = $00001101; { not supported yet } MNG_CANVAS_ABGR16 = $00003101; { not supported yet } MNG_CANVAS_GRAY8 = $00000002; { not supported yet } MNG_CANVAS_GRAY16 = $00000102; { not supported yet } MNG_CANVAS_GRAYA8 = $00001002; { not supported yet } MNG_CANVAS_GRAYA16 = $00001102; { not supported yet } MNG_CANVAS_AGRAY8 = $00003002; { not supported yet } MNG_CANVAS_AGRAY16 = $00003102; { not supported yet } MNG_CANVAS_DX15 = $00000003; { not supported yet } MNG_CANVAS_DX16 = $00000004; { not supported yet } {****************************************************************************} const MNG_UINT_HUH = $40404040; MNG_UINT_BACK = $4241434b; MNG_UINT_BASI = $42415349; MNG_UINT_CLIP = $434c4950; MNG_UINT_CLON = $434c4f4e; MNG_UINT_DBYK = $4442594b; MNG_UINT_DEFI = $44454649; MNG_UINT_DHDR = $44484452; MNG_UINT_DISC = $44495343; MNG_UINT_DROP = $44524f50; MNG_UINT_ENDL = $454e444c; MNG_UINT_FRAM = $4652414d; MNG_UINT_IDAT = $49444154; MNG_UINT_IEND = $49454e44; MNG_UINT_IHDR = $49484452; MNG_UINT_IJNG = $494a4e47; MNG_UINT_IPNG = $49504e47; MNG_UINT_JDAT = $4a444154; MNG_UINT_JHDR = $4a484452; MNG_UINT_JSEP = $4a534550; MNG_UINT_LOOP = $4c4f4f50; MNG_UINT_MEND = $4d454e44; MNG_UINT_MHDR = $4d484452; MNG_UINT_MOVE = $4d4f5645; MNG_UINT_ORDR = $4f524452; MNG_UINT_PAST = $50415354; MNG_UINT_PLTE = $504c5445; MNG_UINT_PPLT = $50504c54; MNG_UINT_PROM = $50524f4d; MNG_UINT_SAVE = $53415645; MNG_UINT_SEEK = $5345454b; MNG_UINT_SHOW = $53484f57; MNG_UINT_TERM = $5445524d; MNG_UINT_bKGD = $624b4744; MNG_UINT_cHRM = $6348524d; MNG_UINT_eXPI = $65585049; MNG_UINT_fPRI = $66505249; MNG_UINT_gAMA = $67414d41; MNG_UINT_hIST = $68495354; MNG_UINT_iCCP = $69434350; MNG_UINT_iTXt = $69545874; MNG_UINT_nEED = $6e454544; MNG_UINT_oFFs = $6f464673; MNG_UINT_pCAL = $7043414c; MNG_UINT_pHYg = $70444167; MNG_UINT_pHYs = $70485973; MNG_UINT_sBIT = $73424954; MNG_UINT_sCAL = $7343414c; MNG_UINT_sPLT = $73504c54; MNG_UINT_sRGB = $73524742; MNG_UINT_tEXt = $74455874; MNG_UINT_tIME = $74494d45; MNG_UINT_tRNS = $74524e53; MNG_UINT_zTXt = $7a545874; MNG_UINT_evNT = $65764e54; {****************************************************************************} implementation {****************************************************************************} const mngdll = 'libmng.so'; {****************************************************************************} function mng_initialize; external mngdll; function mng_reset; external mngdll; function mng_cleanup; external mngdll; function mng_read; external mngdll; function mng_read_resume; external mngdll; function mng_write; external mngdll; function mng_create; external mngdll; function mng_readdisplay; external mngdll; function mng_display; external mngdll; function mng_display_resume; external mngdll; function mng_display_freeze; external mngdll; function mng_display_reset; external mngdll; function mng_display_goframe; external mngdll; function mng_display_golayer; external mngdll; function mng_display_gotime; external mngdll; function mng_trapevent; external mngdll; function mng_getlasterror; external mngdll; {****************************************************************************} function mng_setcb_memalloc; external mngdll; function mng_setcb_memfree; external mngdll; function mng_setcb_openstream; external mngdll; function mng_setcb_closestream; external mngdll; function mng_setcb_readdata; external mngdll; function mng_setcb_writedata; external mngdll; function mng_setcb_errorproc; external mngdll; function mng_setcb_traceproc; external mngdll; function mng_setcb_processheader; external mngdll; function mng_setcb_processtext; external mngdll; function mng_setcb_getcanvasline; external mngdll; function mng_setcb_getalphaline; external mngdll; function mng_setcb_getbkgdline; external mngdll; function mng_setcb_refresh; external mngdll; function mng_setcb_gettickcount; external mngdll; function mng_setcb_settimer; external mngdll; function mng_setcb_processgamma; external mngdll; function mng_setcb_processchroma; external mngdll; function mng_setcb_processsrgb; external mngdll; function mng_setcb_processiccp; external mngdll; function mng_setcb_processarow; external mngdll; {****************************************************************************} function mng_getcb_memalloc; external mngdll; function mng_getcb_memfree; external mngdll; function mng_getcb_openstream; external mngdll; function mng_getcb_closestream; external mngdll; function mng_getcb_readdata; external mngdll; function mng_getcb_writedata; external mngdll; function mng_getcb_errorproc; external mngdll; function mng_getcb_traceproc; external mngdll; function mng_getcb_processheader; external mngdll; function mng_getcb_processtext; external mngdll; function mng_getcb_getcanvasline; external mngdll; function mng_getcb_getalphaline; external mngdll; function mng_getcb_getbkgdline; external mngdll; function mng_getcb_refresh; external mngdll; function mng_getcb_gettickcount; external mngdll; function mng_getcb_settimer; external mngdll; function mng_getcb_processgamma; external mngdll; function mng_getcb_processchroma; external mngdll; function mng_getcb_processsrgb; external mngdll; function mng_getcb_processiccp; external mngdll; function mng_getcb_processarow; external mngdll; {****************************************************************************} function mng_set_userdata; external mngdll; function mng_set_canvasstyle; external mngdll; function mng_set_bkgdstyle; external mngdll; function mng_set_bgcolor; external mngdll; function mng_set_usebkgd; external mngdll; function mng_set_storechunks; external mngdll; function mng_set_cacheplayback; external mngdll; // function mng_set_viewgamma; external mngdll; // function mng_set_displaygamma; external mngdll; // function mng_set_dfltimggamma; external mngdll; function mng_set_viewgammaint; external mngdll; function mng_set_displaygammaint; external mngdll; function mng_set_dfltimggammaint; external mngdll; function mng_set_srgb; external mngdll; function mng_set_outputprofile; external mngdll; function mng_set_outputprofile2; external mngdll; function mng_set_srgbprofile; external mngdll; function mng_set_srgbprofile2; external mngdll; function mng_set_maxcanvaswidth; external mngdll; function mng_set_maxcanvasheight; external mngdll; function mng_set_maxcanvassize; external mngdll; function mng_set_suspensionmode; external mngdll; function mng_set_speed; external mngdll; {****************************************************************************} function mng_get_userdata; external mngdll; function mng_get_sigtype; external mngdll; function mng_get_imagetype; external mngdll; function mng_get_imagewidth; external mngdll; function mng_get_imageheight; external mngdll; function mng_get_ticks; external mngdll; function mng_get_framecount; external mngdll; function mng_get_layercount; external mngdll; function mng_get_playtime; external mngdll; function mng_get_simplicity; external mngdll; function mng_get_canvasstyle; external mngdll; function mng_get_bkgdstyle; external mngdll; procedure mng_get_bgcolor; external mngdll; function mng_get_usebkgd; external mngdll; function mng_get_storechunks; external mngdll; function mng_get_cacheplayback; external mngdll; // function mng_get_viewgamma; external mngdll; // function mng_get_displaygamma; external mngdll; // function mng_get_dfltimggamma; external mngdll; function mng_get_viewgammaint; external mngdll; function mng_get_displaygammaint; external mngdll; function mng_get_dfltimggammaint; external mngdll; function mng_get_srgb; external mngdll; function mng_get_maxcanvaswidth; external mngdll; function mng_get_maxcanvasheight; external mngdll; function mng_get_suspensionmode; external mngdll; function mng_get_speed; external mngdll; function mng_get_imagelevel; external mngdll; function mng_get_starttime; external mngdll; function mng_get_runtime; external mngdll; function mng_get_currentframe; external mngdll; function mng_get_currentlayer; external mngdll; function mng_get_currentplaytime; external mngdll; function mng_status_error; external mngdll; function mng_status_reading; external mngdll; function mng_status_suspendbreak; external mngdll; function mng_status_creating; external mngdll; function mng_status_writing; external mngdll; function mng_status_displaying; external mngdll; function mng_status_running; external mngdll; function mng_status_timerbreak; external mngdll; function mng_status_dynamic; external mngdll; {****************************************************************************} function mng_iterate_chunks; external mngdll; {****************************************************************************} function mng_getchunk_ihdr; external mngdll; function mng_getchunk_plte; external mngdll; function mng_getchunk_idat; external mngdll; function mng_getchunk_trns; external mngdll; function mng_getchunk_gama; external mngdll; function mng_getchunk_chrm; external mngdll; function mng_getchunk_srgb; external mngdll; function mng_getchunk_iccp; external mngdll; function mng_getchunk_text; external mngdll; function mng_getchunk_ztxt; external mngdll; function mng_getchunk_itxt; external mngdll; function mng_getchunk_bkgd; external mngdll; function mng_getchunk_phys; external mngdll; function mng_getchunk_sbit; external mngdll; function mng_getchunk_splt; external mngdll; function mng_getchunk_hist; external mngdll; function mng_getchunk_time; external mngdll; function mng_getchunk_mhdr; external mngdll; function mng_getchunk_loop; external mngdll; function mng_getchunk_endl; external mngdll; function mng_getchunk_defi; external mngdll; function mng_getchunk_basi; external mngdll; function mng_getchunk_clon; external mngdll; function mng_getchunk_past; external mngdll; function mng_getchunk_past_src; external mngdll; function mng_getchunk_disc; external mngdll; function mng_getchunk_back; external mngdll; function mng_getchunk_fram; external mngdll; function mng_getchunk_move; external mngdll; function mng_getchunk_clip; external mngdll; function mng_getchunk_show; external mngdll; function mng_getchunk_term; external mngdll; function mng_getchunk_save; external mngdll; function mng_getchunk_save_entry; external mngdll; function mng_getchunk_seek; external mngdll; function mng_getchunk_expi; external mngdll; function mng_getchunk_fpri; external mngdll; function mng_getchunk_need; external mngdll; function mng_getchunk_phyg; external mngdll; function mng_getchunk_jhdr; external mngdll; function mng_getchunk_jdat; external mngdll; function mng_getchunk_dhdr; external mngdll; function mng_getchunk_prom; external mngdll; function mng_getchunk_pplt; external mngdll; function mng_getchunk_pplt_entry; external mngdll; function mng_getchunk_drop; external mngdll; function mng_getchunk_dbyk; external mngdll; function mng_getchunk_ordr; external mngdll; function mng_getchunk_ordr_entry; external mngdll; function mng_getchunk_unknown; external mngdll; {****************************************************************************} function mng_putchunk_ihdr; external mngdll; function mng_putchunk_plte; external mngdll; function mng_putchunk_idat; external mngdll; function mng_putchunk_iend; external mngdll; function mng_putchunk_trns; external mngdll; function mng_putchunk_gama; external mngdll; function mng_putchunk_chrm; external mngdll; function mng_putchunk_srgb; external mngdll; function mng_putchunk_iccp; external mngdll; function mng_putchunk_text; external mngdll; function mng_putchunk_ztxt; external mngdll; function mng_putchunk_itxt; external mngdll; function mng_putchunk_bkgd; external mngdll; function mng_putchunk_phys; external mngdll; function mng_putchunk_sbit; external mngdll; function mng_putchunk_splt; external mngdll; function mng_putchunk_hist; external mngdll; function mng_putchunk_time; external mngdll; function mng_putchunk_mhdr; external mngdll; function mng_putchunk_mend; external mngdll; function mng_putchunk_loop; external mngdll; function mng_putchunk_endl; external mngdll; function mng_putchunk_defi; external mngdll; function mng_putchunk_basi; external mngdll; function mng_putchunk_clon; external mngdll; function mng_putchunk_past; external mngdll; function mng_putchunk_past_src; external mngdll; function mng_putchunk_disc; external mngdll; function mng_putchunk_back; external mngdll; function mng_putchunk_fram; external mngdll; function mng_putchunk_move; external mngdll; function mng_putchunk_clip; external mngdll; function mng_putchunk_show; external mngdll; function mng_putchunk_term; external mngdll; function mng_putchunk_save; external mngdll; function mng_putchunk_save_entry; external mngdll; function mng_putchunk_seek; external mngdll; function mng_putchunk_expi; external mngdll; function mng_putchunk_fpri; external mngdll; function mng_putchunk_need; external mngdll; function mng_putchunk_phyg; external mngdll; function mng_putchunk_jhdr; external mngdll; function mng_putchunk_jdat; external mngdll; function mng_putchunk_dhdr; external mngdll; function mng_putchunk_prom; external mngdll; function mng_putchunk_pplt; external mngdll; function mng_putchunk_pplt_entry; external mngdll; function mng_putchunk_drop; external mngdll; function mng_putchunk_dbyk; external mngdll; function mng_putchunk_ordr; external mngdll; function mng_putchunk_ordr_entry; external mngdll; function mng_putchunk_unknown; external mngdll; {****************************************************************************} function mng_updatemngheader; external mngdll; function mng_updatemngsimplicity; external mngdll; {****************************************************************************} end. libmng-2.0.2/contrib/kylix/mngview/0000755000000000000000000000000012005307152015730 5ustar rootrootlibmng-2.0.2/contrib/kylix/mngview/Main.dfm0000644000000000000000000000377512005307152017320 0ustar rootrootÿ TMAINFORM0êTPF0 TMainFormMainFormLeft,ToppWidthµHeight'Captionmngview v1.0.1ColorclGray Font.ColorclText Font.Height Font.Name MS Sans Serif Font.Pitch fpVariable Font.Style Icon.Data þ è( @€€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ37337w33w03s333s3w0s3337s7s733s33333333s077333373333333337773733s30w3ss737s3w3s37sss307s330s333077330377s730ww3s077w3÷s÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿþüøðàÀ€À?øÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ KeyPreview Menu OFMainMenu ParentFontPositionpoScreenCenter OnCloseQueryFormCloseQueryOnCreate FormCreate OnKeyDown FormKeyDown OnMouseMove FormMouseMoveOnResize FormResizeOnShowFormShow PixelsPerInchx TextHeight TextWidthTPanelOFPanelLeftTopWidthµHeightAlignalClient BevelOuterbvNoneTabOrder OnMouseDownOFImageMouseDown OnMouseMove FormMouseMove OnMouseUpOFImageMouseUpTImageOFImageLeftTop`WidthiHeightiStretch OnMouseDownOFImageMouseDown OnMouseMoveOFImageMouseMove OnMouseUpOFImageMouseUp TMainMenu OFMainMenuLeftTop TMenuItem OFMenuFileCaption&File TMenuItemOFMenuFileOpenCaption&OpenOnClickOFMenuFileOpenClick TMenuItem OFMenuFileN1Caption- TMenuItemOFMenuFileExitCaptionE&xitOnClickOFMenuFileExitClick TOpenDialog OFOpenDialogFilter*.mng;*.jng;*.png FilterIndexOptions ofPathMustExistofFileMustExistofEnableSizing ofViewDetailTitle Open fileLeft8TopTTimerOFTimerEnabledIntervaldOnTimer OFTimerTimerLeft`Toplibmng-2.0.2/contrib/kylix/mngview/mngview.conf0000644000000000000000000000027612005307152020260 0ustar rootroot-$A8 -$B- -$C+ -$D+ -$E- -$F- -$G+ -$H+ -$I+ -$J- -$K- -$L+ -$M- -$N+ -$O+ -$P+ -$Q- -$R- -$S- -$T- -$U- -$V+ -$W- -$X+ -$YD -$Z1 -cg -H+ -W+ -M -$M16384,1048576 -K$00400000 -DCLX_USE_LIBQT libmng-2.0.2/contrib/kylix/mngview/mngview.res0000644000000000000000000000323012005307152020115 0ustar rootroot ÿÿÿÿè ÿÿÿÿ ( @€€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ37337w33w03s333s3w0s3337s7s733s33333333s077333373333333337773733s30w3ss737s3w3s37sss307s330s333077330377s730ww3s077w3÷s÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿþüøðàÀ€À?øÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0ÿÿMAINICON  è  ÿÿÿÿ  4VS_VERSION_INFO½ïþ?jStringFileInfoF040904E4!CompanyNamejBFileDescriptionmngview - testapp for libmng.dll2FileVersion1.0.1.310InternalNamemngviewR.LegalCopyrightcopyright 2000 G. Juyn)LegalTrademarks@OriginalFilenamemngview.exe0ProductNamemngview0 ProductVersion1.0.1CommentsDVarFileInfo$Translation älibmng-2.0.2/contrib/kylix/mngview/Main.pas0000644000000000000000000004303312005307152017324 0ustar rootrootunit Main; interface uses Qt, QExtCtrls, QDialogs, QMenus, QTypes, QGraphics, QControls, QForms, SysUtils, Classes, QStdCtrls, IdGlobal, libmng; {****************************************************************************} {* For conditions of distribution and use, *} {* see copyright notice in libmng.pas *} {****************************************************************************} {* *} {* project : libmng *} {* file : main.pas copyright (c) 2000-2002 G.Juyn *} {* version : 1.0.5 *} {* *} {* purpose : Main form for mngview application *} {* *} {* author : G.Juyn *} {* web : http://www.3-t.com *} {* email : mailto:info@3-t.com *} {* *} {* comment : this is the heart of the mngview applciation *} {* *} {* changes : 1.0.5 - 09/21/2002 - G.Juyn *} {* - modified for Kylix use *} {* *} {****************************************************************************} type TMainForm = class(TForm) OFMainMenu: TMainMenu; OFMenuFile: TMenuItem; OFMenuFileOpen: TMenuItem; OFMenuFileN1: TMenuItem; OFMenuFileExit: TMenuItem; OFTimer: TTimer; OFOpenDialog: TOpenDialog; OFPanel: TPanel; OFImage: TImage; procedure FormCreate(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormShow(Sender: TObject); procedure FormResize(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure OFImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure OFImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure OFImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure OFTimerTimer(Sender: TObject); procedure OFMenuFileOpenClick(Sender: TObject); procedure OFMenuFileExitClick(Sender: TObject); private { Private declarations } SFFileName : string; { filename of the input stream } OFFile : TFileStream; { input stream } IFHandle : mng_handle; { the libray handle } OFBitmap : TBitmap; { drawing canvas } BFCancelled : boolean; { or app-exit } BFHasMouse : boolean; { mouse is/was over image } procedure MNGerror (SHMsg : string); public { Public declarations } end; var MainForm: TMainForm; {****************************************************************************} implementation {$R *.dfm} {****************************************************************************} {$F+} function Memalloc (iLen : mng_uint32) : mng_ptr; cdecl; {$F-} begin getmem (Result, iLen); { get memory from the heap } fillchar (Result^, iLen, 0); { and initialize it } end; {****************************************************************************} {$F+} procedure Memfree (iPtr : mng_ptr; iLen : mng_size_t); cdecl; {$F-} begin freemem (iPtr, iLen); { free the memory } end; {****************************************************************************} {$F+} function Openstream (hHandle : mng_handle) : mng_bool; cdecl; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); with OHFORM do begin if OFFile <> nil then { free previous stream (if any) } OFFile.Free; { open a new stream } OFFile := TFileStream.Create (SFFileName, fmOpenRead or fmShareDenyWrite); end; Result := MNG_TRUE; end; {****************************************************************************} {$F+} function Closestream (hHandle : mng_handle) : mng_bool; cdecl; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); with OHFORM do begin OFFile.Free; { cleanup the stream } OFFile := nil; { don't use it again ! } end; Result := MNG_TRUE; end; {****************************************************************************} {$F+} function Readdata ( hHandle : mng_handle; pBuf : mng_ptr; iBuflen : mng_uint32; var pRead : mng_uint32) : mng_bool; cdecl; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); with OHForm do begin { are we at EOF ? } if OFFile.Position >= OFFile.Size then begin pRead := 0; { indicate so } end else begin { read the requested data } pRead := OFFile.Read (pBuf^, iBuflen); end; end; Result := MNG_TRUE; end; {****************************************************************************} {$F+} function ProcessHeader (hHandle : mng_handle; iWidth : mng_uint32; iHeight : mng_uint32) : mng_bool; cdecl; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); with OHForm do begin OFBitmap.Width := iWidth; { store the new dimensions } OFBitmap.Height := iHeight; OFBitmap.PixelFormat := pf32bit; OFImage.Left := 0; { adjust the visible component } OFImage.Top := 0; OFImage.Width := iWidth; OFImage.Height := iHeight; FormResize (OHForm); { force re-centering the image} { clear the canvas & draw an outline } OFBitmap.Canvas.Brush.Color := clGray; OFBitmap.Canvas.Brush.Style := bsSolid; OFBitmap.Canvas.FillRect (OFBitmap.Canvas.ClipRect); OFImage.Picture.Assign (OFBitmap); { make sure it gets out there } { tell the library we want funny windows-bgr} if mng_set_canvasstyle (hHandle, MNG_CANVAS_BGRX8) <> 0 then MNGerror ('libmng reported an error setting the canvas style'); end; Result := MNG_TRUE; end; {****************************************************************************} {$F+} function GetCanvasLine (hHandle : mng_handle; iLinenr : mng_uint32) : mng_ptr; cdecl; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); { easy with these bitmap objects ! } Result := TBitmap(OHForm.OFImage.Picture.Graphic).ScanLine [iLinenr]; end; {****************************************************************************} {$F+} function ImageRefresh (hHandle : mng_handle; iX : mng_uint32; iY : mng_uint32; iWidth : mng_uint32; iHeight : mng_uint32) : mng_bool; cdecl; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); { force redraw } OHForm.OFImage.Refresh; Result := MNG_TRUE; end; {****************************************************************************} {$F+} function MyGetTickCount (hHandle : mng_handle) : mng_uint32; cdecl; {$F-} begin Result := GetTickCount; { the system knows that } end; {****************************************************************************} {$F+} function SetTimer (hHandle : mng_handle; iMsecs : mng_uint32) : mng_bool; cdecl; {$F-} var OHForm : TMainForm; begin { get a fix on our form } OHForm := TMainForm (mng_get_userdata (hHandle)); OHForm.OFTimer.Interval := iMsecs; { and set the timer } OHForm.OFTimer.Enabled := true; Result := MNG_TRUE; end; {****************************************************************************} procedure TMainForm.FormCreate(Sender: TObject); var IHRed, IHGreen, IHBlue : word; begin { initialize } OFBitmap := TBitmap.Create; BFHasMouse := false; OFFile := nil; OFOpenDialog.Initialdir := ''; { now initialize the library } IFHandle := mng_initialize (mng_ptr(self), Memalloc, Memfree, nil); if IFHandle = NIL then begin MNGerror ('libmng initialization error' + #13#10 + 'Program aborted'); Application.Terminate; end; { no need to store chunk-info ! } mng_set_storechunks (IFHandle, MNG_FALSE); { do not use suspension-buffer } mng_set_suspensionmode (IFHandle, MNG_FALSE); { set all the callbacks } if (mng_setcb_openstream (IFHandle, Openstream ) <> MNG_NOERROR) or (mng_setcb_closestream (IFHandle, Closestream ) <> MNG_NOERROR) or (mng_setcb_readdata (IFHandle, Readdata ) <> MNG_NOERROR) or (mng_setcb_processheader (IFHandle, ProcessHeader ) <> MNG_NOERROR) or (mng_setcb_getcanvasline (IFHandle, GetCanvasLine ) <> MNG_NOERROR) or (mng_setcb_refresh (IFHandle, ImageRefresh ) <> MNG_NOERROR) or (mng_setcb_gettickcount (IFHandle, MyGetTickCount ) <> MNG_NOERROR) or (mng_setcb_settimer (IFHandle, SetTimer ) <> MNG_NOERROR) then begin MNGerror ('libmng reported an error setting a callback function!' + #13#10 + 'Program aborted'); Application.Terminate; end; IHRed := (Color ) and $FF; { supply our own bg-color } IHGreen := (Color shr 8) and $FF; IHBlue := (Color shr 16) and $FF; IHRed := (IHRed shl 8) + IHRed; IHGreen := (IHGreen shl 8) + IHGreen; IHBlue := (IHBlue shl 8) + IHBlue; if mng_set_bgcolor (IFHandle, IHRed, IHGreen, IHBlue) <> MNG_NOERROR then MNGerror ('libmng reported an error setting the background color!'); end; {****************************************************************************} procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin BFCancelled := true; if OFTimer.Enabled then { if we're still animating then stop it } begin OFTimer.Enabled := false; Application.ProcessMessages; if mng_reset (IFHandle) <> MNG_NOERROR then MNGerror ('libmng reported an error during reset!'); end; mng_cleanup (IFHandle); end; {****************************************************************************} procedure TMainForm.FormShow(Sender: TObject); begin FormResize (self); end; {****************************************************************************} procedure TMainForm.FormResize(Sender: TObject); begin { center the image in the window } if ClientWidth < OFImage.Width then OFImage.Left := 0 else OFImage.Left := (ClientWidth - OFImage.Width ) div 2; if ClientHeight < OFImage.Height then OFImage.Top := 0 else OFImage.Top := (ClientHeight - OFImage.Height) div 2; end; {****************************************************************************} procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = Key_Escape then { pressing will freeze an animation } begin if OFTimer.Enabled then if mng_display_freeze (IFHandle) <> MNG_NOERROR then MNGerror ('libmng reported an error during display_freeze!'); OFTimer.Enabled := false; { don't let that timer go off then ! } BFCancelled := true; end; end; {****************************************************************************} procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if mng_status_dynamic (IFHandle) then begin if BFHasMouse then { if we had the mouse, it's left ! } begin if mng_trapevent (IFHandle, 3, 0, 0) <> MNG_NOERROR then MNGerror ('libmng reported an error during trapevent!'); BFHasMouse := false; end; end; end; {****************************************************************************} procedure TMainForm.OFImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if mng_status_dynamic (IFHandle) then begin if BFHasMouse then { did we have the mouse already ? } begin if mng_trapevent (IFHandle, 2, X, Y) <> MNG_NOERROR then MNGerror ('libmng reported an error during trapevent!'); end else begin { if not, it has entered ! } if mng_trapevent (IFHandle, 1, X, Y) <> MNG_NOERROR then MNGerror ('libmng reported an error during trapevent!'); BFHasMouse := true; end; end; end; {****************************************************************************} procedure TMainForm.OFImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if mng_status_dynamic (IFHandle) then if mng_trapevent (IFHandle, 4, X, Y) <> MNG_NOERROR then MNGerror ('libmng reported an error during trapevent!'); end; {****************************************************************************} procedure TMainForm.OFImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if mng_status_dynamic (IFHandle) then if mng_trapevent (IFHandle, 5, X, Y) <> MNG_NOERROR then MNGerror ('libmng reported an error during trapevent!'); end; {****************************************************************************} procedure TMainForm.OFTimerTimer(Sender: TObject); var IHRslt : mng_retcode; begin OFTimer.Enabled := false; { only once ! } if not BFCancelled then begin { and inform the library } IHRslt := mng_display_resume (IFHandle); if (IHRslt <> MNG_NOERROR) and (IHRslt <> MNG_NEEDTIMERWAIT) then MNGerror ('libmng reported an error during display_resume!'); end; end; {****************************************************************************} procedure TMainForm.OFMenuFileOpenClick(Sender: TObject); var IHRslt : mng_retcode; begin OFOpenDialog.InitialDir := ''; OFOpenDialog.FileName := SFFileName; if OFOpenDialog.Execute then { get the filename } begin if OFTimer.Enabled then { if the lib was active; stop it } begin OFTimer.Enabled := false; Application.ProcessMessages; { process any timer requests (for safety) } { now freeze the animation } if mng_reset (IFHandle) <> MNG_NOERROR then MNGerror ('libmng reported an error during reset!'); end; { save interesting fields } SFFileName := OFOpenDialog.FileName; BFCancelled := false; OFImage.Picture.Graphic := nil; { clear the output-canvas } OFImage.Refresh; { always reset (just in case) } if mng_reset (IFHandle) <> MNG_NOERROR then MNGerror ('libmng reported an error during reset!') else begin { and let the lib do it's job ! } IHRslt := mng_readdisplay (IFHandle); if (IHRslt <> MNG_NOERROR) and (IHRSLT <> MNG_NEEDTIMERWAIT) then MNGerror ('libmng reported an error reading the input file!'); end; end; end; {****************************************************************************} procedure TMainForm.OFMenuFileExitClick(Sender: TObject); begin if mng_cleanup (IFHandle) <> MNG_NOERROR then MNGerror ('libmng cleanup error'); Close; end; {****************************************************************************} procedure TMainForm.MNGerror; var iErrorcode : mng_uint32; iSeverity : mng_uint8; iChunkname : mng_chunkid; iChunkseq : mng_uint32; iExtra1 : mng_int32; iExtra2 : mng_int32; zErrortext : mng_pchar; begin { get extended info } iErrorcode := mng_getlasterror (IFHandle, iSeverity, iChunkname, iChunkseq, iExtra1, iExtra2, zErrortext); MessageDlg (SHMsg + #13#10#13#10 + strpas (zErrortext) + #13#10#13#10 + Format ('Error = %d; Severity = %d; Chunknr = %d; Extra1 = %d', [iErrorcode, iSeverity, iChunkseq, iExtra1]), mtError, [mbOK], 0); Application.Terminate; end; {****************************************************************************} end. libmng-2.0.2/contrib/kylix/mngview/lib/0000755000000000000000000000000012005307152016476 5ustar rootrootlibmng-2.0.2/contrib/kylix/mngview/mngview.dpr0000644000000000000000000000043612005307152020116 0ustar rootrootprogram mngview; uses QForms, Main in 'Main.pas' {MainForm}, libmng in '../libmng.pas'; {$E .bin} {$R *.res} begin Application.Initialize; Application.Title := 'mngview - libmng test-viewer in Kylix'; Application.CreateForm(TMainForm, MainForm); Application.Run; end. libmng-2.0.2/contrib/kylix/mngview/mngview.kof0000644000000000000000000000133612005307152020110 0ustar rootroot[Compiler] A=8 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=1 J=0 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=0 V=1 W=0 X=1 Y=1 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases= [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 RemoteSymbols=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription= DynamicLoader=/lib/ld-linux.so.2 [Directories] OutputDir= UnitOutputDir= PackageDLLOutputDir= PackageDCPOutputDir= SearchPath= Packages=baseclx:visualclx:dataclx:visualdbclx:netclx:netdataclx:xmlrtl:indy:webdsnapclx:websnapclx Conditionals=CLX_USE_LIBQT DebugSourceDirs= UsePackages=0 [Parameters] RunParams= HostApplication= Launcher=/usr/X11R6/bin/xterm -T KylixDebuggerOutput -e bash -i -c %debuggee% UseLauncher=0 DebugCWD= libmng-2.0.2/contrib/kylix/mngview/mngview0000644000000000000000000000057612005307152017337 0ustar rootroot#!/bin/bash # app_install_dir=/data/Triple-T/Software/mnglib3t/libmng-devel/contrib/kylix/mngview app_path=$app_install_dir/mngview.bin app_ld_path=$app_install_dir/lib # if [ -n "$LD_LIBRARY_PATH" ]; then export LD_LIBRARY_PATH="$app_ld_path:$LD_LIBRARY_PATH" else export LD_LIBRARY_PATH="$app_ld_path" fi # if [ -z "$LANG" ]; then export LANG="en_US" fi # exec $app_path $* libmng-2.0.2/contrib/gcc/0000755000000000000000000000000012005307152013650 5ustar rootrootlibmng-2.0.2/contrib/gcc/fbmngplay/0000755000000000000000000000000012005307152015627 5ustar rootrootlibmng-2.0.2/contrib/gcc/fbmngplay/mng.c0000644000000000000000000002105512005307152016557 0ustar rootroot/* fbmngplay - fb console MNG player. (c) 2001 by Stefan Reinauer, This program is based on mngplay, part of libmng, written and (C) by Ralph Giles This program my be redistributed under the terms of the GNU General Public Licence, version 2, or at your preference, any later version. */ #include #include #include #include "fbmngplay.h" #include "console.h" #include "mng.h" mngstuff *mng; unsigned char *bufferstream; unsigned long bufferpos = 0, buffersize = 0; inline void mdelay(unsigned long msec) { usleep(msec * 1000); } /* callbacks for the mng decoder */ /* memory allocation; data must be zeroed */ mng_ptr mngalloc(mng_uint32 size) { return (mng_ptr) calloc(1, size); } /* memory deallocation */ void mngfree(mng_ptr p, mng_uint32 size) { free(p); return; } mng_bool mngopenstream(mng_handle mng) { mngstuff *mymng; /* look up our stream struct */ mymng = (mngstuff *) mng_get_userdata(mng); /* open the file */ mymng->file = fopen(mymng->filename, "rb"); if (mymng->file == NULL) { fprintf(stderr, "unable to open '%s'\n", mymng->filename); run = 0; return MNG_FALSE; } if (buffered) { unsigned long len; fseek(mymng->file, 0, SEEK_END); len = ftell(mymng->file); rewind(mymng->file); bufferstream = malloc(len); if (!bufferstream) { /* Not enough memory for buffers * -> we go back to unbuffered mode */ printf("Reverted to non buffered mode.\n"); buffered = 0; return MNG_TRUE; } buffersize = len; fread(bufferstream, 1, len, mymng->file); bufferpos = 0; fclose(mymng->file); mymng->file = NULL; } return MNG_TRUE; } mng_bool mngclosestream(mng_handle mng) { mngstuff *mymng; /* look up our stream struct */ mymng = (mngstuff *) mng_get_userdata(mng); /* close the file */ if (mymng->file) fclose(mymng->file); mymng->file = NULL; /* for safety */ if (bufferstream) { free(bufferstream); bufferstream = 0; buffersize = 0; bufferpos = 0; } return MNG_TRUE; } /* feed data to the decoder */ mng_bool mngreadstream(mng_handle mng, mng_ptr buffer, mng_uint32 size, mng_uint32 * bytesread) { mngstuff *mymng; /* look up our stream struct */ mymng = (mngstuff *) mng_get_userdata(mng); if (!buffered) { /* read the requested amount of data from the file */ *bytesread = fread(buffer, 1, size, mymng->file); } else { *bytesread = (buffersize - bufferpos) < size ? (buffersize - bufferpos) : size; memcpy(buffer, bufferstream + bufferpos, *bytesread); bufferpos += (*bytesread); } return MNG_TRUE; } /* the header's been read. set up the display stuff */ mng_bool mngprocessheader(mng_handle mng, mng_uint32 width, mng_uint32 height) { mngstuff *mymng; unsigned char *copybuffer, *background; unsigned char *src; mymng = (mngstuff *) mng_get_userdata(mng); mymng->width = width; mymng->height = height; if (dynpos) { mymng->fbx = (mymng->fbwidth)-width-15; switch (mymng->fbheight) { case 768: mymng->fby = 15; break; case 1024: mymng->fby = 30; break; default: mymng->fby = 0; break; } } copybuffer = (unsigned char *) malloc(width * height * 4); if (copybuffer == NULL) { fprintf(stderr, "could not allocate copy buffer.\n"); exit(0); } mymng->copybuffer = copybuffer; if (!mymng->background) { background = (unsigned char *) malloc(width * height * (mymng->fbbpp >> 3)); if (background == NULL) { fprintf(stderr, "could not allocate background buffer.\n"); exit(0); } mymng->background = background; src = mymng->display + (mymng->fbwidth * mymng->fby + mymng->fbx) * (mymng->fbbpp >> 3); while (height--) { memcpy(background, src, width * (mymng->fbbpp >> 3)); background += width * (mymng->fbbpp >> 3); src += mymng->fbwidth * (mymng->fbbpp >> 3); } } /* tell the mng decoder about our bit-depth choice */ /* FIXME: this works on intel. is it correct in general? */ mng_set_canvasstyle(mng, MNG_CANVAS_BGRA8); return MNG_TRUE; } /* return a row pointer for the decoder to fill */ mng_ptr mnggetcanvasline(mng_handle mng, mng_uint32 line) { mngstuff *mymng; mng_ptr row; /* dereference our structure */ mymng = (mngstuff *) mng_get_userdata(mng); /* we assume any necessary locking has happened outside, in the frame level code */ row = mymng->copybuffer + mymng->width * 4 * line; return (row); } /* timer */ mng_uint32 mnggetticks(mng_handle mng) { mng_uint32 ticks; struct timeval tv; struct timezone tz; gettimeofday(&tv, &tz); ticks = (tv.tv_sec * 1000) + (tv.tv_usec / 1000); return (ticks); } static inline void copyline(unsigned char *dest, unsigned char *src, unsigned char *background, mngstuff * mymng) { // BGRA8 unsigned int i = mymng->width; unsigned int fr, fg, fb, br, bg, bb, r, g, b, a; unsigned short output, input; while (i--) { fb = *src++; fg = *src++; fr = *src++; a = *src++; a = a * mymng->alpha / 100; switch (mymng->fbbpp) { case 16: input = *((unsigned short *) background)++; br = (input >> 8) & 0xf8; bg = (input >> 3) & 0xfc; bb = input << 3 & 0xff; break; case 24: bb = *background++; bg = *background++; br = *background++; break; case 32: bb = *background++; bg = *background++; br = *background++; background++; break; default: br = 0; bg = 0; bb = 0; printf("depth not supported.\n"); run = 0; break; } r = ((fr * a) + (br * (0x100 - a))) >> 8; g = ((fg * a) + (bg * (0x100 - a))) >> 8; b = ((fb * a) + (bb * (0x100 - a))) >> 8; switch (mymng->fbbpp) { case 16: // dumb 24->16 bit conversion. r >>= 3; g >>= 2; b >>= 3; output = (r << 11) | (g << 5) | b; *((unsigned short *) dest)++ = output; break; case 24: *dest++ = b; *dest++ = g; *dest++ = r; break; case 32: *dest++ = b; *dest++ = g; *dest++ = r; dest++; break; default: break; } } } mng_bool mngrefresh(mng_handle mng, mng_uint32 x, mng_uint32 y, mng_uint32 w, mng_uint32 h) { mngstuff *mymng; unsigned char *dest, *src, *background; if (sconly && current_console()!=start_console) return MNG_TRUE; /* dereference our structure */ mymng = (mngstuff *) mng_get_userdata(mng); dest = mymng->display + ((mymng->fby * mymng->fbwidth + mymng->fbx) * (mymng->fbbpp >> 3)); src = mymng->copybuffer; background = mymng->background; /* refresh the screen with the new frame */ while (h-- > 0) { copyline(dest, src, background, mymng); dest += mymng->fbwidth * (mymng->fbbpp >> 3); background += mymng->width * (mymng->fbbpp >> 3); src += 4 * mymng->width; // 4 bytes per pixel due to RGBA } // remove traces memset(mymng->copybuffer, 0, 4 * mymng->width * mymng->height); return MNG_TRUE; } /* interframe delay callback */ mng_bool mngsettimer(mng_handle mng, mng_uint32 msecs) { mngstuff *mymng; /* look up our stream struct */ mymng = (mngstuff *) mng_get_userdata(mng); /* set the timer for when the decoder wants to be woken */ mymng->delay = msecs; return MNG_TRUE; } mng_bool mngerror(mng_handle mng, mng_int32 code, mng_int8 severity, mng_chunkid chunktype, mng_uint32 chunkseq, mng_int32 extra1, mng_int32 extra2, mng_pchar text) { mngstuff *mymng; char chunk[5]; /* dereference our data so we can get the filename */ mymng = (mngstuff *) mng_get_userdata(mng); /* pull out the chuck type as a string */ // FIXME: does this assume unsigned char? chunk[0] = (char) ((chunktype >> 24) & 0xFF); chunk[1] = (char) ((chunktype >> 16) & 0xFF); chunk[2] = (char) ((chunktype >> 8) & 0xFF); chunk[3] = (char) ((chunktype) & 0xFF); chunk[4] = '\0'; /* output the error */ fprintf(stderr, "error playing '%s' chunk %s (%d):\n", mymng->filename, chunk, chunkseq); fprintf(stderr, "%s\n", text); return 0; } int mngquit(mng_handle mng) { mngstuff *mymng; /* dereference our data so we can free it */ mymng = (mngstuff *) mng_get_userdata(mng); /* cleanup. this will call mymngclosestream */ mng_cleanup(&mng); /* free our data */ free(mymng); /* quit */ exit(0); } void cleanup(void) { mngquit(mng->mng); exit(0); } void restore_area(void) { int height, width; unsigned char *dest, *background; if (sconly && current_console()!=start_console) return; background = mng->background; height = mng->height; width = mng->width; dest = mng->display + (mng->fbwidth * mng->fby + mng->fbx) * (mng->fbbpp >> 3); while (height--) { memcpy(dest, background, width * (mng->fbbpp >> 3)); background += width * (mng->fbbpp >> 3); dest += mng->fbwidth * (mng->fbbpp >> 3); } } libmng-2.0.2/contrib/gcc/fbmngplay/messages.c0000644000000000000000000000276412005307152017613 0ustar rootroot/* fbmngplay - fb console MNG player. (c) 2001 by Stefan Reinauer, This program is based on mngplay, part of libmng, written and (C) by Ralph Giles This program my be redistributed under the terms of the GNU General Public Licence, version 2, or at your preference, any later version. */ #include #include "fbmngplay.h" #include "messages.h" void usage(char *name) { fprintf(stderr, "\nusage: %s [ -x ] [ -y ] [ -a ] [-b] [-v]" " [-s] [file.mng [file.mng [...]]]\n", name); fprintf(stderr, "\n -x: x coordinate\n"); fprintf(stderr, " -y: y coordinate\n"); fprintf(stderr, " -a, --alpha: default alpha channel 1..100\n"); fprintf(stderr, " -v, --verbose: verbose mode\n"); fprintf(stderr, " -b, --buffered: buffered mode\n"); fprintf(stderr, " -s, --signal: wait for SIGUSR1 between animations\n"); fprintf(stderr, " -p, --position: dynamically select position\n"); fprintf(stderr, " -V, --version: show version and exit\n"); fprintf(stderr, " -?, -h, --help: print this help.\n\n"); fprintf(stderr, " -S --start-console: only output animation on console it was started on.\n"); } void version(void) { fprintf(stderr, "fbmngplay v%s, Copyright (C) 2001 Stefan Reinauer\n",FBMNGPLAY_VERSION); fprintf(stderr, "fbmngplay comes with ABSOLUTELY NO WARRANTY;\n"); fprintf(stderr,"This is free software, and you are welcome to redistribute it\n"); fprintf(stderr,"under certain conditions; Check the GPL for details.\n"); } libmng-2.0.2/contrib/gcc/fbmngplay/fbmngplay.h0000644000000000000000000000226012005307152017757 0ustar rootroot/* fbmngplay - fb console MNG player. (c) 2001 by Stefan Reinauer, This program is based on mngplay, part of libmng, written and (C) by Ralph Giles This program my be redistributed under the terms of the GNU General Public Licence, version 2, or at your preference, any later version. */ #ifndef __FBMNGPLAY_H #define __FBMNGPLAY_H #include #define FBMNGPLAY_VERSION "0.3" /* structure for keeping track of our mng stream inside the callbacks */ typedef struct { FILE *file; /* pointer to the file we're decoding */ char *filename; /* pointer to the file's path/name */ mng_uint32 delay; /* ticks to wait before resuming decode */ unsigned char *display; /* pointer to display */ unsigned char *copybuffer; unsigned char *background; mng_handle mng; /* mng handle */ int width, height; int fbwidth, fbheight, fbbpp; int fbx, fby; int alpha; } mngstuff; extern volatile int run; extern int verbose; extern int buffered; extern int dynpos; extern int waitsignal; extern int delta; extern int sconly; #endif libmng-2.0.2/contrib/gcc/fbmngplay/messages.h0000644000000000000000000000070612005307152017612 0ustar rootroot/* fbmngplay - fb console MNG player. (c) 2001 by Stefan Reinauer, This program is based on mngplay, part of libmng, written and (C) by Ralph Giles This program my be redistributed under the terms of the GNU General Public Licence, version 2, or at your preference, any later version. */ #ifndef __MESSAGES_H #define __MESSAGES_H extern void usage(char *name); extern void version(void); #endif libmng-2.0.2/contrib/gcc/fbmngplay/Makefile0000644000000000000000000000250712005307152017273 0ustar rootroot# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh CC = gcc SOURCES = fbmngplay.c PROGRAMS = fbmngplay fbmngplay.static OBJECTS = fbmngplay.o messages.o mng.o console.o LDFLAGS = -L/usr/lib LIBSS = /usr/lib/libmng-mini.a /usr/lib/libz.a -lm LIBSD = -lmng -lz -lm CFLAGS = -Os -Wall -Wmissing-prototypes -Wstrict-prototypes -D_REENTRANT COMPILE = $(CC) $(CFLAGS) LINKS = $(CC) $(CFLAGS) $(LDFLAGS) -static -o $@ LINKD = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ all: $(PROGRAMS) strip -s $(PROGRAMS) .SUFFIXES: .SUFFIXES: .S .c .o .s .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean: -rm -f *.o core clean: mostlyclean -rm -f fbmngplay fbmngplay.static fbmngplay: $(OBJECTS) @rm -f fbmngplay $(LINKD) $(LDFLAGS) $(OBJECTS) $(LIBSD) fbmngplay.static: $(OBJECTS) @rm -f fbmngplay.static $(LINKS) $(LDFLAGS) $(OBJECTS) $(LIBSS) .PHONY: mostlyclean clean fbmngplay fbmngplay.static all libmng-2.0.2/contrib/gcc/fbmngplay/console.c0000644000000000000000000000410112005307152017431 0ustar rootroot/* fbmngplay - fb console MNG player. (c) 2001 by Stefan Reinauer, This program is based on mngplay, part of libmng, written and (C) by Ralph Giles This program my be redistributed under the terms of the GNU General Public Licence, version 2, or at your preference, any later version. This file is based on getfd.c from the kbd package. */ #include #include #include #include #include #include #include #include "console.h" int start_console = 0; /* * getfd.c * * Get an fd for use with kbd/console ioctls. * We try several things because opening /dev/console will fail * if someone else used X (which does a chown on /dev/console). */ static int is_a_console(const int fd) { char arg; arg = 0; return (ioctl(fd, KDGKBTYPE, &arg) == 0 && ((arg == KB_101) || (arg == KB_84))); } static int open_a_console(const char * const fnam) { int fd; fd = open(fnam, O_RDONLY); if (fd < 0 && errno == EACCES) fd = open(fnam, O_WRONLY); if (fd < 0) return -1; if (!is_a_console(fd)) { close(fd); return -1; } return fd; } int getfd (const char * const nm) { int fd; if (nm) { fd = open_a_console(nm); if (fd >= 0) return fd; } else { fd = open_a_console("/dev/tty"); if (fd >= 0) return fd; fd = open_a_console("/dev/tty0"); if (fd >= 0) return fd; fd = open_a_console("/dev/console"); if (fd >= 0) return fd; for (fd = 0; fd < 3; fd++) if (is_a_console(fd)) return fd; } fprintf(stderr, "Couldnt get a file descriptor referring to the console\n"); exit(1); /* total failure */ } int fd; int current_console(void) { struct vt_stat vtstat; if (ioctl(fd, VT_GETSTATE, &vtstat)) { fprintf(stderr,"fbmngplay: VT_GETSTATE\n"); exit(1); } return vtstat.v_active; } void init_consoles(void) { // get current tty fd = getfd(0); start_console=current_console(); } libmng-2.0.2/contrib/gcc/fbmngplay/console.h0000644000000000000000000000101612005307152017440 0ustar rootroot/* fbmngplay - fb console MNG player. (c) 2001 by Stefan Reinauer, This program is based on mngplay, part of libmng, written and (C) by Ralph Giles This program my be redistributed under the terms of the GNU General Public Licence, version 2, or at your preference, any later version. */ #ifndef __CONSOLES_H #define __CONSOLES_H extern int getfd(const char* const); extern void init_consoles(void); extern int current_console(void); extern int start_console; #endif libmng-2.0.2/contrib/gcc/fbmngplay/ChangeLog0000644000000000000000000000056112005307152017403 0ustar rootroot******************* Thu Sep 13 15:28:01 CEST 2001 ******************** * new option -S to play on start console only. * new option -c to play animationon any fb console * split fbmngplay to several files. ******************* Wed Sep 12 14:51:44 CEST 2001 ******************** * new option -p for dynamic positioning of the mng animation in the upper right corner. libmng-2.0.2/contrib/gcc/fbmngplay/README0000644000000000000000000000143712005307152016514 0ustar rootroot* fbmngplay * a simple fbcon based mng player This is a simple example program, using the kernel framebuffer device to display mng animation decoded by the new libmng implementation. This player is based on the SDL version included in the libmng package from Ralph Giles . The code's fairly rough at this point, but there was no example player for *nix in the distribution. Patches welcome, of course. On a unix-like system, the build instructions are simple: (install and/or build the mng library from libmng.com) make make install To use the player: fbmngplay .mng .mng ... To stop looping animations, press CTRL C or send a TERM or INT signal. See the options with fbmngplay -h --- Stefan Reinauer, $Date: 2002/09/26 18:09:36 $ libmng-2.0.2/contrib/gcc/fbmngplay/fbmngplay.c0000644000000000000000000001104312005307152017751 0ustar rootroot/* fbmngplay - fb console MNG player. (c) 2001 by Stefan Reinauer, This program is based on mngplay, part of libmng, written and (C) by Ralph Giles This program my be redistributed under the terms of the GNU General Public Licence, version 2, or at your preference, any later version. */ #include #include #include #include #include #include #include #include "fbmngplay.h" #include "messages.h" #include "console.h" #include "mng.h" volatile int run = 1; int verbose = 0; int buffered = 0; int dynpos = 0; int waitsignal = 0; int delta = 16; int sconly=0; void sigint_handler(int signal); void sigterm_handler(int signal); void sigusr1_handler(int signal); void sigint_handler(int signal) { run = 2; } void sigterm_handler(int signal) { restore_area(); run = 0; } void sigusr1_handler(int signal) { run = 0; } int main(int argc, char *argv[]) { int fbdev,c,option_index; unsigned int alpha; struct fb_var_screeninfo var; /* Check which console we're running on */ init_consoles(); /* allocate our stream data structure */ mng = (mngstuff *) calloc(1, sizeof(*mng)); if (mng == NULL) { fprintf(stderr, "could not allocate stream structure.\n"); exit(0); } alpha = 100; mng->alpha = 100; mng->fbx = 15; mng->fby = 15; mng->background = NULL; while (1) { static struct option long_options[] = { {"help", 0, 0, 'h'}, {"verbose", 0, 0, 'v'}, {"alpha", 1, 0, 'a'}, {"buffered", 0, 0, 'b'}, {"signal", 0, 0, 's'}, {"delta", 0, 0, 'd'}, {"position", 0, 0, 'p'}, {"version", 0, 0, 'V'}, {"start-console",0,0,'S'}, {"console",1,0,'c'}, {0, 0, 0, 0} }; c = getopt_long(argc, argv, "a:x:y:bh?vsd:pVSc:", long_options, &option_index); if (c == -1) break; switch (c) { case 'a': alpha = atoi(optarg); if (alpha > 100) alpha = 100; mng->alpha = alpha; break; case 'x': mng->fbx = atoi(optarg); break; case 'y': mng->fby = atoi(optarg); break; case 'd': delta = atoi(optarg); break; case '?': case 'h': usage(argv[0]); exit(0); case 'v': verbose = 1; break; case 's': waitsignal = 1; break; case 'b': buffered = 1; break; case 'p': dynpos = 1; break; case 'V': version(); exit(0); case 'c': start_console=atoi(optarg); case 'S': sconly=1; break; default: break; } } if (optind >= argc) { printf("Which files do you want to play?\n"); exit(0); } //init_consoles(); /* Initialize framebuffer */ fbdev = open("/dev/fb0", O_RDWR); if (fbdev < 0) { fprintf(stderr, "error while opening framebuffer.\n"); exit(fbdev); } ioctl(fbdev, FBIOGET_VSCREENINFO, &var); mng->fbwidth = var.xres; mng->fbheight = var.yres; mng->fbbpp = var.bits_per_pixel; mng->display = mmap(NULL, var.xres * var.yres * (var.bits_per_pixel >> 3), PROT_WRITE | PROT_READ, MAP_SHARED, fbdev, 0); /* arrange to call the shutdown routine before we exit */ atexit(&cleanup); while (optind < argc) { // leftover arguements are filenames. mng->filename = argv[optind++]; /* set up the mng decoder for our stream */ mng->mng = mng_initialize(mng, mngalloc, mngfree, MNG_NULL); if (mng->mng == MNG_NULL) { fprintf(stderr, "could not initialize libmng.\n"); exit(1); } /* set the callbacks */ mng_setcb_errorproc(mng->mng, mngerror); mng_setcb_openstream(mng->mng, mngopenstream); mng_setcb_closestream(mng->mng, mngclosestream); mng_setcb_readdata(mng->mng, mngreadstream); mng_setcb_gettickcount(mng->mng, mnggetticks); mng_setcb_settimer(mng->mng, mngsettimer); mng_setcb_processheader(mng->mng, mngprocessheader); mng_setcb_getcanvasline(mng->mng, mnggetcanvasline); mng_setcb_refresh(mng->mng, mngrefresh); /* FIXME: should check for errors here */ signal(SIGINT, sigint_handler); signal(SIGTERM, sigterm_handler); mng_readdisplay(mng->mng); /* loop though the frames */ while (mng->delay && run) { mdelay(mng->delay); mng->delay = 0; mng_display_resume(mng->mng); if (run == 2) { if (mng->alpha == 0) run = 0; mng->alpha -= delta; if (mng->alpha < 0) mng->alpha = 0; } } if (waitsignal && optind < argc) { signal(SIGUSR1, sigusr1_handler); run = 1; while (run) { sleep(2); } } memset(mng->copybuffer, 0, 4 * mng->width * mng->height); run = 1; mng->alpha = alpha; if (optind == argc) { /* last file */ restore_area(); } } /* cleanup and quit */ return mngquit(mng->mng); } libmng-2.0.2/contrib/gcc/fbmngplay/COPYING0000644000000000000000000004311012005307152016661 0ustar rootroot 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. Copyright (C) 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. , 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. libmng-2.0.2/contrib/gcc/fbmngplay/mng.h0000644000000000000000000000263412005307152016566 0ustar rootroot/* fbmngplay - fb console MNG player. (c) 2001 by Stefan Reinauer, This program is based on mngplay, part of libmng, written and (C) by Ralph Giles This program my be redistributed under the terms of the GNU General Public Licence, version 2, or at your preference, any later version. */ #ifndef __HOOKS_H #define __HOOKS_H #include "fbmngplay.h" extern mngstuff *mng; extern inline void mdelay(unsigned long msec); extern mng_ptr mngalloc(mng_uint32 size); extern void mngfree(mng_ptr p, mng_uint32 size); extern mng_bool mngopenstream(mng_handle mng); extern mng_bool mngclosestream(mng_handle mng); extern mng_bool mngreadstream( mng_handle mng, mng_ptr buffer, mng_uint32 size, mng_uint32 * bytesread); extern mng_bool mngprocessheader( mng_handle mng, mng_uint32 width, mng_uint32 height); extern mng_ptr mnggetcanvasline(mng_handle mng, mng_uint32 line); extern mng_uint32 mnggetticks(mng_handle mng); extern mng_bool mngrefresh(mng_handle mng, mng_uint32 x, mng_uint32 y, mng_uint32 w, mng_uint32 h); extern mng_bool mngsettimer(mng_handle mng, mng_uint32 msecs); extern mng_bool mngerror(mng_handle mng, mng_int32 code, mng_int8 severity, mng_chunkid chunktype, mng_uint32 chunkseq, mng_int32 extra1, mng_int32 extra2, mng_pchar text); extern int mngquit(mng_handle mng); extern void cleanup(void); extern void restore_area(void); #endif libmng-2.0.2/contrib/gcc/sdl-mngplay/0000755000000000000000000000000012005307152016077 5ustar rootrootlibmng-2.0.2/contrib/gcc/sdl-mngplay/acinclude.m40000644000000000000000000000155712005307152020300 0ustar rootrootdnl autoconf macros for detecting libmng dnl add this to your aclocal or acinclude to make use of it dnl dnl (c) 2000 Ralph Giles dnl dnl A basic check: looks for libmng and its dependencies dnl and adds the required bits to CFLAGS and LIBS # check for libmng AC_DEFUN(LIBMNG_CHECK, [ dnl prerequisites first AC_CHECK_LIB(jpeg, jpeg_set_defaults) AC_CHECK_LIB(z, inflate) dnl now the library AC_CHECK_LIB(mng, mng_readdisplay, [_libmng_present=1]) AC_CHECK_HEADER(libmng.h) dnl see if we need the optional link dependency AC_CHECK_LIB(lcms, cmsCreateRGBProfile, [ AC_CHECK_HEADER(lcms.h) AC_CHECK_LIB(mng, mnglcms_initlibrary, [ LIBS="$LIBS -llcms" AC_DEFINE(HAVE_LIBLCMS) _libmng_present=1 ]) ]) if test $_libmng_present -eq 1; then LIBS="-lmng $LIBS" AC_DEFINE(HAVE_LIBMNG) fi _libmng_present= ]) dnl end LIBMNG macros libmng-2.0.2/contrib/gcc/sdl-mngplay/INSTALL0000644000000000000000000001722712005307152017141 0ustar rootrootBasic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. libmng-2.0.2/contrib/gcc/sdl-mngplay/configure.in0000644000000000000000000000146312005307152020414 0ustar rootrootdnl Process this file with autoconf to produce a configure script. dnl Version of this release VERSION=0.1 AC_INIT(mngplay.c) AM_INIT_AUTOMAKE(mngplay, $VERSION) dnl AC_CANONICAL_SYSTEM AC_LANG_C dnl Checks for programs. AC_PROG_CC dnl Checks for header files. AC_HEADER_STDC dnl check for Simple Direct Media Layer AC_CHECK_PROG(HAS_SDL, sdl-config, yes) if test "x$HAS_SDL" != "xyes"; then AC_MSG_ERROR([ SDL library not found! You need this for any display to happen. (rather the point) You can get a copy at ]) fi CFLAGS="$CFLAGS `sdl-config --cflags`" mngplay_LDADD="`sdl-config --libs`" mngplay_static_LDADD="`sdl-config --static-libs`" AC_SUBST(mngplay_LDADD) AC_SUBST(mngplay_static_LDADD) dnl check for libmng - macro in acinclude.m4 LIBMNG_CHECK() AC_OUTPUT(Makefile) libmng-2.0.2/contrib/gcc/sdl-mngplay/configure0000755000000000000000000050134312005307152020014 0ustar rootroot#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="mngplay.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP GREP EGREP HAS_SDL mngplay_LDADD mngplay_static_LDADD LIBOBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version="1.9" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=mngplay VERSION=$VERSION cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_HAS_SDL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$HAS_SDL"; then ac_cv_prog_HAS_SDL="$HAS_SDL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_HAS_SDL="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi HAS_SDL=$ac_cv_prog_HAS_SDL if test -n "$HAS_SDL"; then { echo "$as_me:$LINENO: result: $HAS_SDL" >&5 echo "${ECHO_T}$HAS_SDL" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$HAS_SDL" != "xyes"; then { { echo "$as_me:$LINENO: error: SDL library not found! You need this for any display to happen. (rather the point) You can get a copy at " >&5 echo "$as_me: error: SDL library not found! You need this for any display to happen. (rather the point) You can get a copy at " >&2;} { (exit 1); exit 1; }; } fi CFLAGS="$CFLAGS `sdl-config --cflags`" mngplay_LDADD="`sdl-config --libs`" mngplay_static_LDADD="`sdl-config --static-libs`" # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for jpeg_set_defaults in -ljpeg" >&5 echo $ECHO_N "checking for jpeg_set_defaults in -ljpeg... $ECHO_C" >&6; } if test "${ac_cv_lib_jpeg_jpeg_set_defaults+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char jpeg_set_defaults (); int main () { return jpeg_set_defaults (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_jpeg_jpeg_set_defaults=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_jpeg_jpeg_set_defaults=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_jpeg_jpeg_set_defaults" >&5 echo "${ECHO_T}$ac_cv_lib_jpeg_jpeg_set_defaults" >&6; } if test $ac_cv_lib_jpeg_jpeg_set_defaults = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBJPEG 1 _ACEOF LIBS="-ljpeg $LIBS" fi { echo "$as_me:$LINENO: checking for inflate in -lz" >&5 echo $ECHO_N "checking for inflate in -lz... $ECHO_C" >&6; } if test "${ac_cv_lib_z_inflate+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inflate (); int main () { return inflate (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_z_inflate=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_inflate=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_z_inflate" >&5 echo "${ECHO_T}$ac_cv_lib_z_inflate" >&6; } if test $ac_cv_lib_z_inflate = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" fi { echo "$as_me:$LINENO: checking for mng_readdisplay in -lmng" >&5 echo $ECHO_N "checking for mng_readdisplay in -lmng... $ECHO_C" >&6; } if test "${ac_cv_lib_mng_mng_readdisplay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmng $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char mng_readdisplay (); int main () { return mng_readdisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_mng_mng_readdisplay=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_mng_mng_readdisplay=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_mng_mng_readdisplay" >&5 echo "${ECHO_T}$ac_cv_lib_mng_mng_readdisplay" >&6; } if test $ac_cv_lib_mng_mng_readdisplay = yes; then _libmng_present=1 fi if test "${ac_cv_header_libmng_h+set}" = set; then { echo "$as_me:$LINENO: checking for libmng.h" >&5 echo $ECHO_N "checking for libmng.h... $ECHO_C" >&6; } if test "${ac_cv_header_libmng_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_libmng_h" >&5 echo "${ECHO_T}$ac_cv_header_libmng_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking libmng.h usability" >&5 echo $ECHO_N "checking libmng.h usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking libmng.h presence" >&5 echo $ECHO_N "checking libmng.h presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: libmng.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: libmng.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: libmng.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: libmng.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: libmng.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: libmng.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: libmng.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: libmng.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: libmng.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: libmng.h: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for libmng.h" >&5 echo $ECHO_N "checking for libmng.h... $ECHO_C" >&6; } if test "${ac_cv_header_libmng_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_libmng_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_libmng_h" >&5 echo "${ECHO_T}$ac_cv_header_libmng_h" >&6; } fi { echo "$as_me:$LINENO: checking for cmsCreateRGBProfile in -llcms" >&5 echo $ECHO_N "checking for cmsCreateRGBProfile in -llcms... $ECHO_C" >&6; } if test "${ac_cv_lib_lcms_cmsCreateRGBProfile+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-llcms $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cmsCreateRGBProfile (); int main () { return cmsCreateRGBProfile (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_lcms_cmsCreateRGBProfile=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_lcms_cmsCreateRGBProfile=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_lcms_cmsCreateRGBProfile" >&5 echo "${ECHO_T}$ac_cv_lib_lcms_cmsCreateRGBProfile" >&6; } if test $ac_cv_lib_lcms_cmsCreateRGBProfile = yes; then if test "${ac_cv_header_lcms_h+set}" = set; then { echo "$as_me:$LINENO: checking for lcms.h" >&5 echo $ECHO_N "checking for lcms.h... $ECHO_C" >&6; } if test "${ac_cv_header_lcms_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_lcms_h" >&5 echo "${ECHO_T}$ac_cv_header_lcms_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking lcms.h usability" >&5 echo $ECHO_N "checking lcms.h usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking lcms.h presence" >&5 echo $ECHO_N "checking lcms.h presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: lcms.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: lcms.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: lcms.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: lcms.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: lcms.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: lcms.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: lcms.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: lcms.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: lcms.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: lcms.h: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for lcms.h" >&5 echo $ECHO_N "checking for lcms.h... $ECHO_C" >&6; } if test "${ac_cv_header_lcms_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_lcms_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_lcms_h" >&5 echo "${ECHO_T}$ac_cv_header_lcms_h" >&6; } fi { echo "$as_me:$LINENO: checking for mnglcms_initlibrary in -lmng" >&5 echo $ECHO_N "checking for mnglcms_initlibrary in -lmng... $ECHO_C" >&6; } if test "${ac_cv_lib_mng_mnglcms_initlibrary+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmng $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char mnglcms_initlibrary (); int main () { return mnglcms_initlibrary (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_mng_mnglcms_initlibrary=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_mng_mnglcms_initlibrary=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_mng_mnglcms_initlibrary" >&5 echo "${ECHO_T}$ac_cv_lib_mng_mnglcms_initlibrary" >&6; } if test $ac_cv_lib_mng_mnglcms_initlibrary = yes; then LIBS="$LIBS -llcms" cat >>confdefs.h <<\_ACEOF #define HAVE_LIBLCMS 1 _ACEOF _libmng_present=1 fi fi if test $_libmng_present -eq 1; then LIBS="-lmng $LIBS" cat >>confdefs.h <<\_ACEOF #define HAVE_LIBMNG 1 _ACEOF fi _libmng_present= ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim AMTAR!$AMTAR$ac_delim am__tar!$am__tar$ac_delim am__untar!$am__untar$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim DEPDIR!$DEPDIR$ac_delim am__include!$am__include$ac_delim am__quote!$am__quote$ac_delim AMDEP_TRUE!$AMDEP_TRUE$ac_delim AMDEP_FALSE!$AMDEP_FALSE$ac_delim AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim CCDEPMODE!$CCDEPMODE$ac_delim am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim HAS_SDL!$HAS_SDL$ac_delim mngplay_LDADD!$mngplay_LDADD$ac_delim mngplay_static_LDADD!$mngplay_static_LDADD$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 82; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :C $CONFIG_COMMANDS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi libmng-2.0.2/contrib/gcc/sdl-mngplay/depcomp0000755000000000000000000003710012005307152017455 0ustar rootroot#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # 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-end: "$" # End: libmng-2.0.2/contrib/gcc/sdl-mngplay/autogen.notes0000644000000000000000000000303112005307152020610 0ustar rootroot[The end of this file is the result of the following command, executed under tcsh: (time /bin/sh autogen.sh) >>&! autogen.log & If you have automake and autoconf, the following minimal set of files is sufficient to rerun the autogen.sh script: Makefile.am acinclude.m4 autogen.sh configure.in mngplay.c It will then create the following files: aclocal.m4 mkinstalldirs [symbolic link to utility supplied with automake] missing [symbolic link to utility supplied with automake] install-sh [symbolic link to utility supplied with automake] Makefile.in configure The following documentation files are also part of mngplay: AUTHORS COPYING ChangeLog INSTALL README I have replaced the symbolic links with copies of the actual utilities and included all files in order to match the instructions in the INSTALL file. Either run configure and make in the usual manner, or, if you prefer, rerun autogen.sh from scratch and then run configure and make. Greg Roelofs, 20010708 ] ------------------------------------------------------------------------------ If you wish to pass any options to configure, please specify them on the `autogen.sh' command line. For example use --prefix= to specify the install directory. processing . Running aclocal ... Running automake --foreign ... automake: configure.in: installing `./install-sh' automake: configure.in: installing `./mkinstalldirs' automake: configure.in: installing `./missing' Running autoconf ... Skipping configure process. 1.370u 0.220s 0:03.32 47.8% 0+0k 0+0io 3201pf+0w libmng-2.0.2/contrib/gcc/sdl-mngplay/AUTHORS0000644000000000000000000000021212005307152017142 0ustar rootrootContributors to mnyplay Ralph Giles Greg Roelofs (minor contribs!) -- $Date: 2002/09/26 18:09:37 $ libmng-2.0.2/contrib/gcc/sdl-mngplay/Makefile.am0000644000000000000000000000030312005307152020127 0ustar rootroot# process this with automake to create Makefile.in bin_PROGRAMS = mngplay mngplay-static mngplay_SOURCES = mngplay.c mngplay_static_SOURCES = mngplay.c mngplay_static_LDFLAGS = -static # end libmng-2.0.2/contrib/gcc/sdl-mngplay/missing0000755000000000000000000002540612005307152017505 0ustar rootroot#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: libmng-2.0.2/contrib/gcc/sdl-mngplay/autom4te.cache/0000755000000000000000000000000012005307152020703 5ustar rootrootlibmng-2.0.2/contrib/gcc/sdl-mngplay/autom4te.cache/traces.10000644000000000000000000005345712005307152022264 0ustar rootrootm4trace:aclocal.m4:851: -1- m4_include([acinclude.m4]) m4trace:configure.in:6: -1- AC_INIT([mngplay.c]) m4trace:configure.in:6: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.in:6: -1- m4_pattern_forbid([_AC_]) m4trace:configure.in:6: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.in:6: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.in:6: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.in:6: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.in:6: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.in:6: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([SHELL]) m4trace:configure.in:6: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.in:6: -1- AC_SUBST([PATH_SEPARATOR]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) m4trace:configure.in:6: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.in:6: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([PACKAGE_NAME]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.in:6: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.in:6: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.in:6: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([PACKAGE_STRING]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.in:6: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.in:6: -1- AC_SUBST([exec_prefix], [NONE]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([exec_prefix]) m4trace:configure.in:6: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.in:6: -1- AC_SUBST([prefix], [NONE]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([prefix]) m4trace:configure.in:6: -1- m4_pattern_allow([^prefix$]) m4trace:configure.in:6: -1- AC_SUBST([program_transform_name], [s,x,x,]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([program_transform_name]) m4trace:configure.in:6: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.in:6: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([bindir]) m4trace:configure.in:6: -1- m4_pattern_allow([^bindir$]) m4trace:configure.in:6: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([sbindir]) m4trace:configure.in:6: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.in:6: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([libexecdir]) m4trace:configure.in:6: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.in:6: -1- AC_SUBST([datarootdir], ['${prefix}/share']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([datarootdir]) m4trace:configure.in:6: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.in:6: -1- AC_SUBST([datadir], ['${datarootdir}']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([datadir]) m4trace:configure.in:6: -1- m4_pattern_allow([^datadir$]) m4trace:configure.in:6: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([sysconfdir]) m4trace:configure.in:6: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.in:6: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([sharedstatedir]) m4trace:configure.in:6: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.in:6: -1- AC_SUBST([localstatedir], ['${prefix}/var']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([localstatedir]) m4trace:configure.in:6: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.in:6: -1- AC_SUBST([includedir], ['${prefix}/include']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([includedir]) m4trace:configure.in:6: -1- m4_pattern_allow([^includedir$]) m4trace:configure.in:6: -1- AC_SUBST([oldincludedir], ['/usr/include']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([oldincludedir]) m4trace:configure.in:6: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.in:6: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([docdir]) m4trace:configure.in:6: -1- m4_pattern_allow([^docdir$]) m4trace:configure.in:6: -1- AC_SUBST([infodir], ['${datarootdir}/info']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([infodir]) m4trace:configure.in:6: -1- m4_pattern_allow([^infodir$]) m4trace:configure.in:6: -1- AC_SUBST([htmldir], ['${docdir}']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([htmldir]) m4trace:configure.in:6: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.in:6: -1- AC_SUBST([dvidir], ['${docdir}']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([dvidir]) m4trace:configure.in:6: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.in:6: -1- AC_SUBST([pdfdir], ['${docdir}']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([pdfdir]) m4trace:configure.in:6: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.in:6: -1- AC_SUBST([psdir], ['${docdir}']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([psdir]) m4trace:configure.in:6: -1- m4_pattern_allow([^psdir$]) m4trace:configure.in:6: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([libdir]) m4trace:configure.in:6: -1- m4_pattern_allow([^libdir$]) m4trace:configure.in:6: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([localedir]) m4trace:configure.in:6: -1- m4_pattern_allow([^localedir$]) m4trace:configure.in:6: -1- AC_SUBST([mandir], ['${datarootdir}/man']) m4trace:configure.in:6: -1- AC_SUBST_TRACE([mandir]) m4trace:configure.in:6: -1- m4_pattern_allow([^mandir$]) m4trace:configure.in:6: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.in:6: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ #undef PACKAGE_NAME]) m4trace:configure.in:6: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.in:6: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME]) m4trace:configure.in:6: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.in:6: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ #undef PACKAGE_VERSION]) m4trace:configure.in:6: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.in:6: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ #undef PACKAGE_STRING]) m4trace:configure.in:6: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.in:6: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT]) m4trace:configure.in:6: -1- AC_SUBST([DEFS]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([DEFS]) m4trace:configure.in:6: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.in:6: -1- AC_SUBST([ECHO_C]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([ECHO_C]) m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.in:6: -1- AC_SUBST([ECHO_N]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([ECHO_N]) m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.in:6: -1- AC_SUBST([ECHO_T]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([ECHO_T]) m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.in:6: -1- AC_SUBST([LIBS]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.in:6: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:6: -1- AC_SUBST([build_alias]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([build_alias]) m4trace:configure.in:6: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.in:6: -1- AC_SUBST([host_alias]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([host_alias]) m4trace:configure.in:6: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.in:6: -1- AC_SUBST([target_alias]) m4trace:configure.in:6: -1- AC_SUBST_TRACE([target_alias]) m4trace:configure.in:6: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.in:7: -1- AM_INIT_AUTOMAKE([mngplay], [$VERSION]) m4trace:configure.in:7: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.in:7: -1- AM_AUTOMAKE_VERSION([1.9.6]) m4trace:configure.in:7: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.in:7: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) m4trace:configure.in:7: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.in:7: -1- AC_SUBST([INSTALL_SCRIPT]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) m4trace:configure.in:7: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.in:7: -1- AC_SUBST([INSTALL_DATA]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([INSTALL_DATA]) m4trace:configure.in:7: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.in:7: -1- AC_SUBST([CYGPATH_W]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([CYGPATH_W]) m4trace:configure.in:7: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.in:7: -1- AC_SUBST([PACKAGE], [mngplay]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([PACKAGE]) m4trace:configure.in:7: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.in:7: -1- AC_SUBST([VERSION], [$VERSION]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([VERSION]) m4trace:configure.in:7: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.in:7: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) m4trace:configure.in:7: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.in:7: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ #undef PACKAGE]) m4trace:configure.in:7: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) m4trace:configure.in:7: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.in:7: -1- AH_OUTPUT([VERSION], [/* Version number of package */ #undef VERSION]) m4trace:configure.in:7: -1- AC_SUBST([ACLOCAL]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([ACLOCAL]) m4trace:configure.in:7: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.in:7: -1- AC_SUBST([AUTOCONF]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([AUTOCONF]) m4trace:configure.in:7: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.in:7: -1- AC_SUBST([AUTOMAKE]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([AUTOMAKE]) m4trace:configure.in:7: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.in:7: -1- AC_SUBST([AUTOHEADER]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([AUTOHEADER]) m4trace:configure.in:7: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.in:7: -1- AC_SUBST([MAKEINFO]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([MAKEINFO]) m4trace:configure.in:7: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.in:7: -1- AC_SUBST([install_sh]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([install_sh]) m4trace:configure.in:7: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.in:7: -1- AC_SUBST([STRIP]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([STRIP]) m4trace:configure.in:7: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.in:7: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) m4trace:configure.in:7: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.in:7: -1- AC_SUBST([mkdir_p]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([mkdir_p]) m4trace:configure.in:7: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.in:7: -1- AC_SUBST([AWK]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([AWK]) m4trace:configure.in:7: -1- m4_pattern_allow([^AWK$]) m4trace:configure.in:7: -1- AC_SUBST([SET_MAKE]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([SET_MAKE]) m4trace:configure.in:7: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.in:7: -1- AC_SUBST([am__leading_dot]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([am__leading_dot]) m4trace:configure.in:7: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.in:7: -1- AC_SUBST([AMTAR]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([AMTAR]) m4trace:configure.in:7: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.in:7: -1- AC_SUBST([am__tar]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([am__tar]) m4trace:configure.in:7: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.in:7: -1- AC_SUBST([am__untar]) m4trace:configure.in:7: -1- AC_SUBST_TRACE([am__untar]) m4trace:configure.in:7: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.in:10: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete. You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from... configure.in:10: the top level]) m4trace:configure.in:13: -1- AC_SUBST([CC]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:13: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:13: -1- AC_SUBST([CFLAGS]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.in:13: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.in:13: -1- AC_SUBST([LDFLAGS]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.in:13: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.in:13: -1- AC_SUBST([LIBS]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.in:13: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:13: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.in:13: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:13: -1- AC_SUBST([CC]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:13: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:13: -1- AC_SUBST([CC]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:13: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:13: -1- AC_SUBST([CC]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:13: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:13: -1- AC_SUBST([CC]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:13: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:13: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.in:13: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.in:13: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([EXEEXT]) m4trace:configure.in:13: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.in:13: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([OBJEXT]) m4trace:configure.in:13: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.in:13: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([DEPDIR]) m4trace:configure.in:13: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.in:13: -1- AC_SUBST([am__include]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([am__include]) m4trace:configure.in:13: -1- m4_pattern_allow([^am__include$]) m4trace:configure.in:13: -1- AC_SUBST([am__quote]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([am__quote]) m4trace:configure.in:13: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.in:13: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.in:13: -1- AC_SUBST([AMDEP_TRUE]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([AMDEP_TRUE]) m4trace:configure.in:13: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.in:13: -1- AC_SUBST([AMDEP_FALSE]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([AMDEP_FALSE]) m4trace:configure.in:13: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.in:13: -1- AC_SUBST([AMDEPBACKSLASH]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) m4trace:configure.in:13: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.in:13: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.in:13: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.in:13: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.in:13: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.in:13: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.in:13: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.in:13: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.in:13: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.in:16: -1- AC_SUBST([CPP]) m4trace:configure.in:16: -1- AC_SUBST_TRACE([CPP]) m4trace:configure.in:16: -1- m4_pattern_allow([^CPP$]) m4trace:configure.in:16: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.in:16: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.in:16: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:16: -1- AC_SUBST([CPP]) m4trace:configure.in:16: -1- AC_SUBST_TRACE([CPP]) m4trace:configure.in:16: -1- m4_pattern_allow([^CPP$]) m4trace:configure.in:16: -1- AC_SUBST([GREP]) m4trace:configure.in:16: -1- AC_SUBST_TRACE([GREP]) m4trace:configure.in:16: -1- m4_pattern_allow([^GREP$]) m4trace:configure.in:16: -1- AC_SUBST([GREP]) m4trace:configure.in:16: -1- AC_SUBST_TRACE([GREP]) m4trace:configure.in:16: -1- m4_pattern_allow([^GREP$]) m4trace:configure.in:16: -1- AC_SUBST([EGREP]) m4trace:configure.in:16: -1- AC_SUBST_TRACE([EGREP]) m4trace:configure.in:16: -1- m4_pattern_allow([^EGREP$]) m4trace:configure.in:16: -1- AC_SUBST([EGREP]) m4trace:configure.in:16: -1- AC_SUBST_TRACE([EGREP]) m4trace:configure.in:16: -1- m4_pattern_allow([^EGREP$]) m4trace:configure.in:16: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) m4trace:configure.in:16: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.in:16: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS]) m4trace:configure.in:19: -1- AC_SUBST([HAS_SDL]) m4trace:configure.in:19: -1- AC_SUBST_TRACE([HAS_SDL]) m4trace:configure.in:19: -1- m4_pattern_allow([^HAS_SDL$]) m4trace:configure.in:29: -1- AC_SUBST([mngplay_LDADD]) m4trace:configure.in:29: -1- AC_SUBST_TRACE([mngplay_LDADD]) m4trace:configure.in:29: -1- m4_pattern_allow([^mngplay_LDADD$]) m4trace:configure.in:30: -1- AC_SUBST([mngplay_static_LDADD]) m4trace:configure.in:30: -1- AC_SUBST_TRACE([mngplay_static_LDADD]) m4trace:configure.in:30: -1- m4_pattern_allow([^mngplay_static_LDADD$]) m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_LIBJPEG], [/* Define to 1 if you have the `jpeg\' library (-ljpeg). */ #undef HAVE_LIBJPEG]) m4trace:configure.in:33: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBJPEG]) m4trace:configure.in:33: -1- m4_pattern_allow([^HAVE_LIBJPEG$]) m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_LIBZ], [/* Define to 1 if you have the `z\' library (-lz). */ #undef HAVE_LIBZ]) m4trace:configure.in:33: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBZ]) m4trace:configure.in:33: -1- m4_pattern_allow([^HAVE_LIBZ$]) m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H]) m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H]) m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H]) m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ #undef HAVE_STRING_H]) m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H]) m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H]) m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H]) m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H]) m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H]) m4trace:configure.in:33: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBLCMS]) m4trace:configure.in:33: -1- m4_pattern_allow([^HAVE_LIBLCMS$]) m4trace:configure.in:33: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBMNG]) m4trace:configure.in:33: -1- m4_pattern_allow([^HAVE_LIBMNG$]) m4trace:configure.in:35: -1- AC_CONFIG_FILES([Makefile]) m4trace:configure.in:35: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. You should run autoupdate.], []) m4trace:configure.in:35: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) m4trace:configure.in:35: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) m4trace:configure.in:35: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.in:35: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) m4trace:configure.in:35: -1- AC_SUBST_TRACE([LTLIBOBJS]) m4trace:configure.in:35: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.in:35: -1- AC_SUBST_TRACE([top_builddir]) m4trace:configure.in:35: -1- AC_SUBST_TRACE([srcdir]) m4trace:configure.in:35: -1- AC_SUBST_TRACE([abs_srcdir]) m4trace:configure.in:35: -1- AC_SUBST_TRACE([top_srcdir]) m4trace:configure.in:35: -1- AC_SUBST_TRACE([abs_top_srcdir]) m4trace:configure.in:35: -1- AC_SUBST_TRACE([builddir]) m4trace:configure.in:35: -1- AC_SUBST_TRACE([abs_builddir]) m4trace:configure.in:35: -1- AC_SUBST_TRACE([abs_top_builddir]) m4trace:configure.in:35: -1- AC_SUBST_TRACE([INSTALL]) libmng-2.0.2/contrib/gcc/sdl-mngplay/autom4te.cache/output.10000644000000000000000000050222312005307152022331 0ustar rootroot@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.61. @%:@ @%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @%:@ 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="mngplay.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP GREP EGREP HAS_SDL mngplay_LDADD mngplay_static_LDADD LIB@&t@OBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/PACKAGE@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME @%:@@%:@ --------- @%:@@%:@ @%:@@%:@ Platform. @%:@@%:@ @%:@@%:@ --------- @%:@@%:@ hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF @%:@@%:@ ----------- @%:@@%:@ @%:@@%:@ Core tests. @%:@@%:@ @%:@@%:@ ----------- @%:@@%:@ _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX @%:@@%:@ ---------------- @%:@@%:@ @%:@@%:@ Cache variables. @%:@@%:@ @%:@@%:@ ---------------- @%:@@%:@ _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX @%:@@%:@ ----------------- @%:@@%:@ @%:@@%:@ Output variables. @%:@@%:@ @%:@@%:@ ----------------- @%:@@%:@ _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX @%:@@%:@ ------------------- @%:@@%:@ @%:@@%:@ File substitutions. @%:@@%:@ @%:@@%:@ ------------------- @%:@@%:@ _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX @%:@@%:@ ----------- @%:@@%:@ @%:@@%:@ confdefs.h. @%:@@%:@ @%:@@%:@ ----------- @%:@@%:@ _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version="1.9" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=mngplay VERSION=$VERSION cat >>confdefs.h <<_ACEOF @%:@define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@ifdef __STDC__ @%:@ include @%:@else @%:@ include @%:@endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@ifdef __STDC__ @%:@ include @%:@else @%:@ include @%:@endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF @%:@define STDC_HEADERS 1 _ACEOF fi # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_HAS_SDL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$HAS_SDL"; then ac_cv_prog_HAS_SDL="$HAS_SDL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_HAS_SDL="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi HAS_SDL=$ac_cv_prog_HAS_SDL if test -n "$HAS_SDL"; then { echo "$as_me:$LINENO: result: $HAS_SDL" >&5 echo "${ECHO_T}$HAS_SDL" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$HAS_SDL" != "xyes"; then { { echo "$as_me:$LINENO: error: SDL library not found! You need this for any display to happen. (rather the point) You can get a copy at " >&5 echo "$as_me: error: SDL library not found! You need this for any display to happen. (rather the point) You can get a copy at " >&2;} { (exit 1); exit 1; }; } fi CFLAGS="$CFLAGS `sdl-config --cflags`" mngplay_LDADD="`sdl-config --libs`" mngplay_static_LDADD="`sdl-config --static-libs`" # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default @%:@include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF @%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for jpeg_set_defaults in -ljpeg" >&5 echo $ECHO_N "checking for jpeg_set_defaults in -ljpeg... $ECHO_C" >&6; } if test "${ac_cv_lib_jpeg_jpeg_set_defaults+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char jpeg_set_defaults (); int main () { return jpeg_set_defaults (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_jpeg_jpeg_set_defaults=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_jpeg_jpeg_set_defaults=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_jpeg_jpeg_set_defaults" >&5 echo "${ECHO_T}$ac_cv_lib_jpeg_jpeg_set_defaults" >&6; } if test $ac_cv_lib_jpeg_jpeg_set_defaults = yes; then cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBJPEG 1 _ACEOF LIBS="-ljpeg $LIBS" fi { echo "$as_me:$LINENO: checking for inflate in -lz" >&5 echo $ECHO_N "checking for inflate in -lz... $ECHO_C" >&6; } if test "${ac_cv_lib_z_inflate+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inflate (); int main () { return inflate (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_z_inflate=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_inflate=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_z_inflate" >&5 echo "${ECHO_T}$ac_cv_lib_z_inflate" >&6; } if test $ac_cv_lib_z_inflate = yes; then cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" fi { echo "$as_me:$LINENO: checking for mng_readdisplay in -lmng" >&5 echo $ECHO_N "checking for mng_readdisplay in -lmng... $ECHO_C" >&6; } if test "${ac_cv_lib_mng_mng_readdisplay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmng $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char mng_readdisplay (); int main () { return mng_readdisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_mng_mng_readdisplay=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_mng_mng_readdisplay=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_mng_mng_readdisplay" >&5 echo "${ECHO_T}$ac_cv_lib_mng_mng_readdisplay" >&6; } if test $ac_cv_lib_mng_mng_readdisplay = yes; then _libmng_present=1 fi if test "${ac_cv_header_libmng_h+set}" = set; then { echo "$as_me:$LINENO: checking for libmng.h" >&5 echo $ECHO_N "checking for libmng.h... $ECHO_C" >&6; } if test "${ac_cv_header_libmng_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_libmng_h" >&5 echo "${ECHO_T}$ac_cv_header_libmng_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking libmng.h usability" >&5 echo $ECHO_N "checking libmng.h usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default @%:@include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking libmng.h presence" >&5 echo $ECHO_N "checking libmng.h presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: libmng.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: libmng.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: libmng.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: libmng.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: libmng.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: libmng.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: libmng.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: libmng.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: libmng.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: libmng.h: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for libmng.h" >&5 echo $ECHO_N "checking for libmng.h... $ECHO_C" >&6; } if test "${ac_cv_header_libmng_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_libmng_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_libmng_h" >&5 echo "${ECHO_T}$ac_cv_header_libmng_h" >&6; } fi { echo "$as_me:$LINENO: checking for cmsCreateRGBProfile in -llcms" >&5 echo $ECHO_N "checking for cmsCreateRGBProfile in -llcms... $ECHO_C" >&6; } if test "${ac_cv_lib_lcms_cmsCreateRGBProfile+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-llcms $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cmsCreateRGBProfile (); int main () { return cmsCreateRGBProfile (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_lcms_cmsCreateRGBProfile=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_lcms_cmsCreateRGBProfile=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_lcms_cmsCreateRGBProfile" >&5 echo "${ECHO_T}$ac_cv_lib_lcms_cmsCreateRGBProfile" >&6; } if test $ac_cv_lib_lcms_cmsCreateRGBProfile = yes; then if test "${ac_cv_header_lcms_h+set}" = set; then { echo "$as_me:$LINENO: checking for lcms.h" >&5 echo $ECHO_N "checking for lcms.h... $ECHO_C" >&6; } if test "${ac_cv_header_lcms_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_lcms_h" >&5 echo "${ECHO_T}$ac_cv_header_lcms_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking lcms.h usability" >&5 echo $ECHO_N "checking lcms.h usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default @%:@include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking lcms.h presence" >&5 echo $ECHO_N "checking lcms.h presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: lcms.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: lcms.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: lcms.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: lcms.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: lcms.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: lcms.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: lcms.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: lcms.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: lcms.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: lcms.h: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for lcms.h" >&5 echo $ECHO_N "checking for lcms.h... $ECHO_C" >&6; } if test "${ac_cv_header_lcms_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_lcms_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_lcms_h" >&5 echo "${ECHO_T}$ac_cv_header_lcms_h" >&6; } fi { echo "$as_me:$LINENO: checking for mnglcms_initlibrary in -lmng" >&5 echo $ECHO_N "checking for mnglcms_initlibrary in -lmng... $ECHO_C" >&6; } if test "${ac_cv_lib_mng_mnglcms_initlibrary+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmng $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char mnglcms_initlibrary (); int main () { return mnglcms_initlibrary (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_mng_mnglcms_initlibrary=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_mng_mnglcms_initlibrary=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_mng_mnglcms_initlibrary" >&5 echo "${ECHO_T}$ac_cv_lib_mng_mnglcms_initlibrary" >&6; } if test $ac_cv_lib_mng_mnglcms_initlibrary = yes; then LIBS="$LIBS -llcms" cat >>confdefs.h <<\_ACEOF @%:@define HAVE_LIBLCMS 1 _ACEOF _libmng_present=1 fi fi if test $_libmng_present -eq 1; then LIBS="-lmng $LIBS" cat >>confdefs.h <<\_ACEOF @%:@define HAVE_LIBMNG 1 _ACEOF fi _libmng_present= ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim AMTAR!$AMTAR$ac_delim am__tar!$am__tar$ac_delim am__untar!$am__untar$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim DEPDIR!$DEPDIR$ac_delim am__include!$am__include$ac_delim am__quote!$am__quote$ac_delim AMDEP_TRUE!$AMDEP_TRUE$ac_delim AMDEP_FALSE!$AMDEP_FALSE$ac_delim AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim CCDEPMODE!$CCDEPMODE$ac_delim am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim HAS_SDL!$HAS_SDL$ac_delim mngplay_LDADD!$mngplay_LDADD$ac_delim mngplay_static_LDADD!$mngplay_static_LDADD$ac_delim LIB@&t@OBJS!$LIB@&t@OBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 82; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :C $CONFIG_COMMANDS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi libmng-2.0.2/contrib/gcc/sdl-mngplay/autom4te.cache/output.00000644000000000000000000050222312005307152022330 0ustar rootroot@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.61. @%:@ @%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @%:@ 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="mngplay.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP GREP EGREP HAS_SDL mngplay_LDADD mngplay_static_LDADD LIB@&t@OBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/PACKAGE@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME @%:@@%:@ --------- @%:@@%:@ @%:@@%:@ Platform. @%:@@%:@ @%:@@%:@ --------- @%:@@%:@ hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF @%:@@%:@ ----------- @%:@@%:@ @%:@@%:@ Core tests. @%:@@%:@ @%:@@%:@ ----------- @%:@@%:@ _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX @%:@@%:@ ---------------- @%:@@%:@ @%:@@%:@ Cache variables. @%:@@%:@ @%:@@%:@ ---------------- @%:@@%:@ _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX @%:@@%:@ ----------------- @%:@@%:@ @%:@@%:@ Output variables. @%:@@%:@ @%:@@%:@ ----------------- @%:@@%:@ _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX @%:@@%:@ ------------------- @%:@@%:@ @%:@@%:@ File substitutions. @%:@@%:@ @%:@@%:@ ------------------- @%:@@%:@ _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX @%:@@%:@ ----------- @%:@@%:@ @%:@@%:@ confdefs.h. @%:@@%:@ @%:@@%:@ ----------- @%:@@%:@ _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version="1.9" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=mngplay VERSION=$VERSION cat >>confdefs.h <<_ACEOF @%:@define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@ifdef __STDC__ @%:@ include @%:@else @%:@ include @%:@endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@ifdef __STDC__ @%:@ include @%:@else @%:@ include @%:@endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF @%:@define STDC_HEADERS 1 _ACEOF fi # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_HAS_SDL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$HAS_SDL"; then ac_cv_prog_HAS_SDL="$HAS_SDL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_HAS_SDL="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi HAS_SDL=$ac_cv_prog_HAS_SDL if test -n "$HAS_SDL"; then { echo "$as_me:$LINENO: result: $HAS_SDL" >&5 echo "${ECHO_T}$HAS_SDL" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$HAS_SDL" != "xyes"; then { { echo "$as_me:$LINENO: error: SDL library not found! You need this for any display to happen. (rather the point) You can get a copy at " >&5 echo "$as_me: error: SDL library not found! You need this for any display to happen. (rather the point) You can get a copy at " >&2;} { (exit 1); exit 1; }; } fi CFLAGS="$CFLAGS `sdl-config --cflags`" mngplay_LDADD="`sdl-config --libs`" mngplay_static_LDADD="`sdl-config --static-libs`" # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default @%:@include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF @%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for jpeg_set_defaults in -ljpeg" >&5 echo $ECHO_N "checking for jpeg_set_defaults in -ljpeg... $ECHO_C" >&6; } if test "${ac_cv_lib_jpeg_jpeg_set_defaults+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char jpeg_set_defaults (); int main () { return jpeg_set_defaults (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_jpeg_jpeg_set_defaults=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_jpeg_jpeg_set_defaults=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_jpeg_jpeg_set_defaults" >&5 echo "${ECHO_T}$ac_cv_lib_jpeg_jpeg_set_defaults" >&6; } if test $ac_cv_lib_jpeg_jpeg_set_defaults = yes; then cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBJPEG 1 _ACEOF LIBS="-ljpeg $LIBS" fi { echo "$as_me:$LINENO: checking for inflate in -lz" >&5 echo $ECHO_N "checking for inflate in -lz... $ECHO_C" >&6; } if test "${ac_cv_lib_z_inflate+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inflate (); int main () { return inflate (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_z_inflate=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_inflate=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_z_inflate" >&5 echo "${ECHO_T}$ac_cv_lib_z_inflate" >&6; } if test $ac_cv_lib_z_inflate = yes; then cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" fi { echo "$as_me:$LINENO: checking for mng_readdisplay in -lmng" >&5 echo $ECHO_N "checking for mng_readdisplay in -lmng... $ECHO_C" >&6; } if test "${ac_cv_lib_mng_mng_readdisplay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmng $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char mng_readdisplay (); int main () { return mng_readdisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_mng_mng_readdisplay=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_mng_mng_readdisplay=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_mng_mng_readdisplay" >&5 echo "${ECHO_T}$ac_cv_lib_mng_mng_readdisplay" >&6; } if test $ac_cv_lib_mng_mng_readdisplay = yes; then _libmng_present=1 fi if test "${ac_cv_header_libmng_h+set}" = set; then { echo "$as_me:$LINENO: checking for libmng.h" >&5 echo $ECHO_N "checking for libmng.h... $ECHO_C" >&6; } if test "${ac_cv_header_libmng_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_libmng_h" >&5 echo "${ECHO_T}$ac_cv_header_libmng_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking libmng.h usability" >&5 echo $ECHO_N "checking libmng.h usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default @%:@include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking libmng.h presence" >&5 echo $ECHO_N "checking libmng.h presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: libmng.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: libmng.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: libmng.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: libmng.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: libmng.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: libmng.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: libmng.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: libmng.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: libmng.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: libmng.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: libmng.h: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for libmng.h" >&5 echo $ECHO_N "checking for libmng.h... $ECHO_C" >&6; } if test "${ac_cv_header_libmng_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_libmng_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_libmng_h" >&5 echo "${ECHO_T}$ac_cv_header_libmng_h" >&6; } fi { echo "$as_me:$LINENO: checking for cmsCreateRGBProfile in -llcms" >&5 echo $ECHO_N "checking for cmsCreateRGBProfile in -llcms... $ECHO_C" >&6; } if test "${ac_cv_lib_lcms_cmsCreateRGBProfile+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-llcms $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cmsCreateRGBProfile (); int main () { return cmsCreateRGBProfile (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_lcms_cmsCreateRGBProfile=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_lcms_cmsCreateRGBProfile=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_lcms_cmsCreateRGBProfile" >&5 echo "${ECHO_T}$ac_cv_lib_lcms_cmsCreateRGBProfile" >&6; } if test $ac_cv_lib_lcms_cmsCreateRGBProfile = yes; then if test "${ac_cv_header_lcms_h+set}" = set; then { echo "$as_me:$LINENO: checking for lcms.h" >&5 echo $ECHO_N "checking for lcms.h... $ECHO_C" >&6; } if test "${ac_cv_header_lcms_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_lcms_h" >&5 echo "${ECHO_T}$ac_cv_header_lcms_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking lcms.h usability" >&5 echo $ECHO_N "checking lcms.h usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default @%:@include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking lcms.h presence" >&5 echo $ECHO_N "checking lcms.h presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: lcms.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: lcms.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: lcms.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: lcms.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: lcms.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: lcms.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: lcms.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: lcms.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: lcms.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: lcms.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: lcms.h: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for lcms.h" >&5 echo $ECHO_N "checking for lcms.h... $ECHO_C" >&6; } if test "${ac_cv_header_lcms_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_lcms_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_lcms_h" >&5 echo "${ECHO_T}$ac_cv_header_lcms_h" >&6; } fi { echo "$as_me:$LINENO: checking for mnglcms_initlibrary in -lmng" >&5 echo $ECHO_N "checking for mnglcms_initlibrary in -lmng... $ECHO_C" >&6; } if test "${ac_cv_lib_mng_mnglcms_initlibrary+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmng $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char mnglcms_initlibrary (); int main () { return mnglcms_initlibrary (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_mng_mnglcms_initlibrary=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_mng_mnglcms_initlibrary=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_mng_mnglcms_initlibrary" >&5 echo "${ECHO_T}$ac_cv_lib_mng_mnglcms_initlibrary" >&6; } if test $ac_cv_lib_mng_mnglcms_initlibrary = yes; then LIBS="$LIBS -llcms" cat >>confdefs.h <<\_ACEOF @%:@define HAVE_LIBLCMS 1 _ACEOF _libmng_present=1 fi fi if test $_libmng_present -eq 1; then LIBS="-lmng $LIBS" cat >>confdefs.h <<\_ACEOF @%:@define HAVE_LIBMNG 1 _ACEOF fi _libmng_present= ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim AMTAR!$AMTAR$ac_delim am__tar!$am__tar$ac_delim am__untar!$am__untar$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim DEPDIR!$DEPDIR$ac_delim am__include!$am__include$ac_delim am__quote!$am__quote$ac_delim AMDEP_TRUE!$AMDEP_TRUE$ac_delim AMDEP_FALSE!$AMDEP_FALSE$ac_delim AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim CCDEPMODE!$CCDEPMODE$ac_delim am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim HAS_SDL!$HAS_SDL$ac_delim mngplay_LDADD!$mngplay_LDADD$ac_delim mngplay_static_LDADD!$mngplay_static_LDADD$ac_delim LIB@&t@OBJS!$LIB@&t@OBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 82; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :C $CONFIG_COMMANDS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi libmng-2.0.2/contrib/gcc/sdl-mngplay/autom4te.cache/traces.00000644000000000000000000007242512005307152022257 0ustar rootrootm4trace:/usr/local/share/aclocal-1.9/amversion.m4:13: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) m4trace:/usr/local/share/aclocal-1.9/amversion.m4:19: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.9.6])]) m4trace:/usr/local/share/aclocal-1.9/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) m4trace:/usr/local/share/aclocal-1.9/cond.m4:15: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) m4trace:/usr/local/share/aclocal-1.9/depend.m4:29: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) m4trace:/usr/local/share/aclocal-1.9/depend.m4:138: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) m4trace:/usr/local/share/aclocal-1.9/depend.m4:146: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH]) ]) m4trace:/usr/local/share/aclocal-1.9/depout.m4:14: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ]) m4trace:/usr/local/share/aclocal-1.9/depout.m4:63: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) m4trace:/usr/local/share/aclocal-1.9/init.m4:26: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.58])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) ]) m4trace:/usr/local/share/aclocal-1.9/init.m4:102: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) m4trace:/usr/local/share/aclocal-1.9/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) m4trace:/usr/local/share/aclocal-1.9/lead-dot.m4:12: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) m4trace:/usr/local/share/aclocal-1.9/make.m4:14: -1- AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) m4trace:/usr/local/share/aclocal-1.9/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) m4trace:/usr/local/share/aclocal-1.9/missing.m4:24: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) m4trace:/usr/local/share/aclocal-1.9/mkdirp.m4:30: -1- AC_DEFUN([AM_PROG_MKDIR_P], [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi AC_SUBST([mkdir_p])]) m4trace:/usr/local/share/aclocal-1.9/options.m4:13: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) m4trace:/usr/local/share/aclocal-1.9/options.m4:19: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) m4trace:/usr/local/share/aclocal-1.9/options.m4:25: -1- AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) m4trace:/usr/local/share/aclocal-1.9/options.m4:31: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) m4trace:/usr/local/share/aclocal-1.9/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) m4trace:/usr/local/share/aclocal-1.9/sanity.m4:14: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) m4trace:/usr/local/share/aclocal-1.9/strip.m4:17: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) m4trace:/usr/local/share/aclocal-1.9/tar.m4:24: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) m4trace:acinclude.m4:11: -1- AC_DEFUN([LIBMNG_CHECK], [ dnl prerequisites first AC_CHECK_LIB(jpeg, jpeg_set_defaults) AC_CHECK_LIB(z, inflate) dnl now the library AC_CHECK_LIB(mng, mng_readdisplay, [_libmng_present=1]) AC_CHECK_HEADER(libmng.h) dnl see if we need the optional link dependency AC_CHECK_LIB(lcms, cmsCreateRGBProfile, [ AC_CHECK_HEADER(lcms.h) AC_CHECK_LIB(mng, mnglcms_initlibrary, [ LIBS="$LIBS -llcms" AC_DEFINE(HAVE_LIBLCMS) _libmng_present=1 ]) ]) if test $_libmng_present -eq 1; then LIBS="-lmng $LIBS" AC_DEFINE(HAVE_LIBMNG) fi _libmng_present= ]) m4trace:configure.in:6: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.in:6: -1- m4_pattern_forbid([_AC_]) m4trace:configure.in:6: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.in:6: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.in:6: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.in:6: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.in:6: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.in:6: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.in:6: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.in:6: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.in:6: -1- m4_pattern_allow([^prefix$]) m4trace:configure.in:6: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.in:6: -1- m4_pattern_allow([^bindir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^datadir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^includedir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^docdir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^infodir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^psdir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^libdir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^localedir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^mandir$]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.in:6: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.in:6: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:6: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.in:6: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.in:6: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.in:7: -1- AM_INIT_AUTOMAKE([mngplay], [$VERSION]) m4trace:configure.in:7: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.in:7: -1- AM_SET_CURRENT_AUTOMAKE_VERSION m4trace:configure.in:7: -1- AM_AUTOMAKE_VERSION([1.9.6]) m4trace:configure.in:7: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.in:7: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.in:7: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.in:7: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.in:7: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.in:7: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.in:7: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])]) m4trace:configure.in:7: -2- _AM_MANGLE_OPTION([no-define]) m4trace:configure.in:7: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.in:7: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.in:7: -1- AM_SANITY_CHECK m4trace:configure.in:7: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) m4trace:configure.in:7: -1- AM_MISSING_HAS_RUN m4trace:configure.in:7: -1- AM_AUX_DIR_EXPAND m4trace:configure.in:7: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.in:7: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) m4trace:configure.in:7: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.in:7: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) m4trace:configure.in:7: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.in:7: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) m4trace:configure.in:7: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.in:7: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) m4trace:configure.in:7: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.in:7: -1- AM_PROG_INSTALL_SH m4trace:configure.in:7: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.in:7: -1- AM_PROG_INSTALL_STRIP m4trace:configure.in:7: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.in:7: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.in:7: -1- AM_PROG_MKDIR_P m4trace:configure.in:7: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.in:7: -1- m4_pattern_allow([^AWK$]) m4trace:configure.in:7: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.in:7: -1- AM_SET_LEADING_DOT m4trace:configure.in:7: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.in:7: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) m4trace:configure.in:7: -2- _AM_MANGLE_OPTION([tar-ustar]) m4trace:configure.in:7: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) m4trace:configure.in:7: -2- _AM_MANGLE_OPTION([tar-pax]) m4trace:configure.in:7: -1- _AM_PROG_TAR([v7]) m4trace:configure.in:7: -1- AM_MISSING_PROG([AMTAR], [tar]) m4trace:configure.in:7: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.in:7: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.in:7: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.in:7: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) m4trace:configure.in:7: -2- _AM_MANGLE_OPTION([no-dependencies]) m4trace:configure.in:10: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete. You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from... configure.in:10: the top level]) m4trace:configure.in:13: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:13: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.in:13: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.in:13: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:13: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:13: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:13: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:13: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:13: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:13: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.in:13: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.in:13: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.in:13: -1- _AM_DEPENDENCIES([CC]) m4trace:configure.in:13: -1- AM_SET_DEPDIR m4trace:configure.in:13: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.in:13: -1- AM_OUTPUT_DEPENDENCY_COMMANDS m4trace:configure.in:13: -1- AM_MAKE_INCLUDE m4trace:configure.in:13: -1- m4_pattern_allow([^am__include$]) m4trace:configure.in:13: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.in:13: -1- AM_DEP_TRACK m4trace:configure.in:13: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.in:13: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.in:13: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.in:13: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.in:13: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.in:13: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.in:13: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.in:13: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.in:16: -1- m4_pattern_allow([^CPP$]) m4trace:configure.in:16: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:16: -1- m4_pattern_allow([^CPP$]) m4trace:configure.in:16: -1- m4_pattern_allow([^GREP$]) m4trace:configure.in:16: -1- m4_pattern_allow([^GREP$]) m4trace:configure.in:16: -1- m4_pattern_allow([^EGREP$]) m4trace:configure.in:16: -1- m4_pattern_allow([^EGREP$]) m4trace:configure.in:16: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.in:19: -1- m4_pattern_allow([^HAS_SDL$]) m4trace:configure.in:29: -1- m4_pattern_allow([^mngplay_LDADD$]) m4trace:configure.in:30: -1- m4_pattern_allow([^mngplay_static_LDADD$]) m4trace:configure.in:33: -1- LIBMNG_CHECK([]) m4trace:configure.in:33: -1- m4_pattern_allow([^HAVE_LIBJPEG$]) m4trace:configure.in:33: -1- m4_pattern_allow([^HAVE_LIBZ$]) m4trace:configure.in:33: -1- m4_pattern_allow([^HAVE_LIBLCMS$]) m4trace:configure.in:33: -1- m4_pattern_allow([^HAVE_LIBMNG$]) m4trace:configure.in:35: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. You should run autoupdate.], []) m4trace:configure.in:35: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.in:35: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.in:35: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS libmng-2.0.2/contrib/gcc/sdl-mngplay/autom4te.cache/requests0000644000000000000000000001326312005307152022506 0ustar rootroot# This file was generated. # It contains the lists of macros which have been traced. # It can be safely removed. @request = ( bless( [ '0', 1, [ '/usr/local/share/autoconf' ], [ '/usr/local/share/autoconf/autoconf/autoconf.m4f', '/usr/local/share/aclocal-1.9/amversion.m4', '/usr/local/share/aclocal-1.9/auxdir.m4', '/usr/local/share/aclocal-1.9/cond.m4', '/usr/local/share/aclocal-1.9/depend.m4', '/usr/local/share/aclocal-1.9/depout.m4', '/usr/local/share/aclocal-1.9/init.m4', '/usr/local/share/aclocal-1.9/install-sh.m4', '/usr/local/share/aclocal-1.9/lead-dot.m4', '/usr/local/share/aclocal-1.9/make.m4', '/usr/local/share/aclocal-1.9/missing.m4', '/usr/local/share/aclocal-1.9/mkdirp.m4', '/usr/local/share/aclocal-1.9/options.m4', '/usr/local/share/aclocal-1.9/runlog.m4', '/usr/local/share/aclocal-1.9/sanity.m4', '/usr/local/share/aclocal-1.9/strip.m4', '/usr/local/share/aclocal-1.9/tar.m4', 'acinclude.m4', 'configure.in' ], { 'm4_pattern_forbid' => 1, 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, '_AM_SET_OPTION' => 1, 'AC_DEFUN' => 1, 'AM_PROG_MKDIR_P' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AM_MISSING_HAS_RUN' => 1, 'LIBMNG_CHECK' => 1, 'AM_MISSING_PROG' => 1, 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'AM_PROG_INSTALL_STRIP' => 1, '_m4_warn' => 1, 'AM_SANITY_CHECK' => 1, 'include' => 1, '_AM_PROG_TAR' => 1, 'AM_AUX_DIR_EXPAND' => 1, 'AM_DEP_TRACK' => 1, '_AM_SET_OPTIONS' => 1, 'AM_RUN_LOG' => 1, '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, '_AM_IF_OPTION' => 1, 'm4_pattern_allow' => 1, '_AM_MANGLE_OPTION' => 1, 'AM_SET_LEADING_DOT' => 1, 'AM_CONDITIONAL' => 1, 'AM_SET_DEPDIR' => 1, '_AM_DEPENDENCIES' => 1, 'AM_PROG_INSTALL_SH' => 1, 'm4_include' => 1, '_AC_AM_CONFIG_HEADER_HOOK' => 1, 'AU_DEFUN' => 1, 'AM_MAKE_INCLUDE' => 1 } ], 'Autom4te::Request' ), bless( [ '1', 1, [ '/usr/local/share/autoconf' ], [ '/usr/local/share/autoconf/autoconf/autoconf.m4f', 'aclocal.m4', 'configure.in' ], { '_LT_AC_TAGCONFIG' => 1, 'AM_PROG_F77_C_O' => 1, 'AC_INIT' => 1, 'm4_pattern_forbid' => 1, 'AC_CANONICAL_TARGET' => 1, 'AC_SUBST' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AC_CANONICAL_HOST' => 1, 'AC_FC_SRCEXT' => 1, 'AC_PROG_LIBTOOL' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'AC_CONFIG_LINKS' => 1, 'LT_SUPPORTED_TAG' => 1, 'm4_sinclude' => 1, 'AM_MAINTAINER_MODE' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, '_m4_warn' => 1, 'AM_PROG_CXX_C_O' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AC_CONFIG_FILES' => 1, 'include' => 1, 'LT_INIT' => 1, 'AM_GNU_GETTEXT' => 1, 'AC_LIBSOURCE' => 1, 'AM_PROG_FC_C_O' => 1, 'AC_CANONICAL_BUILD' => 1, 'AC_FC_FREEFORM' => 1, 'AH_OUTPUT' => 1, '_AM_SUBST_NOTMAKE' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'm4_pattern_allow' => 1, 'sinclude' => 1, 'AM_PROG_CC_C_O' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'AM_CONDITIONAL' => 1, 'AC_CONFIG_HEADERS' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'm4_include' => 1, 'AC_SUBST_TRACE' => 1 } ], 'Autom4te::Request' ) ); libmng-2.0.2/contrib/gcc/sdl-mngplay/ChangeLog0000644000000000000000000000170212005307152017651 0ustar rootroot2001-07-08 Greg Roelofs - added SDL/libmng/zlib/libjpeg version info to usage screen - added mouse-click handling (as an alternate quit mode) - added completely static build - fixed automake setup to order options and libraries correctly on link line, and included resulting files (configure, Makefile.in, etc.) in order to match instructions in INSTALL file 2000-07-06 Ralph Giles * Release 0.1 - added error handling callback - added event system so you can actually quit (click the window closebox or type 'escape' or 'q') - window titles from the filename - added basic auto* 2000-07-05 Ralph Giles * snapshot; - changed refresh parameters to patch libmng 0.9 2000-06-06 Ralph Giles * snapshot; - basic playing works now with the MNGsuite tests 2000-06-06 Ralph Giles * snapshot; - doesn't really work yet # beginning =) libmng-2.0.2/contrib/gcc/sdl-mngplay/install-sh0000755000000000000000000002202112005307152020100 0ustar rootroot#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: libmng-2.0.2/contrib/gcc/sdl-mngplay/.deps/0000755000000000000000000000000012005307152017110 5ustar rootrootlibmng-2.0.2/contrib/gcc/sdl-mngplay/.deps/CVS/0000755000000000000000000000000012005307152017543 5ustar rootrootlibmng-2.0.2/contrib/gcc/sdl-mngplay/.deps/CVS/Entries0000644000000000000000000000005412005307152021076 0ustar rootroot/mngplay.P/1.2/Thu Sep 26 18:09:37 2002// D libmng-2.0.2/contrib/gcc/sdl-mngplay/.deps/CVS/Repository0000644000000000000000000000005312005307152021643 0ustar rootrootlibmng-devel/contrib/gcc/sdl-mngplay/.deps libmng-2.0.2/contrib/gcc/sdl-mngplay/.deps/CVS/Root0000644000000000000000000000005712005307152020413 0ustar rootroot:ext:glennrp@libmng.cvs.sf.net:/cvsroot/libmng libmng-2.0.2/contrib/gcc/sdl-mngplay/.deps/mngplay.P0000644000000000000000000001124012005307152020676 0ustar rootrootmngplay.o: mngplay.c /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-slackware-linux/egcs-2.91.66/include/stddef.h \ /usr/lib/gcc-lib/i386-slackware-linux/egcs-2.91.66/include/stdarg.h \ /usr/include/bits/types.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/bits/stdio_lim.h \ /usr/include/bits/stdio.h /usr/include/stdlib.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/sys/sysmacros.h /usr/include/alloca.h \ /usr/local/include/SDL/SDL.h /usr/local/include/SDL/SDL_main.h \ /usr/local/include/SDL/SDL_types.h \ /usr/local/include/SDL/SDL_getenv.h \ /usr/local/include/SDL/SDL_error.h \ /usr/local/include/SDL/begin_code.h \ /usr/local/include/SDL/close_code.h \ /usr/local/include/SDL/SDL_rwops.h /usr/local/include/SDL/SDL_timer.h \ /usr/local/include/SDL/SDL_audio.h \ /usr/local/include/SDL/SDL_byteorder.h \ /usr/local/include/SDL/SDL_cdrom.h \ /usr/local/include/SDL/SDL_joystick.h \ /usr/local/include/SDL/SDL_events.h \ /usr/local/include/SDL/SDL_active.h \ /usr/local/include/SDL/SDL_keyboard.h \ /usr/local/include/SDL/SDL_keysym.h \ /usr/local/include/SDL/SDL_mouse.h /usr/local/include/SDL/SDL_video.h \ /usr/local/include/SDL/SDL_mutex.h /usr/local/include/SDL/SDL_quit.h \ /usr/local/include/SDL/SDL_version.h /usr/local/include/libmng.h \ /usr/local/include/libmng_conf.h /usr/local/include/libmng_types.h \ /usr/local/include/zlib.h /usr/local/include/zconf.h \ /usr/include/setjmp.h /usr/include/bits/setjmp.h \ /usr/local/include/jpeglib.h /usr/local/include/jconfig.h \ /usr/local/include/jmorecfg.h \ /usr/lib/gcc-lib/i386-slackware-linux/egcs-2.91.66/include/limits.h \ /usr/lib/gcc-lib/i386-slackware-linux/egcs-2.91.66/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/math.h /usr/include/bits/huge_val.h \ /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ /usr/lib/gcc-lib/i386-slackware-linux/egcs-2.91.66/include/float.h \ /usr/include/bits/mathinline.h mngplay.c : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-slackware-linux/egcs-2.91.66/include/stddef.h : /usr/lib/gcc-lib/i386-slackware-linux/egcs-2.91.66/include/stdarg.h : /usr/include/bits/types.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/stdlib.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/sys/sysmacros.h : /usr/include/alloca.h : /usr/local/include/SDL/SDL.h : /usr/local/include/SDL/SDL_main.h : /usr/local/include/SDL/SDL_types.h : /usr/local/include/SDL/SDL_getenv.h : /usr/local/include/SDL/SDL_error.h : /usr/local/include/SDL/begin_code.h : /usr/local/include/SDL/close_code.h : /usr/local/include/SDL/SDL_rwops.h : /usr/local/include/SDL/SDL_timer.h : /usr/local/include/SDL/SDL_audio.h : /usr/local/include/SDL/SDL_byteorder.h : /usr/local/include/SDL/SDL_cdrom.h : /usr/local/include/SDL/SDL_joystick.h : /usr/local/include/SDL/SDL_events.h : /usr/local/include/SDL/SDL_active.h : /usr/local/include/SDL/SDL_keyboard.h : /usr/local/include/SDL/SDL_keysym.h : /usr/local/include/SDL/SDL_mouse.h : /usr/local/include/SDL/SDL_video.h : /usr/local/include/SDL/SDL_mutex.h : /usr/local/include/SDL/SDL_quit.h : /usr/local/include/SDL/SDL_version.h : /usr/local/include/libmng.h : /usr/local/include/libmng_conf.h : /usr/local/include/libmng_types.h : /usr/local/include/zlib.h : /usr/local/include/zconf.h : /usr/include/setjmp.h : /usr/include/bits/setjmp.h : /usr/local/include/jpeglib.h : /usr/local/include/jconfig.h : /usr/local/include/jmorecfg.h : /usr/lib/gcc-lib/i386-slackware-linux/egcs-2.91.66/include/limits.h : /usr/lib/gcc-lib/i386-slackware-linux/egcs-2.91.66/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/math.h : /usr/include/bits/huge_val.h : /usr/include/bits/mathdef.h : /usr/include/bits/mathcalls.h : /usr/lib/gcc-lib/i386-slackware-linux/egcs-2.91.66/include/float.h : /usr/include/bits/mathinline.h : libmng-2.0.2/contrib/gcc/sdl-mngplay/README0000644000000000000000000000144112005307152016757 0ustar rootroot* mngplay * a simple SDL-based mng player This is a simple example program, using the Simple Direct media Layer to display mng animation decoded by the new libmng implementation. SDL and libmng are quite portable, but I've only tried it on x86 Linux. Project files for MacOS, BeOS and Win32 are welcome. The code's fairly rough at this point, but there was no example player for *nix in the distribution. Patches welcome, of course. On a unix-like system, the build instructions are simple: (install and/or build the SDL libraries from libsdl.org) (install and/or build the mng library from libmng.com) ./configure (or ./autogen.sh if you're using the cvs source) make make install To use the player: mngplay .mng --- Ralph Giles $Date: 2002/09/26 18:09:37 $ libmng-2.0.2/contrib/gcc/sdl-mngplay/autogen.sh0000755000000000000000000000740312005307152020104 0ustar rootroot#!/bin/sh # Run this to generate all the initial makefiles, etc. PKGNAME="mngplay" # GRR 20010708: added this; just want to create configure script, not run it: NOCONFIGURE="true" am_opt="--foreign" DIE=0 # try to guess the proper treetop srcdir=`dirname $0` test -z "$srcdir" && srcdir=. (test -f $srcdir/configure.in \ && test -f $srcdir/mngplay.c) || { echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" echo " top-level $PKGNAME directory" exit 1 } # check for autoconf (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`autoconf' installed to compile $PKGNAME." echo "Download the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } # check for automake (automake --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`automake' installed to compile $PKGNAME." echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" echo "(or a newer version if it is available)." DIE=1 NO_AUTOMAKE=yes } # if no automake, don't bother testing for aclocal test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: Missing \`aclocal'. The version of \`automake'" echo "installed doesn't appear recent enough." echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" echo "(or a newer version if it is available)." DIE=1 } if test "$DIE" -eq 1; then exit 1 fi if test -z "$*"; then echo echo "If you wish to pass any options to configure, please specify them on the" echo \`$0\'" command line." echo "For example use --prefix= to specify the install directory." echo fi case $CC in xlc ) am_opt="$(am_opt) --include-deps";; esac for coin in `find $srcdir -name configure.in -print` do dr=`dirname $coin` if test -f $dr/NO-AUTO-GEN; then echo skipping $dr -- flagged as no auto-gen else echo processing $dr macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin` ( cd $dr aclocalinclude="$ACLOCAL_FLAGS" for k in $macrodirs; do if test -d $k; then aclocalinclude="$aclocalinclude -I $k" ##else ## echo "**Warning**: No such directory \`$k'. Ignored." fi done if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then if grep "sed.*POTFILES" configure.in >/dev/null; then : do nothing -- we still have an old unmodified configure.in else echo "Creating $dr/aclocal.m4 ..." test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 echo "Running gettextize... Ignore non-fatal messages." echo "no" | gettextize --force --copy echo "Making $dr/aclocal.m4 writable ..." test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 fi fi if grep "^AM_GNOME_GETTEXT" configure.in >/dev/null; then echo "Creating $dr/aclocal.m4 ..." test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 echo "Running gettextize... Ignore non-fatal messages." echo "no" | gettextize --force --copy echo "Making $dr/aclocal.m4 writable ..." test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 fi if grep "^AC_PROG_LIBTOOL" configure.in >/dev/null; then echo "Running libtoolize..." libtoolize --force --copy fi echo "Running aclocal $aclocalinclude ..." aclocal $aclocalinclude if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then echo "Running autoheader..." autoheader fi echo "Running automake $am_opt ..." automake --add-missing $am_opt echo "Running autoconf ..." autoconf ) fi done #conf_flags="--enable-maintainer-mode --enable-debug " if test x$NOCONFIGURE = x; then echo Running $srcdir/configure $conf_flags "$@" ... $srcdir/configure $conf_flags "$@" else echo Skipping configure process. fi # end libmng-2.0.2/contrib/gcc/sdl-mngplay/aclocal.m40000644000000000000000000007464412005307152017756 0ustar rootroot# generated automatically by aclocal 1.9.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.9.6])]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 7 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH]) ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 3 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.58])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. # # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories # created by `make install' are always world readable, even if the # installer happens to have an overly restrictive umask (e.g. 077). # This was a mistake. There are at least two reasons why we must not # use `-m 0755': # - it causes special bits like SGID to be ignored, # - it may be too restrictive (some setups expect 775 directories). # # Do not use -m 0755 and let people choose whatever they expect by # setting umask. # # We cannot accept any implementation of `mkdir' that recognizes `-p'. # Some implementations (such as Solaris 8's) are not thread-safe: if a # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' # concurrently, both version can detect that a/ is missing, but only # one can create it and the other will error out. Consequently we # restrict ourselves to GNU make (using the --version option ensures # this.) AC_DEFUN([AM_PROG_MKDIR_P], [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi AC_SUBST([mkdir_p])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([acinclude.m4]) libmng-2.0.2/contrib/gcc/sdl-mngplay/COPYING0000644000000000000000000004311012005307152017131 0ustar rootroot 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. Copyright (C) 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. , 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. libmng-2.0.2/contrib/gcc/sdl-mngplay/.cvsignore0000644000000000000000000000017712005307152020104 0ustar rootrootMakefile Makefile.in configure config.log config.cache config.status aclocal.m4 install-sh mkinstalldirs missing .deps mngplay libmng-2.0.2/contrib/gcc/sdl-mngplay/mngplay.c0000644000000000000000000003065012005307152017716 0ustar rootroot/* mngplay $Date: 2003/12/07 09:45:16 $ Ralph Giles This program my be redistributed under the terms of the GNU General Public Licence, version 2, or at your preference, any later version. (this assuming there's no problem with libmng not being GPL...) this is an SDL based mng player. the code is very rough; patches welcome. GRR 20010708: added SDL/libmng/zlib/libjpeg version info, mouse-click handling (alternate quit mode); improved automake setup Raphael Assenat 2003/11/26: added command line options to run in alternate color depths. */ #include #include #include #include #include // basename #define DEFAULT_SDL_VIDEO_DEPTH 32 /* structure for keeping track of our mng stream inside the callbacks */ typedef struct { FILE *file; /* pointer to the file we're decoding */ char *filename; /* pointer to the file's path/name */ SDL_Surface *surface; /* SDL display */ mng_uint32 delay; /* ticks to wait before resuming decode */ int sdl_video_depth; /* The depth for SDL_SetVideoMode */ } mngstuff; /* callbacks for the mng decoder */ /* memory allocation; data must be zeroed */ mng_ptr mymngalloc(mng_uint32 size) { return (mng_ptr)calloc(1, size); } /* memory deallocation */ void mymngfree(mng_ptr p, mng_uint32 size) { free(p); return; } mng_bool mymngopenstream(mng_handle mng) { mngstuff *mymng; /* look up our stream struct */ mymng = (mngstuff*)mng_get_userdata(mng); /* open the file */ mymng->file = fopen(mymng->filename, "rb"); if (mymng->file == NULL) { fprintf(stderr, "unable to open '%s'\n", mymng->filename); return MNG_FALSE; } return MNG_TRUE; } mng_bool mymngclosestream(mng_handle mng) { mngstuff *mymng; /* look up our stream struct */ mymng = (mngstuff*)mng_get_userdata(mng); /* close the file */ fclose(mymng->file); mymng->file = NULL; /* for safety */ return MNG_TRUE; } /* feed data to the decoder */ mng_bool mymngreadstream(mng_handle mng, mng_ptr buffer, mng_uint32 size, mng_uint32 *bytesread) { mngstuff *mymng; /* look up our stream struct */ mymng = (mngstuff*)mng_get_userdata(mng); /* read the requested amount of data from the file */ *bytesread = fread(buffer, 1, size, mymng->file); return MNG_TRUE; } /* the header's been read. set up the display stuff */ mng_bool mymngprocessheader(mng_handle mng, mng_uint32 width, mng_uint32 height) { mngstuff *mymng; SDL_Surface *screen; char title[256]; // fprintf(stderr, "our mng is %dx%d\n", width,height); /* retreive our user data */ mymng = (mngstuff*)mng_get_userdata(mng); screen = SDL_SetVideoMode(width,height, mymng->sdl_video_depth, SDL_SWSURFACE); if (screen == NULL) { fprintf(stderr, "unable to allocate %dx%d video memory: %s\n", width, height, SDL_GetError()); return MNG_FALSE; } printf("SDL Video Mode: %dx%d bpp=%d\n", width, height, mymng->sdl_video_depth); /* save the surface pointer */ mymng->surface = screen; /* set a descriptive window title */ snprintf(title, 256, "mngplay: %s", mymng->filename); SDL_WM_SetCaption(title, "mngplay"); /* in necessary, lock the drawing surface to the decoder can safely fill it. We'll unlock elsewhere before display */ if (SDL_MUSTLOCK(mymng->surface)) { if ( SDL_LockSurface(mymng->surface) < 0 ) { fprintf(stderr, "could not lock display surface\n"); exit(1); } } /* printf("RGBA Masks: %08X %08X %08X %08X\n", mymng->surface->format->Rmask, mymng->surface->format->Gmask, mymng->surface->format->Bmask, mymng->surface->format->Amask); printf("RGBA Shifts: %08X %08X %08X %08X\n", mymng->surface->format->Rshift, mymng->surface->format->Gshift, mymng->surface->format->Bshift, mymng->surface->format->Ashift); */ /* Choose a canvas style which matches the SDL_Surface pixel format */ switch(mymng->surface->format->BitsPerPixel) { case 32: if (mymng->surface->format->Amask==0) { /* No alpha (padding byte) */ if (mymng->surface->format->Bshift==0) { /* Blue first */ mng_set_canvasstyle(mng, MNG_CANVAS_BGRX8); } else { /* Red first */ fprintf(stderr, "No matching mng canvas for sdl pixel format. Colors may be wrong.\n"); mng_set_canvasstyle(mng, MNG_CANVAS_BGRX8); } } else { /* Real alpha */ if (mymng->surface->format->Bshift==0) { /* Blue first */ mng_set_canvasstyle(mng, MNG_CANVAS_BGRA8); } else { /* Red first */ mng_set_canvasstyle(mng, MNG_CANVAS_RGBA8); } } break; case 24: if (mymng->surface->format->Amask==0) { /* No alpha here should mean true rgb24bit */ if (mymng->surface->format->Bshift==0) { /* Blue first */ mng_set_canvasstyle(mng, MNG_CANVAS_BGR8); } else { /* Red first */ mng_set_canvasstyle(mng, MNG_CANVAS_RGB8); } } else { /* If there is an alpha and we are in 24 bpp, this must * mean rgb5658 */ if (mymng->surface->format->Bshift==0) { /* Blue first */ mng_set_canvasstyle(mng, MNG_CANVAS_BGRA565); } else { /* Red first */ mng_set_canvasstyle(mng, MNG_CANVAS_RGBA565); } } break; case 16: if (mymng->surface->format->Bshift==0) { /* Blue first */ mng_set_canvasstyle(mng, MNG_CANVAS_BGR565); } else { /* Red first */ mng_set_canvasstyle(mng, MNG_CANVAS_RGB565); } break; default: return MNG_FALSE; } return MNG_TRUE; } /* return a row pointer for the decoder to fill */ mng_ptr mymnggetcanvasline(mng_handle mng, mng_uint32 line) { mngstuff *mymng; SDL_Surface *surface; mng_ptr row; /* dereference our structure */ mymng = (mngstuff*)mng_get_userdata(mng); /* we assume any necessary locking has happened outside, in the frame level code */ row = mymng->surface->pixels + mymng->surface->pitch*line; // fprintf(stderr, " returning pointer to line %d (%p)\n", line, row); return (row); } /* timer */ mng_uint32 mymnggetticks(mng_handle mng) { mng_uint32 ticks; ticks = (mng_uint32)SDL_GetTicks(); // fprintf(stderr, " %d\t(returning tick count)\n",ticks); return(ticks); } mng_bool mymngrefresh(mng_handle mng, mng_uint32 x, mng_uint32 y, mng_uint32 w, mng_uint32 h) { mngstuff *mymng; SDL_Rect frame; frame.x = x; frame.y = y; frame.w = w; frame.h = h; /* dereference our structure */ mymng = (mngstuff*)mng_get_userdata(mng); /* if necessary, unlock the display */ if (SDL_MUSTLOCK(mymng->surface)) { SDL_UnlockSurface(mymng->surface); } /* refresh the screen with the new frame */ SDL_UpdateRects(mymng->surface, 1, &frame); /* in necessary, relock the drawing surface */ if (SDL_MUSTLOCK(mymng->surface)) { if ( SDL_LockSurface(mymng->surface) < 0 ) { fprintf(stderr, "could not lock display surface\n"); return MNG_FALSE; } } return MNG_TRUE; } /* interframe delay callback */ mng_bool mymngsettimer(mng_handle mng, mng_uint32 msecs) { mngstuff *mymng; // fprintf(stderr," pausing for %d ms\n", msecs); /* look up our stream struct */ mymng = (mngstuff*)mng_get_userdata(mng); /* set the timer for when the decoder wants to be woken */ mymng->delay = msecs; return MNG_TRUE; } mng_bool mymngerror(mng_handle mng, mng_int32 code, mng_int8 severity, mng_chunkid chunktype, mng_uint32 chunkseq, mng_int32 extra1, mng_int32 extra2, mng_pchar text) { mngstuff *mymng; char chunk[5]; /* dereference our data so we can get the filename */ mymng = (mngstuff*)mng_get_userdata(mng); /* pull out the chuck type as a string */ // FIXME: does this assume unsigned char? chunk[0] = (char)((chunktype >> 24) & 0xFF); chunk[1] = (char)((chunktype >> 16) & 0xFF); chunk[2] = (char)((chunktype >> 8) & 0xFF); chunk[3] = (char)((chunktype ) & 0xFF); chunk[4] = '\0'; /* output the error */ fprintf(stderr, "error playing '%s' chunk %s (%d):\n", mymng->filename, chunk, chunkseq); fprintf(stderr, "%s\n", text); return (0); } int mymngquit(mng_handle mng) { mngstuff *mymng; /* dereference our data so we can free it */ mymng = (mngstuff*)mng_get_userdata(mng); /* cleanup. this will call mymngclosestream */ mng_cleanup(&mng); /* free our data */ free(mymng); /* quit */ exit(0); } int checkevents(mng_handle mng) { SDL_Event event; /* check if there's an event pending */ if (!SDL_PollEvent(&event)) { return 0; /* no events pending */ } /* we have an event; process it */ switch (event.type) { case SDL_QUIT: mymngquit(mng); /* quit */ break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: mymngquit(mng); break; case SDL_KEYUP: switch (event.key.keysym.sym) { case SDLK_ESCAPE: case SDLK_q: mymngquit(mng); break; } /* FALL THROUGH */ default: return 1; } return 0; /* GRR ADDED: non-void function */ } int main(int argc, char *argv[]) { mngstuff *mymng; mng_handle mng; SDL_Rect updaterect; if (argc < 2) { const SDL_version *pSDLver = SDL_Linked_Version(); fprintf(stderr, "Usage: %s mngfile [depth]\n\n", basename(argv[0])); fprintf(stderr, " where 'depth' is 15,16,24 or 32\n"); fprintf(stderr, " Compiled with SDL %d.%d.%d; using SDL %d.%d.%d.\n", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL, pSDLver->major, pSDLver->minor, pSDLver->patch); fprintf(stderr, " Compiled with libmng %s; using libmng %s.\n", MNG_VERSION_TEXT, mng_version_text()); fprintf(stderr, " Compiled with zlib %s; using zlib %s.\n", ZLIB_VERSION, zlib_version); #ifdef JPEG_LIB_VERSION { int major = JPEG_LIB_VERSION / 10; int minor = JPEG_LIB_VERSION % 10; char minoralpha[2]; if (minor) { minoralpha[0] = (char)(minor - 1 + 'a'); minoralpha[1] = '\0'; } else minoralpha[0] = '\0'; fprintf(stderr, " Compiled with libjpeg %d%s.\n", major, minoralpha); } #endif fprintf(stderr, "\nPress Esc or Q, or click mouse button, to quit.\n"); exit(1); } /* allocate our stream data structure */ mymng = (mngstuff*)calloc(1, sizeof(*mymng)); if (mymng == NULL) { fprintf(stderr, "could not allocate stream structure.\n"); exit(0); } /* pass the name of the file we want to play */ mymng->filename = argv[1]; /* pass the color depth we wish to use */ if (argc>=3) { mymng->sdl_video_depth = atoi(argv[2]); switch(mymng->sdl_video_depth) { case 15: case 16: case 24: case 32: break; default: fprintf(stderr, "Unsupported color depth. Choices are: 15, 16, 24 and 32\n"); exit(1); } } else { mymng->sdl_video_depth = DEFAULT_SDL_VIDEO_DEPTH; } /* set up the mng decoder for our stream */ mng = mng_initialize(mymng, mymngalloc, mymngfree, MNG_NULL); if (mng == MNG_NULL) { fprintf(stderr, "could not initialize libmng.\n"); exit(1); } /* set the callbacks */ mng_setcb_errorproc(mng, mymngerror); mng_setcb_openstream(mng, mymngopenstream); mng_setcb_closestream(mng, mymngclosestream); mng_setcb_readdata(mng, mymngreadstream); mng_setcb_gettickcount(mng, mymnggetticks); mng_setcb_settimer(mng, mymngsettimer); mng_setcb_processheader(mng, mymngprocessheader); mng_setcb_getcanvasline(mng, mymnggetcanvasline); mng_setcb_refresh(mng, mymngrefresh); /* FIXME: should check for errors here */ /* initialize SDL */ if (SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "%s: Unable to initialize SDL (%s)\n", argv[0], SDL_GetError()); exit(1); } /* arrange to call the shutdown routine before we exit */ atexit(SDL_Quit); /* restrict event handling to the relevant bits */ SDL_EventState(SDL_KEYDOWN, SDL_IGNORE); /* keyup only */ SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE); // SDL_EventState(SDL_MOUSEBUTTONDOWN, SDL_IGNORE); // SDL_EventState(SDL_MOUSEBUTTONUP, SDL_IGNORE); // fprintf(stderr, "playing mng...maybe.\n"); mng_readdisplay(mng); /* loop though the frames */ while (mymng->delay) { // fprintf(stderr, " waiting for %d ms\n", mymng->delay); SDL_Delay(mymng->delay); /* reset the delay in case the decoder doesn't update it again */ mymng->delay = 0; mng_display_resume(mng); /* check for user input (just quit at this point) */ checkevents(mng); } /* ¿hay alguno? pause before quitting */ fprintf(stderr, "pausing before shutdown...\n"); SDL_Delay(1000); /* cleanup and quit */ mymngquit(mng); } libmng-2.0.2/contrib/gcc/sdl-mngplay/Makefile.in0000644000000000000000000004211412076476645020174 0ustar rootroot# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # process this with automake to create Makefile.in SOURCES = $(mngplay_SOURCES) $(mngplay_static_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = mngplay$(EXEEXT) mngplay-static$(EXEEXT) subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \ ChangeLog INSTALL depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_mngplay_OBJECTS = mngplay.$(OBJEXT) mngplay_OBJECTS = $(am_mngplay_OBJECTS) mngplay_DEPENDENCIES = am_mngplay_static_OBJECTS = mngplay.$(OBJEXT) mngplay_static_OBJECTS = $(am_mngplay_static_OBJECTS) mngplay_static_DEPENDENCIES = DEFAULT_INCLUDES = -I. -I$(srcdir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(mngplay_SOURCES) $(mngplay_static_SOURCES) DIST_SOURCES = $(mngplay_SOURCES) $(mngplay_static_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ HAS_SDL = @HAS_SDL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ mngplay_LDADD = @mngplay_LDADD@ mngplay_static_LDADD = @mngplay_static_LDADD@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ mngplay_SOURCES = mngplay.c mngplay_static_SOURCES = mngplay.c mngplay_static_LDFLAGS = -static all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) mngplay$(EXEEXT): $(mngplay_OBJECTS) $(mngplay_DEPENDENCIES) @rm -f mngplay$(EXEEXT) $(LINK) $(mngplay_LDFLAGS) $(mngplay_OBJECTS) $(mngplay_LDADD) $(LIBS) mngplay-static$(EXEEXT): $(mngplay_static_OBJECTS) $(mngplay_static_DEPENDENCIES) @rm -f mngplay-static$(EXEEXT) $(LINK) $(mngplay_static_LDFLAGS) $(mngplay_static_OBJECTS) $(mngplay_static_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mngplay.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-binPROGRAMS install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-info-am .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-compile distclean-generic distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-info-am # end # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libmng-2.0.2/contrib/gcc/mngtree/0000755000000000000000000000000012005307152015311 5ustar rootrootlibmng-2.0.2/contrib/gcc/mngtree/mngtree.c0000644000000000000000000002571612005307152017131 0ustar rootroot/* ************************************************************************** */ /* * * */ /* * COPYRIGHT NOTICE: * */ /* * * */ /* * Copyright (c) 2000 Gerard Juyn (gerard :at: libmng.com) * */ /* * [You may insert additional notices after this sentence if you modify * */ /* * this source] * */ /* * * */ /* * For the purposes of this copyright and license, "Contributing Authors" * */ /* * is defined as the following set of individuals: * */ /* * * */ /* * Gerard Juyn * */ /* * (hopefully some more to come...) * */ /* * * */ /* * The MNG Library is supplied "AS IS". The Contributing Authors * */ /* * disclaim all warranties, expressed or implied, including, without * */ /* * limitation, the warranties of merchantability and of fitness for any * */ /* * purpose. The Contributing Authors assume no liability for direct, * */ /* * indirect, incidental, special, exemplary, or consequential damages, * */ /* * which may result from the use of the MNG Library, even if advised of * */ /* * the possibility of such damage. * */ /* * * */ /* * Permission is hereby granted to use, copy, modify, and distribute this * */ /* * source code, or portions hereof, for any purpose, without fee, subject * */ /* * to the following restrictions: * */ /* * * */ /* * 1. The origin of this source code must not be misrepresented; * */ /* * you must not claim that you wrote the original software. * */ /* * * */ /* * 2. Altered versions must be plainly marked as such and must not be * */ /* * misrepresented as being the original source. * */ /* * * */ /* * 3. This Copyright notice may not be removed or altered from any source * */ /* * or altered source distribution. * */ /* * * */ /* * The Contributing Authors specifically permit, without fee, and * */ /* * encourage the use of this source code as a component to supporting * */ /* * the MNG and JNG file format in commercial products. If you use this * */ /* * source code in a product, acknowledgment would be highly appreciated. * */ /* * * */ /* ************************************************************************** */ /* * * */ /* * project : mngtree * */ /* * file : mngtree.c copyright (c) 2000 G.Juyn * */ /* * version : 1.0.1 * */ /* * * */ /* * purpose : main project file * */ /* * * */ /* * author : G.Juyn * */ /* * web : http://www.3-t.com * */ /* * email : mailto:info@3-t.com * */ /* * * */ /* * comment : mngtree simply dumps the chunk-structure of the supplied * */ /* * first parameter to stdout (should be a xNG-file) * */ /* * * */ /* * changes : 0.5.2 - 06/03/2000 - G.Juyn * */ /* * - fixed for compilation under Linux * */ /* * 0.5.3 - 06/26/2000 - G.Juyn * */ /* * - changed definition of userdata to mng_ptr * */ /* * 0.5.3 - 06/28/2000 - G.Juyn * */ /* * - changed memory allocation size parameters to mng_size_t * */ /* * * */ /* * 1.0.1 - 12/07/2003 - G.Juyn * */ /* * - fixed inclusion of libmng.h (Thanks Raphael) * */ /* * * */ /* ************************************************************************** */ #include #include #include #include "../../../libmng.h" /* ************************************************************************** */ typedef struct user_struct { FILE *hFile; /* file handle */ int iIndent; /* for nice indented formatting */ } userdata; typedef userdata * userdatap; /* ************************************************************************** */ mng_ptr myalloc (mng_size_t iSize) { /* duh! */ return (mng_ptr)calloc (1, (size_t)iSize); } /* ************************************************************************** */ void myfree (mng_ptr pPtr, mng_size_t iSize) { free (pPtr); /* duh! */ return; } /* ************************************************************************** */ mng_bool myopenstream (mng_handle hMNG) { return MNG_TRUE; /* already opened in main function */ } /* ************************************************************************** */ mng_bool myclosestream (mng_handle hMNG) { return MNG_TRUE; /* gets closed in main function */ } /* ************************************************************************** */ mng_bool myreaddata (mng_handle hMNG, mng_ptr pBuf, mng_uint32 iSize, mng_uint32 *iRead) { /* get to my file handle */ userdatap pMydata = (userdatap)mng_get_userdata (hMNG); /* read it */ *iRead = fread (pBuf, 1, iSize, pMydata->hFile); /* iRead will indicate EOF */ return MNG_TRUE; } /* ************************************************************************** */ mng_bool myiterchunk (mng_handle hMNG, mng_handle hChunk, mng_chunkid iChunktype, mng_uint32 iChunkseq) { /* get to my file handle */ userdatap pMydata = (userdatap)mng_get_userdata (hMNG); char aCh[4]; char zIndent[80]; int iX; /* decode the chunkname */ aCh[0] = (char)((iChunktype >> 24) & 0xFF); aCh[1] = (char)((iChunktype >> 16) & 0xFF); aCh[2] = (char)((iChunktype >> 8) & 0xFF); aCh[3] = (char)((iChunktype ) & 0xFF); /* indent less ? */ if ( (iChunktype == MNG_UINT_MEND) || (iChunktype == MNG_UINT_IEND) || (iChunktype == MNG_UINT_ENDL) ) pMydata->iIndent -= 2; /* this looks ugly; but I haven't figured out how to do it prettier */ for (iX = 0; iX < pMydata->iIndent; iX++) zIndent[iX] = ' '; zIndent[pMydata->iIndent] = '\0'; /* print a nicely indented line */ printf ("%s%c%c%c%c\n", zIndent, aCh[0], aCh[1], aCh[2], aCh[3]); /* indent more ? */ if ( (iChunktype == MNG_UINT_MHDR) || (iChunktype == MNG_UINT_IHDR) || (iChunktype == MNG_UINT_JHDR) || (iChunktype == MNG_UINT_DHDR) || (iChunktype == MNG_UINT_BASI) || (iChunktype == MNG_UINT_LOOP) ) pMydata->iIndent += 2; return MNG_TRUE; /* keep'm coming... */ } /* ************************************************************************** */ int dumptree (char * zFilename) { userdatap pMydata; mng_handle hMNG; mng_retcode iRC; /* get a data buffer */ pMydata = (userdatap)calloc (1, sizeof (userdata)); if (pMydata == NULL) /* oke ? */ { fprintf (stderr, "Cannot allocate a data buffer.\n"); return 1; } /* can we open the file ? */ if ((pMydata->hFile = fopen (zFilename, "rb")) == NULL) { /* error out if we can't */ fprintf (stderr, "Cannot open input file %s.\n", zFilename); return 1; } /* let's initialize the library */ hMNG = mng_initialize ((mng_ptr)pMydata, myalloc, myfree, MNG_NULL); if (!hMNG) /* did that work out ? */ { fprintf (stderr, "Cannot initialize libmng.\n"); iRC = 1; } else { /* setup callbacks */ if ( ((iRC = mng_setcb_openstream (hMNG, myopenstream )) != 0) || ((iRC = mng_setcb_closestream (hMNG, myclosestream)) != 0) || ((iRC = mng_setcb_readdata (hMNG, myreaddata )) != 0) ) fprintf (stderr, "Cannot set callbacks for libmng.\n"); else { /* read the file into memory */ if ((iRC = mng_read (hMNG)) != 0) fprintf (stderr, "Cannot read the file.\n"); else { pMydata->iIndent = 2; /* start of the indenting at a nice level */ printf ("Starting dump of %s.\n\n", zFilename); /* run through the chunk list */ if ((iRC = mng_iterate_chunks (hMNG, 0, myiterchunk)) != 0) fprintf (stderr, "Cannot iterate the chunks.\n"); printf ("\nDone.\n"); } } mng_cleanup (&hMNG); /* cleanup the library */ } fclose (pMydata->hFile); /* cleanup */ free (pMydata); return iRC; } /* ************************************************************************** */ int main(int argc, char *argv[]) { if (argc > 1) /* need that first parameter ! */ return dumptree (argv[1]); else printf ("\nUsage: mngtree \n\n"); return 0; } /* ************************************************************************** */ libmng-2.0.2/contrib/gcc/mngtree/makefile.linux0000644000000000000000000000161712005307152020154 0ustar rootroot# makefile for mngtree test-program on Linux ELF with gcc prefix=/usr/local CC=gcc INCPATH=$(prefix)/include LIBPATH=$(prefix)/lib JPEGLIB=/usr/lib ALIGN= # for i386: #ALIGN=-malign-loops=2 -malign-functions=2 WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \ -Wmissing-declarations -Wtraditional -Wcast-align \ -Wstrict-prototypes -Wmissing-prototypes #-Wconversion # for pgcc version 2.95.1, -O3 is buggy; don't use it. CFLAGS=-I$(INCPATH) -Wall -O3 -funroll-loops -DMNG_USE_SO $(ALIGN) # $(WARNMORE) -g LDFLAGS=-L. -Wl,-rpath,. -L$(LIBPATH) -Wl,-rpath,$(LIBPATH) \ -L$(JPEGLIB) -Wl,-rpath,$(JPEGLIB) -lmng -lz -ljpeg -lm OBJS = mngtree.o .SUFFIXES: .c .o .c.o: $(CC) -c $(CFLAGS) -o $@ $*.c all: mngtree mngtree: mngtree.o $(CC) -o mngtree $(CFLAGS) mngtree.o $(LDFLAGS) clean: /bin/rm -f *.o mngtree # DO NOT DELETE THIS LINE -- make depend depends on it. mngtree.o: mngtree.c libmng-2.0.2/contrib/gcc/mngtree/.cvsignore0000644000000000000000000000001012005307152017300 0ustar rootrootmngtree libmng-2.0.2/contrib/gcc/xmngview/0000755000000000000000000000000012005307152015514 5ustar rootrootlibmng-2.0.2/contrib/gcc/xmngview/xmng.h0000644000000000000000000000503112005307152016635 0ustar rootroot#ifndef _XMNG_H_ #define _XMNG_H #define RGB_SIZE 3 #define CANVAS_RGB8_SIZE 3 #define CANVAS_RGBA8_SIZE 4 #define CANVAS_ARGB8_SIZE 4 #define CANVAS_RGB8_A8_SIZE 4 #define CANVAS_BGR8_SIZE 3 #define CANVAS_BGRA8_SIZE 4 #define CANVAS_BGRA8PM_SIZE 4 #define CANVAS_ABGR8_SIZE 4 #define MNG_MAGIC "\x8aMNG\x0d\x0a\x1a\x0a" #define JNG_MAGIC "\x8bJNG\x0d\x0a\x1a\x0a" #define PNG_MAGIC "\x89PNG\x0d\x0a\x1a\x0a" #define PSEUDOCOLOR 1 #define TRUECOLOR 2 #define MNG_TYPE 1 #define JNG_TYPE 2 #define PNG_TYPE 3 #define SPACE_X 10 #define SPACE_Y 10 #define BUT_ENTRY_BORDER 0 #define FRAME_SHADOW_WIDTH 2 #define ANY_WIDTH 4 #define OK MNG_NOERROR #define MAX_COLORBUF 64 typedef struct { unsigned int frozen:1; unsigned int restarted:1; unsigned int stopped:1; unsigned int single_step_wanted:1; unsigned int single_step_served:1; unsigned int has_bg_color:1; unsigned int has_bg_pixel:1; unsigned int x11_init:1; unsigned int timer_active:1; mng_handle user_handle; Widget canvas; int type; XtIntervalId timeout_ID; mng_uint32 counter; mng_uint32 delay; mng_uint32 img_width, img_height; mng_uint32 read_len; mng_uint32 read_pos; unsigned char *read_buf; unsigned char *mng_buf; unsigned char *dither_line; Window external_win; Window frame_win; Window control_win; GC gc; Display *dpy; Window win; unsigned short mng_rgb_size; unsigned short mng_bytes_per_line; XImage *ximage; int src_x, src_y; int dst_x, dst_y; unsigned int frame_w, frame_h; void *shm; int gray; int display_depth, display_type; int have_shmem; Pixel bg_pixel; unsigned short xbg_red, xbg_green, xbg_blue; unsigned char bg_red, bg_green, bg_blue; Visual *visual; unsigned int depth; /* do not free */ struct timeval timer_start; struct timeval timer_end; char *read_idf; FILE *reader; int *argc_ptr; char **argv; char bg_color[MAX_COLORBUF]; } ImageInfo; #define XPUTIMAGE(dpy,dr,gc,xi,a,b,c,d,w,h) \ if (have_shmem) \ XShmPutImage(dpy,dr,gc,xi,a,b,c,d,w,h,True); \ else \ XPutImage(dpy,dr,gc,xi,a,b,c,d,w,h) extern void Viewer_postlude(void); extern XImage *x11_create_ximage(ImageInfo *data); extern void x11_destroy_ximage(ImageInfo *data); extern void x11_init_color(ImageInfo *data); extern void viewer_renderline(ImageInfo *data, unsigned char *scanline, unsigned int row, unsigned int x, unsigned int width); #endif libmng-2.0.2/contrib/gcc/xmngview/Makefile0000644000000000000000000000054012005307152017153 0ustar rootrootCFLAGS=-g -Wall MOTIFLIB=/usr/lib MOTIFINC=/usr/include MNGLIB=-lmng LIBS=-L/usr/lib -L$(MOTIFLIB) -lXm -lXt -lX11 $(MNGLIB) -lm INC=-I/usr/include -I$(MOTIFINC) CC=gcc LDFLAGS= all: clean compile compile: $(CC) $(CFLAGS) $(INC) color.c xmngview.c -o xmngview $(LIBS) clean: rm -f xmngview core install: cp -a xmngview /usr/local/bin/xmngview libmng-2.0.2/contrib/gcc/xmngview/xmngview.c0000644000000000000000000006502312005307152017532 0ustar rootroot/* Built with libmng-1.0.9 * Compiled on linux with gcc-3.3.4 * james@blastwave.org suggested the single step mode and wrote: * "xmngview works on Solaris both Sparc and Intel and compiles with Sun's cc" * * * This program my be redistributed under the terms of the * GNU General Public Licence, version 2, or at your preference, * any later version. * * For more information about libmng please visit: * * The official libmng web-site: * http://www.libmng.com * * Libmng on SourceForge: * http://libmng.sourceforge.net * * The official MNG homepage: * http://www.libpng.org/pub/mng * * The official PNG homepage: * http://www.libpng.org/pub/png */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "xmng.h" #define DEFAULT_BACKGROUND "grey77" static char version[]={"0.6"}; static void run_viewer(FILE *reader, char *read_idf); static mng_handle user_handle; static ImageInfo img; static struct timeval start_tv, now_tv; static XtIntervalId timeout_ID; static char *prg_idf; static XtAppContext app_context; static Widget toplevel, main_form, canvas, file_label; static XmFontList file_font; static Dimension start_width; #define SLASH '/' /* * Cnf: XQueryColor(3X11) */ static char *parse_rgb_color(char *val) { char *s, *d; int ch; char status, rgb_type; char r[6], g[6], b[6], rgb[24]; rgb_type = 0; status = 1; s = val; memset(r, 0, 6); memset(g, 0, 6); memset(b, 0, 6); if(strncasecmp(s, "rgb:", 4) == 0) { rgb_type = 1; s += 4; if((d = strchr(s, SLASH))) { *d = 0; if(d - s > 4) s[4] = 0; strcpy(r, s); s = ++d; if((d = strchr(s, SLASH))) { *d = 0; if(d - s > 4) s[4] = 0; strcpy(g, s); s = d + 1; while((ch = *++d) && isxdigit(ch)); *d = 0; if(d - s > 4) s[4] = 0; strcpy(b, s); } if(*r == 0 || *g == 0 || *b == 0) return NULL; s = r - 1; while((ch = *++s)) { if(isxdigit(ch)) continue; status = rgb_type = 0; break; } s = g - 1; while((ch = *++s)) { if(isxdigit(ch)) continue; status = rgb_type = 0; break; } s = b - 1; while((ch = *++s)) { if(isxdigit(ch)) continue; status = rgb_type = 0; break; } if(status) { strcpy(rgb, "rgb:"); d = rgb + 4; s = r; while(*s) *d++ = *s++; *d++ = SLASH; s = g; while(*s) *d++ = *s++; *d++ = SLASH; s = b; while(*s) *d++ = *s++; *d = 0; return strdup(rgb); } } /* if((slash = strchr(s, SLASH))) */ return NULL; } s = val; if(*s == '#' || isdigit(*s)) { if(*s != '#') --s; while((ch = *++s)) { if(isxdigit(ch)) continue; status = 0; break; } if(status) { d = rgb; s = val; if(*s == '#') ++s; /* * #RGB (4 bits each) * #RRGGBB (8 bits each) * #RRRGGGBBB (12 bits each) * #RRRRGGGGBBBB (16 bits each) */ if(strlen(s) > 12) s[12] = 0; *d++ = '#'; strcpy(d, s); return strdup(rgb); } return NULL; } /* * 'white', 'LavenderBlush', 'dark slate gray', 'grey12' */ s = val - 1; while((ch = *++s)) { if(isalnum(ch) || isspace(ch)) continue; status = 0; break; } if(!status) return NULL; return strdup(val); }/* parse_rgb_color() */ static void set_bg_pixel(ImageInfo *img) { XColor xcolor; Widget w; char *s, *d; int found; w = img->canvas; if(!img->has_bg_pixel) { if(img->has_bg_color) { s = strdup(img->bg_color); d = parse_rgb_color(s); free(s); if(d) { strcpy(img->bg_color, d); free(d); } else img->has_bg_color = 0; } if(!img->has_bg_color) { strcpy(img->bg_color, DEFAULT_BACKGROUND); img->has_bg_color = 1; } found = XParseColor(img->dpy, DefaultColormap(img->dpy, DefaultScreen(img->dpy)), img->bg_color, &xcolor); if(!found) { strcpy(img->bg_color, DEFAULT_BACKGROUND); found = XParseColor(img->dpy, DefaultColormap(img->dpy, DefaultScreen(img->dpy)), img->bg_color, &xcolor); } xcolor.flags = DoRed | DoGreen | DoBlue; XAllocColor(img->dpy, DefaultColormap(img->dpy, DefaultScreen(img->dpy)), &xcolor); } else { xcolor.pixel = img->bg_pixel; xcolor.flags = DoRed|DoGreen|DoBlue; found = XQueryColor(img->dpy, DefaultColormap(img->dpy, DefaultScreen(img->dpy)), &xcolor); } img->bg_pixel = xcolor.pixel; img->xbg_red = xcolor.red; img->xbg_green = xcolor.green; img->xbg_blue = xcolor.blue; img->bg_red = (unsigned char)xcolor.red&0xff; img->bg_green = (unsigned char)xcolor.green&0xff; img->bg_blue = (unsigned char)xcolor.blue&0xff; img->has_bg_pixel = 1; }/* set_bg_pixel() */ static void fsb_cancel_cb(Widget w, XtPointer client, XtPointer call) { XtUnmanageChild(w); } void create_file_dialog(Widget w, char *button_text, char *title_text, void(*fsb_select_cb)(Widget,XtPointer,XtPointer)) { Arg args[4]; int cnt; Widget dialog; XmString button_str, title_str, filter; Widget child; cnt = 0; dialog = XmCreateFileSelectionDialog(w, "Files", args, cnt); XtUnmanageChild(XmFileSelectionBoxGetChild(dialog,XmDIALOG_HELP_BUTTON)); XtAddCallback(dialog, XmNcancelCallback, fsb_cancel_cb, NULL); XtAddCallback(dialog, XmNokCallback, fsb_select_cb, NULL); button_str = XmStringCreateLocalized(button_text); title_str = XmStringCreateLocalized(title_text); filter = XmStringCreateLocalized("*.[jmp]ng"); XtVaSetValues(dialog, XmNokLabelString, button_str, XmNdialogTitle, title_str, XmNpattern, filter, XmNfileFilterStyle, XmFILTER_NONE, NULL); XmStringFree(button_str); XmStringFree(title_str); XmStringFree(filter); child = XmFileSelectionBoxGetChild(dialog, XmDIALOG_FILTER_TEXT); XtVaSetValues(child, XmNfontList, file_font, NULL); child = XmFileSelectionBoxGetChild(dialog, XmDIALOG_DIR_LIST); XtVaSetValues(child, XmNfontList, file_font, NULL); child = XmFileSelectionBoxGetChild(dialog, XmDIALOG_LIST); XtVaSetValues(child, XmNfontList, file_font, NULL); child = XmFileSelectionBoxGetChild(dialog, XmDIALOG_TEXT); XtVaSetValues(child, XmNfontList, file_font, NULL); XtManageChild(dialog); XMapRaised(XtDisplay (dialog), XtWindow (XtParent (dialog))); } void run_mng_file_cb(Widget w, XtPointer client, XtPointer call) { XmFileSelectionBoxCallbackStruct *fsb; char *read_idf; FILE *reader; XtUnmanageChild(w); fsb = (XmFileSelectionBoxCallbackStruct *)call; XmStringGetLtoR(fsb->value, XmSTRING_DEFAULT_CHARSET, &read_idf); if(read_idf == NULL || *read_idf == 0) return; reader = fopen(read_idf, "r"); if(reader == NULL) { perror(read_idf); fprintf(stderr, "\n\n%s: cannot open file '%s'\n\n", prg_idf, read_idf); return; } run_viewer(reader, read_idf); free(read_idf); } static void user_reset_data(void) { if(timeout_ID) XtRemoveTimeOut(timeout_ID); timeout_ID = 0; mng_cleanup(&img.user_handle); img.read_pos = 0; free(img.read_buf); img.read_buf = NULL; img.read_len = 0; img.img_width = 0; img.img_height = 0; img.mng_bytes_per_line = 0; img.read_idf = NULL; img.frozen = 0; img.restarted = 0; img.single_step_wanted = 0; img.single_step_served = 0; XClearWindow(img.dpy, img.win); } void browse_file_cb(Widget w, XtPointer client, XtPointer call) { if(img.user_handle) user_reset_data(); img.stopped = 0; img.frozen = 0; img.restarted = 0; create_file_dialog(w, "Select", "Select MNG file", run_mng_file_cb); } void Viewer_postlude(void) { if(timeout_ID) XtRemoveTimeOut(timeout_ID); mng_cleanup(&img.user_handle); if(img.reader) fclose(img.reader); if(img.ximage) XDestroyImage(img.ximage); if(img.read_buf) free(img.read_buf); if(img.mng_buf) free(img.mng_buf); if(img.dither_line) free(img.dither_line); if(!img.external_win && img.dpy) XtCloseDisplay(img.dpy); fputc('\n', stderr); } static void user_init_data(ImageInfo *img) { unsigned int depth; int screen; Display *dpy; dpy = img->dpy; screen = DefaultScreen(dpy); depth = DefaultDepth(dpy, screen); img->depth = depth; if(!img->visual) { img->visual = DefaultVisual(dpy, screen); img->gc = DefaultGC(dpy, DefaultScreen(dpy)); } else { if(img->mng_buf) free(img->mng_buf); if(img->dither_line) free(img->dither_line); x11_destroy_ximage(img); } set_bg_pixel(img); mng_set_bgcolor(img->user_handle, img->xbg_red, img->xbg_green, img->xbg_blue); img->mng_bytes_per_line = img->img_width * img->mng_rgb_size; img->mng_buf = (unsigned char*) calloc(1, img->mng_bytes_per_line * img->img_height); img->dither_line = (unsigned char*) calloc(1, img->mng_bytes_per_line); if(!img->x11_init) { x11_init_color(img); img->x11_init = 1; } img->ximage = x11_create_ximage(img); if(img->ximage == NULL) { Viewer_postlude(); exit(0); } } static void player_exit_cb(Widget w, XtPointer client, XtPointer call) { Viewer_postlude(); exit(0); } static void player_stop_cb(Widget w, XtPointer client, XtPointer call) { if(img.type != MNG_TYPE) return; if(!img.user_handle) return; if(img.stopped) return; user_reset_data(); img.stopped = 1; } static void player_single_step_cb(Widget w, XtPointer client, XtPointer call) { if(img.type != MNG_TYPE) return; if(!img.user_handle) return; if(img.stopped) return; if(img.single_step_served) { img.single_step_served = 0; img.frozen = 0; img.single_step_wanted = 1; return; } if(timeout_ID) XtRemoveTimeOut(timeout_ID); timeout_ID = 0; img.single_step_wanted = 1; mng_display_resume(img.user_handle); } static void player_pause_cb(Widget w, XtPointer client, XtPointer call) { if(img.type != MNG_TYPE) return; if(!img.user_handle) return; if(img.stopped) return; if(img.frozen) return; if(timeout_ID) XtRemoveTimeOut(timeout_ID); timeout_ID = 0; img.frozen = 1; img.single_step_served = 0; img.single_step_wanted = 0; } static void player_resume_cb(Widget w, XtPointer client, XtPointer call) { if(img.type != MNG_TYPE) return; if(!img.user_handle) return; if(img.stopped) return; if(!img.frozen && !img.single_step_served) return; img.frozen = 0; if(img.single_step_served || img.single_step_wanted) { img.single_step_served = 0; img.single_step_wanted = 0; if(timeout_ID) XtRemoveTimeOut(timeout_ID); timeout_ID = 0; } mng_display_resume(img.user_handle); } static void player_restart_cb(Widget w, XtPointer client, XtPointer call) { if(img.type != MNG_TYPE) return; if(!img.user_handle) return; if(img.stopped) return; img.frozen = 1; if(timeout_ID) XtRemoveTimeOut(timeout_ID); timeout_ID = 0; img.frozen = 0; img.single_step_served = 0; img.single_step_wanted = 0; img.read_pos = 0; mng_reset(img.user_handle); img.restarted = 1; gettimeofday(&start_tv, NULL); mng_read(img.user_handle); mng_display(img.user_handle); } static void release_event_cb(Widget w, XtPointer client, XEvent *event, Boolean *cont) { Viewer_postlude(); exit(0); } static void redraw(int type) { if((type == Expose || type == GraphicsExpose) && img.ximage) { XPutImage(img.dpy, img.win, img.gc, img.ximage, 0, 0, 0, 0, img.img_width, img.img_height); } } static void exposures_cb(Widget w, XtPointer client, XmDrawingAreaCallbackStruct *cbs) { redraw(cbs->event->xany.type); } static mng_ptr user_alloc(mng_size_t len) { return calloc(1, len + 2); } static void user_free(mng_ptr buf, mng_size_t len) { free(buf); } static mng_bool user_read(mng_handle user_handle, mng_ptr out_buf, mng_uint32 req_len, mng_uint32 *out_len) { mng_uint32 more; ImageInfo *img; img = (ImageInfo *)mng_get_userdata(user_handle); more = img->read_len - img->read_pos; if(more > 0 && img->read_buf != NULL) { if(req_len < more) more = req_len; memcpy(out_buf, img->read_buf + img->read_pos, more); img->read_pos += more; *out_len = more; return MNG_TRUE; } return MNG_FALSE; } static mng_bool user_open_stream(mng_handle user_handle) { return MNG_TRUE; } static mng_bool user_close_stream(mng_handle user_handle) { return MNG_TRUE; } static void create_widgets(mng_uint32 width, mng_uint32 height) { Widget but_rc, but_frame, canvas_frame; Widget but1, but2, but3, but4, but5, but6, but7; toplevel = XtAppInitialize(&app_context, "xmngview", NULL, 0, img.argc_ptr, img.argv, 0, 0, 0); main_form = XtVaCreateManagedWidget("main_form", xmFormWidgetClass, toplevel, XmNhorizontalSpacing, SPACE_X, XmNverticalSpacing, SPACE_Y, XmNresizable, True, NULL); but_frame = XtVaCreateManagedWidget("but_frame", xmFrameWidgetClass, main_form, XmNshadowType, XmSHADOW_ETCHED_OUT, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNshadowThickness, FRAME_SHADOW_WIDTH, NULL); but_rc = XtVaCreateManagedWidget("but_rc", xmRowColumnWidgetClass, but_frame, XmNentryAlignment, XmALIGNMENT_CENTER, XmNorientation, XmHORIZONTAL, XmNpacking, XmPACK_COLUMN, XmNnumColumns, 1, XmNresizeWidth, True, XmNentryBorder, BUT_ENTRY_BORDER, NULL); but1 = XtVaCreateManagedWidget("Exit", xmPushButtonWidgetClass, but_rc, NULL); XtAddCallback(but1, XmNactivateCallback, player_exit_cb, (XtPointer)toplevel); but2 = XtVaCreateManagedWidget("Pause", xmPushButtonWidgetClass, but_rc, NULL); XtAddCallback(but2, XmNactivateCallback, player_pause_cb, (XtPointer)toplevel); but3 = XtVaCreateManagedWidget("GoOn", xmPushButtonWidgetClass, but_rc, NULL); XtAddCallback(but3, XmNactivateCallback, player_resume_cb, NULL); but4 = XtVaCreateManagedWidget("Restart", xmPushButtonWidgetClass, but_rc, NULL); XtAddCallback(but4, XmNactivateCallback, player_restart_cb, NULL); but5 = XtVaCreateManagedWidget("Step", xmPushButtonWidgetClass, but_rc, NULL); XtAddCallback(but5, XmNactivateCallback, player_single_step_cb, NULL); but6 = XtVaCreateManagedWidget("Finish", xmPushButtonWidgetClass, but_rc, NULL); XtAddCallback(but6, XmNactivateCallback, player_stop_cb, NULL); but7 = XtVaCreateManagedWidget("Browse", xmPushButtonWidgetClass, but_rc, NULL); XtAddCallback(but7, XmNactivateCallback, browse_file_cb, NULL); file_label = XtVaCreateManagedWidget("FILE: ", xmLabelWidgetClass, main_form, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, but_frame, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); canvas_frame = XtVaCreateManagedWidget("canvas_frame", xmFrameWidgetClass, main_form, XmNshadowType, XmSHADOW_ETCHED_OUT, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, file_label, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); canvas = XtVaCreateManagedWidget("canvas", xmDrawingAreaWidgetClass, canvas_frame, XmNheight, height, XmNwidth, width, NULL); XtAddEventHandler(canvas, ButtonReleaseMask|ButtonPressMask, False, release_event_cb, (XtPointer)toplevel); XtAddCallback(canvas, XmNexposeCallback, (XtCallbackProc)exposures_cb, (XtPointer)&img); XtRealizeWidget(toplevel); if(start_width == 0) { width = height = 0; start_width = (FRAME_SHADOW_WIDTH<<1); XtVaGetValues(but1, XmNwidth, &width, NULL); start_width += width + (BUT_ENTRY_BORDER<<1) + ANY_WIDTH; XtVaGetValues(but2, XmNwidth, &width, NULL); start_width += width + (BUT_ENTRY_BORDER<<1) + ANY_WIDTH; XtVaGetValues(but3, XmNwidth, &width, NULL); start_width += width + (BUT_ENTRY_BORDER<<1) + ANY_WIDTH; XtVaGetValues(but4, XmNwidth, &width, NULL); start_width += width + (BUT_ENTRY_BORDER<<1) + ANY_WIDTH; XtVaGetValues(but5, XmNwidth, &width, NULL); start_width += width + (BUT_ENTRY_BORDER<<1) + ANY_WIDTH; XtVaGetValues(but6, XmNwidth, &width, NULL); start_width += width + (BUT_ENTRY_BORDER<<1); XtVaGetValues(but7, XmNwidth, &width, NULL); start_width += width + (BUT_ENTRY_BORDER<<1); } img.canvas = canvas; img.dpy = XtDisplay(img.canvas); img.win = XtWindow(img.canvas); file_font = XmFontListAppendEntry(NULL, XmFontListEntryCreate(XmFONTLIST_DEFAULT_TAG, XmFONT_IS_FONT, XLoadQueryFont(img.dpy, "-*-helvetica-medium-r-*-*-12-*-*-*-*-*-iso8859-1"))); } static mng_bool user_process_header(mng_handle user_handle, mng_uint32 width, mng_uint32 height) { ImageInfo *img; Dimension cw, ch, tw, th, dh, dw, fw, fh; XmString xmstr; char *s, buf[128]; img = (ImageInfo*)mng_get_userdata(user_handle); if(img->restarted) { img->restarted = 0; return MNG_TRUE; } img->img_width = width; img->img_height = height; if(!img->external_win) { if(!img->canvas) create_widgets(width, height); else { tw = th = fw = fh = cw = ch = 0; XtVaGetValues(toplevel, XmNwidth, &tw, XmNheight, &th, NULL); XtVaGetValues(main_form, XmNwidth, &fw, XmNheight, &fh, NULL); XtVaGetValues(img->canvas, XmNwidth, &cw, XmNheight, &ch, NULL); if(height > ch) { dh = height - ch; th += dh; fh += dh; } else if(ch > height) { dh = ch - height; th -= dh; fh -= dh; } if(width > cw) { dw = width - cw; tw += dw; fw += dw; } else if(cw > width) { if(width > start_width) dw = cw - width; else dw = cw - start_width; tw -= dw; fw -= dw; } if(fw < start_width) { tw = start_width + (SPACE_X<<1); fw = start_width; } XtVaSetValues(toplevel, XmNwidth,tw , XmNheight,th , NULL); XtVaSetValues(main_form, XmNwidth,fw , XmNheight,fh , NULL); XtVaSetValues(img->canvas, XmNwidth,width , XmNheight,height , NULL); } } else if(img->external_win) { Display *dpy; XtToolkitInitialize(); app_context = XtCreateApplicationContext(); dpy = XtOpenDisplay(app_context, NULL,NULL,"xmngview", NULL, 0, img->argc_ptr, img->argv); img->dpy = dpy; img->win = img->external_win; XSelectInput(dpy, img->win, ExposureMask); } user_init_data(img); if(img->canvas) { s = strrchr(img->read_idf, '/'); if(s == NULL) s = img->read_idf; else ++s; s = strdup(s); if(strlen(s) > 64) s[64] = 0; sprintf(buf, "%s (%d x %d)", s, img->img_width, img->img_height); xmstr = XmStringCreateLtoR((char*)buf, XmSTRING_DEFAULT_CHARSET); XtVaSetValues(file_label, XmNlabelString, xmstr, NULL); XmStringFree(xmstr); free(s); } gettimeofday(&start_tv, NULL); return MNG_TRUE; } static void wait_cb(XtPointer client, XtIntervalId * id) { timeout_ID = 0; if(img.frozen || img.single_step_served) { // gettimeofday(&start_tv, NULL); timeout_ID = XtAppAddTimeOut(app_context, img.delay, wait_cb, NULL); } else { mng_display_resume(img.user_handle); } } static mng_bool user_set_timer(mng_handle user_handle, mng_uint32 delay) { ImageInfo *img; img = (ImageInfo*)mng_get_userdata(user_handle); img->delay = delay; timeout_ID = XtAppAddTimeOut(app_context, delay, wait_cb, NULL); return MNG_TRUE; } static mng_uint32 user_get_tick_count(mng_handle user_handle) { double sec, usec; mng_uint32 ticks; sec = (double)(now_tv.tv_sec - start_tv.tv_sec); usec = (double)now_tv.tv_usec - (double)start_tv.tv_usec; ticks = (mng_uint32)(sec * 1000.0 + usec/1000.0); /* fprintf(stderr,"TICKS %u (%f:%f)\n", ticks, sec, usec); */ return ticks; } static mng_ptr user_get_canvas_line(mng_handle user_handle, mng_uint32 line) { ImageInfo *img; img = (ImageInfo*)mng_get_userdata(user_handle); return img->mng_buf + img->mng_bytes_per_line * line; } static mng_bool user_refresh(mng_handle user_handle, mng_uint32 x, mng_uint32 y, mng_uint32 width, mng_uint32 height) { ImageInfo *img; mng_uint32 src_len; unsigned char *src_start, *src_buf; int row, max_row; Display *dpy; GC gc; Window win; XImage *ximage; Visual *visual; int have_shmem; img = (ImageInfo*)mng_get_userdata(user_handle); if(img->single_step_wanted) img->single_step_served = 1; win = img->win; gc = img->gc; dpy = img->dpy; ximage = img->ximage; visual = img->visual; have_shmem = img->have_shmem; max_row = y + height; row = y; src_len = img->mng_bytes_per_line; src_buf = src_start = img->mng_buf + img->mng_rgb_size * x + y * src_len; while(row < max_row) { viewer_renderline(img, src_start, row, x, width); ++row; src_start += src_len; } XPUTIMAGE(dpy, win, gc, ximage, x, y, x, y, width, height); XSync(dpy, False); return MNG_TRUE; } static mng_bool user_error(mng_handle user_handle, mng_int32 code, mng_int8 severity, mng_chunkid chunktype, mng_uint32 chunkseq, mng_int32 extra1, mng_int32 extra2, mng_pchar text) { ImageInfo *img; unsigned char chunk[5]; img = (ImageInfo*)mng_get_userdata(user_handle); chunk[0] = (char)((chunktype >> 24) & 0xFF); chunk[1] = (char)((chunktype >> 16) & 0xFF); chunk[2] = (char)((chunktype >> 8) & 0xFF); chunk[3] = (char)((chunktype ) & 0xFF); chunk[4] = '\0'; fprintf(stderr, "\n\n%s: error playing(%s) chunk[%d]'%s':\n", prg_idf, img->read_idf, chunkseq, chunk); fprintf(stderr, "code(%d) severity(%d) extra1(%d) extra2(%d)" "\ntext:'%s'\n\n", code, severity, extra1, extra2, text); return 0; } static mng_bool prelude(void) { #define MAXBUF 8 unsigned char buf[MAXBUF]; if(fread(buf, 1, MAXBUF, img.reader) != MAXBUF) { fprintf(stderr,"\n%s:prelude\n\tcannot read signature \n", prg_idf); return MNG_FALSE; } if(memcmp(buf, MNG_MAGIC, 8) == 0) img.type = MNG_TYPE; else if(memcmp(buf, JNG_MAGIC, 8) == 0) img.type = JNG_TYPE; else if(memcmp(buf, PNG_MAGIC, 8) == 0) img.type = PNG_TYPE; if(!img.type) { fprintf(stderr,"\n%s:'%s' is no MNG / JNG / PNG file\n", prg_idf, img.read_idf); return MNG_FALSE; } fseek(img.reader, 0, SEEK_SET); fseek(img.reader, 0, SEEK_END); img.read_len = ftell(img.reader); fseek(img.reader, 0, SEEK_SET); if(!img.user_handle) { user_handle = mng_initialize(&img, user_alloc, user_free, MNG_NULL); if(user_handle == MNG_NULL) { fprintf(stderr, "\n%s: cannot initialize libmng.\n", prg_idf); return MNG_FALSE; } img.user_handle = user_handle; mng_set_canvasstyle(user_handle, MNG_CANVAS_RGB8); img.mng_rgb_size = CANVAS_RGB8_SIZE; if(mng_setcb_openstream(user_handle, user_open_stream) != OK || mng_setcb_closestream(user_handle, user_close_stream) != OK || mng_setcb_readdata(user_handle, user_read) != OK || mng_setcb_settimer(user_handle, user_set_timer) != OK || mng_setcb_gettickcount(user_handle, user_get_tick_count) != OK || mng_setcb_processheader(user_handle, user_process_header) != OK || mng_setcb_getcanvasline(user_handle, user_get_canvas_line) != OK || mng_setcb_refresh(user_handle, user_refresh) != OK || mng_setcb_errorproc(user_handle, user_error) != OK ) { fprintf(stderr,"\n%s: cannot set callbacks for libmng.\n", prg_idf); return MNG_FALSE; } } img.read_buf = (unsigned char*)calloc(1, img.read_len + 2); fread(img.read_buf, 1, img.read_len, img.reader); fclose(img.reader); img.reader = NULL; return MNG_TRUE; } static void run_viewer(FILE *reader, char *read_idf) { XEvent event; img.read_idf = read_idf; img.reader = reader; if(read_idf != NULL) { if(prelude() == MNG_FALSE) return ; gettimeofday(&start_tv, NULL); mng_read(img.user_handle); mng_display(img.user_handle); } if(!img.external_win) { XtAppMainLoop(app_context); } else while(1) { XtAppNextEvent(app_context, &event); redraw(event.type); } } static void usage(const char *prg) { const char *bar= "\n------------------------------------------------------------------------\n"; fputs(bar, stderr); fprintf(stderr,"%s version %s\n" "USAGE: %s [--w WINDOW] [--bg BACKGROUND_COLOR] [FILE]\n", prg, version, prg); fputs("\twith BACKGROUND_COLOR = " "(\"TEXT\" | \"#RGB\" | \"rgb:R/G/B\" | \"PIXEL\")\n" "\te.g.\n\t(--bg \"red\" | --bg \"#ff0000\" " "| --bg \"rgb:ff/00/00\" | --bg \"0xf800\")\n" "\twith FILE=(idf.mng | idf.jng | idf.png)",stderr); fputs(bar, stderr); } static void shrink_name(char *buf) { char *s, *d; int ch; s = d = buf; while((ch = *s++)) { if(isspace(ch)) continue; *d++ = tolower(ch); } *d = 0; } int main(int argc, char **argv) { FILE *reader; char *read_idf, *s; char *ok; int i; unsigned char has_bg_color, has_bg_pixel; Window external_win; Pixel bg_pixel; if((prg_idf = strrchr(argv[0], '/')) == NULL) prg_idf = argv[0]; else ++prg_idf; memset(&img, 0, sizeof(ImageInfo)); external_win = 0; read_idf = NULL; reader = NULL; has_bg_color = has_bg_pixel = 0; bg_pixel = 0; i = 0; while(++i < argc) { s = argv[i]; if(strcmp(s, "--help") == 0 || strcmp(s, "-help") == 0 || *s == '?') { usage(prg_idf); return 0; } if(strcasecmp(s, "--w") == 0) { ++i; s = argv[i]; external_win = strtoul(s, &ok, 10); if(*ok) return 0; continue; } if(strcasecmp(s, "--bg") == 0) { ++i; s = argv[i]; if(*s == '#' || strncasecmp(s, "rgb:", 4) == 0 || isalpha(*s)) { strncpy(img.bg_color, s, MAX_COLORBUF); img.bg_color[MAX_COLORBUF] = 0; has_bg_color = 1; if(*s != '#') shrink_name(img.bg_color); continue; } bg_pixel = strtoul(s, &ok, 16); if(*ok == 0) has_bg_pixel = 1; continue; } if(*s != '-') { read_idf = s; continue; } } if(read_idf != NULL) { reader = fopen(read_idf, "rb"); if(reader == NULL) { perror(read_idf); fprintf(stderr, "\n\n%s: cannot open file '%s'\n\n", prg_idf, read_idf); return 0; } } img.argv = argv; img.argc_ptr = &argc; img.external_win = external_win; img.has_bg_pixel = has_bg_pixel; img.bg_pixel = bg_pixel; img.has_bg_color = has_bg_color; if(!has_bg_pixel && !has_bg_color) { strcpy(img.bg_color, DEFAULT_BACKGROUND); img.has_bg_color = 1; } if(read_idf == NULL && external_win == 0) create_widgets(5,5); run_viewer(reader, read_idf); Viewer_postlude(); return 0; } libmng-2.0.2/contrib/gcc/xmngview/xmngview0000755000000000000000000025631712005307152017324 0ustar rootrootELF>@*@@Ð+@8@%"@@@@@ÀÀ@@@@d~d~ €€`€`x¯ (€(€`(€`ðð@@ PåtdÈuÈu@Èu@œœQåtd/lib64/ld-linux-x86-64.so.2GNUayP`<Y.nteomUx pi/;NsJwZD+Vb3RB > ajq,M%!'kvH )f"urLQXT^& hC$#1?5(89=G74-@:WSK*E_]0[FOAl6dIc\2g™ ª[#' ˆ`?8´Oj y (ˆ`s½û @ˆ`N«©â¸ Hq@¾¢ÙÒé÷ €0`Ö` TBPæfpÖ`´}2ò• (±¾† ŒÍ€Ö`Y BïÜ×äàà`÷4b2èà`Fñÿˆ` ,É2JLþ>TUf;íuJ_kyM”}ô‹ñÿx/a“)jyÂðà` ”`°Õ1xñÿˆ`Á£ö¶šmÌÉÚè ˜#@îlibXm.so.2XtVaSetValuesXClearWindowxmPushButtonWidgetClassXtRealizeWidgetXmFileSelectionBoxGetChild__gmon_start___Jv_RegisterClassesxmLabelWidgetClass_XmStringsXCreateImage_finiXtCreateApplicationContextXmStringGetLtoRXtOpenDisplayXFreeColorsXtAppNextEventXtAddCallbackXtRemoveTimeOutxmFormWidgetClassXtAppMainLoopXmFontListAppendEntryxmRowColumnWidgetClassXtVaCreateManagedWidgetXmCreateFileSelectionDialogXmStringFreeXDefaultScreenXtStringsXSelectInputxmFrameWidgetClassXtAppAddTimeOutxmDrawingAreaWidgetClassXQueryColorXSyncXmStringCreateLocalizedXPutImageXtAddEventHandlerXLoadQueryFontXParseColorXmStringCreateLtoRXAllocColorXtUnmanageChildXSetErrorHandlerXMapRaisedXtManageChildXtVaGetValues_initXmFontListEntryCreatelibXt.so.6XtWindowXtAppInitializeXtDisplayXtParentXtCloseDisplayXtToolkitInitializelibX11.so.6XGetVisualInfoXVisualIDFromVisuallibmng.so.2mng_get_userdatamng_resetmng_readmng_setcb_openstreammng_setcb_errorprocmng_displaymng_setcb_getcanvaslinemng_setcb_closestreammng_set_canvasstylemng_setcb_processheadermng_setcb_settimermng_cleanupmng_setcb_refreshmng_setcb_gettickcountmng_initializemng_setcb_readdatamng_display_resumemng_set_bgcolorlibm.so.6libc.so.6strcpyshmgetexitsprintffopenstrrchrshmatperrorftellstrncpyshmctlshmdttolowerstrdupcallocstrlenmemset__errno_locationfseekmemcmpfputcfputsmemcpyfclosestrtoulmallocstrcasecmp__ctype_b_locstderrstrncasecmpfwritefreadgettimeofdaystrchrfprintfstrcmpstrerror__libc_start_mainfreelibXext.so.6XShmCreateImageXShmQueryExtensionXShmAttachXShmPutImageXShmDetach_edata__bss_start_endGLIBC_2.3GLIBC_2.2.5ãii ui š‚` ‚` ˆ`(ˆ`@ˆ``Ö`$pÖ`+€Ö`;àà`@èà`Eðà`d@‚`H‚`P‚`X‚``‚`h‚`p‚`x‚` €‚` ˆ‚` ‚` ˜‚` ‚`¨‚`°‚`¸‚`À‚`È‚`Ђ`Ø‚`à‚`è‚`ð‚`ø‚`ƒ`ƒ` ƒ`!ƒ`" ƒ`#(ƒ`%0ƒ`&8ƒ`'@ƒ`(Hƒ`)Pƒ`*Xƒ`,`ƒ`-hƒ`.pƒ`/xƒ`0€ƒ`1ˆƒ`2ƒ`3˜ƒ`4 ƒ`5¨ƒ`6°ƒ`7¸ƒ`8Àƒ`9ȃ`:Ѓ`<؃`=àƒ`>èƒ`?ðƒ`Aøƒ`B„`C„`D„`F„`H „`I(„`J0„`K8„`L@„`MH„`NP„`OX„`P`„`Qh„`Rp„`Sx„`T€„`Uˆ„`V„`W˜„`X „`Y¨„`Z°„`[¸„`\À„`]È„`^Є``Ø„`aà„`bè„`cð„`eø„`f…`g…`h…`i…`j …`k(…`m0…`n8…`o@…`pH…`qP…`rX…`s`…`th…`up…`vx…`xHƒìèËèJèeMHƒÄÃÿ5z^ ÿ%|^ @ÿ%z^ héàÿÿÿÿ%r^ héÐÿÿÿÿ%j^ héÀÿÿÿÿ%b^ hé°ÿÿÿÿ%Z^ hé ÿÿÿÿ%R^ héÿÿÿÿ%J^ hé€ÿÿÿÿ%B^ hépÿÿÿÿ%:^ hé`ÿÿÿÿ%2^ h éPÿÿÿÿ%*^ h é@ÿÿÿÿ%"^ h é0ÿÿÿÿ%^ h é ÿÿÿÿ%^ h éÿÿÿÿ% ^ héÿÿÿÿ%^ héðþÿÿÿ%ú] héàþÿÿÿ%ò] héÐþÿÿÿ%ê] héÀþÿÿÿ%â] hé°þÿÿÿ%Ú] hé þÿÿÿ%Ò] héþÿÿÿ%Ê] hé€þÿÿÿ%Â] hépþÿÿÿ%º] hé`þÿÿÿ%²] héPþÿÿÿ%ª] hé@þÿÿÿ%¢] hé0þÿÿÿ%š] hé þÿÿÿ%’] héþÿÿÿ%Š] héþÿÿÿ%‚] héðýÿÿÿ%z] h éàýÿÿÿ%r] h!éÐýÿÿÿ%j] h"éÀýÿÿÿ%b] h#é°ýÿÿÿ%Z] h$é ýÿÿÿ%R] h%éýÿÿÿ%J] h&é€ýÿÿÿ%B] h'épýÿÿÿ%:] h(é`ýÿÿÿ%2] h)éPýÿÿÿ%*] h*é@ýÿÿÿ%"] h+é0ýÿÿÿ%] h,é ýÿÿÿ%] h-éýÿÿÿ% ] h.éýÿÿÿ%] h/éðüÿÿÿ%ú\ h0éàüÿÿÿ%ò\ h1éÐüÿÿÿ%ê\ h2éÀüÿÿÿ%â\ h3é°üÿÿÿ%Ú\ h4é üÿÿÿ%Ò\ h5éüÿÿÿ%Ê\ h6é€üÿÿÿ%Â\ h7épüÿÿÿ%º\ h8é`üÿÿÿ%²\ h9éPüÿÿÿ%ª\ h:é@üÿÿÿ%¢\ h;é0üÿÿÿ%š\ h<é üÿÿÿ%’\ h=éüÿÿÿ%Š\ h>éüÿÿÿ%‚\ h?éðûÿÿÿ%z\ h@éàûÿÿÿ%r\ hAéÐûÿÿÿ%j\ hBéÀûÿÿÿ%b\ hCé°ûÿÿÿ%Z\ hDé ûÿÿÿ%R\ hEéûÿÿÿ%J\ hFé€ûÿÿÿ%B\ hGépûÿÿÿ%:\ hHé`ûÿÿÿ%2\ hIéPûÿÿÿ%*\ hJé@ûÿÿÿ%"\ hKé0ûÿÿÿ%\ hLé ûÿÿÿ%\ hMéûÿÿÿ% \ hNéûÿÿÿ%\ hOéðúÿÿÿ%ú[ hPéàúÿÿÿ%ò[ hQéÐúÿÿÿ%ê[ hRéÀúÿÿÿ%â[ hSé°úÿÿÿ%Ú[ hTé úÿÿÿ%Ò[ hUéúÿÿÿ%Ê[ hVé€úÿÿÿ%Â[ hWépúÿÿÿ%º[ hXé`úÿÿÿ%²[ hYéPúÿÿÿ%ª[ hZé@úÿÿÿ%¢[ h[é0úÿÿÿ%š[ h\é úÿÿÿ%’[ h]éúÿÿÿ%Š[ h^éúÿÿÿ%‚[ h_éðùÿÿÿ%z[ h`éàùÿÿÿ%r[ haéÐùÿÿÿ%j[ hbéÀùÿÿÿ%b[ hcé°ùÿÿÿ%Z[ hdé ùÿÿÿ%R[ heéùÿÿÿ%J[ hfé€ùÿÿÿ%B[ hgépùÿÿ1íI‰Ñ^H‰âHƒäðPTIÇÀq@HÇÁpp@HÇdzl@è—úÿÿôHƒìH‹¡W H…ÀtÿÐHƒÄÃU€=`¶ H‰åATSuJHqU L%bU H‹K¶ L)ãHÁûHƒëH9ØsHƒÀH‰-¶ AÿÄH‹"¶ H9Ør寶 [A\ÉÃHƒ=(U UH‰åtH‹W H…ÀtH=U Éÿà@ÉÃUH‰åSHƒìHH‰}ÈH‰uÀH‰U¸‰M´‹E´ƒè‰EèÇEì霋Uì‰ÐÁà)ЉÂÁú÷}èf‰EØ‹Uì‰ÐÁà)ЉÂÁú÷}èf‰EÚ‹Uì‰ÐÁà)ЉÂÁú÷}èf‰EÜHUÐH‹MÀH‹EÈH‰ÎH‰Çèýÿÿ…Àu'‹MìH‹U¸H‹]ÀH‹EÈA¸H‰ÞH‰Çèzùÿÿ¸ë)‹EìH˜HÁàHE¸H‹UÐH‰ƒEì‹Eì;E´ŒXÿÿÿ¸HƒÄH[ÉÃUH‰åSHƒìhH‰}ÈH‰uÀH‰U¸‰M´D‰E°D‰M¬‹E´ƒè‰Eè‹E°ƒè‰Eä‹E¬ƒè‰EàÇEìéЋE°‰Â¯U¬‰Uœ‹Eì‰ÂÁú÷}œ‰ÂÁú÷}´‰ÐÁà)ЉÂÁú÷}èf‰EØ‹Eì‰ÂÁú÷}¬‰ÂÁú÷}°‰ÐÁà)ЉÂÁú÷}äf‰EÚ‹Eì‰ÂÁú÷}¬‰ÐÁà)ЉÂÁú÷}àf‰EÜHUÐH‹MÀH‹EÈH‰ÎH‰Çèßûÿÿ…Àu'‹MìH‹U¸H‹]ÀH‹EÈA¸H‰ÞH‰ÇèKøÿÿ¸ë1‹EìH˜HÁàHE¸H‹UÐH‰ƒEì‹E´¯E°¯E¬;Eìÿÿÿ¸HƒÄh[ÉÃUH‰åHƒì0H‰}èH‰uà‰U܉MØD‰EÔ‹EÜf‰Eø‹EØf‰Eú‹EÔf‰EüHUðH‹MàH‹EèH‰ÎH‰Çè6ûÿÿH‹EðÉÃUH‰åSH‰}ÀH‰u¸H‰U°ÇEôÇEðÇEìÇEèÇEäÇEàÇEÜëz‹Eܺ‰Ó‰ÁÓã‰ØH˜H‰EÐH‹EÐH‹UÀH!ÐH…ÀtƒEôë ƒ}ôuƒEðH‹EÐH‹U¸H!ÐH…ÀtƒEìë ƒ}ìuƒEèH‹EÐH‹U°H!ÐH…ÀtƒEäë ƒ}äuƒEàƒE܃}Ü~€ÇEÜ鼸+Eô‹U܉ÁÓú‹Eð‰Ó‰ÁÓã‰ØHcЋEÜH˜H‰Å`ë`¸+Eì‹U܉ÁÓú‹Eè‰Ó‰ÁÓã‰ØHcЋEÜH˜H‰Å`ó`¸+Eä‹U܉ÁÓú‹Eà‰Ó‰ÁÓã‰ØHcЋEÜH˜H‰Å`û`‹EÜH˜H‹Å`ë`‹EÜH˜H‹Å`ó`H ‹EÜH˜H‹Å`û`H ‹EÜH˜H‰Å`aƒEÜ}ÜÿŽ7ÿÿÿ[ÉÃUH‰åATSHƒÄ€H‰½xÿÿÿH‹…xÿÿÿH‹@xH‰EàH‹EàH‹èH‹Eà‹€àH˜HÁàHH‹@PH‰EØ‹ʱ …Àu Ǽ± H‹EàH‰Çè÷ÿÿ‰E H‹…xÿÿÿH‹€àH‰ÇèsùÿÿH‰E˜HMŒHUH‹Eà¾H‰ÇèFùÿÿH‰g± H‹EàH‰Çè÷ÿÿ…ÀtH‹…xÿÿÿÇ€ÄH‹?± ‹@‰EÔƒ}Ô…aH‹…xÿÿÿÇ€¸H‹…xÿÿÿÇ€¼H‹…xÿÿÿÇ€ÀH‹õ° H‹P0H‹ê° H‹H(H‹ß° H‹@ H‰ÎH‰Çè(ýÿÿH‹]ØH‹EàA¸¹ºH‰ÞH‰Çè¹üÿÿH‰¾¸ ‹¬° kÀ/P?…ÀHÂÁøA‰ÄH‹]ØH‹EàA¸À¹ÀºÀH‰ÞH‰ÇèxüÿÿIcÔH‰Õ@é`‹g° kÀ7P?…ÀHÂÁøA‰ÄH‹]ØH‹EàA¸à¹àºàH‰ÞH‰Çè3üÿÿIcÔH‰Õ@é`‹"° ‰ÐÁà)ÐP?…ÀHÂÁøA‰ÄH‹]ØH‹EàA¸ÿÿ¹ÿÿºÿÿH‰ÞH‰ÇèêûÿÿIcÔH‰Õ@é`é܃}Ô…ÒH‹½¯ ‹@ƒø…¿H‹…xÿÿÿÇ€¼H‹…xÿÿÿÇ€À‹•¯ H‹]ØH‹Eà‰Ñº@é`H‰ÞH‰Çècùÿÿ…Àt>‹q¯ »`q@H‹!¯ A‰Ð¹éº†q@H‰ÞH‰Ç¸èÄ÷ÿÿè­¿è•òÿÿH‹…xÿÿÿ‹€¸…À…ðÇEì韋Eì‹4…à…`‹Eì‹ …À…`‹Eì‹… …`H‹]ØH‹EàA‰ñA‰È‰Ñº@á`H‰ÞH‰Çè£ùÿÿ…ÀuY‹Eì‹… …`‹Eì‹…À…`¯Ð‹Eì‹…à…`¯Â‰¨® ‹ ¦® ‹Eì‹…à…`‹Eì‹…À…`‹Eì‹… …`‰Þ‰ÇèëƒEìƒ}ì†Wÿÿÿƒ}ìu5H‹…xÿÿÿÇ€¸H‹ ® H‰Â¸q@H‰Ñº,¾H‰Çè`öÿÿH‹…xÿÿÿ‹€¸…À„!‹® ‰Áº¾¿è›éƒ}Ôt ƒ}Ô…»H‹…xÿÿÿÇ€¼H‹…xÿÿÿÇ€ÀÇ­ @H‹…xÿÿÿÇ€¸‹«­ ‰Áº¾¿è-‹­ H‹]ØH‹Eà‰Ñº@é`H‰ÞH‰Çè]÷ÿÿ…Àts‹k­ »Àq@H‹­ A‰Ð¹º†q@H‰ÞH‰Ç¸è¾õÿÿè§¿èðÿÿ»èq@H‹㬠¹º†q@H‰ÞH‰Ç¸è‰õÿÿèr¿èZðÿÿH‹]ØH‹EàA¸¹ºÿÿH‰ÞH‰ÇèÛøÿÿH‰à¶ H‹]ØH‹EàA¸¹ÿÿºH‰ÞH‰Çè±øÿÿH‰¾¶ H‹]ØH‹EàA¸ÿÿ¹ºH‰ÞH‰Çè‡øÿÿH‰œ¶ H‹…xÿÿÿ‹€¸…ÀtHÇh¬ @é`HÇE¬ T>@ëHÇP¬ @á`HÇ-¬ V=@Hƒì€[A\ÉÃUH‰åH‰}øH‰uðÇNÖ ¸ÉÃUH‰åSHƒìXH‰}ÈHÇEèHÇEàH‹EÈ‹€Ä…À„p¿ü4@èþóÿÿH‰EØ¿ è€ïÿÿH‰EàH‹EÈH‹UàH‰°H‹Eຠ¾H‰ÇèwîÿÿH‹EÈ‹p4H‹EÈ‹H0H‹EÈ‹èH‹EÈH‹˜àH‹EÈH‹@xH‹}à‰t$‰ $I‰ùA¸¹H‰ÞH‰Çè8ðÿÿH‰EèHƒ}è„”H‹Eè‹P,H‹Eè‹@¯ÂH˜ºÿH‰Æ¿èÄòÿÿH‹Uà‰BH‹Eà‹@ƒøÿuSèñÿÿ‹‰ÇècðÿÿH‰ÁH‹Eè‹P,H‹Eè‹@¯Âÿÿ…ÀHÂÁø‰Â» r@H‹“ª H‰ÞH‰Ç¸èCóÿÿéNH‹Eà‹@º¾‰Çè–óÿÿH‰ÂH‹EàH‰PH‹EàH‹@Hƒøÿu¿r@èÃòÿÿéH‹EàH‹PH‹EèH‰PH‹EàÇ@H‹EÈH‹@xH‹UàH‰ÖH‰ÇèñÿÿH‹EÈH‹@x¾H‰Çè‡ðÿÿH‹Eà‹@º¾‰Çèoòÿÿ‹IÔ …À„H‹EÈÇ€ÄH‹EàH‹@H‰ÇèíÿÿH‹EàH‰ÇèGîÿÿHÇEàH‹EÈHÇ€°H‹EèH‹P`H‹EèH‰ÇÿÒHÇEèë1H‹EÈÇ€ÄH‹EàH‰ÇèûíÿÿHÇEàH‹EÈHÇ€°H‹EØH‰Çè˜ñÿÿHƒ}è…ÎH‹EÈHÇ€°H‹EÈ‹P0H‹EÈ‹@4¯ÐH‹EÈ‹€¼¯Â‰ÀH‰ÇèæìÿÿH‰EÐHƒ}Ðu)H‹ä¨ H‰Â¸#r@H‰Ñº¾H‰Çè7ñÿÿé’H‹EÈ‹p4H‹EÈ‹H0H‹}ÐH‹EÈ‹èH‹EÈH‹˜àH‹EÈH‹@xÇD$ÇD$‰t$‰ $I‰ùA¸¹H‰ÞH‰ÇèìÿÿH‰EèH‹Eè‹P,H‹Eè‹@¯ÂHcÐH‹EèH‹@¾H‰ÇèFëÿÿH‹EèënHƒ}àt;H‹Eà‹@…Àt$H‹Eà‹@ƒøÿtH‹Eà‹@º¾‰ÇèŠðÿÿH‹EàH‰ÇèŽìÿÿHƒ}ètH‹EèH‹P`H‹EèH‰ÇÿÒH‹EÈHÇ€°¸HƒÄX[ÉÃUH‰åHƒì H‰}èH‹EèH‹€°H‰EøHƒ}øtTH‹EèH‹@xH‹UøH‰ÖH‰ÇèrðÿÿH‹EèH‹€H‹P`H‹EèH‹€H‰ÇÿÒH‹EøH‹@H‰Çè£êÿÿH‹EøH‰ÇèçëÿÿëH‹EèH‹€H‹P`H‹EèH‹€H‰ÇÿÒÉÃUH‰åHƒì0‰}܉u؉UÔ‰MЋEدEÔH˜H‰xÑ ‹EÔH˜H‰tÑ ‹E܃èò*Àò *8f(Ñò^Ðf(ÂfÀfZÀóEô‹E؃èò*Àò ÿ7f(Ñò^Ðf(ÂfÀfZÀóEð‹EÔƒèò*Àò Ô7f(Ñò^Ðf(ÂfÀfZÀóEì‹EЃèò*Àò ©7f(Ñò^Ðf(ÂfÀfZÀóE躾†`¿€+aèìÿÿÇEüëTÇEøëA‹EøH˜‹UüHcÒHÁâHH‹Å€+aH‰ÂHÁâ‹EøH˜‹MüHcÉHÁáHH‰Å€+aƒEøƒ}ø~¹ƒEüƒ}ü~¦ÇEüéó*Eüó^Eôó,ÀˆEç¶EçƒÀˆEæó*Eü¶Eçó*ÈóYMôó\Áó^Eôó ×6óYÁó,Àf‰EäH‹ìÏ ‰Â¶Eç¯ÂˆEçH‹ÙÏ ‰Â¶Eæ¯ÂˆEæ·Eä‰ÂÁâ¶EæÁà¶EçHcЋEüH˜H‰Å€ aó*Eüó^Eðó,ÀˆEç¶EçƒÀˆEæó*Eü¶Eçó*ÈóYMðó\Áó^Eðó >6óYÁó,Àf‰EäH‹[Ï ‰Â¶Eç¯ÂˆEçH‹HÏ ‰Â¶Eæ¯ÂˆEæ·Eä‰ÂÁâ¶EæÁà¶EçHcЋEüH˜H‰Å€aó*Eüó^Eìó,ÀˆEç¶EçƒÀˆEæó*Eü¶Eçó*ÈóYMìó\Áó^Eìó ¥5óYÁó,Àf‰Eä·Eä‰ÂÁâ¶EæÁà¶EçHcЋEüH˜H‰Å€aó*Eüó^Eèó,ÀˆEç¶EçƒÀˆEæó*Eü¶Eçó*ÈóYMèó\Áó^Eèó 25óYÁó,Àf‰Eä·Eä‰ÂÁâ¶EæÁà¶EçHcЋEüH˜H‰Å€#aƒEü}üÿŽ×ýÿÿÉÃUH‰åH‰}ÈH‰uÀ‰U¼‰M¸¸€+a‹U¼ƒâHÁâHÐH‰EàÇEì鼋EìƒàHÁàHEàH‹H‰EØH‹Eȶ¶ÀH˜H‹Å€ aH‰EðH‹EØH;EðsHÁmðH‹EÈHƒÀ¶¶ÀH˜H‹Å€aH‰EøH‹EØH;EøsHÁmøH‹EøHEðH‹EÈHƒÀ¶¶ÀH˜H‹Å€aH‰EøH‹EØH;EøsHÁmøH‹EøHEðHƒEÈH‹Eð‰ÂH‹EÀˆHƒEÀƒEì‹Eì;E¸‚8ÿÿÿÉÃUH‰åH‰}ØH‰uЉỦMȸ€+a‹ŨâHÁâHÐH‰EèÇEôéžH‹Eض¶Ð‰ÐÀ H‹EØHƒÀ¶¶Ð‰ÐÀÐÀH‹EØHƒÀ¶¶À ºgfff‰È÷êÁú‰ÈÁø‰Ñ)Á‰ÈH˜H‰EàH‹EàH‹Å€#aH‰EøHƒEØ‹EôƒàHÁàHEèH‹H;EøsHÁmøH‹Eø‰ÂH‹EЈHƒEЃEô‹Eô;EÈ‚VÿÿÿÉÃUH‰åSHƒìXH‰}¸H‰u°‰U¬‰M¨D‰E¤H‹E¸·€ˆf‰EÚH‹E¸H‹€H‰EÐH‹E°H‰Eè‹E¨‰EÜ‹E¤‹U¨‰EÌH‹E¸‹€Àƒø…êH‹E¸H‹@PH‰EàL‹s¡ ‹M¤‹U¬H‹]àH‹EèH‰ÞH‰ÇAÿÐë?H‹EÐL‹@pH‹c¡ H‹Eà¶¶ÀHÁàHH‹‹U¬‹]ÜH‹EЉÞH‰ÇAÿЃEÜHƒEà‹EÜ;EÌr¹ë}H‹Eè¶¶ÀH˜H‹Å`ë`H‹EèHƒÀ¶¶ÀH˜H‹Å`ó`H ÂH‹EèHƒÀ¶¶ÀH˜H‹Å`û`H ÐH‰EÀH‹EÐL‹@p‹U¬‹]ÜH‹MÀH‹EЉÞH‰ÇAÿЃEÜHƒEè‹EÜ;EÌrƒHƒÄX[ÉÃUH‰åHƒìpH‰}˜ÆEîÆEïH‹E˜H‰EøHE຾H‰Çè:ãÿÿHEк¾H‰Çè$ãÿÿHEÀº¾H‰ÇèãÿÿH‹Eøº¾Hr@H‰Çèˆæÿÿ…À…eÆEîHƒEøH‹Eø¾/H‰ÇèÆåÿÿH‰EðHƒ}ð„2H‹EðÆH‹UðH‹EøH‰ÑH)ÁH‰ÈHƒø~ H‹EøHƒÀÆH‹UøHEàH‰ÖH‰Çè»æÿÿHƒEðH‹EðH‰EøH‹Eø¾/H‰Çè]åÿÿH‰EðHƒ}ð„¿H‹EðÆH‹UðH‹EøH‰ÑH)ÁH‰ÈHƒø~ H‹EøHƒÀÆH‹UøHEÐH‰ÖH‰ÇèRæÿÿH‹EðHƒÀH‰EøHƒEðH‹Eð¶¾À‰Eèƒ}èt#èéãÿÿH‹‹UèHcÒHÒHз·À%…ÀuÅH‹EðÆH‹UðH‹EøH‰ÑH)ÁH‰ÈHƒø~ H‹EøHƒÀÆH‹UøHEÀH‰ÖH‰ÇèÏåÿÿ¶Eà„Àt¶EЄÀt¶EÀ„Àu ¸éHEàHƒèH‰Eøë1èZãÿÿH‹‹UèHcÒHÒHз·À%…Àu ÆEî¶EîˆEïëHƒEøH‹Eø¶¾À‰Eèƒ}èu·HEÐHƒèH‰Eøë1èãÿÿH‹‹UèHcÒHÒHз·À%…Àu ÆEî¶EîˆEïëHƒEøH‹Eø¶¾À‰Eèƒ}èu·HEÀHƒèH‰Eøë1è¬âÿÿH‹‹UèHcÒHÒHз·À%…Àu ÆEî¶EîˆEïëHƒEøH‹Eø¶¾À‰Eèƒ}èu·€}ï„Ù¹Hr@HE ºH‰ÎH‰Çè%ãÿÿHE HƒÀH‰EðHEàH‰EøëH‹Eø¶H‹EðˆHƒEðHƒEøH‹Eø¶„ÀuÞH‹EðÆ/HƒEðHEÐH‰EøëH‹Eø¶H‹EðˆHƒEðHƒEøH‹Eø¶„ÀuÞH‹EðÆ/HƒEðHEÀH‰EøëH‹Eø¶H‹EðˆHƒEðHƒEøH‹Eø¶„ÀuÞH‹EðÆHE H‰Çèúâÿÿ騸éžH‹E˜H‰EøH‹Eø¶<#t-ècáÿÿH‹H‹Eø¶H¾ÀHÀH··À%…À„ÑH‹Eø¶<#t1Hƒmøë*è$áÿÿH‹‹UèHcÒHÒHз·À%…ÀuÆEïëHƒEøH‹Eø¶¾À‰Eèƒ}èu¾€}ïtmHE H‰EðH‹E˜H‰EøH‹Eø¶<#uHƒEøH‹EøH‰ÇèuàÿÿHƒø v H‹EøHƒÀ ÆH‹EðÆ#HƒEðH‹UøH‹EðH‰ÖH‰ÇèÅâÿÿHE H‰Çèéáÿÿé—¸éH‹E˜HƒèH‰EøëNèWàÿÿH‹‹UèHcÒHÒHз·Àƒà…Àu)è6àÿÿH‹‹UèHcÒHÒHз·À% …Àu ÆEïëëHƒEøH‹Eø¶¾À‰Eèƒ}èuš€}ïu¸ë H‹E˜H‰ÇèMáÿÿÉÃUH‰åSHƒìHH‰}¸H‹E¸H‹@H‰EèH‹E¸¶ƒà@„À…ÏH‹E¸¶ƒà „ÀtmH‹E¸H0H‰ÇèáÿÿH‰EàH‹EàH‰Çè$úÿÿH‰EØH‹EàH‰ÇèßÿÿHƒ}Øt(H‹EØH‹U¸HÂ0H‰ÆH‰×èáÿÿH‹EØH‰ÇèãÞÿÿë H‹E¸¶ƒâ߈H‹E¸¶ƒà „Àu,¸Mr@H‹U¸HŠ0ºH‰ÆH‰ÏèçßÿÿH‹E¸¶ƒÊ ˆH‹E¸H°0H‹E¸H‹@xH‹èH‹E¸H‹@x‹€àH˜HÁàHH‹XPH‹E¸H‹@xHUÀH‰ÑH‰òH‰ÞH‰Çèøàÿÿ‰EÔƒ}Ôuv¸Mr@H‹U¸HŠ0ºH‰ÆH‰Ïè_ßÿÿH‹E¸H°0H‹E¸H‹@xH‹èH‹E¸H‹@x‹€àH˜HÁàHH‹XPH‹E¸H‹@xHUÀH‰ÑH‰òH‰ÞH‰Çè|àÿÿ‰EÔÆEÎH‹E¸H‹@xH‹èH‹E¸H‹@x‹€àH˜HÁàHH‹HPH‹E¸H‹@xHUÀH‰ÎH‰Çè£àÿÿëXH‹E¸H‹€ÈH‰EÀÆEÎH‹E¸H‹@xH‹èH‹E¸H‹@x‹€àH˜HÁàHH‹HPH‹E¸H‹@xHUÀH‰ÎH‰Çè ßÿÿ‰EÔH‹UÀH‹E¸H‰È·UÈH‹E¸f‰Ð·UÊH‹E¸f‰Ò·UÌH‹E¸f‰Ô·EȉÂH‹E¸ˆÖ·EʉÂH‹E¸ˆ×·ẺÂH‹E¸ˆØH‹E¸¶ƒÊ@ˆHƒÄH[ÉÃUH‰åHƒì H‰}øH‰uðH‰UèH‹EøH‰ÇèàÿÿÉÃUH‰åSHì¸H‰½xÿÿÿH‰µpÿÿÿH‰•hÿÿÿH‰`ÿÿÿÇEì‹MìHU€H‹…xÿÿÿ¾Tr@H‰ÇèÞÜÿÿH‰EàH‹Eà¾H‰ÇèùÚÿÿH‰Çè±ßÿÿH‹E๺æH@¾åœ`H‰ÇèÖÛÿÿH‹•`ÿÿÿH‹Eà¹¾Ž©`H‰Çè¹ÛÿÿH‹…pÿÿÿH‰ÇèêÝÿÿH‰EØH‹…hÿÿÿH‰Çè×ÝÿÿH‰EпZr@èÉÝÿÿH‰EÈH‹]ÐH‹UØH‹EàHÇD$ÇD$HÇD$AÌ`H‹MÈH‰ $A¹Vª`I‰Ø¹ÉŸ`¾™©`H‰Ç¸è·ÙÿÿH‹EØH‰ÇèKÜÿÿH‹EÐH‰Çè?ÜÿÿH‹EÈH‰Çè3ÜÿÿH‹Eà¾H‰ÇèÚÿÿH‰EÀH‹ÿä H‹EÀ¹¾9£`H‰Ç¸è\ÙÿÿH‹Eà¾H‰ÇèËÙÿÿH‰EÀH‹Èä H‹EÀ¹¾9£`H‰Ç¸è%ÙÿÿH‹Eà¾H‰Çè”ÙÿÿH‰EÀH‹‘ä H‹EÀ¹¾9£`H‰Ç¸èîØÿÿH‹EྠH‰Çè]ÙÿÿH‰EÀH‹Zä H‹EÀ¹¾9£`H‰Ç¸è·ØÿÿH‹EàH‰Çè»ÞÿÿH‹EàH‰ÇèÜÿÿH‰Çè‡ØÿÿH‰ÃH‹EàH‰ÇèÛÿÿH‰ÞH‰Çè-ÞÿÿHĸ[ÉÃUH‰åSHƒìHH‰}ÈH‰uÀH‰U¸H‹EÈH‰Çè’ÝÿÿH‹E¸H‰EèH‹EèH‹@HUؾdr@H‰ÇèaÙÿÿH‹EØH…À„€H‹Eض„Àtxºer@H‹EØH‰ÖH‰ÇèÙÿÿH‰EàHƒ}àu5H‹EØH‰Çè~ÝÿÿH‹MØH‹;ã »gr@H‹ç” H‰ÞH‰Ç¸è—Ýÿÿë%H‹UØH‹EàH‰ÖH‰Çè©H‹EØH‰ÇèVÙÿÿëëHƒÄH[ÉÃUH‰åH‹Þâ H…ÀtH‹Òâ H‰Çè ÙÿÿHǿ⠿¨-aèåÛÿÿÇWá H‹Tá H‰ÇèüØÿÿHÇAá Ç/á Çá Çá fÇdá HÇßá ¶Èà ƒàþˆ¿à ¶¸à ƒàýˆ¯à ¶¨à ƒà÷ˆŸà ¶˜à ƒàïˆà H‹á H‹ùà H‰ÖH‰ÇèöÖÿÿÉÃUH‰åHƒì H‰}øH‰uðH‰UèH‹aà H…Àtèöþÿÿ¶Hà ƒàûˆ?à ¶8à ƒàþˆ/à ¶(à ƒàýˆà H‹Eø¹mK@º…r@¾•r@H‰ÇèlûÿÿÉÃUH‰åH‹‡á H…ÀtH‹{á H‰Çè³×ÿÿ¿¨-aè™ÚÿÿH‹êà H…ÀtH‹Þà H‰ÇèþÚÿÿH‹Gà H…ÀtH‹;à H‹P`H‹0à H‰ÇÿÒH‹Ôß H…ÀtH‹Èß H‰Çèp×ÿÿH‹Áß H…ÀtH‹µß H‰ÇèU×ÿÿH‹®ß H…ÀtH‹¢ß H‰Çè:×ÿÿH‹›ß H…ÀuH‹¯ß H…ÀtH‹£ß H‰Çè£ÙÿÿH‹l’ H‰Æ¿ èïÖÿÿÉÃUH‰åSHƒì(H‰}ØH‹EØH‹@xH‰EèH‹Eè‹€à‰EäH‹EèH‹€è‹UäHcÒHÁâHЋ@8‰EàH‹EØ‹Uà‰èH‹EØH‹€àH…ÀuTH‹EèH‹€è‹UäHcÒHÁâHÐH‹P@H‹EØH‰àH‹EèH‹èH‹Eè‹€àH˜HÁàHH‹PHH‹EØH‰PpëFH‹EØH‹@HH…ÀtH‹EØH‹@HH‰Çè+ÖÿÿH‹EØH‹@PH…ÀtH‹EØH‹@PH‰ÇèÖÿÿH‹EØH‰Çè§éÿÿH‹EØH‰Çè{öÿÿH‹EØ·€Ô·ÈH‹EØ·€Ò·ÐH‹EØ·€Ð·ØH‹EØH‹@‰ÞH‰Çè*ÚÿÿH‹EØ‹@0‰ÂH‹EØ·€ˆ¯ÐH‹EØf‰ŠH‹EØ·€Š·ÐH‹EØ‹@4¯Â‰ÀH‰Æ¿èØÿÿH‰ÂH‹EØH‰PHH‹EØ·€Š·ÀH‰Æ¿è[ØÿÿH‰ÂH‹EØH‰PPH‹Eضƒà€„ÀuH‹EØH‰Çè²ÞÿÿH‹EضƒÊ€ˆH‹EØH‰Çè—äÿÿH‹UØH‰‚H‹EØH‹€H…Àuèüüÿÿ¿èäÓÿÿHƒÄ([ÉÃUH‰åHƒì H‰}øH‰uðH‰UèèÒüÿÿ¿èºÓÿÿUH‰åHƒì H‰}øH‰uðH‰Uè‹ÈÜ ƒøu1H‹¬Ü H…Àt(¶˜Ü ƒà„Àuè3ûÿÿ¶…Ü ƒÈˆ|Ü ëëëÉÃUH‰åHƒì H‰}øH‰uðH‰Uè‹oÜ ƒø…©H‹OÜ H…À„œ¶7Ü ƒà„À…¶%Ü ƒà„Àt2¶Ü ƒàïˆÜ ¶Ü ƒàþˆþÛ ¶÷Û ƒÈˆîÛ ëNH‹uÝ H…ÀtH‹iÝ H‰Çè¡ÓÿÿHÇVÝ ¶¿Û ƒÈˆ¶Û H‹·Û H‰ÇèÇ×ÿÿëëëÉÃUH‰åHƒì H‰}øH‰uðH‰Uè‹šÛ ƒø…€H‹zÛ H…Àtw¶fÛ ƒà„Àul¶XÛ ƒà„ÀuaH‹ÚÜ H…ÀtH‹ÎÜ H‰ÇèÓÿÿHÇ»Ü ¶$Û ƒÈˆÛ ¶Û ƒàïˆ Û ¶Û ƒà÷ˆûÚ ë ëëëÉÃUH‰åHƒì H‰}øH‰uðH‰Uè‹ëÚ ƒø…ÅH‹ËÚ H…À„¸¶³Ú ƒà„À…©¶¡Ú ƒà„Àu¶“Ú ƒà„À„Œ¶Ú ƒàþˆxÚ ¶qÚ ƒà„Àu¶cÚ ƒà„ÀtF¶UÚ ƒàïˆLÚ ¶EÚ ƒà÷ˆ<Ú H‹ÅÛ H…ÀtH‹¹Û H‰ÇèñÑÿÿHÇ¦Û H‹Ú H‰Çè'Öÿÿë ëëëÉÃUH‰åHƒì H‰}øH‰uðH‰Uè‹÷Ù ƒø…àH‹×Ù H…À„Ó¶¿Ù ƒà„À…Ķ­Ù ƒÈˆ¤Ù H‹-Û H…ÀtH‹!Û H‰ÇèYÑÿÿHÇÛ ¶wÙ ƒàþˆnÙ ¶gÙ ƒàïˆ^Ù ¶WÙ ƒà÷ˆN٠ǀ٠H‹EÙ H‰Çè…Ïÿÿ¶.Ù ƒÈˆ%Ù ¾¿/aè6ÐÿÿH‹Ù H‰Çè·ÏÿÿH‹Ù H‰Çè8ÑÿÿëëëÉÃUH‰åHƒì H‰}øH‰uðH‰UèH‰MàèÎøÿÿ¿è¶ÏÿÿUH‰åSHƒì8‰}ìƒ}ì tƒ}ì ubH‹7Ù H…ÀtV‹=ÐØ ‹5ÆØ H‹ Ù H‹øØ H‹Ù H‹òØ ‰|$‰t$ÇD$Ç$A¹A¸H‰ÞH‰Çè\ÒÿÿHƒÄ8[ÉÃUH‰åHƒì H‰}øH‰uðH‰UèH‹EèH‹@‹‰ÇèZÿÿÿÉÃUH‰åHƒìH‰}øH‹EøHƒÀH‰Æ¿èýÒÿÿÉÃUH‰åHƒìH‰}øH‰uðH‹EøH‰ÇèÏÏÿÿÉÃUH‰åHƒì0H‰}èH‰uà‰UÜH‰MÐH‹EèH‰ÇèÚÍÿÿH‰EðH‹Eð‹P8H‹Eð‹@<‰Ñ)Á‰È‰Eüƒ}ütdH‹EðH‹@@H…ÀtW‹EÜ;Eüs‹E܉Eü‹UüH‹EðH‹H@H‹Eð‹@<‰ÀHÁH‹EàH‰ÎH‰ÇèˆÐÿÿH‹Eð‹@<‰ÂUüH‹Eð‰PÁÿÿH‹EÀ¾H‰ÇèýÀÿÿ¸Hĸ[ÉÃUH‰åSHƒìHH‰}؉uԉЉMÌD‰EÈD‰MĈEÐH‹EØH‰Çè½ÿÿH‰Eè‹EÌÁøˆEà‹EÌÁøˆEá‹EÌÁøˆEâ‹ËEãÆEäH‹EèH‹ˆH‹?È »Hs@H‹ëy H}à‹uÈI‰ùA‰ðH‰ÞH‰Ç¸èŽÂÿÿ¾Mлps@H‹¾y ‹}Ä‹UÔH‹uH‰4$D‹MA‰øH‰ÞH‰Ç¸èYÂÿÿ¸HƒÄH[ÉÃUH‰åSHƒìH‹EÇ HEàH‰Ñº¾H‰Çèt¿ÿÿHƒøt-H‹ŸÇ ¹¨s@H‹Ky H‰ÎH‰Ç¸èûÁÿÿ¸éHE຾Ís@H‰Çè»Àÿÿ…Àu ÇÕÅ ëJHE຾Ös@H‰Çè•Àÿÿ…Àu ǯŠë$HE຾ßs@H‰ÇèoÀÿÿ…Àu ljŠ‹ƒÅ …Àu4H‹ pÆ H‹ñÆ »ès@H‹x H‰ÞH‰Ç¸èMÁÿÿ¸écH‹DÆ º¾H‰Çèê»ÿÿH‹+Æ º¾H‰ÇèÑ»ÿÿH‹Æ H‰Çèb»ÿÿ‰$Å H‹ýÅ º¾H‰Ç裻ÿÿH‹ÔÄ H…À…’¹º¥U@¾‚U@¿ -aè:ÀÿÿH‰ƒÄ H‹|Ä H…Àu-H‹(Æ ¹t@H‹Ôw H‰ÎH‰Ç¸è„Àÿÿ¸éšH‹CÄ H‰dÄ H‹5Ä ¾H‰Çèh½ÿÿfÇÇÄ H‹Ä ¾rV@H‰Çè »ÿÿ…À…ÈH‹üà ¾V@H‰Ç迼ÿÿ…À…¬H‹àà ¾ÃU@H‰Çèó¿ÿÿ…À…H‹Äà ¾}c@H‰Çè÷½ÿÿ…ÀuxH‹¬Ã ¾Ùc@H‰Çèß¾ÿÿ…Àu`H‹”à ¾ß]@H‰Çè7½ÿÿ…ÀuHH‹|à ¾Vd@H‰Çè¼ÿÿ…Àu0H‹dà ¾—d@H‰ÇèW¾ÿÿ…ÀuH‹Là ¾’f@H‰Çèߺÿÿ…Àt*H‹ìÄ ¹0t@H‹˜v H‰ÎH‰Ç¸èH¿ÿÿ¸ëa‹cà ƒÀ‰ÀH‰Æ¿è¾ÿÿH‰Rà H‹ #Ä ‹=à ‰ÂH‹<à ¾H‰ÇèO¼ÿÿH‹Ä H‰Çè ¾ÿÿHÇíà ¸HƒÄ[ÉÃUH‰åHìÐH‰½8ÿÿÿH‰µ0ÿÿÿH‹…0ÿÿÿH‰²Ã H‹…8ÿÿÿH‰¬Ã Hƒ½0ÿÿÿt6èHüÿÿ„Àtr¾¿/aè’¹ÿÿH‹s H‰Çè¹ÿÿH‹d H‰Ç蔺ÿÿH‹¥Â H…ÀuH‹áà H‰ÇèYºÿÿë)H‹Ðà H•@ÿÿÿH‰ÖH‰Çèιÿÿ‹…@ÿÿÿ‰ÇèKéÿÿëØÉÃUH‰åSHƒì(H‰}ØHÇEèXt@H‹@u H‰ÂH‹EèH‰ÖH‰Çèîºÿÿ»¨t@H‹"u H‹MØH‹UØI‰È¹ˆ`H‰ÞH‰Ç¸è½ÿÿH‹ût H‰Â¸ðt@H‰Ñº¶¾H‰ÇèN½ÿÿH‹×t H‰ÂH‹EèH‰ÖH‰Çè…ºÿÿHƒÄ([ÉÃUH‰åHƒì0H‰}ØH‹EØH‰EðH‹EðH‰Eøë=蛹ÿÿH‹‹UìHcÒHÒHз·À% …Àu‹Eì‰Çèc»ÿÿ‰ÂH‹EðˆHƒEðëH‹Eø¶¾À‰Eìƒ}ì•ÀHƒEø„Àu¦H‹EðÆÉÃUH‰åSHƒìX‰}¬H‰u H‹E H‹¾/H‰Ç虹ÿÿH‰Z H‹S H…ÀuH‹E H‹H‰@ ëH‹7 HƒÀH‰, ºp¾¿ -aèà¶ÿÿHÇEÐHÇEàHÇEèÆEÚ¶EÚˆEÛHÇEÈÇEÜéÄ‹EÜH˜HÁàHE H‹H‰EÀH‹EÀ¾§u@H‰ÇèTºÿÿ…Àt H‹EÀ¾®u@H‰Çè?ºÿÿ…Àt H‹EÀ¶ÖÿÿYAC† T LwÖÿÿÕAC† Ð l,×ÿÿ¯AC† ª Œ»×ÿÿôAC† ï ¬Øÿÿ AC†  Ì{Ùÿÿ'AC† $ì‚ÙÿÿAC† Nƒn ÛÙÿÿ'AC† b 4âÙÿÿ#AC† ^ TåÙÿÿAC† Y tãÙÿÿ¯AC† ª ”rÚÿÿAC† J ´aÚÿÿAC† J $ÔPÚÿÿOAC† Oƒû $üwáÿÿ#AC† eƒù $$ræÿÿ{AC† fƒP $LÅæÿÿ\AC† SƒD tùæÿÿ}AC† x ”VçÿÿAAC† | $´wçÿÿûAC† fƒÐ $ÜJéÿÿÑAC† cƒ© $óéÿÿtAC† `ƒO ,?íÿÿ½AC† ¸ $LÜíÿÿžAC† eƒt tRîÿÿAC† | $”³îÿÿ½AC† [ƒ $¼Hòÿÿ‰QŒ†_@FƒŽRä°òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^Ùã% ˜#@ Hq@@@@°@ ¦ (‚`À Ø@Ð@ þÿÿo @ÿÿÿoðÿÿo®@(€`Æ#@Ö#@æ#@ö#@$@$@&$@6$@F$@V$@f$@v$@†$@–$@¦$@¶$@Æ$@Ö$@æ$@ö$@%@%@&%@6%@F%@V%@f%@v%@†%@–%@¦%@¶%@Æ%@Ö%@æ%@ö%@&@&@&&@6&@F&@V&@f&@v&@†&@–&@¦&@¶&@Æ&@Ö&@æ&@ö&@'@'@&'@6'@F'@V'@f'@v'@†'@–'@¦'@¶'@Æ'@Ö'@æ'@ö'@(@(@&(@6(@F(@V(@f(@v(@†(@–(@¦(@¶(@Æ(@Ö(@æ(@ö(@)@)@&)@6)@F)@V)@f)@v)@†)@–)@¦)@¶)@Æ)@Ö)@æ)@ö)@*@*@&*@6*@ (" *082: ,$.&<4>6# +! )3;19/' -%?7=50.6GCC: (GNU) 4.5.2,@*@*,+@w,”@@Ü/!Žˆl_IO_stdin_useddðµx11_init_color„x11_create_ximage x11_destroy_ximagehviewer_renderlinei÷<-create_file_dialogö-run_mng_file_cb—.browse_file_cbå.Viewer_postludeù9mainŠ@*@j*@../sysdeps/x86_64/elf/start.S/glibc-tmp-714dc68a4bbd6ca2b142f97bdca9dd8b/glibc-2.13/csuGNU AS 2.21.51.0.6€„ul*@l*@ag;ãÞiNintpX‚ Xq@WìVuçŠ+@“@@ˆSÓ8Þg;ãiNintá i Ži2•iI —iß›b¯p1Á ØŽnb#O ©#E©#ó©#q©# g ©#(A©#04 ©#8Ý©#@¹©#HX©#Pv ©#XÃ"Ì#`© $Ò#hˆ&b#pÊ *b#t¥,p#x•0F#€é1T#‚«2Ø#ƒË6è#ˆ©?{#¤H§#˜OI§# VJ§#¨²K§#°fL-#¸åNb#À+ Pî#Ä µ´ îºÌ  »Ì# ö ¼Ò# ,Àb#•Á ¯è 8Ž ¯þ 8b G K4 ÑM†# <N‘#Ù?\ ~M96gm° XIDB8ØL8Ì`sò hsà T©  œï a b#  žï# : Ÿ#  ¢Ÿ#ªbïõ  £ªGC æ &ˆ8 ë¥ X ì¥# ˆ í~# } ñb# ] ó8# ½ ó8# ­ ó8#( } ôb#0  õb#4 ; ö, ûé ö üb#  ýb#  þé#«R ÿ¶€ 0X ¥#š 6#} ‰#â b#H b#X b#  b#$Y b#(Z <#0ñ b#8O é#@_ #Hà ”#P­ 8#X 8#`° b#h b#lÇ b#pÒ b#t7 i#xÛ0ï© ú ”X !¥#ö "b#4 #b# i $b#÷ %NB0 €Q \#ù Œr#p ’# Ž·#Ê á# > ü#($ˆ pâ qb#H qb#h rb#û sb#  t©#Ð ub# vb#= wb# Œ xb#$ö yb#(Ì zb#,4 {b#0] |8#8½ }8#@­ ~8#HÈ Ÿ#Pf ‘¦#XVV6éMbb©MMbbbrVb8’Vbbxb·Vbb8˜VáVbbMM½büViç% ’ ¢r B £8#red ¤F#½ ¤F# S ¤F# o ¥¯#pad ¦¯#p § Ý ï0( õ> X ú¥#é ûD #fd üb#‹ ýb# þb#j ÿb# ©# ” s#(O s#0§ s#8° b#@û Z #HÐ b#P b#TŒ b#X= b#\G b#`ô ` #h¹ b#p b#t D #xc D #€ b#ˆ 8#ˆ 8#˜m Ÿ# w Ÿ#¨ Ÿ#°‹ Ÿ#¸¡ M#Àdb l #È• ‚ #Ð  ©#Ø( b#à[ b#ä\  #èz !8#ðŸ "8#ø¦ #b#€% $b#„% %Ÿ#ˆ/ &Ÿ#À 'b#˜— (©# Õ> sZ 6J ”f b‚ 6r Ì .” Š ~ ( ¤ 2 ¥b#š ¦š #Ó §s#  ¨8#¡ ©?# á ª?#!* «?#"Ï ¬  ©+ b@ š @  @ æ T é#ˆ ~#4 b#ö b#} b#] !8# ½ "8#(­ #8#0é $b#8} %b#<] &F d ký N t8ü z88À $8 2q ‰ 3%#  4b# & 5©#  6b# 70p ë~ "M#g #M#_ $M# %M# &M#Ú 'M#v (M#ü )M#8 *M# m ,[# k -ò # 2 .b# ¢ / #  0O#( · 1O#, Þ 2O#0 D 2O#4 Û 3O#8 ( 4O#< … 5;#@  6;#H û 7;#P a 9‰#X Æ :‰#` ¡ ;‰#hgc <#pdpy =š #xwin >‰#€ B ?F#ˆ È @F#Š ¼ Aë#  Bb#˜ ð Bb#œ ƒ Cb#  ƒ Cb#¤ „ DM#¨ W DM#¬shm F§#° œ Gb#¸ – Hb#¼ Ô Hb#À  Ib#Ä z J#È ‰ KF#Ð ñ KF#Ò u KF#Ô Š L?#Ö ò L?#× v L?#Ø T Mé#à ö NM#è C P #ð  Q #€ è S©# 1 Tñ#˜  Uþ#   V #¨ Þ W÷#° ¶ ¯ 8?á X|‰ µ 84 8 8Ø Fb+@ý+@½dpyF𠑏ÃF”‘° F‘¨œ Gb‘¤çIr ‘@iJb‘\upbJb‘X¿dbý+@4-@`€dpyd𠑏Ãd”‘° e‘¨redeb‘¤½ eb‘ Seb‘œçgr ‘@ihb‘\Û hb‘X· hb‘T¬ hb‘PX~84-@€-@Àùdpy~š ‘XÃ~”‘Pred~b‘L½ b‘HSb‘Dçr ‘`î‹€-@/@ µ]‹8‘°½ Œ8‘¨­8‘ < b‘dè b‘`½‘b‘\H’b‘X. “b‘TΔb‘Pi•b‘La–8‘@ u ·/@ü4@€:img·:‘è~ù”‘HP ºæ ‘€,»b‘ü~y»b‘Di¼M‘\dpy½š ‘P! 3bü4@5@à„"dpy3š ‘h#š3@ ‘`$±9ë5@59@@"img9:‘¸%¼;ë‘X%<;‘@%,=‘P%ƒ>% ‘H&oomŒÀ8@q'ý™59@Ì9@ N"img™:‘X%,›‘h(Ì ÕÌ9@V=@/#¹Õb‘L#!Õb‘H#Õb‘D#ŽÖb‘@)iØb‘l)jØb‘h%öÙ?‘W%Þ Ù?‘V%ÓÚF‘T%±ÛH‘d%# ÜH‘`%(ÝH‘\% ÞH‘X( ,V=@T>@`Ô"src,;‘¸#÷ ,;‘°"y-M‘¬#â-M‘¨)a/8‘h)b/8‘`%ï/8‘H%² /‘P)x0M‘\( IT>@4?@Àh"srcI;‘H#÷ I;‘@"yJM‘¼#âJM‘¸)aL8‘h)gL8‘P%² L‘X)xMM‘d'/^4?@“@@ D"img^:‘¨#ø^;‘ "row_M‘œ"x_M‘˜#â_M‘”)srca;‘X)dsta;‘P)pixb8‘°%¼cë‘@)coldM‘L%ëdM‘¼%BeF‘J*ǧÒ+l;;MMû   á`Q(œ (á`æ ü ,b 0á`w-b 4á`€. 8á` 8ñ 8ÿ/á @á` 8 8?²0 @é`528 @ë`¹ 38 Hë`O48 Pë` bz 8h6j  …`ä7j À…`^8j à…`ë<á `ë`h=á `ó`D>á `û`?á `a%™1b ` a%&®i h a%r®i p a i_ 8ÿ%1¯O € a%°O €a%‘±O €a%‘²O €#a% ¹ †`)DMÄ €+a*ǧÒó<ÐuYŠ”@@pp@±SÓ8Þintã?g;iNá S ŽS2•SI —S±pG KáÑM“#<Nž# ±ñ 8Ù ± 81 Øà n?# O «# E«# ó«# q«# g «#( A«#0 4 «#8 Ý«#@ ¹«#H X«#P v «#X Ã"#` © $$#h ˆ&?#p Ê *?#t ¥,}#x •0h#€ é1o#‚ «2*#ƒ Ë6:#ˆ ©?ˆ# ¤H©#˜ OI©#  VJ©#¨ ²K©#° fL-#¸ åN?#À + P@#Ä µ´îº »#ö ¼$#,À?#ç ±: 8à ±P 8V± 1·'€g€€d€ € Œ€À*€€~€€š% Qa\ ~F3?OoO"-?$«a%©Ë] 3ã9617° 8×?9×XIDB8*J8ØL8‡M8Ì`U¹aUò hUà T«  œòa ?# žò#: Ÿ# ¢¢#­?òø  £­GC æ#)ˆ8 ë¨X ì¨#ˆ ík#} ñ?#] ó8#½ ó8# ­ ó8#(} ô?#0 õ?#4; ö/ ûìö ü?# ý?# þì#®R ÿ¹€ 3 X ¨# š 9# } # â ?# H ?# X ?#  ?#$ Y ?#( Z ?#0 ñ ?#8 O ì#@ _ #H à —#P ­ 8#X  8#` ° ?#h  ?#l Ç ?#p Ò ?#t 7 S#xÛ3ò© ý — X !¨# ö "?# 4 #?# i $?#÷ %QE 0 € Q _ # ù Œu # p • #  Žº # Ê ä # > ÿ #( $ˆ p â q?# H q?# h r?# û s?#  t«# Ð u?#  v?# = w?# Œ x?#$ ö y?#( Ì z?#, 4 {?#0 ] |8#8 ½ }8#@ ­ ~8#H È ¢#Pf ‘©#XY Y 9ìF??«FF?? ?u Y e 8• Y ??{ ?º Y ??8› Y ä Y ??FFÀ ?ÿ Y Sê % ’ ¢u B £8#red ¤h# ½ ¤h# S ¤h# o ¥±#pad ¦±#p § Ý ï3( õA X ú¨# é ûG #fd ü?# ‹ ý?#  þ?# j ÿ?#  «# ” U#( O U#0 § U#8 ° ?#@ û ] #H Ð ?#P  ?#T Œ ?#X = ?#\ G ?#` ô c #h ¹ ?#p ?#t  G #x c G #€  ?#ˆ  8# ˆ 8#˜ m ¢#  w ¢#¨ ¢#° ‹ ¢#¸ ¡ F#Àdb o #È • … #Ð  «#Ø ( ?#à [ ?#ä \ £#è z !8#ð Ÿ "8#ø ¦ #?#€ % $?#„ % %¢#ˆ / &¢# À '?#˜ — («# ÕA U] 9M —i ?… 9u Ì .—  ` 5„ 2 6?#  78# • 8?# š 9„# g :# } ;#( d <#0 M =v#8x >?#@y >?#D { ??#H 8 ??#L ¨ @F#P ª AF#T / B?#X   C ` G} 2 H?#  I8# • J?# š K„# g L# } M#( d N#0 M Ov#8x P?#@y P?#D { Q?#H 8 Q?#L ¨ RF#P œ SF#T / T?#X U–` Yp 2 Z?#  [8# • \?# š ]„# g ^# } _#( d `#0 M av#8x b?#@y b?#D { c?#H 8 c?#L ¨ dF#P † e±#T / f?#XZ g‰h j 2 k?#  l8# • m?# š n„# g o# } p#( d q#0 M rv#8x s?#@y s?#D { t?#H 8 t?#L æ u?#P œ v?#T / {?#X í |?#\ ¨ }F#`» ~|0 ‚ 2 ƒ?#  „8# • …?# 𠆄# g ‡# æ ˆ?#( œ Š?#,  H •p 2 –?#  —8# • ˜?# š ™„# g š# î ›ø#( œ @ ž 2 Ÿ?#   8# • ¡?# 𠢄# g £# x ¤?#(y ¤?#, â ¥?#0 H ¥?#4 K ¦?#8w §|H ©Þ 2 ª?#  «8# • ¬?# š ­„#  ®Œ# x ¯?#(y ¯?#, â °?#0 H °?#4 K ±?#8 ‘ ²?#< * ³?#@Ä ´$0 ¶] 2 ·?#  ¸8# • ¹?# š º„#  »Œ# ‘ ¼?#( * ½?#,o ¾ê0 ÀÍ 2 Á?#  Â8# • Ã?# š Ä„# g Å# ¨ Æ?#(ö ÇiH É“ 2 Ê?#  Ë8# • Ì?# š Í„# í Î# g Ï#(x Ð?#0y Ð?#4 â Ñ?#8 H Ñ?#< Ž Ò?#@ T Ó?#Dè ÔÙ0 Ö 2 ×?#  Ø8# • Ù?# š Ú„# š Û# g Ü#(« ÝŸ8 ß‚ 2 à?#  á8# • â?# š ã„# š ä# g å#( å æ?#0£ ç8 é 2 ê?#  ë8# • ì?# š í„# š î# g ï#( T ð?#0) ñŽ0 óq 2 ô?#  õ8# • ö?# š ÷„# í ø# g ù#(ó ú H ü 2 ý?#  þ8# • ÿ?# š „# š # g #( í #0x ?#8y ?#< T ?#@m }X î 2 ?#  8# • ?# š „# š # g #(x ?#0y ?#4 â ?#8 H ?#< Ž ?#@  #H T ?#P %8 x 2 ?#  8# • ?# š „# š # g #(x ?#0y ?#4F ú0 ÷ 2 !?#  "8# • #?# š $„# g %# â &?#( H &?#,µ '„` )Û 2 *?#  +8# • ,?# š -„# í .# g /#(x 0?#0y 0?#4 â 1?#8 H 1?#< Ž 2?#@  3#H œ 4?#P ì 58#Xê 68 8Z 2 9?#  :8# • ;?# š <„# š =# g >#( › ??#0d @ç8 BÙ 2 C?#  D8# • E?# š F„# í G# g H#( › I?#0Ç Jf@ Lg 2 M?#  N8# • O?# š P„# g Q# = R`#( M Sv#0 ¨ T?#8U Uå8 Wæ 2 X?#  Y8# • Z?# š [„# g \# ‡ ]`#( M ^v#0f _sP a’ 2 b?#  c8# • d?# š e„# è f#   g#( ‡ h`#0  i`#8 f j`#@ M kv#Hë lòH n/ 2 o?#  p8# • q?# š r„#   s# ‡ t`#(  u`#0 f v`#8 M wv#@R xž8 z½ 2 {?#  |8# • }?# š ~„# g # œ €—#(new „?#0 ¨ †?#4” ‡;( ‘ñb ’@s “ñl ” v 8 S 8` ‰“ 2 Š?#  ‹8# • Œ?# š „# g Ž#  `#( û ?#0  •É#8Í –8 ˜! 2 ™?#  š8# • ›?# š œ„# g # ˆ ž?#(   ?#, K ¡?#0% ¢Ÿ( ¤  2 ¥?# 𠦄# Ó §U#  ¨8# ¡ ©a# á ªa#! * «a#"Ï ¬- ( ®! 2 ¯?#  °8# • ±?# 𠲄# g ³# Ø ´¬ ( ¼q! 2 ¾?#  ¿8# • À?# š Á„# ' Â?# ì Ã?#$ô Ä !8 Æÿ! 2 Ç?#  È8# • É?# š Ê„# ' Ë?# ì Ì?#$  ÍF#(  Ω#0i Ï}!®À Õ½#2 Ö?  ×!; ØŠ› Ù}} Úpt Ûì Ü~ ݹ ÞÞ¡ ß]¶ àÍ á“ â˜ ã‚K äd åqê æÕ çîZ èxÙ é÷~ êÛ£ ëZ ìÙe ígù îæ” ï’† ð/› ñ½„ ò“P ó!  ô   õpF öq! ÷ÿ!pad ø½# SÍ# 8¯ ù "« ¦$f …êŠ À¡ B«d k$"$N, m3$9$‹@ rJ$P$ t8ü z8p ›± œSS ¡h÷ ¤©Í#l$V$ BÒ$  C$# 0 Dw$#Arg Eª$Ñ Iê$ð$%$$$ €j%¥Å‘Æ1É~ Ê……c†ñ‰ÉŠ}ǶËúÍgÎÙÿ  ‹%ƜܨŸ ¯· ¡%§%à  uÉ%PG•  ‡ë%‡¨ŒÑ  »&¯   å;&û ¢G3ŒÐ  Šr& / ‹?# š Œ˜$# g #7 Ž;&P —' / ˜?# š ™˜$# 0 š‹%# ø ›?# a œ‹%# ó ?#(dir ž‹%#0  Ÿ?#8 ¼  ‹%#@ … ¡?#Hª ¢~&  p'Ã#¦1Þ”3£®  xà'ó OI?.Ëi2pA Å ñ £ q /  Ýö'Þ !p e+"~"F#"g#F#"_ $F#" %F#"&F#"Ú'F#"v (F#"ü)F#"8*F#m,%#k-$#2 .?#¢/V$# Â0Ë#(·1Ë#,Þ2Ë#0D2Ë#4Û3Ë#8(4Ë#<…5·#@6·#Hû 7·#Pa9#XÆ:#`¡ ;#h#gc<#p#dpy=„#x#win>#€B?h#ˆÈ @h#мAe+#B?#˜ðB?#œƒC?# ƒ C?#¤„ DF#¨W DF#¬#shmF©#°œ G?#¸–H?#¼ÔH?#ÀI?#Äz Ja$#ȉKh#ÐñKh#ÒuKh#ÔŠLa#ÖòLa#×vLa#ØTMì#àöNF#èCP¸#ðQ¸#€èS«#1Tk+#˜UM# VÙ##¨ÞWq+#°  ±+ 8?áXö'$6B«”@@F@€5,%valB«‘ˆ&sD«‘h&dD«‘`&chE?‘X'vF±‘_'. F±‘^&rG5,‘P&gG5,‘@&bG5,‘°&rgbGE,‘ ±E, 8 ±U, 8(%ÉF@æH@àÆ,%imgÉÆ,‘¨'ÕËu ‘°&wÌ$‘X&sÍ«‘P&dÍ«‘H',Î?‘D+)AæH@I@@-*w$‘h+…$‘`+®$‘X,xI@mK@ æ-*w$‘è~+y«‘à~+É«‘Ø~+éê$‘Ð~-¯æ-‘ð~.cnt?‘\-„$‘P-L‹%‘H-ô ‹%‘@-ÿ‹%‘¸-€$‘° Ò$ö- 8,|>mK@GL@t.*w>$‘¸+…>$‘°+®>$‘¨.fsb@t.‘X-èA«‘H-1Bk+‘P'/fVGL@,M@`,0l,M@žM@Àå.*wl$‘h+…l$‘`+®l$‘X0n wžM@“N@ )b„“N@³P@€a/*img„Æ,‘H-ö†F‘P-4‡?‘T.dpyˆ„‘X)‚¶³P@ÖP@à®/*w¶$‘h+…¶$‘`+®¶$‘X)W¼ÖP@/Q@,û/*w¼$‘h+…¼$‘`+®¼$‘X)ÏÆ/Q@R@ŒH0*wÆ$‘h+…Æ$‘`+®Æ$‘X) ÚR@³R@ì•0*wÚ$‘h+…Ú$‘`+®Ú$‘X)è³R@§S@L â0*wè$‘h+…è$‘`+®è$‘X)Rÿ§S@³T@¬ /1*wÿ$‘h+…ÿ$‘`+®ÿ$‘X)¿ ³T@ÚT@ ‹1*w$‘h+…$‘`+š˜$‘X+£ž$‘P)åÚT@[U@X ¼1+2 ?‘\)!&[U@‚U@¸ 2*w&$‘h+…&$‘`*cbs' 2‘Xr&1µ-‚U@¥U@ D2*len-ï‘h)ç2¥U@ÃU@x „2*buf2‘h*len2ï‘`1 7ÃU@rV@Ø 3+m7%‘X+á7‘P+Ô8Ë‘L+L8‘@-K:Ë‘l.img;Æ,‘`1oOrV@V@8 93+mO%‘h1WTV@V@˜ n3+mT%‘h)ÝYV@ß]@ø L4+âYË‘Œ+HYË‘ˆ-`[$‘P-ž[$‘X-¨[$‘-µ\$‘H-º\$‘@-¿\$‘¸-Ä\$‘°-É\$‘¨-Î\$‘ -Ó\$‘˜1ãß]@c@X v5+mã%‘˜~+âäË‘”~+HäË‘~.imgæÆ,‘H.cwç‚$‘®.chç‚$‘¬.twç‚$‘ª.thç‚$‘¨.dhç‚$‘F.dwç‚$‘^.fwç‚$‘¦.fhç‚$‘¤-ýè‹%‘°.sé«‘P.bufév5‘ ~2Ba@Þa@.dpy)„‘¸ ±†5 8)Fc@}c@¸ Å5+…F$‘X*idF¤$‘P1ÀX}c@Ùc@6+mX%‘H+·XË‘D.imgZÆ,‘X1=eËÙc@Vd@xz6+me%‘H.secg½‘h-?g½‘`-ºhË‘\1þ qVd@—d@ØÍ6+mq%‘X+ qË‘T.imgsÆ,‘h1z—d@’f@8ú7+mz%‘ø~*xzË‘ô~*y{Ë‘ð~+â{Ë‘ì~+H{Ë‘è~.img}Æ,‘H-É~Ë‘”-Ï·‘X-·‘ˆ.row€?‘T-à€?‘˜.dpy„‘°.gc‚‘¸.winƒ‘@-¼„e+‘¨-T…ì‘ -†?‘œ1b¥’f@cg@˜¹8+m¥%‘H+—¥×‘D+~¦ã‘@+B§I‘¼+6§Ë‘¸+ܨב´+ã¨×‘+Ϩû‘.imgªÆ,‘X-«¹8‘P aÉ8 81â¼cg@×j@øþ8.buf¿þ8‘P a9 8)Ê×j@”k@X`9+1k+‘¨~+è«‘ ~-šÍ#‘°~)÷ ”k@2l@¸ 9*prg P‘H.bar"P‘X)12l@³l@ù9*buf1«‘H.s3«‘h.d3«‘`.ch4?‘\3 ??³l@pp@xÅ:+õ??‘œ+?Ù#‘-1Ak+‘X-èB«‘P.sB«‘°.okC«‘¨.iD?‘L-ÚEa‘K-v Ea‘J-aF‘@-z Ga$‘¸4ǧ$ ±Ý:56á<ë:Ò:4W&ý:Ò:4$($4£#($4#($4\#($4s $($4#($'©/á ˆ`'m3% €-a&img4+  -a'Ü 5¸ /a'³5¸  /a'¢6V$ 0/a'T7« 8/a'X9?$ @/a'í:$ H/a'3:$ P/a'k:$ X/a'$:$ `/a';–% h/a'm<‚$ p/a4ǧ$6á<‘<Ò:4W&£<Ò:4$($4£#($4#($4\#($4s $($4#($%% $ > $ > 4: ; I?  &I% : ; I$ > $ >   I : ; : ;I8 : ;  : ;  : ; I8 I !I/ : ;I< : ; I' II : ;  : ; : ;I8  : ; : ;  : ; I 8  : ; I8 .: ; ' I@: ; I : ; I 4: ; I 4: ; I .: ; ' @ .? : ; ' @!.: ;' I@": ;I #: ;I $.? : ;' I@%4: ;I & : ;'.? : ;' @(.: ;' @)4: ;I *4: ; I? < +' % : ; I$ > $ >  I  : ;  : ; I8 I !I/  : ; : ;I8 : ; &I : ; ( : ;I< : ; I' II : ;  : ; : ;I8  : ; : ; : ;I : ; : ;I: ;I'   : ;! : ; " : ; I 8 # : ; I8 $.: ; ' I@%: ; I &4: ; I '4: ; I (.: ; ' @).: ;' @*: ;I +: ;I ,.? : ;' @-4: ;I .4: ;I /.: ;' @0.? : ;' @1.: ;' I@2 3.? : ;' I@44: ; I? < 5!64: ;I? < ]4û ../sysdeps/x86_64/elfstart.S @*@À.>!>L$ uvx[#û init.c%&û /usr/lib64/gcc/x86_64-slackware-linux/4.5.2/include/usr/include/bits/usr/include/usr/include/X11/usr/include/X11/extensionscolor.cstddef.htypes.hstdio.hlibio.htime.hlibmng_types.hX.hXlib.hXutil.hIntrinsic.hXShm.hxmng.h +@Çw’ÁYYZ¢åvn<JºYxè ¼2&Ê¢åvs<JN*-v.J žh$K«\f Ÿ®$/Y£&Y¢***®Ì®®•»ŸY1É„…"×»]F@F>HgI7¯ÿ¢¾V»ÿ,Z#ØŸZó®gKvØ×ó»g£×»h½®æ(¯$^F@FvHgIC)iv¬»u¼uåYw»ævg×óÙ×1. <ó¼++++=‘‘=JeJ f¾¡'†/0)¡'†/0)¡'†)¡'†N)J4È2#Z¼LuŸZ­ŸY„­ŸYƒYnJº2$Z¼XóZgZwJ º2¥ååƒg¼0»Ê06KTˆ4NÊKyX ‚Çû /usr/lib64/gcc/x86_64-slackware-linux/4.5.2/include/usr/include/bits/usr/include/usr/include/X11/usr/include/Xmxmngview.cstddef.htypes.htime.hstdio.hlibio.hlibmng_types.hX.hXlib.hctype.hXutil.hIntrinsic.hXm.hxmng.hStringDefs.hXmStrDefs.hDrawingA.hForm.hPushB.hFrame.hRowColumn.hLabel.h ”@@ÂÀKKƒYYZÊKYævg­0Êæug­0»t#ug­1‚ó »0#­,z»0#­,z»0#­,z ƒ»ƒ.f­»ƒ.f­»ƒ.f­v¡ƒ¬-­Y0#K,zhƒƒ­_!­»/¤»0ò#K,Hzgu¼1μ"ØZô¼v‘Ù¼Øå½­'$hæ­'$M'ÀåM'Ìååååóóó¼w=»2(u؃Ÿ»//×N»»»K"K"K"K"».¡O»ƒ„È®uv»'00uÖ JwKºå­ Ÿå­ŸŸŸ‘­óóóôƒ1=»ZóóóŸ1KºåŸºåºgºåºåºåºŸ=1Í»ÉÉÊô'-ÈóÈô½½«=«=«M"'¯¯Ø¼¼hôY w=Y¢=­»ØY==$1=åó"Øóôó0ºå­óq== 1=å»×غå­óów ==='1=åó"×"ôרóôºå®n==@ 1=åó"óºå®óóôŸåóååo== 2uY¢»fg¼Vx>1»K1ó»2jôhgʃg&/’vY1ƒY1ƒY1%sFYx †&ç&ç&¡&¡&¡&¡&¡ | D(Ëæôʑ׃׃׃׃׃×Y×Z×Y\9&¢Ü0Ø» ÉÊÉ“.//0æg»ØæK»¼æg»Øæ!hY»¼ô×®559Y¼IuI>»0ؼ­tYó ­1u"»¼åY¡®×Ûe'æwõó &Yw†óó.=1çôå2 #ô׼廻ååÊåg90"Ko‰fUKY¤èô‘‘‘gMI75Yw”&#¡‘¼‘¼‘Ÿ * ƒƒK„ôæ¼# Ø=’­­­uuuuuw#w×#å®Yw…ר “æå缄Én. 1É…ƒ,$ƒw¾ó0#¿u1 ò'ô"=u­ƒvZ>KK®å LK=­å¡„K=¬CYuL­Ÿ0®­K0®hžw>7v78w89w9<w<vwwwvvvwwww€v€w‚w‚…w…QvQRwRSwSVwVsvstwtuwuxwxØ vØ Ù wÙ Ú wÚ Ý wÝ ² v² ³ w³ ´ w´ · w· — v— ˜ w˜ ™ w™ œ wœ v w w  w þ vþ ÿ wÿ wwvw w #w#BvBCwCFwFšvš›w›œwœŸwŸovopwpqwqtwtvw w #w#vwwwvw w #w#FvFGwGJwJÆvÆÇwÇÈwÈËwËívíîwîïwïòwòvwww.v./w/0w03w3ÝvÝÞwÞßwßâwâìvìíwíîwîñwñûvûüwüýwýwJvJKwKLwLOwOm"vm"n"wn"o"wo"r"wr"è"vè"é"wé"ê"wê"í"wí"D#vD#E#wE#F#wF#I#wI#Á#vÁ#Â#wÂ#Ã#wÃ#Æ#wÆ#$v$$w$$w$$w$ý%vý%þ%wþ%ÿ%wÿ%&w&Î&vÎ&Ï&wÏ&Ð&wÐ&Ó&wÓ&B*vB*C*wC*D*wD*G*wG*ÿ*vÿ*+w++w++w++v+ž+wž+Ÿ+wŸ+¢+w¢+,v,,w, ,w ,#,w#,Û/vÛ/Ü/wŽˆð-size_tp__off_t{__off64_t†__time_t‘__suseconds_tœ__key_t¶FILEŽ_IO_lock_t•_IO_markerÁ_IO_FILE timevalOmng_uint32[mng_handlesXID~VisualID‰Window”ColormapŸXPointerª_XExtData XExtDataGC«VisualïDepthBScreen”ScreenFormat¦funcs_XImage XImager XColor~ Displayˆ _XPrivDisplay XErrorEventæ XVisualInfoò Widget XtIntervalIdPixel%ShmSegqXShmSegmentInfoImageInfomatrixØ÷<-size_t}__off_tˆ__off64_t“__time_tž__suseconds_t¸timevalFILEà_IO_lock_tç_IO_marker_IO_FILEËmng_uint32×mng_int32ãmng_int8ïmng_size_tûmng_pcharmng_ptrmng_bool%mng_handle=mng_retcodeImng_chunkidUXID`AtomkVisualIDvTimeWindowŒDrawable—Colormap¢XPointer­_XExtDataXExtDataGC®VisualòDepthEScreen—ScreenFormat©funcs_XImage XImageu XColor Display‹ _XPrivDisplayŠXKeyEvent}XButtonEventpXMotionEventXCrossingEventXFocusChangeEventpXKeymapEventXExposeEventÞXGraphicsExposeEvent]XNoExposeEventÍXVisibilityEvent“XCreateWindowEventXDestroyWindowEvent‚XUnmapEventXMapEventqXMapRequestEventXReparentEventîXConfigureEventxXGravityEvent÷XResizeRequestEventÛXConfigureRequestEventZXCirculateEventÙXCirculateRequestEventgXPropertyEventæXSelectionClearEvent’XSelectionRequestEvent/XSelectionEvent½XColormapEvent“XClientMessageEvent! XMappingEvent  XErrorEvent!XAnyEventq!XGenericEventÿ!XGenericEventCookie "_XEventÍ#XEvent$String$Widget($WidgetClass?$XtAppContextV$XtIntervalIda$Pixell$Booleanw$XtArgVal‚$Dimension$XtPointerÒ$ArgÞ$XtCallbackProc‹%XmString–%XmFontListr&XmDrawingAreaCallbackStruct'XmFileSelectionBoxCallbackStruct+ImageInfo.symtab.strtab.shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_str.debug_loc.debug_pubtypes@#@ 1@@@p7 °@°X ?@¦Gÿÿÿo®@®òTþÿÿo @ 0cÐ@ÐmØ@ØÀ  w˜#@˜#r°#@°#}@*@@*GƒHq@Hq‰Xq@Xqp‘Èu@ÈuœŸhw@hwü©€`€°€`€· €` €¼(€`(€ðÅ‚`‚Ê(‚`(‚XÓ€…`€…„ Ù ˆ`ˆX§ Þ0ˆç ˆö°ˆúª‰ýY§ãË ré| ,0îô´7¢ØBz"}*R5˜$ˆ ¨N'@@@@°@@®@ @Ð@ Ø@ ˜#@ °#@ @*@ Hq@Xq@Èu@hw@€`€` €`(€`‚`(‚`€…` ˆ` !ñÿñÿ l*@#ñÿ.€`<€`J €`W *@møà`|á`Š ð*@#ñÿ–€`£`~@± €`½ q@ñÿÓñÿÛ á`ç(á`ð0á`û4á`8á` @á`@é`(@ë`0Hë`:Pë`C …`KÀ…`Uà…`^`ë`j`ó`x`û`…`a’ +@ᢠý+@7¶ 4-@LÆ €-@œÕ Ì9@Šá T>@àò V=@þ` a ü4@#h a,p a7€ aB€aO€a[€#ag†`n€+aqñÿ|ˆ`„€-a -ap”/a /a¤0/a¯8/a·@/aÃH/aÌP/aÖX/aÝ`/aèh/aòp/aþ ”@@ F@Ñ æH@") ×j@½4 GL@åD “N@ S ³P@#b ÖP@Yq /Q@Õ‡ R@¯— ³R@ô¨ §S@ º ³T@'Ë ÚT@Ò [U@'ß ‚U@#ê ¥U@ô ÃU@¯þ rV@ V@! V@O0 ß]@#D c@{L }c@\[ Ùc@}o Vd@A„ —d@û‘ ’f@Ñœ cg@t¤ ”k@žª 2l@¶(‚`Ì€`Ý€`ð(€`ù €…`,6J] q@mz ˆ`’¢ 59@—µ @*@¼ÏØó  (ˆ`)<Qc@ˆ`Nn{“­ Hq@³Îâõ$8 I@eKYet 4?@_†” mK@Ú¤Xq@³ÃÖ`Ö`èú ,B€…`O[ 5@m /@à|pÖ`“¬ÄÔì ,M@rû , B L a n „ “ ˆ…`  ³ €`À  pp@‰Ð ä ø €Ö`Y   ) < I àà`\ l „ ¢ « èà`Ä Ø ñÿˆ`ä ð ö  ' 1 D X m  Š ™ ¨ ¼ È Ü è û   žM@õ 1 E Q h | ñÿx/a • ª ¹ Í ðà`á ñ    2 F Z ñÿˆ`a l  ” § ¼ Ç Õ å ó  ³l@½ø   ˜#@init.cinitfini.ccall_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.5939dtor_idx.5941frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxcolor.cdither_linevis_infox11_colorsx11_graysx11_mapx11_map_colorx11_map_grayx11_redx11_greenx11_bluetry_redtry_greentry_bluex11_lut_redx11_lut_greenx11_lut_bluex11_lut_grayx11_alloc_graysx11_alloc_colorcubex11_alloc_colorx11_create_lutinit_ditherdither_line_graydither_line_colormitshm_bangx11_error_dev_nullred_multgreen_multred_dithergreen_ditherblue_dithergray_ditherorigDMDMxmngview.cversionuser_handleimgstart_tvnow_tvtimeout_IDprg_idfapp_contexttoplevelmain_formcanvasfile_labelfile_fontstart_widthparse_rgb_colorset_bg_pixelfsb_cancel_cbrun_vieweruser_reset_datauser_init_dataplayer_exit_cbplayer_stop_cbplayer_single_step_cbplayer_pause_cbplayer_resume_cbplayer_restart_cbrelease_event_cbredrawexposures_cbuser_allocuser_freeuser_readuser_open_streamuser_close_streamcreate_widgetsuser_process_headerwait_cbuser_set_timeruser_get_tick_countuser_get_canvas_lineuser_refreshuser_errorpreludeusageshrink_name_GLOBAL_OFFSET_TABLE___init_array_end__init_array_start_DYNAMICdata_startmng_get_userdataXtWindowXtVaSetValuesmng_resetmemset@@GLIBC_2.2.5ftell@@GLIBC_2.2.5__libc_csu_finiXClearWindowxmPushButtonWidgetClassXtRealizeWidgetx11_destroy_ximage_startshmdt@@GLIBC_2.2.5mng_readXmFileSelectionBoxGetChild__gmon_start___Jv_RegisterClassesxmLabelWidgetClassfseek@@GLIBC_2.2.5mng_setcb_openstreamexit@@GLIBC_2.2.5_XmStringsXCreateImagestrcasecmp@@GLIBC_2.2.5gettimeofday@@GLIBC_2.2.5_finiXtCreateApplicationContextmalloc@@GLIBC_2.2.5fopen@@GLIBC_2.2.5__libc_start_main@@GLIBC_2.2.5XmStringGetLtoRmng_setcb_errorproccreate_file_dialogXtOpenDisplayXFreeColorsXtAppNextEventviewer_renderlineXtAddCallbackrun_mng_file_cb_IO_stdin_usedXtRemoveTimeOutfputc@@GLIBC_2.2.5xmFormWidgetClassfree@@GLIBC_2.2.5XtAppInitializestrlen@@GLIBC_2.2.5XtAppMainLoopXmFontListAppendEntry__data_startmng_displayx11_create_ximagex11_init_colorxmRowColumnWidgetClass__ctype_b_loc@@GLIBC_2.3XtVaCreateManagedWidgetXShmCreateImagemng_setcb_getcanvaslinebrowse_file_cbXmCreateFileSelectionDialogsprintf@@GLIBC_2.2.5mng_setcb_closestreamXtDisplaystrrchr@@GLIBC_2.2.5XmStringFreestrerror@@GLIBC_2.2.5XDefaultScreen__dso_handlefputs@@GLIBC_2.2.5__DTOR_END____libc_csu_initmng_set_canvasstylememcpy@@GLIBC_2.2.5XtStringsXShmQueryExtensionstrchr@@GLIBC_2.2.5fread@@GLIBC_2.2.5XSelectInputxmFrameWidgetClassXtAppAddTimeOutmng_setcb_processheader__errno_location@@GLIBC_2.2.5XtParentxmDrawingAreaWidgetClassstrdup@@GLIBC_2.2.5__bss_startXQueryColorXSyncstrncasecmp@@GLIBC_2.2.5XmStringCreateLocalizedXPutImagemng_setcb_settimerstrcmp@@GLIBC_2.2.5tolower@@GLIBC_2.2.5XtAddEventHandlerXShmAttachXLoadQueryFontXtCloseDisplaystrcpy@@GLIBC_2.2.5XParseColorXtToolkitInitializemng_cleanupXmStringCreateLtoRmng_setcb_refreshViewer_postludememcmp@@GLIBC_2.2.5calloc@@GLIBC_2.2.5XAllocColormng_setcb_gettickcountshmget@@GLIBC_2.2.5_endfclose@@GLIBC_2.2.5strncpy@@GLIBC_2.2.5XGetVisualInfoXVisualIDFromVisualstderr@@GLIBC_2.2.5XtUnmanageChildmng_initializeXShmPutImageXSetErrorHandlerfwrite@@GLIBC_2.2.5perror@@GLIBC_2.2.5shmctl@@GLIBC_2.2.5_edataXMapRaisedmng_setcb_readdatafprintf@@GLIBC_2.2.5mng_display_resumestrtoul@@GLIBC_2.2.5XShmDetachXtManageChildmng_set_bgcolorXtVaGetValuesmainshmat@@GLIBC_2.2.5_initXmFontListEntryCreatelibmng-2.0.2/contrib/gcc/xmngview/color.c0000644000000000000000000003630312005307152017003 0ustar rootroot/* * This code is mainly code I have found in * ida-0.14 Gerd Knorr * http://bytesex.org/ida * Ida is a small and fast image viewer, motif-based. * * Copyright (C) 2002 Gerd Knorr * * 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. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include "xmng.h" static void (*dither_line)(unsigned char *src, unsigned char *dest, unsigned int y, unsigned int width); static void dither_line_gray(unsigned char *src, unsigned char *dest, unsigned int y, unsigned int width); static void dither_line_color(unsigned char *src, unsigned char *dest, unsigned int y, unsigned int width); static void init_dither(int shades_r, int shades_g, int shades_b, int shades_gray); static XVisualInfo *vis_info; /* PseudoColor: ditherresult => colormap-entry */ static int x11_colors; static int x11_grays; static unsigned long *x11_map; static unsigned long x11_map_color[256]; static unsigned long x11_map_gray[64]; static unsigned long x11_red; static unsigned long x11_green; static unsigned long x11_blue; static int try_red[] = {4, 6, 6, 5, 4}; static int try_green[] = {8, 6, 6, 5, 4}; static int try_blue[] = {4, 6, 4, 5, 4}; /* TrueColor: r,g,b => X11-color */ static unsigned long x11_lut_red[256]; static unsigned long x11_lut_green[256]; static unsigned long x11_lut_blue[256]; static unsigned long x11_lut_gray[256]; #define x11_black x11_map_gray[0] #define x11_gray x11_map_gray[47*x11_grays/64] #define x11_lightgray x11_map_gray[55*x11_grays/64] #define x11_white x11_map_gray[63*x11_grays/64] static int x11_alloc_grays(Display * dpy, Colormap cmap, unsigned long *colors, int gray) { XColor akt_color; int i, upb; upb = gray - 1; for (i = 0; i < gray; i++) { /* FIXME: original code akt_color.red = i * 65535 / upb; akt_color.green = i * 65535 / upb; akt_color.blue = i * 65535 / upb; */ akt_color.red = i * 255 / upb; akt_color.green = i * 255 / upb; akt_color.blue = i * 255 / upb; if (!XAllocColor(dpy, cmap, &akt_color)) { /* no free color cell available */ XFreeColors(dpy, cmap, colors, i, 0); return 1; } colors[i] = akt_color.pixel; } return 0; } static int x11_alloc_colorcube(Display * dpy, Colormap cmap, unsigned long *colors, int red, int green, int blue) { XColor akt_color; int i, upb_r, upb_g, upb_b; upb_r = red - 1; upb_g = green - 1; upb_b = blue - 1; for (i = 0; i < red * green * blue; i++) { akt_color.red = ((i / (green * blue)) % red) * 65535 / upb_r; akt_color.green = ((i / blue) % green) * 65535 / upb_g; akt_color.blue = (i % blue) * 65535 / upb_b; if (!XAllocColor(dpy, cmap, &akt_color)) { /* no free color cell available */ XFreeColors(dpy, cmap, colors, i, 0); return 1; } colors[i] = akt_color.pixel; } return 0; } static unsigned long x11_alloc_color(Display * dpy, Colormap cmap, int red, int green, int blue) { XColor akt_color; akt_color.red = red; akt_color.green = green; akt_color.blue = blue; XAllocColor(dpy, cmap, &akt_color); return akt_color.pixel; } static void x11_create_lut(unsigned long red_mask, unsigned long green_mask, unsigned long blue_mask) { int rgb_red_bits = 0; int rgb_red_shift = 0; int rgb_green_bits = 0; int rgb_green_shift = 0; int rgb_blue_bits = 0; int rgb_blue_shift = 0; int i; unsigned long mask; for (i = 0; i < 24; i++) { mask = (1 << i); if (red_mask & mask) rgb_red_bits++; else if (!rgb_red_bits) rgb_red_shift++; if (green_mask & mask) rgb_green_bits++; else if (!rgb_green_bits) rgb_green_shift++; if (blue_mask & mask) rgb_blue_bits++; else if (!rgb_blue_bits) rgb_blue_shift++; } for (i = 0; i < 256; i++) { x11_lut_red[i] = (i >> (8 - rgb_red_bits)) << rgb_red_shift; x11_lut_green[i] = (i >> (8 - rgb_green_bits)) << rgb_green_shift; x11_lut_blue[i] = (i >> (8 - rgb_blue_bits)) << rgb_blue_shift; x11_lut_gray[i] = x11_lut_red[i] | x11_lut_green[i] | x11_lut_blue[i]; } } void x11_init_color(ImageInfo *img) { Colormap cmap; XVisualInfo vis_template; int found, vis_class; unsigned int i; Display *dpy; dpy = img->dpy; cmap = DefaultColormap(dpy, DefaultScreen(dpy)); if (0 == x11_grays) x11_grays = 8; /* Ask for visual type */ vis_template.screen = XDefaultScreen(dpy); vis_template.visualid = XVisualIDFromVisual(img->visual); vis_info = XGetVisualInfo(dpy, VisualIDMask | VisualScreenMask, &vis_template, &found); if (XShmQueryExtension(dpy)) img->have_shmem = 1; #if defined(__cplusplus) || defined(c_plusplus) vis_class = vis_info->c_class; #else vis_class = vis_info->class; #endif if(vis_class == TrueColor) { img->gray = 0; /* XXX testing... */ img->display_depth = 4; img->display_type = TRUECOLOR; x11_create_lut(vis_info->red_mask, vis_info->green_mask, vis_info->blue_mask); x11_black = x11_alloc_color(dpy, cmap, 0, 0, 0); x11_gray = x11_alloc_color(dpy, cmap, 0xc000, 0xc000, 0xc000); x11_lightgray = x11_alloc_color(dpy, cmap, 0xe000, 0xe000, 0xe000); x11_white = x11_alloc_color(dpy, cmap, 0xffff, 0xffff, 0xffff); } else if(vis_class == PseudoColor && vis_info->depth == 8) { img->display_depth = 1; img->display_type = PSEUDOCOLOR; if (0 != x11_alloc_grays(dpy, cmap, x11_map_gray, x11_grays)) { fprintf(stderr, "%s:%d:Sorry, can't allocate %d grays\n", __FILE__,__LINE__,x11_grays); Viewer_postlude(); exit(1); } if (!img->gray) { for (i = 0; i < sizeof(try_red) / sizeof(int); i++) { if (0 == x11_alloc_colorcube (dpy, cmap, x11_map_color, try_red[i], try_green[i], try_blue[i])) { x11_colors = try_red[i] * try_green[i] * try_blue[i]; init_dither(try_red[i], try_green[i], try_blue[i], x11_grays); break; } } if (i == sizeof(try_red) / sizeof(int)) { img->gray = 1; fputs("failed to allocate colors, using grayscaled\n", stderr); } } if (img->gray) init_dither(2, 2, 2, x11_grays); } else if(vis_class == StaticGray || vis_class == GrayScale) { img->display_depth = 1; img->display_type = PSEUDOCOLOR; x11_grays = 64; img->gray = 1; init_dither(2, 2, 2, x11_grays); if (0 != x11_alloc_grays(dpy, cmap, x11_map_gray, x11_grays)) { fprintf(stderr, "%s:%d: Sorry, can't allocate %d grays\n", __FILE__,__LINE__, x11_grays); Viewer_postlude(); exit(1); } } else { fprintf(stderr, "%s:%d: Sorry, can't handle visual\n", __FILE__,__LINE__); Viewer_postlude(); exit(1); } /* some common colors */ x11_red = x11_alloc_color(dpy, cmap, 65535, 0, 0); x11_green = x11_alloc_color(dpy, cmap, 0, 65535, 0); x11_blue = x11_alloc_color(dpy, cmap, 0, 0, 65535); if (img->gray) { x11_map = x11_map_gray; dither_line = dither_line_gray; } else { x11_map = x11_map_color; dither_line = dither_line_color; } } static int mitshm_bang = 0; static int x11_error_dev_null(Display * dpy, XErrorEvent * event) { mitshm_bang = 1; return 0; } XImage *x11_create_ximage(ImageInfo *img) { XImage *ximage = NULL; unsigned char *data; XShmSegmentInfo *shminfo = NULL; int (*old_handler)(Display * dpy, XErrorEvent * event); if (img->have_shmem) { old_handler = XSetErrorHandler(x11_error_dev_null); img->shm = shminfo = (XShmSegmentInfo*)malloc(sizeof(XShmSegmentInfo)); memset(shminfo, 0, sizeof(XShmSegmentInfo)); ximage = XShmCreateImage(img->dpy, img->visual, img->depth, ZPixmap, NULL, shminfo, img->img_width, img->img_height); if (ximage) { shminfo->shmid = shmget(IPC_PRIVATE, ximage->bytes_per_line * ximage->height, IPC_CREAT | 0777); if (-1 == shminfo->shmid) { fprintf(stderr,"shmget(%dMB): %s\n", ximage->bytes_per_line * ximage->height / 1024 / 1024, strerror(errno)); goto oom; } shminfo->shmaddr = (char *) shmat(shminfo->shmid, 0, 0); if ((void *) -1 == shminfo->shmaddr) { perror("shmat"); goto oom; } ximage->data = shminfo->shmaddr; shminfo->readOnly = False; XShmAttach(img->dpy, shminfo); XSync(img->dpy, False); shmctl(shminfo->shmid, IPC_RMID, 0); if (mitshm_bang) { img->have_shmem = 0; shmdt(shminfo->shmaddr); free(shminfo); img->shm = shminfo = NULL; XDestroyImage(ximage); ximage = NULL; } } else { img->have_shmem = 0; free(shminfo); img->shm = shminfo = NULL; } XSetErrorHandler(old_handler); } if (ximage == NULL) { img->shm = NULL; if (NULL == (data = (unsigned char*) malloc(img->img_width * img->img_height * img->display_depth))) { fprintf(stderr,"Oops: out of memory\n"); goto oom; } ximage = XCreateImage(img->dpy, img->visual, img->depth, ZPixmap, 0, (char*)data, img->img_width, img->img_height, 8, 0); } memset(ximage->data, 0, ximage->bytes_per_line * ximage->height); return ximage; oom: if (shminfo) { if (shminfo->shmid && shminfo->shmid != -1) shmctl(shminfo->shmid, IPC_RMID, 0); free(shminfo); } if (ximage) XDestroyImage(ximage); img->shm = 0; return NULL; } void x11_destroy_ximage(ImageInfo *img) { XShmSegmentInfo *shminfo = (XShmSegmentInfo*)img->shm; if (shminfo) { XShmDetach(img->dpy, shminfo); XDestroyImage(img->ximage); shmdt(shminfo->shmaddr); free(shminfo); } else XDestroyImage(img->ximage); } /* * ordered dither routines * * stolen from The GIMP and trimmed for speed */ #define DITHER_LEVEL 8 static long red_mult, green_mult; static long red_dither[256]; static long green_dither[256]; static long blue_dither[256]; static long gray_dither[256]; typedef unsigned long vector[DITHER_LEVEL]; typedef vector matrix[DITHER_LEVEL]; #if DITHER_LEVEL == 8 #define DITHER_MASK 7 static matrix origDM = { {0, 32, 8, 40, 2, 34, 10, 42}, {48, 16, 56, 24, 50, 18, 58, 26}, {12, 44, 4, 36, 14, 46, 6, 38}, {60, 28, 52, 20, 62, 30, 54, 22}, {3, 35, 11, 43, 1, 33, 9, 41}, {51, 19, 59, 27, 49, 17, 57, 25}, {15, 47, 7, 39, 13, 45, 5, 37}, {63, 31, 55, 23, 61, 29, 53, 21} }; static matrix DM; #endif /* DITHER_LEVEL == 8 */ #if DITHER_LEVEL == 4 #define DITHER_MASK 3 static matrix origDM = { {0, 8, 2, 10}, {12, 4, 14, 6}, {3, 11, 1, 9}, {15, 7, 13, 5} }; static matrix DM; #endif static void init_dither(int shades_r, int shades_g, int shades_b, int shades_gray) { int i, j; unsigned char low_shade, high_shade; unsigned short index; float red_colors_per_shade; float green_colors_per_shade; float blue_colors_per_shade; float gray_colors_per_shade; red_mult = shades_g * shades_b; green_mult = shades_b; red_colors_per_shade = 256.0 / (shades_r - 1); green_colors_per_shade = 256.0 / (shades_g - 1); blue_colors_per_shade = 256.0 / (shades_b - 1); gray_colors_per_shade = 256.0 / (shades_gray - 1); /* this avoids a shift when checking these values */ memcpy(DM, origDM, sizeof(unsigned long)*DITHER_LEVEL*DITHER_LEVEL); for (i = 0; i < DITHER_LEVEL; i++) for (j = 0; j < DITHER_LEVEL; j++) DM[i][j] *= 0x10000; /* setup arrays containing three bytes of information for red, green, & blue * the arrays contain : * 1st byte: low end shade value * 2nd byte: high end shade value * 3rd & 4th bytes: ordered dither matrix index */ for (i = 0; i < 256; i++) { /* setup the red information */ low_shade = (unsigned char) (i / red_colors_per_shade); high_shade = low_shade + 1; index = (unsigned short) (((i - low_shade * red_colors_per_shade) / red_colors_per_shade) * (DITHER_LEVEL * DITHER_LEVEL + 1)); low_shade *= red_mult; high_shade *= red_mult; red_dither[i] = (index << 16) + (high_shade << 8) + (low_shade); /* setup the green information */ low_shade = (unsigned char) (i / green_colors_per_shade); high_shade = low_shade + 1; index = (unsigned short) (((i - low_shade * green_colors_per_shade) / green_colors_per_shade) * (DITHER_LEVEL * DITHER_LEVEL + 1)); low_shade *= green_mult; high_shade *= green_mult; green_dither[i] = (index << 16) + (high_shade << 8) + (low_shade); /* setup the blue information */ low_shade = (unsigned char) (i / blue_colors_per_shade); high_shade = low_shade + 1; index = (unsigned short) (((i - low_shade * blue_colors_per_shade) / blue_colors_per_shade) * (DITHER_LEVEL * DITHER_LEVEL + 1)); blue_dither[i] = (index << 16) + (high_shade << 8) + (low_shade); /* setup the gray information */ low_shade = (unsigned char) (i / gray_colors_per_shade); high_shade = low_shade + 1; index = (unsigned short) (((i - low_shade * gray_colors_per_shade) / gray_colors_per_shade) * (DITHER_LEVEL * DITHER_LEVEL + 1)); gray_dither[i] = (index << 16) + (high_shade << 8) + (low_shade); } } static void dither_line_color(unsigned char *src, unsigned char *dest, unsigned int y, unsigned int width) { unsigned long a, b, dval, *ymod; unsigned int x; ymod = DM[y & DITHER_MASK]; for(x = 0; x < width; x++) { dval = ymod[x & DITHER_MASK]; b = red_dither[src[0]]; if (dval < b) b >>= 8; a = green_dither[src[1]]; if (dval < a) a >>= 8; b += a; a = blue_dither[src[2]]; if (dval < a) a >>= 8; b += a; src += RGB_SIZE; *dest++ = (unsigned char)(b & 0xff); } } static void dither_line_gray(unsigned char *src, unsigned char *dest, unsigned int y, unsigned int width) { unsigned long a, g, *ymod; unsigned int x; ymod = DM[y & DITHER_MASK]; for(x = 0; x < width; x++) { g = (src[0]*3 + src[1]*6 + src[2]) / 10; a = gray_dither[g]; src += RGB_SIZE; if (ymod[x & DITHER_MASK] < a) a >>= 8; *dest++ = a & 0xff; } } void viewer_renderline(ImageInfo *img, unsigned char *scanline, unsigned int row, unsigned int x, unsigned int width) { unsigned char *src, *dst; unsigned long pix; XImage *ximage; unsigned int col, max_col; unsigned short mng_rgb_size; mng_rgb_size = img->mng_rgb_size; ximage = img->ximage; src = scanline; col = x; max_col = x + width; if (img->display_type == PSEUDOCOLOR) { dst = img->dither_line; dither_line(src, dst, row, width); while(col < max_col) { XPutPixel(ximage, col, row, x11_map[dst[0]]); ++col; ++dst; } return; } /* display_type == TRUECOLOR */ while(col < max_col) { pix = x11_lut_red[src[0]] | x11_lut_green[src[1]] | x11_lut_blue[src[2]]; XPutPixel(ximage, col, row, pix); ++col; src += RGB_SIZE; } } libmng-2.0.2/contrib/gcc/xmngview/README0000644000000000000000000000070212005307152016373 0ustar rootrootProgram: ======== 'xmngview' displays MNG/JNG/PNG files. The program can be called xmngview xmngview filename This program is used within a plugin library for a browser: xmngview -wWINDOWID -bgBGPIXEL filename Limitations: ============ needs Lesstif/Motif, i.e. '-lXm -lXt -lX11'. depth >= 8 (tested with 8bpp, 16bpp, 24bpp) perhaps INTEL only perhaps LINUX only libmng: ======= read the first lines of xmngview.c szukw000, March 2003 libmng-2.0.2/contrib/gcc/gtk-mng-view/0000755000000000000000000000000012005307152016164 5ustar rootrootlibmng-2.0.2/contrib/gcc/gtk-mng-view/dummy.c0000644000000000000000000000764212005307152017474 0ustar rootroot/* * Very simple program, that has been used by us * (V. Babin and * S. Kondrat ) * during toying with libmng (http://www.libmng.com) * * License: GPL :-)) * * 7 July 2001: added key-press/button-press handling to exit viewer without * window-manager help; added libmng version info [Greg Roelofs] */ #include #include #include #include #include #include #include "gtk-mng-view.h" #define BLOCK_SIZE 4096 static guint read_file (const gchar* file_name, guchar ** ptr) { gint fd; guint size = 0; guint bytes_read = 0; if ((fd = open (file_name, O_RDONLY)) == -1) { perror (file_name); * ptr = NULL; return 0; } * ptr = g_new (guchar, BLOCK_SIZE); while ((bytes_read = read (fd, * ptr + size, BLOCK_SIZE))) { size += bytes_read; * ptr = (guchar *) g_realloc (* ptr, size + BLOCK_SIZE); } close (fd); * ptr = (guchar *) g_realloc (* ptr, size); return size; } int main (int argc, char ** argv) { GtkMngView * mng_view; GtkWidget * window; GtkWidget * align; GtkWidget * frame; guchar * mng_data = NULL; guint mng_data_size; if (argc < 2) { g_print ("Usage: %s \n\n", argv[0]); g_print (" Compiled with GTK+ %d.%d.%d; using GTK+ %d.%d.%d.\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, gtk_major_version, gtk_minor_version, gtk_micro_version); #ifdef GDK_PIXBUF_VERSION g_print (" Compiled with gdk-pixbuf %s; using gdk-pixbuf %s.\n", GDK_PIXBUF_VERSION, gdk_pixbuf_version); #endif g_print (" Compiled with libmng %s; using libmng %s.\n", MNG_VERSION_TEXT, mng_version_text()); g_print (" Compiled with zlib %s; using zlib %s.\n", ZLIB_VERSION, zlib_version); #ifdef JPEG_LIB_VERSION { int major = JPEG_LIB_VERSION / 10; int minor = JPEG_LIB_VERSION % 10; char minoralpha[2]; if (minor) { minoralpha[0] = (char)(minor - 1 + 'a'); minoralpha[1] = '\0'; } else minoralpha[0] = '\0'; g_print (" Compiled with libjpeg %d%s.\n", major, minoralpha); } #endif g_print ("\nPress Esc or Q, or click mouse button, to quit.\n"); return 1; } mng_data_size = read_file (* (argv + 1), &mng_data); if (mng_data == NULL) return 1; gtk_init (&argc, &argv); gdk_rgb_init (); gdk_rgb_set_verbose (TRUE); gtk_widget_set_default_visual (gdk_rgb_get_visual ()); gtk_widget_set_default_colormap (gdk_rgb_get_cmap ()); window = gtk_widget_new (GTK_TYPE_WINDOW, "GtkWindow::type", GTK_WINDOW_TOPLEVEL, "GtkWindow::title", "MNG animation", "GtkContainer::border_width", 5, NULL); gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* any keypress (e.g., Esc or Q) or mouse-button click will quit viewer */ gtk_signal_connect (GTK_OBJECT (window), "key_press_event", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK); gtk_signal_connect (GTK_OBJECT (window), "button_press_event", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); gtk_container_add (GTK_CONTAINER (window), align); frame = gtk_frame_new (NULL); gtk_container_add (GTK_CONTAINER (align), frame); /* actually it */ mng_view = GTK_MNG_VIEW (gtk_mng_view_new ()); gtk_container_add (GTK_CONTAINER (frame), GTK_WIDGET (mng_view)); gtk_mng_view_load_mng_from_memory (mng_view, mng_data, mng_data_size); g_free (mng_data); /* rest in piece */ gtk_widget_show_all (window); gtk_main (); return 0; } libmng-2.0.2/contrib/gcc/gtk-mng-view/README.compile0000644000000000000000000000032712005307152020475 0ustar rootrootRequire: * gtk+ >= 1.2.0 (tested on 1.2.8) * libmng (tested on 0.9.2) You have specify Your libmng instalation prefix before typing `make' in the first line of a Makefile in this directory. Later type `make'. libmng-2.0.2/contrib/gcc/gtk-mng-view/Makefile0000644000000000000000000000106112005307152017622 0ustar rootrootLIBMNG_PREFIX = /usr/local CC = gcc CFLAGS = -g -O2 -Wall \ `pkg-config --cflags gtk+-2.0` \ -I$(LIBMNG_PREFIX)/include LIBS = `pkg-config --libs gtk+-2.0` \ -L$(LIBMNG_PREFIX)/lib -lmng -ljpeg -llcms -lz OBJ = dummy.o \ gtk-mng-view.o EXE_BASENAME=gmngview all: $(EXE_BASENAME) $(EXE_BASENAME): $(OBJ) $(CC) -o $(EXE_BASENAME) $(OBJ) $(LIBS) #$(EXE_BASENAME)-static: $(OBJ) # $(CC) -static -o $(EXE_BASENAME)-static $(OBJ) $(LIBS) .c.o: gtk-mng-view.h $(CC) -c $(CFLAGS) $< clean: rm -f core $(EXE_BASENAME) $(EXE_BASENAME)-static $(OBJ) libmng-2.0.2/contrib/gcc/gtk-mng-view/gtk-mng-view.c0000644000000000000000000002753612005307152020661 0ustar rootroot/* Toy widget for GTK+ for displaying MNG animations. * * Copyright (C) 2000 The Free Software Foundation * * Author(s): Volodymyr Babin * * This code is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include "gtk-mng-view.h" #include /* MNG callbacks */ static mng_ptr mng_malloc_callback (mng_size_t how_many) { return (mng_ptr) g_new0 (gchar, how_many); } static void mng_free_callback (mng_ptr pointer, mng_size_t number) { g_free (pointer); } static mng_bool mng_open_stream_callback (mng_handle mng_h) { return MNG_TRUE; } static mng_bool mng_close_stream_callback (mng_handle mng_h) { return MNG_TRUE; } static mng_bool mng_read_data_callback (mng_handle mng_h, mng_ptr buffer, mng_uint32 bytes_requested, mng_uint32 * bytes_read) { guint available_mng_food; GtkMngView * mng_view = GTK_MNG_VIEW (mng_get_userdata (mng_h)); available_mng_food = mng_view->bytes_to_eat - mng_view->bytes_eaten; if (available_mng_food > 0 && mng_view->mng_food != NULL) { * bytes_read = (mng_uint32) MIN ((mng_uint32) available_mng_food, bytes_requested); memcpy (buffer, mng_view->mng_food + mng_view->bytes_eaten, * bytes_read); mng_view->bytes_eaten += * bytes_read; return MNG_TRUE; } else return MNG_FALSE; } static mng_bool mng_process_header_callback (mng_handle mng_h, mng_uint32 width, mng_uint32 height) { GtkMngView * mng_view; mng_view = GTK_MNG_VIEW (mng_get_userdata (mng_h)); mng_view->width = width; mng_view->height = height; g_free (mng_view->MNG_drawing_buffer); mng_view->MNG_drawing_buffer = g_new0 (guchar, 3 * width * height); gtk_widget_queue_resize (GTK_WIDGET (mng_view)); return MNG_TRUE; } static gboolean gtk_mng_view_animator (GtkMngView * mng_view) { mng_retcode retcode; retcode = mng_display_resume (mng_view->MNG_handle); if (retcode == MNG_NOERROR) { mng_view->timeout_ID = 0; return FALSE; } else if (retcode == MNG_NEEDTIMERWAIT) return FALSE; else g_warning ("mng_display_resume() return not good value"); return FALSE; } static mng_bool mng_set_timer_callback (mng_handle mng_h, mng_uint32 delay) { GtkMngView * mng_view; mng_view = GTK_MNG_VIEW (mng_get_userdata (mng_h)); mng_view->timeout_ID = gtk_timeout_add (delay, (GtkFunction) gtk_mng_view_animator, mng_view); return MNG_TRUE; } static mng_uint32 mng_get_tickcount_callback (mng_handle mng_h) { gdouble seconds; gulong microseconds; GtkMngView * mng_view; mng_view = GTK_MNG_VIEW (mng_get_userdata (mng_h)); seconds = g_timer_elapsed (mng_view->timer, µseconds); return ((mng_uint32) (seconds*1000.0 + ((gdouble) microseconds)/1000.0)); } static mng_ptr mng_get_canvas_line_callback (mng_handle mng_h, mng_uint32 line) { GtkMngView * mng_view; mng_view = GTK_MNG_VIEW (mng_get_userdata (mng_h)); return mng_view->MNG_drawing_buffer + 3 * line * mng_view->width; } static void gtk_mng_view_paint (GtkMngView *, GdkRectangle *); static mng_bool mng_refresh_callback (mng_handle mng_h, mng_uint32 x, mng_uint32 y, mng_uint32 width, mng_uint32 height) { GtkMngView * mng_view; mng_view = GTK_MNG_VIEW (mng_get_userdata (mng_h)); if (GTK_WIDGET_REALIZED (mng_view)) { GdkRectangle rectangle; rectangle.x = x; rectangle.y = y; rectangle.width = width; rectangle.height = height; gtk_mng_view_paint (mng_view, &rectangle); } return MNG_TRUE; } static gboolean gtk_mng_view_init_libmng (GtkMngView * mng_view) { GtkWidget * widget; g_return_val_if_fail (IS_GTK_MNG_VIEW (mng_view), FALSE); if (mng_view->MNG_handle) mng_cleanup (&mng_view->MNG_handle); mng_view->MNG_handle = mng_initialize (mng_view, mng_malloc_callback, mng_free_callback, MNG_NULL); if (mng_view->MNG_handle == MNG_NULL) return FALSE; if (mng_setcb_openstream (mng_view->MNG_handle, mng_open_stream_callback) != MNG_NOERROR || mng_setcb_closestream (mng_view->MNG_handle, mng_close_stream_callback) != MNG_NOERROR || mng_setcb_readdata (mng_view->MNG_handle, mng_read_data_callback) != MNG_NOERROR || mng_setcb_processheader (mng_view->MNG_handle, mng_process_header_callback) != MNG_NOERROR || mng_setcb_settimer (mng_view->MNG_handle, mng_set_timer_callback) != MNG_NOERROR || mng_setcb_gettickcount (mng_view->MNG_handle, mng_get_tickcount_callback) != MNG_NOERROR || mng_setcb_getcanvasline (mng_view->MNG_handle, mng_get_canvas_line_callback) != MNG_NOERROR || mng_setcb_refresh (mng_view->MNG_handle, mng_refresh_callback) != MNG_NOERROR) { mng_cleanup (&mng_view->MNG_handle); return FALSE; } mng_set_canvasstyle (mng_view->MNG_handle, MNG_CANVAS_RGB8); widget = GTK_WIDGET (mng_view); if (!GTK_WIDGET_REALIZED (widget)) gtk_widget_realize (widget); mng_set_bgcolor (mng_view->MNG_handle, widget->style->bg[GTK_STATE_NORMAL].red, widget->style->bg[GTK_STATE_NORMAL].green, widget->style->bg[GTK_STATE_NORMAL].blue); return TRUE; } /* GTK+ widget methods */ static GtkWidgetClass * parent_class = NULL; static void gtk_mng_view_finalize (GObject * obj) { GtkMngView * mng_view = GTK_MNG_VIEW (obj); g_timer_destroy (mng_view->timer); if (mng_view->timeout_ID) gtk_timeout_remove (mng_view->timeout_ID); g_free (mng_view->MNG_drawing_buffer); if (mng_view->MNG_handle) mng_cleanup (&mng_view->MNG_handle); G_OBJECT_CLASS (parent_class)->finalize (obj); } static void gtk_mng_view_size_request (GtkWidget * widget, GtkRequisition * requisition) { GtkMngView * mng_view; g_return_if_fail (IS_GTK_MNG_VIEW (widget)); g_return_if_fail (requisition != NULL); mng_view = (GtkMngView *) widget; requisition->width = mng_view->width; requisition->height = mng_view->height; } static void gtk_mng_view_size_allocate (GtkWidget * widget, GtkAllocation * allocation) { g_return_if_fail (IS_GTK_MNG_VIEW (widget)); g_return_if_fail (allocation != NULL); if (GTK_WIDGET_REALIZED (widget)) gdk_window_move_resize (widget->window, allocation->x, allocation->y, allocation->width, allocation->height); } static void gtk_mng_view_paint (GtkMngView * mng_view, GdkRectangle * area) { GtkWidget * widget; guint rowstride; guchar * buffer; register guchar * ptr; register guchar * bptr; widget = GTK_WIDGET (mng_view); g_assert (GTK_WIDGET_REALIZED (widget)); rowstride = 3 * area->width; buffer = g_new (guchar, rowstride * area->height); bptr = buffer; ptr = mng_view->MNG_drawing_buffer + 3 * (area->y * mng_view->width + area->x); while (bptr < buffer + rowstride * area->height) { memcpy (bptr, ptr, rowstride); bptr += rowstride; ptr += 3 * mng_view->width; } gdk_draw_rgb_image (widget->window, widget->style->white_gc, area->x, area->y, area->width, area->height, GDK_RGB_DITHER_NORMAL, buffer, rowstride); g_free (buffer); gdk_flush (); } static gboolean gtk_mng_view_expose (GtkWidget * widget, GdkEventExpose * event) { g_return_val_if_fail (IS_GTK_MNG_VIEW (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); if (GTK_WIDGET_REALIZED (widget)) { GdkRectangle dummy; GdkRectangle rectangle; GtkMngView * mng_view; mng_view = GTK_MNG_VIEW (widget); dummy.x = dummy.y = 0; dummy.width = mng_view->width; dummy.height = mng_view->height; if (gdk_rectangle_intersect (&dummy, &event->area, &rectangle)) gtk_mng_view_paint (mng_view, &rectangle); } return FALSE; } static void gtk_mng_view_realize (GtkWidget * widget) { GdkWindowAttr attributes; gint attributes_mask; g_return_if_fail (IS_GTK_MNG_VIEW (widget)); GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); attributes.window_type = GDK_WINDOW_CHILD; attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual (widget); attributes.colormap = gtk_widget_get_colormap (widget); attributes.event_mask = gtk_widget_get_events (widget); attributes.event_mask |= GDK_EXPOSURE_MASK; attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); gdk_window_set_user_data (widget->window, widget); widget->style = gtk_style_attach (widget->style, widget->window); gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); } static void gtk_mng_view_init (GtkMngView * mng_view) { g_return_if_fail (IS_GTK_MNG_VIEW (mng_view)); GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (mng_view), GTK_NO_WINDOW); mng_view->MNG_handle = NULL; mng_view->MNG_drawing_buffer = NULL; mng_view->timeout_ID = 0; mng_view->timer = g_timer_new (); g_timer_start (mng_view->timer); mng_view->mng_food = NULL; } static void gtk_mng_view_class_init (GtkMngViewClass * klass) { GObjectClass * object_class; GtkWidgetClass * widget_class; parent_class = g_type_class_peek_parent (klass); object_class = G_OBJECT_CLASS (klass); object_class->finalize = gtk_mng_view_finalize; widget_class = GTK_WIDGET_CLASS (klass); widget_class->size_request = gtk_mng_view_size_request; widget_class->size_allocate = gtk_mng_view_size_allocate; widget_class->expose_event = gtk_mng_view_expose; widget_class->realize = gtk_mng_view_realize; } GtkType gtk_mng_view_get_type (void) { static GtkType type = 0; if (!type) { static const GtkTypeInfo type_info = { "GtkMngView", sizeof (GtkMngView), sizeof (GtkMngViewClass), (GtkClassInitFunc) gtk_mng_view_class_init, (GtkObjectInitFunc) gtk_mng_view_init, NULL, NULL, (GtkClassInitFunc) NULL }; type = gtk_type_unique (GTK_TYPE_WIDGET, &type_info); } return type; } GtkWidget * gtk_mng_view_new (void) { return GTK_WIDGET (gtk_type_new (GTK_MNG_VIEW_TYPE)); } gboolean gtk_mng_view_load_mng_from_memory (GtkMngView * mng_view, guchar * data_to_eat, guint data_size) { g_return_val_if_fail (IS_GTK_MNG_VIEW (mng_view), FALSE); g_return_val_if_fail (data_size > 27, FALSE); g_return_val_if_fail (data_to_eat != NULL, FALSE); if (data_to_eat[0] != 0x8a || data_to_eat[1] != 'M' || data_to_eat[2] != 'N' || data_to_eat[3] != 'G' || data_to_eat[4] != 0x0d || data_to_eat[5] != 0x0a || data_to_eat[6] != 0x1a || data_to_eat[7] != 0x0a) { g_warning ("not mng format"); return FALSE; } if (gtk_mng_view_init_libmng (mng_view)) { mng_view->bytes_to_eat = data_size; mng_view->bytes_eaten = 0; mng_view->mng_food = data_to_eat; if (mng_read (mng_view->MNG_handle) != MNG_NOERROR) { g_warning ("libmng read error"); mng_cleanup (&mng_view->MNG_handle); return FALSE; } else return mng_display (mng_view->MNG_handle); } else { g_warning ("error initializing libmng"); return FALSE; } return TRUE; } libmng-2.0.2/contrib/gcc/gtk-mng-view/README0000644000000000000000000000247512005307152017054 0ustar rootrootFrom dummy.c: /* * Very simple program, that has been used by us * (V. Babin and * S. Kondrat ) * during toying with libmng (http://www.limng.com) * * License: GPL :-)) * * 7 July 2001: added key-press/button-press handling to exit viewer without * window-manager help; added libmng version info [Greg Roelofs] */ From gtk-mng-view.c: /* Toy widget for GTK+ for displaying MNG animations. * * Copyright (C) 2000 The Free Software Foundation * * Author(s): Volodymyr Babin * * This code is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ libmng-2.0.2/contrib/gcc/gtk-mng-view/COPYING0000644000000000000000000006126112005307152017225 0ustar rootroot GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, 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 library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, 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 companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Library 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libmng-2.0.2/contrib/gcc/gtk-mng-view/.cvsignore0000644000000000000000000000000712005307152020161 0ustar rootrootdummy libmng-2.0.2/contrib/gcc/gtk-mng-view/gtk-mng-view.h0000644000000000000000000000375512005307152020663 0ustar rootroot/* Toy widget for GTK+ for displaying MNG animations. * * Copyright (C) 2000 The Free Software Foundation * * Author(s): Volodymyr Babin * * This code is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __GTK_MNG_VIEW_H__ #define __GTK_MNG_VIEW_H__ #include #include #define GTK_MNG_VIEW_TYPE (gtk_mng_view_get_type ()) #define GTK_MNG_VIEW(o) (GTK_CHECK_CAST ((o), GTK_MNG_VIEW_TYPE, GtkMngView)) #define GTK_MNG_VIEW_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), GTK_MNG_VIEW_TYPE, GtkMngViewClass)) #define IS_GTK_MNG_VIEW(o) (GTK_CHECK_TYPE ((o), GTK_MNG_VIEW_TYPE)) #define IS_GTK_MNG_VIEW_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), GTK_MNG_VIEW_TYPE)) typedef struct _GtkMngView GtkMngView; typedef struct _GtkMngViewClass GtkMngViewClass; struct _GtkMngView { GtkWidget widget; /* private */ GTimer * timer; guint timeout_ID; guint width; guint height; mng_handle MNG_handle; guchar * MNG_drawing_buffer; guchar * mng_food; guint bytes_to_eat; guint bytes_eaten; }; struct _GtkMngViewClass { GtkWidgetClass klass; }; GtkType gtk_mng_view_get_type (void); GtkWidget * gtk_mng_view_new (void); /* returns !FALSE on success */ gboolean gtk_mng_view_load_mng_from_memory (GtkMngView *, guchar *, guint); #endif /* __GTK_MNG_VIEW_H__ */ libmng-2.0.2/contrib/gcc/gtk-mng-view/linux.mng0000644000000000000000000017116212005307152020036 0ustar rootrootŠMNG  MHDRe Ò%]¢ TERMÿÿÿg—‹éBACKÝÙbKGD%¬.L IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D›IDATxÚ½›kwÓ¸†ã{±H0¢3.Øññò «6®ÌN›ÿÿ¯Î»uñ%qš´3ë¨|(4ñ£wߥ”Õáÿ±V׿4Ã_´ßÏóô_§„Ñf»½U_›uE äçÞ•¤k(þæv·Û}W°nAÊ*rÿJH„q)qÈvJw™s‰Î–¤9kÅÉa·KœÕÆ÷åEi”œ¢|5å,cÔ³¶˜´å¯£< !ŒñŽÁýk(Ï3fVÓÎ)ÜSÂK Õ( {åqT’&WF;‡Y¦\´ÖÔ7c¤ï§Ü^ !ÌFl–¶Ë˜%ʵJ F¹Æ7®YƬþ!äÔ5%»†òˆ‰³u4µYÅ.S®Œ®óqÖ–}}‰½Bq6C6«¸óGy•½¾›2cú™ÍΜeÊæ•%fýŒüßóZ.R^-e0™oMv,f¤¬_/eîD2³g1#åÕ]˜§Š2øß9¥\ßS–ü2Éc²žOĬ.IÙùm»¹Êd“Œ)TÊŒbV¤Üú9K„^¢lÖÓŒ!“AŒ#(˶ ¯Žƒ8–Ïrh@_Û¹:¹f²Õ3µ…,X­VâDgCý$ÈRCqÄŒ²ôÖ0ÌyЭÔÚƒ#ÚsÓ¦Mþ¥âˆ29¥,H‰Â¼WãÚ+=ÍY-£_L•=ƒÉÄ„râûµß¸Ùª[­Ž9U´HÙN(ž¥cä„rd‰ÛÆOåa¼;^¸Ý-i±óò˜2ßßníçupÊâÄ© ìÒkvK”-Lj“­N ¶ó*^dHÞº.f)Ê|~ œyßT2*˜µ³:2Ø®iRql¬n[ÕU[ò6Û $x~;£læZÆ (ƒmêû` Z¿ñ7ýKÆòÁA*+©Â„þX•ËJ™Â¬¦Û…~‘KÙªÄüë‚Q›RdyD†Sýe梠Åh÷ CÙÙAHpj«LVÐ_ø¡Wï§?!Žš+€Í¤ÂèBF~™h±•#òSq¤c‰èÁhý(­Ov 9Û[%e’ûÚû*”…Y ‰Z”†/ʾð×éil㊓†ëqþ˜ûEx_iвU悵R·^Žɽ%ä@O±´ Ç»“/mYò©–[ñäI¢g¼Mýf½PË]žíW‹ €8žoîšrm1É …Iž&ÇB榹)'ë»cIpŽƒ yÐ1Ñ‚HžiA9ßùErÌ`4cÉ s:ŸÓCvë‰cRŸ,f½/€! ZûÌï«J==«"a+œã QzyžuŒ,Æ$a@Yïš™ÊVÐ NúøøøëÇ¿ÿ¾O©žÜ6"ç ‡ä8ž7¥(‹e¦“|‡‘§„uî¿þüúþÓû÷><¼¹ùýËÝ}ëßn|¼½z†×®®bD)§”µWÏ<"8,ówúãñׯ昛›7Oµ·Áqûg80CššÊOuÌúÅçcžPY,Ûòþ×#]P>>óI«åáIÖ^¨ÜS±ø gˆ¾-Œó'ZŠÁóEdë¥÷›ïäøÂÊÍÃÃÝ“S—~Dœ²¬“E•ƒºtQÆJUÇŒ–|°×žÆ‡ÔãO?Lpí6…Ä|E8è0šSÕñ9NÆK,C¡³Jƒ‚Ðò›ûO°—‚la£ÅÞÜý|Â{DŸ‡ë휾w9d¶šW*µ¹âC’d¼ðš°øô×ÇÇ-ÖZlðËÝOR$±“úáínzvëÄÝ"QÀ¹îÈ´V™… óõ÷Pþù鯿~ü¢TùE¾cìî'õ¤¤FÝÙ¨4õ ‡É%ªhì0¢8‚ĬÁœ ßÃøîýûOaCAŒ¼‹µ(·Ô"×/ÒÖYV³kf´KA2f ¨‘óðáÃ{½§e<¯”<Ñ;²Ø¡"º¡â×"5\±TB©#d²®Éùbb1ÂxTFЇpÌ"ÊóÊ)J2UF£í–^+—Û”dÂÅúeddd-Þ>ÐCÕz£$äÃÏ'-BHˆ~RR8çZÛ>PbBŒüRÁH¾i¾ïúÿ¨G ÈŸOOêå"‹‘Ù©—ºÄ°óÌ’é€Áj“.rUˆñÇA,½íîþ͸>Üýùth!Y&×n…Ü-Ø™–†dI1-̱~™G(1IÕøîowðü;ÂQ¶Ê’LöÈyDüY !ïù˜ùD)œiy0Õ7EŠõ„5¼ ~Ç»9¤£ŽWç„ÀXÄè S3#¿ŸŽ“Ô_˜ï{m-„4 „Ó·}ï>à~™²UU邬6©-æ§,F€}1Îvk_ÝAÃ\Øg¼-hOó´^¬)Ú!± —TéXQmÓ2qÿõË·aOØRíEÑ&jjâžjç)egªƒ‰º&ÕbFÞ´qŒš|¨}Ÿ»Þ¼ý8{GÒûë[šµo7N¿Åø—²ãØ%o«äQ8Äu¹ˆi!’¤•‚.–xaúõ÷›·ïæÞ „ëoÍøy-F“Æ**˜ÔÞEV¹˜>ê:K’˜Úº”  ÃþãÛw¿M F’£ÇÝ´àK98NŒ˜î´02”µdR_$ÄVËÞmÖù?¿ûü9v]W ¥ @´¸EÁkX[tä$´bdþì»@ÖI7X/–ȹ§ïƒ$”Žû‘÷öíÛI‘ÄÙ0¦…×£%q‘’IX b‚*í©ª+ªŠ£z1söJ R:£ÅVu5?o@ ‚Ä„QÐbOyV¸Ç}7¨LÁÇö9ôå®K0Cu¤$ˤ4É¢-¶Â>TîÔ ÛÅô®.E bÇmËIPËá$É`Ë.Ñæ‚@üÀF0˜ù?î‰òÍÕ•=`Ÿ¶©Ò”‹õo’h2Fm3ÓÁ„樓EЂòåíÍ»oܱ'YV¥2€–}Õ—”Ømµ–¸F2DÓ€jBAlyÑ”³÷÷®ÜÙé@ŽcN§î}ÐñâˆÒÅ6cVa¬d’ Fƒá8ºK =[( Üßä%«`Ó80fãtîö›QˆWU zMJ!Ù€A5³Rt±Õ‘ú>Q>Æî^]!è,Ë8,¶ßwõäœÖQU2·TóxGZÐÑj‡¢ØzEL,vˆ]¿ùú;(ßÜ€\'ÚÌALÛ×ãMU„cláê)9#‹¡ðiõÍg"ìÝ «¾¼EõŽL˜Üì:Lƒ{Y‰ÑZ Ê®E¥·JÉQ‰éæ&ˆƒ#¤ê_Z‹¡¬$ŠÝoD©k¢T%ƒ;÷æ]RYsÐ.kêæ-W?Ýc{Žà,օˤs§Ãlâ}§D¦PîOzÚ§A+Ó6!Çà=‰ð¡ø)K‡ÔP+Øü“Q •J÷ãÍUGiûùóÇ'Ã3œŽý>Q{ë¨bXc€‡E¾ÓvA׿u¦Ò}Ÿ`Ùx Û\,%†õc<ñÐá°Àá!Ìk`H UÁýIÙ']ìY¢#/'âd¨h4ö™>9Þ[RØádƒ#5¥²È›õ& SGÄ{U0c§†£ð½^˜I’dSÅqOQ…ªmƒ³SbL=)ŽNH/Zê(íÓÎ:j0x%»¨#m«>»c43r®Ž ú£êDZÔ3ˆ Sè58fB©‹¶GÓõõ¢­±"âThæ¼=¸1ÀWZôÌNuX¦éˆÎ+˜@±”[„œÝ'èj¦"LŠi%ý¼‰À‰Ö‘út Ýøæf*÷Ì(êédÇY_Uz:BM4D ³î2‡¬Ü¯ë´/ÔQ6œ¹˜ô|?lš°¡;£ž£¨äʲ)ݶmåÐð‚¥ÎxhÅIÏËù=ÿ¡u³Œçõ²Ft–yÞ(Jsîªû¢RßË&D«\Hp8¦o:EªYF"öxLŽÉ2¡ ¹(|¹ŸË²Ày;U6 C#öà¢ÐÅTšN&Ê6MS{Â(à˜¦ °˜ÑrüYÆø6S¦y’žÛ¤tØ!ºYž.ŠŠK)\ä¦>I¨3±P®3)#¥§S¢VÕòíöÉÏúï~n?ÂGë2¶mÕäÍÕyÅÌßbRŽ>ã£íiŠzœ is{—[о/ô€tÐÝ‘KÇfÀ4Ç©av9¥0—Σ†3XhXƒHoÂi ‚¿ŸC„‹ËåP¹…2šNEÒ²ò9Á\¢!¥•‡óŠ˜ÛkFa¥ÂX=£‡,"77yžeh%•¦ˆuÉTÊì3qT+C9iÆ#S!Ö\êÄ"m«Ÿyåèó}*Š*x<³ô³soXƒ±´9R"Æb¼D©{œÖLz'+VHYM|2¶zuÜ=K90:ÚdH½¥Ì¤1E:xd2q¼\°×Éï0R3$Ýñ*F§“\F‰‰,!çž_  UZNqB"1¬ŠJf±u"åäw{¨ˆCB™–eŒCæÖ27(³éè9ŠÂ A–k M+´k«j(*l‰‡Ç…ß¹2—®^´yõðVÿ½ÔŒ±rÙದòØ\‹”ƒjI½4À&ˆÊ¶,Sºæ91×2å UOB'§É†¾Ôã5ÂȰƚœ…NÊýÊAšÞ§Høª´»-ÁʘRÄèúõ”ƒ´= 58¨›(~Âp¦ø‡ë)ê±z¾;ZlÎGZÄá%”ƒ»ˆ)˜i¹D˜è)ú›3g~VJue“¥5]I9‡Ëç\rr g8Š4]ê07-òÃp/¯¡Ì,BÏuÔÓg11#_LÑrH±äBÜ^pûUâ¶!.<åòïÀ‹¹õçÅ÷ ×QŒÝÆanâ uÑ|Å®ü¿ Ó¹ALKðuoÁÿ³Ó¶~!¨^OùëæœÀàqlØGtEXtSoftware@(#)ImageMagick 5.1.1 00/02/01 Q:8 cristy@mystic.es.dupont.comC‚2ûtEXtCommentCreated with The GIMPïd%nIEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±DIDATxÚ½›‹vÛ¸†Å«l¢’iØŒR&&Å5º%6i„ÈdÒ¬­÷«Î .eÝìÝSº»§~üçŸhu¶û\³Ë´JÓ9|ᵉãªâ;%/ïîVôµ\ÌçsÅUt!éJ¼\­×ë¯ô¸V@”Uþ-” ãE(ä`ìHOtžsŽ’N–¤9 âT·sœÙÆ×Ãr4fCrêæÝ”£ŒQÏÂb¸*ÞG9 AŒqÇ`êá=”ÓŒIÔ´9uøfJzŽ¡1£°·Q. ‡Š1íæ0ål´|oÆLLq9eu!1w43®cQ.Ub0dMl¬9Œ™ýEÈkkv å-“g‹¹³Ž§\˜]ÇóL5ƒF̺/3³RZ0–W ‰„M±ü`Ø(¯3ÆÓ‚tYŒæ›>†c=b€’YHEÕjø9}Ž¡A®S[(pÚÇiÞ­V0§%6¶ E )"è‹ÿ¸½½¿¿¾þí?ßþ¯V['§Áv«9›ÅrIïÿ¬m‹ò|±”|W¿ûþýËçÏ·÷O××WWÿzdÑ àÉQ= rÒù³eìüØÇ¬/dgß4ßžÏÏÏ_>ß"æêêúþã ‹ïæ°‘¨¡OŽú“”’Çú•©«|­e˜jÙ&½Rßž¡Öîž}ùl(O¼Œ/W)½ø‡Ó89p6™$2ú2jÁba÷ûó ßHj b®Ÿî_dPDó¥:Ê¡¸A1Çq<¦˜GÁƒ?V6üÛ·_ØžÖS-Ð…d„U zÂá`Kr(çŠN±ÁiéQsÁ£oŸ¿?/—ÏÏ¿¾¾@Äú, ã%âOr°Nœ*rÓ…(8‘{¢´Š£ÇÏ_¾üz~þ®ÍB)Ÿ~¼ô})ÂX÷X> Ï2Ñçôð¸£ùP.…„íÅ€+CuÇÿ¼½æ±Iäëû0чUjZpUÃÃ6Ù서¦æ|¤0£E öûêãý-]÷÷òôãW–CSÛYBgˆ#–Ié–rzC¶Œ‰l|É«¯›GH)ºžÈ4Eð#yVD8î‰Qcè< XÑ(¤X[Œ/±Y"Óõ××Op]£Ž«+ô•ÑKˆØraÇX3Y ­ÄÙâR )Û,\†¿]Ù „|zyé‰RJô‚×Õæ8£Õ‹1"Û*M¯4åÒë.VÏ\ëëééÓãËK •”}Ï¥¢M4œÔŒNiyok’ÎŒY^G/Ÿ>Áõø¨ ïæ¥ A:ßDM~R‡¥8ÔŠ×ÄlM:_0CrÅ‹—þE"A "Ïe£:˜ÐU#Îè€XEUe'¾ ˜/™‘Ò϶úç3q™—‡’Ï+ê¦ÓCqZ‡aÄÕØÃj›Ç¤…"–gnhu‘‚\t¸…ÔU¬úö¨Ž u„Š#Ã6J;ò)`^Ä‚ÿ6«ˆaà*¿T©0Šyp¬ßc–öC™¡¢Uà?jÒ*õäÝ?ìÃAÿ]ѯUV‹¸Ž “W÷¶MÌ]ð±e†.6pÅÌôœb7®I˜Óêª0Žºýä…®‹÷À»„…,1 !ëCEÑ)Á¦bh€a ?Ð)?¶zÞ“f²† GC;ßkÓÛž‰¼Ýê ·vèõ5ëT‡ ‚Û O›&´¶è ÓZþüPvR{œAuð¡‡sž˜tñJ¨ô¨ñþÂ@sg?¶Ôd qPŠÍ0‹ÊãÍOÑf„É8Ëá|Ç‹+ÆeWñ-‡Çå[a:Ð&V•$H¨w¤±‰‘–7ÁLc²:@gk6”ˆ]ü-&o; ÌrZ(ZE ÍïL†ùkþñ ±e¶³¼¯Y»MZµG)y§ï\BÊ>pƒ¬ µ[8ôh 0h² …ß^à;ÿ͉?š%B„EOØ ûÝȶ¢ ‰$LÌLœ-]¨¨VtS† Í¡“Å>ô-ÞÒ¦ʶ§ŸóPß—&nCÇKrŒVIŽÔX‘áX÷¶½hÊÇ›Otë27ñPÐL*¥¿!º¦è™bºáySâ8›HÑÞ ÷†d÷𠶬ŸÍ Í2=¼4¤áz¹EÀa3Ó&^ à7»f/Û^,%“uYÖ"eÛê¿¶@KÓM.)™„Þ_ Ep×¼ÌJQfžV ºêM‚Ùáb)Ø9h¿ÛÔeIFûè´2¡¼sKG‹ªÁâÕ îx1fv³ñ]ߎ:¾µH¡æ ™áÁKržè 7GÙ³KÝR ©ØÈÁŽŒÙÈ¢˜”½è'oGa¬À¸¯6€‰ßãDÇ%Ž”ê[mXôŒ˜¤Mð Nm Êö)ÔŠŒú˜×Áœ-†"¡raU³#; ªXŸG逃W¿VÑ“<€Á«jØ(àœ· LÎbª˜xÙ²Ÿ¼OÞ \–Pl1Þšãà8šÒ!>½Ñ‡Sz¿†¿Âñvb|Õa*XÁ˜“â2lú¾W ´À&Â[vW8ÅÏá Ÿrè\‹Ü˜Õç¸óz=“=±{‹©•= 8#»›a¼ác5bRüøSô2+­HŸƒY@Ë7Çst/ m¬ò\ ñ:¾î.>—û&ä´ñAÜ›HSÒ4‚! Ó¿a £½Uq}XQA‚ qÙkWl©ˆÑ{ïwIt¡›Ñg¢Š_J²0Šbs ‡c ¬fc4Rd.Ê–$‰Jl¼tÄ^ýƪÃg£ÕݤUl1zA­ìÆ ÿe+½¯êuu˜:ï7ʽßñ5J‹¡Ýšþ¥#ä’™8{;qí­®èž‚ë;7OzbïÂÛÛÂ1noXŒpp¹ÎÒ¿Jã e‡ûÃh”qÂ`tP±#¥0ùe ÂׄÂÄè:¨ªI”,£š0`3o°ÙF‰ƒ˜r9HÙÃ÷0.Pša¢¥”>Ct£/Zb"eúûý1–c¯jü¯šÀíY·¢ÎsÞÍÑûÖïShxë7Ða†=¨L£Ø†$ÜKñö0"¼ÔQbw9ek¸Ä9^ì_1Y#FÒî-”98Êõ¥7.3uu¨&†ØwGG '> »" ² { 8ˆð3ëˆ%g( 8Ü»\Y'Q:Vð—QvöQ‘E_AàLƹèmÄo§œñ ¬ˆ×œÓŒóŸŸÞ7Ü“r†qÉgཊžáçã²Ïó 1(/qŒóŒ‹ÿ¿ b|~¿ÃŸHÞ÷Pœ$ÏúKD¼ò®ÿ‹çë2ïIEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D ýIDATxÚ½› “›F†$¯8©ð(SŠq ÄyœEâ D ©ËyõÿÿÕu÷|"!­¤¸n¼®Jb/o¿ýÚD§ÿljîÿ«åb±„_xº$)KñÃ)‹åf»ÝѯÍz¹\()ù¤{(Éf·ßï¿ÑœeÅ?„²@‚?„BÆŽôð÷9ïQ„%iΚ8%Äí=NôãÛüAŽÆt$§ªŸ¦\ex=k‹½|Žr‚ãŽÁTã3”ÛŒIÔ´9Uü0eñCc¼ÂdQî ‡Š1%ífžòn´Bo|¦FÞOÙÝ AÌ‚æb&úyÌå^%CÖ$ÆšyLô!—ÖÔÙ=”G &ÏÖË0fMö>åÎ캞g}=¶ïQ–B0Ï1³F²Û”ÍÃ-fdsç˜3Êc¦8g¶:ÍH &€ÌnQž€øùÒ„¡uW«bLÞ¯ŸÈ¾öa]÷I‹" ]°­›.N£é9+Õt÷˜omqõÒ×µ µ¤•hÏ)ZÏмûLn™ö~Š˜Éä  ɦUv‰!{Tƒ³×ùL dòD @†>——¢’ùñRÆm¨®sœ-¾ô1bÖ} óX·û%¯juˆæ9ì*G÷—µ7ßô1ŒX6 )©ä›-ÜümHÁvÍpRäô‹y½ÂX.‚íÂQ(bH9°¸ýøñ§×ÿþºØìJQsr '^Ì kÒ%²¶¥|AÊJþõÇ/zyùðõo;!âvuŒæãmçâ…Ù~Z“AçÇ>f}aÍŸ¿åõåÃËgV¯(g˜“ƒœô’㛘«|­e µd~ÿ1@yý1Ù œ¹d³qSq·Û‡®à{Cñ‰Œ¾x-ùø}÷ý÷_HËë_Œ‰ån râ6=^уœd»Ÿl9M±€‚=&jý¾A óòù -‡|[@²5*®r†¸ÜPàöz¶L«E§Øè´ ‘üãïï_~zc*…¸Ã÷&p?²8\ãÀJU—ë펶]O¦§ Qp"㉚_ÿóç/dˇ×Ïoƒ*b½_nJÇœ±ÄwÙ¯p±æC¹È¶K5¿}üâE)ö¶4ˆ¹~^ZÇ<)³y5˜×M¹X¬­÷v„yJf´( |þíãoÆû7ø/Eͱ•ì;^.ÊÙF@-s ‹yÙ-ÖT’!mñ‰L¾Ä_?¿¾¤d(V‡ý·5OºD®ŽWi‘5•à(fþÄã F,þôòõŘ‚ÿ…õÉzSò.‰óãõ`Y ¸“%BÈ•[\Š Ñøï}ø×‡—¯_0\C¡bQòªLøp•±Bêè–ËÍf³ö2 õJS.CÄ~þôéÓëÏ_(‚EÑöU/ºRnêèA}XB[ø$1`¶&3f}YÉŸ¿|ycLÁÉ‹¬Ç•,ÎgàGš+ÐÁˤ[o·»nažBKRÖ¤ñå(Y9 g(†&nD"ØñªÈ«J” ̈þ ÆÄËYÏmÀÀü63R`+*pC©bÅ2øC™u#wkÍØ»{<Å{_Ù<&-±è0rñ–e $æØ—üú `y²Øîm£Õ%Œ—ù° bQ” œ£VqUƳó¤Î«n¹ÝmðE5¥¯=Ý4Ã&­RQO>EU.¡€“Šóìxf„;ð8€yµÝ­+4±PE‘Ã&-’A‚‘÷6`¦¿ zSj»Í~Qq¡& Š B w_’¥E-À o›RÀL¯e[¤yÖsžÐ)§Åâm1³òë~ÇÐAÏ‹½ÈôøB&ù¢ëkÁ«BxÀéL  $ÈÔ{m‹Î0­Ü–M]ØlmÀu‡ôK·ÔÂUU ÷R jÓ˜rJ6q/Ê2 ¬×®Ø ³ ÀuZxúŠSøN«‘Ã}@²¥s]™ž²²d©/E+›Þ( ÌußÄ´–ñ-އ:˜¿R(Tu„ëJ·6Á¥¥hp»9¢°¶‰+‚¸ýÈֽ˰IÄ«vHa1¶‚ª&ÍdV ™S³’ø¤†Œ‚ÁÃaÅÑ]JG¶x€Án,=žÂ8#Ьzª­Ë)&>s¶›Y‰iÜ‘õ:]¡ Sš£Ÿ,à&Ç¡õ”¡'×ÂËXµá®‰–(Y÷Ø1RNk¥6uoÛ‹¦¢ƒL£>žg™ÀeR‹¹ýS@Ïš@‰ÍâI+m‹~§” G4®ó°¯[„•[Y6X.ôäÂrŸÎ‡6ÆŠ L©â©+®½X 2žëBBA¡¨ºjußZÁ@i™]Ï1ÕÚúŒ_*¾VìpqZ*w ßX¤DÀ›/ì9ÂA˜e®Z·Ü`_ÂáɹϯÀzf:L<ÿÞÆd¥V¬¿ˆoÎc°0V÷íùÔVK‚ØCVš½‡sZÐ ì-¤X”àg+x<ÈZ°&Fˆ¦Èi¼4è⫆0Ô4L«-]Æ%¥þ³Ät.×à~+a•2)•á’r‚ŠÀR.-G·ÜÄŒCóÈ0ÏŽ,§$€(oþÌ'‰e‡IJ IÌæ˜8ˆo*Ú®‰ó“4žPNcÜW:hæ¾5 dð =ÚÞe«Q½E¨ ^ Œ¯Šâï£39Üë0]ÅÔÉh”ø~oçý 囜V£9|Ám{$ÛI‰ ”(—á”éçû„¡Îd.ÉK#WÐX'åtÒŽ€ÑmVðË#ÃÚ2ÂÉ¥BëÏ)§l$5†#. †_@Œ'Ê•äé:åM>à\]%VVÉ$»·NN!çx>¢¦Ž JT3ˆÊêh©38TâBv“rb<˜ÅÔ¡ôѽ½r*Lj5M-æ}÷Ãþ1£æ`ÑÝ[„& ˆ)䪒¹Ÿ¹j³l‚zÝɧBwy/$xºè,×) &“r¬AI"Y°2Fëz8OÜï³ôºF9±0rኵ>tyü7CpÁšôÇkJ®ü\ßÐHMc¯tVYž¡†ÐüÓ½”Ór45é#íɲ3“öuºŸrRŒµ‡°-%ì—)|›rR 9úHúÒ§ÍF0OÔ´ÙßE¨áº¼L^¡3ÿêµnüL¯B]4<Ì!\ ,éô 夿›¡$ú¢3".TW-y—{» iƒG„‘zOÈ»”€åë|¾;>JÁ¸©éÝ«0`ÃÌz„Bz”{™Æé÷RN&”à›ã}ßþÀÿg¶«Ù)òC(ÿàüó^3½å®IEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D ¸IDATxÚ½›m›È…6x—¾!,ä ‘À\u$PKÑ‚œf?\­ÿÿ¿ºUÕ¯Øøu¢e’Ý$;ááœSUÝ€7:ÿGôü·6Y¶…/<ÆÍ¦iÊßNɶûý¾>vÛí–@›†=Iz†²ù8ÇŸôŽe%¿…’!Á„BzGzØcÎ#J¶@X’æìˆÓ€o8ÑÆÏõ93’œ¶{›r“áõì,¦œª÷(w!ˆ1éL;¿C¹ÏX¸¦Ãi“—)Ù#†Æx5„á¯Qž ‡š1 ™v ³NyèV˜¯4ÀTÏSOB³Óœgå´ŽY£<«Ä`(š‰f}rMÇŸ¡¼1u¶Û†ž ü1åÉêº]gS7ËG”í«¬³@ z6Tñ}ÊÇË-fTó”Ì—˜ Êk¡¸döºÌH @ÅïQÞ€xË|kBÉÛ”—“·» £nRÞ‚„U¦‹Ä •¼Ey˯Ÿf̘õÌöLÅãuÊÇ›³Ûúõ óŸ+©V)oKq–m¬e—bÄ…[švâùµÒ#nqPÊ~·0L¯.DÁèï_þŠk‰'Ëi}´®G­r4dî_løÐ.•„Ý%Љþþüü¦ ”Àú#k›6n`Š.;W):{»„y 7Z„Š~}þøGÔœÁêµac¹R4 RQµ›ìpÑ3l»€`,¾)—Ÿß„($Ûç|ùW kÆíqE XXa>“ :†‰ZTMV²&^’¤àIÙl¶‡ãª_:••X\‰©è?(EM,iX}Z $-j91Ödû+†y¤ìehÍJÓ.*ú¯u!»®™®›…zE&%ÛìÖúÒNãE£a¶'ylsQÿ« 5lH¯¸œuàÕ¸?®Cöa*v“Ô†=ir)Šº®fV]öɉ3¤•­Ïó&Fûå¢gÖ0_r#EE}U^A¨á« ëãÆp±Ño¯²om“r¬âÜ ý¥úÈØÝ{7²_¦b—IkXàXR–Ýeðè–¼ßôa«”2¤P šÉg6M…;;„TÀó¤*ѬcÖ)!à{ñÏUùá–í×Ç…_¦Y¬af¾à*ÆéÂPÉ0ÀeÌ•Jã¶ÙL–Y9ÁÕÁŸfŒnMü^¿í³Ù‡Íâc1k¥äu#þ#ãôd‚Qe¶’MÓå§SO› <„æÔùå l™½ŽEW˜ÖRsޱäð_yŸs3ú{øe×%-Sf&‹9ÁªÆ—Š:y÷â2Œ^§b+Ìb€’êTÒ©Nû¨/bu²e«N#R] 1B6Ù‡yiyQľÀÜtñCŒ´˜1ÜS äµâfœzÙÐVìªeײíÒï+1ø[_c(ÅÆ‚Ð1³Ÿê¢Þ%K):ª0¡9tg‘SÞ'Î"’¦à » DvÙì{äýAÛµõv-üêLßÛñ¢)iN§S3Ðò¤³DðÂA >dÜ…}Œ}Y`É S1R„»¯,h:Šhé̲=lÎ+`Z˜{ûBœÜ‚åQ+ñýHëŠëH/E˜ûʨ HŒÛ—¾*ÇŒIænÏ #/7[J„ЄÔÕ劘é®zE÷½ˆu%ëû}¨²S])*e8#㬄J8Ù¾IóŠÔŽÄ H¼["§@Š›.Â>»8Aç*NðŽ,ž:ÞvPd}¡z·Ô(H?­°·³Þ6ŠŸ’.úÙIQVЦ`qɹXß1µ[±æµÅÀ´™ctx»m—L²È^¸'$gì‹´ÀYRs9àÎ6/Òn¡3a—YÏG=¼Æeyá”\¤âÆ‹£è–‰NpbÞjH §¶Ôr1&ÛêO‘8·4„)‰Å˜]\,E .ë<Ïcs†·å}mÃÆnÑ`ö+ØùeYI³q~™"öÑÇf‚ÁèŸ[ò_™tÉËbžÂx,ä0ÖJ%i½9‘ƒ3nšl›¸PÊ2œ’‹¶jñtvÁú*‰»@؆aÃI,rØÂ¦=ý„ yƒÙ%¢ËË I½”~ä/)° 6MËh^èʧA¿Í6m2ãÕéw5ñû/ç×ìý²m¿xž|–%c¼êô)Æ K’Ì¢sXø“–ŒaHq Ûòí4…~ù‘ožÀ: D˺\ ñ#–iQCº ZYu ®Çfhˆ­.³Ô/ ¶W.(gت–uŒÛ# —+È£Æ#Iá†ö£“Áh„o”éÚ¯`º„¸xÖNƘ$F53–9L¶rp Mcbo¼)!»`º,Þ%ód]í·å@1þ±XÅ0MÊŹåJ«‹îUC¿4èêÕ<µú,Ö{JzÔê[<µŸÁnxy»õH ÞñA‡”ú4SH†‡E§Oí{ÄVW›\(ñMH (UÒ¶ör7–dkJ§¡Cok-Â+Ž/(ïÕ]ÆãÏ‹ð¤n.ävi=MŽX\·pV=ÈÓâ,¯=Ä>Ôñ,åŒwžAÞ~È õÜ_áÿ³ Âs"^§|áø?¹‡Jµì'›:IEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D TIDATxÚ½›[‹ã8…}K  ÁAôâ_@††˜`¿,äÿÿ«­*ÝJÎÍIšUÌL3í/眪’ìd¢ëÿ±¢õÿ´ÞnsøÂuβº.ÿœ²Í÷Çã}íwyž(«Ó•¤5”lÿÓ¶í/ý‚õ$@YEÉŸP¶Hð‹PÈAïHOúšóв –¤9;âÔàÛ+Nô‚ñ{!GcÎ$§é>¦€xË|kB )o'o)v @ l(fzHù«L3ˆ9Éáå#¿~͘1û™í)âû”ý‡³Ëý~†ùÏr˜îR>–â,ˬeK1ž²û\J Ttæ,˜Où¢3§`•Aþñ-eýžr/Ö1ƲY21ÑH¹í˜†ZÆ‹‰þ@Šî~Þ1hˆ‰§åÓ³ŽwöÜ tŒ?°,úf¶„Žñø %Vå+ˆkþ€r’Pe§|'…´ø\L‘u³Ë£|•½Ö² ÓñÓÄ(_eþ|_.)òO(w´ˆI[F”æ;È"}3Ép`FŒ¦|­…ßÏ¢_dŽߦ]‰f›ù©Ü¨ÈƒQÔßRŽA.H-Fǯ e³ù.þÖÍäÌö ÔæÂ´ÄQøN •ë}>•rL Q´‰ß?¹ZŒa¾÷Ḡé“E”(ŠúB~QôÌd—ó¦lƱë$×”hS$ŸGã ™Îý䘩äå²)ÆÕ´zC^hJ´\õ›Cò)ÆÆâ[³é+ÀD× Q@ÍAî?5L—Ø™SJ_LˆJ¡)¨F|²Ï˜Gù–.…CJe(˜ÍT¿_¦']!ëXF– R†ˆaªäm×Ú°'ÙäÇ9fs‘‡¾)Dö.Å 1×ùZË̵$ÊS¢KQLãñÍT𹂡øBÆ\¼–.úŠ {#cX–£àŒ‰TÚ —STãêbkõÞv‹.±Ùi™¢ÓôTq A1¤+mC)Ç]`˜Þ]ˆ‚;2®¨Jóf>hâ Wµ†ìøùņí"8]¢ ìëQF7jŠU-J½ÝÂTâÞçu~q)ó,ùx8ó÷*ªF9¶o6˜ O‰îSùQJÑ©P…)Í¡;‹Ëc*ãÂP*ñb”h»roWàWgúÞŽGé»:ã^O357°½<@PŸcgß_XrÒ©)ÊQâþ"¡SºÉ M5Öù)­­`lc—ïGÚW\Gz)ÊÜW^À«¡LºÆÞÉSs»i†vKW—+âTw=ëÝ÷*Ö•¬ï÷U…ñÃyùR\´š¡<‡eܺwöõˆäÁ»-rdRÜtQöÙÅ¡ŠB@;ö¦À48´Œ@'Ub˜6±7%]ô³“2Y)æÙE¤5¬1iI–[Kh(u£ÃÛUk» dÔ {åžÀXV“)0Ïâiš¡YÛ:«¨ÝõTÑÃë–NÉ 7^,nõä—VBª¡7¦UcMtÊ4"Åžs·4$5RŠ)0»¹XÊß/àõǧFŠicŽCRow{&ƒ¹EveÎ/SÄ>úØL°Iùg}×NN‡nÅ“2“JmúþÒ÷0Î’:Ûí5d·Û±Ø[¦†KÞ*¼W‚§£IYŽpKÛ•u–±:àÌ_lp#;owz‘WúlïÜ¢ò2CÒE? ~䇔A¢» î)Ûm–êQÃŽxÖ°qp!þüåüš½_¶íƒçÉ×jLÓº”Mé™M’Àì¯áRð×<·yP gǰ-¯‰ûåG¾yë(±(ÓºŽbàÂuÕ¥#i²-_ç@ˆ­.³ÕÛ+ ÊUŒešv“Ák)‘¥I,HšeàfCØ7Êxë›.œr‚ÃDZJ<&#Fà®PÈÔb´S,öÚ ¡O!„M—ཤ¤)éÅÁ…áju3JÑÁ ÖÒÎg×ìl>–~°Ð½*÷KƒnÞ±š¡šÉ†:Ëœ-uMʲÌÏÕ¯^Þ® ¾˜ö_7¢ºŒ¹dVg|ÕµwËVW“,”ø¦gRE‚g(‡@ ©`hº„©¼‚äƒ2(à™ÆÔZ]‘‹põk¦ *qv±NQ̯€"º¤i´šÔaøÒ 'Äfâ”øyo÷û;”«<¦¤KÕN’ó)ÐAB<ƒf¤¾_Q|‚ÝR®s—Œˆ)ÝEQý¡N=Â]^‰‹E=þÁ-®—.—c˜DlÛLbÎà~-?w!4¦Ñ—»C0:–; ÞûJY~†„0ãh9Ëe¬2©S$¶OüQR-B¹¥ BžÓкE˜ÂJt+Î&w›‰ò–=¥À@ËiJújÁèÀéF⇗ÝìŸP3Ïй±1¼Ñ¤a 8S,„#ï*¹÷™+ÀÈéA’ù2¿ˆ@SÞ›5LþvÈp®¯)€Î<ŸNI¸:[W³M¹¥X*×5”k 5€œÙ*BB7&§ùäÒ˜ÅÝZ–§”ë4lA”Yðƒðf»‰º,Ï)×äýŸõ’Ò,#ž%÷‚B¹* !—Ë3ÜϤºyøÙQ5Å€ôE)l>>Qòìs°Ó¾ ƒàkÐÖ |ÔO¯õä3½øÃ1‘ØŠ‘êp°ë'”«yHŠ)ë8Žt*Hå äÅg­ÅñRÀä½zÊxý¹që»Z:Ä¿§Ô‹«¼þ ¼ò¯]qŸV²š¥ga×Kk) Í2–©iÝ¿ñÿ,”Ÿº«E¼OùbýlD”Í©CLŠIEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D CIDATxÚ½›]‹âL…“ ‰a.}¡ ’\úÿÿÕ[_Ý]£ÆÞžaY–™<žsªªÛ˜nÿÇŠæÿhµZeð…ë’¦UUüœ²Ê¶ûý¾¶›,Ë”V‹™¤9”t{8ÿèÖH€²Š’ŸPVHð‹PÈAïHÏâ5çe ,‰9âTàÛ+Nô‚ñoz!‡1’S7S2¼žÅ]ùå)1’Ž`êáÊsFà‡S'oSV¯Œñj“¿G™A5)b*2ífšòÒ-¯4À”ó)‡™ÄìÁ4çYÑMc¦(s•†¢I%šiLô%ä>š&ŸCy"u¶É´gçü5efu=®³®ÚW”ì]Ö™ƒžËø9eû6„Ådªš»dcF”÷BqÉì¹ÌH @™?£|ñ–ùÖ„:kSÞNÞRì€ØPLÿòDW3ˆ9—í#ÊG~ý“1#û™í™2§)Û!$f“ùý óʶŸ¤|,ÅY–ZËÆbZZ5Å'•†Rö›À0Þ]ˆ‚;2®è/²˜uóÑ-<$éó‹ Ú¥lát‰b¢^(×åz]¼mQ8{»…yJ.ZŒ§€–¶X½‰‘±@ÑŒÅ2å²v¼H7oS¸Àt…ùX$ãÒ?-w%@>ò‹S™ˆÅ•Xï*l(ªí›·Æä–²”Ú0š•Ò.½$JÞ>0Ùi”1f{2m.4`²·À޲±( ’jÝ“’ B0ø”¸MÒE¿°†Aøm.Rzò«íªw«ËGŸÝe_Û:&-âØÉ4UöD¢×~¹-Ÿ ;åõeµ¨*øÉÙ¥|Ô­¢(…¦PšÉ·¼o«Uÿ¯—ílãØ¯íÈ/ik˜ÌÜÅ–°…-’"nãÝ_’Î³Ž“ßó§}6{Ý,>Ù+OÑi(ë]t=A©-fM²£Ì/}fϱp…Ù}ÿº.‡+Ôs›,æôQê+»‹žS±f1@q¹lþ žMS̪µãñ®ˆ}¹éâ‡iYƒe%øµêjòsà ¿µõuÑRl,ÑŽív æ%øµšá×Ñõ|PÄZÊ0”z¼À8ó·pÀ¸žÌ0g{á>‘ÎDI(…S¡ 3Ìá÷/k,€|–VÂveÞ®À¯FúÞŽ¦ (fiê—ÑÛϪѮý~\`É™S)ÆRÚÏd˲ʞÿ£­`l±Ë÷#í+®#½#ï+wù'óº»lkŒìW—+âw½êî{s%óûý8ÚáÐü«Óíñ8Í9ºOöyDêàÝÙ))nº{®ñ$s‚“aŽ÷:©CÚÄRÜ”tÑNJo¥Å\—W¬æv±¢Çud—Ø*J]tx»*¶K C‚ì»Cr»î`  r®Æ¤°°Ýyªððº„å…S2HÅK9­Ë~M{sS­6ÛýÁ‘ì”4"Åži·²) ‡"f7KÓXówºF§Ó0Û-\óà—“¡Ü"»Rç—±>– Ö¯ïÖžån‰Ë$¤&\ÌP±;·¤† Ý*ºW‚»£Ã~šîÆphZe› \˜@¼â³½s‹ÊK†¤‹¾mýÈ)e^Ã˪»º(  f³ÝX€‹C ñç/ç×àý²mÜO¾•eQUEœÀF–¦p±Œ'ÁËõÈÅ1lËCðÚ/?ò嬧´ü’)º¼©Rº`†¤•!:¼[]²ÕÛ+#Ê-/‹E•çMÙ‚ÖÊy…X aß(ݽ_jºhÊ9éà—Ê6N ˜Ëe5Z씊½òBº„ì jºŸ%%]Áa«„Ë]ˆt›.×ìj>~°Ð{Uíƒî>±’º è(‹ú3µ—O©_7¼¼]A}))ê3¾¤cLEZ—4 Þ-[]u2Râ›^IQ”2¡nYðëu$¯B5¢ep SyÉePÀ3Rc9iÅ9PÎ+W¿2UP‰³KuŠQ~”¼Ij–cõŒ3œ›‰Sâç½Ýï'(·²A5ÂYT•†-Æ:HˆgÐŒä÷+FO°{ŠÃ0Iò%K"¤svy%.óø)‚vh’DaÂå’ˆ­`›I¬Ú¯ñs9bD«°‹t$*w¼÷+”2~†„0À©ëbj‰U’:EbûÄ%Í(”{J›—g'ÁËÕ)¬„[qÜm&Æ[ö”r‹sf9‘j¹ºDNÇ0?¼ìfÿ„‚˜áŒ¶%h"HÁ™b!ê9©dê™+ÀXNbaIÂßD )ïÍj{ÿvH8·×À g ãôjl] 6uå–Q©ÜæPn1Ôqš¯MW‡¯3ÕÙ!J1K»5,O)€!N‰/ûlüMÞ¬`71wƒå9åƒxµtÅ`öúL°Œ¸”Lÿ„r3=ÈÉó¼/Ïp;¼fòðÙQÓÇÌÉKù@€Póñ‰’gÏÁö=ø¤6÷«e„j=êû‡×zòL/þ2ôŠ‘êp°Û'”›á !ÃÅ1ë8Žt&Hå äųÖF¿âx, ÷^=e¼~nܘ ” õoƼ¸Êëgà>1(Ÿf2›â}ó³JÙõRÇ\Ê͂ʚ ý¼_ãÿY?ug‹xŸòÅú­FÌæ"> IEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D¼IDATxÚ½›]‹£L…Õ8F K‚ ì…Qè‹a!2è¥ÿÿ_½]_ÝÕÆ$FÃÛ3,˰ã“sNUuÇ¸Ñø¬hù?­öûÌ~Áº¥iU?NÙg‡Óé¿E–eJ«ÝBÒJzø©ëú~ÛõcI%Š’Pö@ð QÀïPÏî5çe „Dœ9•õí'zÁø7¿€C˜Ê97«)^O!˜cW®£<…†ÓaÌyXCyÎ\£pÎÉÛ”ý+a¼ÄäïQ–@€ƒM ˜ M{„™§¼tKgã+ÍbÊ唟…Àœ¬iγc7™£,UÂŒ&åhæ1ÑFÈ}4M¾„ò„ë¬È´g×ü5eau=®³®ÚW”ì]Ô™ž]Ëø9åð6„Ädªš»d˜b&”÷BqÉœ¨ÌP @™?£¬€xË|kÚ:kSÞN^(²Ån ¦HYÑUFÅlÅ\Ëöe•_ÿxÌð~&=Sæñ<å°‚bŠÌïgÿP¶ý,eµgY*–MÅxJ±^JŒ­2Û™C®ÄxÊj fM*³ùÇ÷”å{Ê\.ªcز¡Tb¢H¹ï˜3¶Œ}@ u¿î°ÌЉû em‰c§BÎÍö€ñ–E[fK蘎Ÿ)± (› ®ùʵ´UÖkÊ6)¨ÅçÂEÖ ¹µÌ(ʦìIK:Fñ·}¯(›²¾/§”÷7û9ÊŒ–¼'Ë¢6IŸ' Ì–ÅD0Œ˜_d޲Õ0êJ˜0ûÔOåæŠE†˜è†Áþä»ÅPü†)Û “™œJ¿Øƒ\”–l+…öJÕû”>–rŒ˜hsãëBö½oË6}ÔbrÚ.Å·‹ë—®iJ­e{øRÈxîGǸ’eëx¡ y¢ÅVr eÿ;©m_“ôÅ|„r¢»iJ‚éç=`,ek!ó-Œl¯NŽ‚Ž}†‚=é ™béT.Ÿp¬{RM~˜c’Kº•↘ë|Ò2h-ݶCßÀbŠ/dÈÅk‰ÚÃ' ËÂS˜1Qô½É²šö–°[¨Ä§¥¢K¾é ±a´» vä)¿ß»õbRèó‹„oÛ¥líéÄDQô•o{ƒt¢ìe 󔜵ÐòUÞÖ¿o¥–ˆÅ2çÒŸW7¦˜®0 炎}Õa“_”ÊL,®Äúè×WJ©ù–²”Ú0œ•Ü.}t)«µ[²Lã ŒÁ0éÉ<–\¾Ïû•ýRóÆ¢(xH:ëžä\Ì®øYy+É*Tô;1Ì†ßæ,¥Új5…¢Ïî²?K£t¬¼e§5ù &ðËmùh˜rÌB›êídjÝ*ŠrÔ¬cƒ3yÌÛï|ÿv™‘_‡‰_Ü,bÏØÅò/Û—ÅÛw‘h«ìu³øXx¯üóû§y“RóüòÑWaö Uiùs‰»ô½¨¹¾²»è)©0ÁXÊ÷¥<ÞNõrL]ß±/07]üC-ËþM úºi) @´cÑw’fðéêJÜç¼Î/-eJ=^ì{æÿk)Åi†ú„k8c%¡J+ÌßYü9§ðaô" )!»2oWàWÃ}/ã…(—ÄRPLý}b…|?-°äJ©°#”(®ns8½ÀÔRÁÐ(l—ïGÜW\Gz)†ßW^¾ºt¿/¶ž¸F r‹ªËñŽº^õ õ½‰©’éý>бÑ`6óœÚ}²O#Rï¶ÈNIqÓÅȽ‹’5§ÄÔ÷<©"ƒÛD(nJºè'¥)Hù²¦Åd aèÂäY…©³oWEv1¤#H½qwHÆèw@Ï,Fsjy‚Éž‚OoayÁ” RqãE(—ßïs ˜0'15 S܈{¦Ý"ÈŽ¥$ ˜l.Bù{¹´Gˆ8ʼn@n9Ê-´+u~qûècž`½ñ÷úÆÖüM*P®‘½ˆ¡bwnq u«è^ îŽ^Ë&Ù¥¤8@: °Wt¶wnayñtÑ·­ù!eh¯Ç]•¢àèPÀÅ¡…øó—ókð~IÛ÷“Ǽ,Bxѱ2·\ÜCZÞ¯ýò#ŸïÀ:JÙÆç]…iïE°/Dª‹·ú"½2¡ŒyŸ‘â0ÌÚ;¯`«!쥻÷KMM¹&‰M†Ô„ –‘ ƒb¯¼.A»ˆš.ÁgIIwLJz,膯ŸlºÝ\³«ùxôƒß«j¿t÷‰ÕöWÿLåò©ÓÁõ놗·+¨/%E}Æ×œ ®UtÑ[šï–T×9™(ñM¯¤(J™tˆN%­B5¢0¨„±¼‚äƒ2(Ö3ˆ†1ª( ç•«_ž* ÄÙ¥:Å(¿JÞ$Ö4ä0h²ˆá„H&N‰Ÿ÷²ßÏPF;̺³`v€"Lu ÏÀIïWŒž`÷Â8=@â/^Œ`!³Ë+q±˜ÇO´ƒ`Ž»û圈T°dk†ökúÜEn1É™8–¤XGY¨#Q¹«à½_¡”é3$y™X9M[Å©c$Ò'þ(i&¡ÜSÚ¼¼Z è¹áϨ°jÅs—LŒ·ì)eŒór°“âétæ«3uÀt #ñÃK6û'Â4ðrÁEà43E ê9«d6wœD`IBßHÀ)ïÍj{ÿvˆ9ãk ¨)Ëa¸^“p5RWƒ¤®Ü2*•q eŒ[æ4 \¯n¿®¶¨®Q²YÚ­é`yJû9%¼ì«,û7Fx³‚ÝÄÜ –ç”1Ž!$Ù†ap×'‚0â>P2üÊh@Ž]åty†ÛáÕ€4ó‡ÏŽš>&N^ò7„šO”<{¶ï­o–Ôæ~µ„P ¢G}ÿðZOžé…_F^1B6®¡Œ†^¤ Ù^²ŽãàHg‚Tž@^<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±DvIDATxÚ½›K¯ªH…åhÈ™!&51$7Ñ ýÿÿª÷³j""˜®sÒéÜôås­µ÷®èÃóÿX‡õÿi[%üàºçyÛž~N)ÊãùüG?Ǻ,Kåm¶’´†’ÿº®ûG¿°þ€(U”þ„R !,B!½#=ÙgÎ'J!”Äœš8-øö‰søÀø7¿Ã˜;ɹ\7SÞ2‚žZ1§G³²AŒ¤#˜Ë¸…²Ìˆ\ãp.é×”âƒ1A aªï(k È¡&ELK¦½ÃÌS>ºe³ •˜f=åo%1g0Í{vzÌcæ(k•†¢É%šyÌa'ä5škµ†ò Dê¬.­g·ê3eeu½¯³Çuì?QÊo!XgF zvk’eÊñk‹)M5?ÒqŠ™P¾ Å'sæ2#-XMµDÙ –…Ö„:ëßS¾N^)º 63¼¥l‚Ø*ãb1·¦GÙä×?3²ŸiÏ4U2O9n„˜º ûæ?6ý0KÙ,Å[–«eS1Ro—U9VFL l†ð`¶¬2È?y¥¬ßSær1#–sø”׎¹PË1‡Háî·ƒ–˜d˜P¶˜:v®õÜ tŒ?²ì°g¶ÄŽÙø…’¸ˆ² â›?¢Ü¨²ÁRöI!-!)²ëXeÎPveÏZêØ1Ž¿CÙ•}|ø }9¥|¿ÙÏQf´T[vøa“ôe’áÀìEÌá†ñ3ÒŠÌSöÆ]‰¦ÈÃT¾Þ¨Èsøa¸¿D¹ ¶Žß e¿a:“sí¨1ÌÅh)÷Rx¯4½ÏéS)'„9ìn|[È¡÷Ḡé“G”ó~)¡]|¿<®×ÆjÙ¾2ûÉ1©dCÙ;^xCžhJŽ´?(±³ÙöÕ1Mßæ'”3—ØÝRRJ¿”ãîL·0Êœ.<…û …zÒ2Çò0¹ åü“Í%Lä0ùqŽi.{Û% 1ßù¬eücz{Q(¡1— %ßé˜VÆ%f(8cÅ>JÇ{KÜ-\b£×2ìÕ‚RÎudï.DÁyØOaHmÏ/>´KÓÃéÅÚýÎ^·°@©D‹Y½ƒ"7bb!K(dÊ%ÛSÉZ`¶ÂB,’ 9Vþmư_œÊL,¾Ä ýrë.ÖÉ-å0(­a4+¥]²9~ÆQ£aÚ“U¢¹ä›Û²“ÅPèt±=)¹äÅq[0ò$†ýòÑgj„ßW"ÒßNáèË—ì/ZǤÅ1e[‘é3˜È/¿å“aƱê^œ¿Çt¶U åd)TÇŽfò3/·XÆ~'~I³¨a2_pk‹úï[ 'æ§}š½m–‹ì•̱ûúV5û ,Ξcá c-Ùýk1ÔWù=§¢¦¤äÅwÉtÝK‡óÓ% 1ÒrÊ h™/0ÜóRÄ@¹[) B¬c§,;ž×FÓùžŠØJÇÆŽøgþöb gÖ`¸O¤†KQKáT¨Âsè›E –•+1¬„í*ƒ]‘_Wé{/LÉ@LYŸÿºO}VvÕú~Z`éS)N)CÑ,b:­`l±+ô#í+¾#ƒ'ß+/Y˜úå¼à3Ø-®._Äw½éî{—p%ó÷ý¬…2ƒh(›yNçŸìóˆ´Áû-òa¤øéâôÞÅ©E1X΄é^ tR%†´‰Rü”ôÑ^Ê Rˆ’f„)1Æð…Ù%¶ŠRÁ®–íȃ!QöÎß!y2…0–Óé;‚àH >¿Çå…S2JÅ¥<ƒÑÔˆ9«q¤œ’F¤ØKëC2‘’r(R`º¹(¥ÏD rê3ƒüò2Œ[dWîý’"Ñ'2ÁîõA1Õ k¬Ç.f˜Ø½[RÃ'Û*¶W¢»£aH rt$¯ølïÝ¢ò’!é£ïû0òcJUƒkø8¬pþò~Á/mûè~2Šñ¦Ñ‹B%³J¿|Ü=C[‚·~…‘/w`=¥¹d¬&¿3ˆIE!:‚­.Ùê#ˆöÊ„òLOSŒ° ïN`3„C£<^ý2ÓÅRnÂk1HdäÊàØÛ ä‘’]ÄL—èYRʘœõèNŸŸmºß}³›ùx ƒ…¾«Z¿ôòÄj| &3úg®—Ͻ©_?¼‚]Q})æ_*t­å‹Þó˜ÕáëpžŸ)¨¦iÆñvKãuÕº5uã–3©<×PžI/œë¯MW‡ŸÕÍ#1˺5,‹”çЧÁ}Óÿ&ˆ`V´›¸—Á²Ly& ¦C$H`G}&(#"%sÁ/PžåÀj¦+0üo¤›‡¼}wÔ sªF~!Ì|\P²ôì0€o@ê«°zF˜±£~x{­…wzñ/È® ±{n¡<H.ŽY'It¤sQ* ïZ;û‰“©€!xµÈøüÞ¸sQ3æÏœûp•ÏïÀ;{b0>­ d5%øf•±ë£Žµ”§/“5†uý‹ÿÏÂ…©»ZÄ÷”ë?/µã†?¼VëIEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±DxIDATxÚ½›Ë®«8EÃC0@d„ΌɓéJaCþÿ¯Úõ²Ë„QûµZW}YÙ{W• /Óÿ±.ÛÿÓ&Ërû땦Msû9%˯Uõ‡?×2Ïs¥M²‘´…’^ÿÚ¶ý‡¿výY’E‰¢ø'” ~! 8àêI¾s¾Q²!$â”Èi¬oß8—/ŒË 8„y¡œûã0å#Ãë)sëëc”U`8ÆÜÇ#”uFà…swS²o Âx5ˆ)öQ¶@€ƒM ˜Mû„Y¦|uKgã+Íbê픿ÀTÖ4çÙ­_Æ,Q¶*a F“r4˘ËIÈ{4b e„ë¬ÌµgÏâ;ecu}®³þ1vß(ù^Ô™ž=ëhrÝ !1¹ªæ>ç˜e_(.™ŠÊ µ@ÔÅåÄ[æ[ÓÖY÷™²;y¡È» €˜á#åDW³ó¬»O”C~ýã1Ãû™ôL]DË”ëAŠ)s¿ŸAþcÝ ‹”ÃRœe©X6ã)åq)a0¶ÊlgŽ…ã)‡!4˜5ªÌæ½S¶ï)K¹¨ŽaËÆZ‰¹ü@Ê{Çܱe¼˜Ë¤P÷ëŽˬ˜h˜QŽ˜8V•rn¶tˆ?°ìrf¶„Žéø™™€r âš? tN¬Ü-×#/Ç–·Ák¿üÈç;°Ž2ÞŒÆrD¤Ì‹`^ˆToõDzeF2›a˜•9¯`«!ì¥÷KMMy gNb©0(öÆ éc´+€¨éÞü`ÁïªÚ/½=±{À$ ƒÿLåò©ÓÁõ놗·+¨/%E=ã‹®5tÑWšï–T×=ž)ñM¯¤(Jm= páhª…A%Œå$”q@™FV“/j( ç•«_ž* ÄÙ¥:Å(¿Jñ5ÈaÐlà ‘Lœ?ïe¿_ LõÔ0&a®…xÎHú¾bô{§Æéÿðb é]^‰‹Å|~‹ sKÞ—cp"RÁ’I¤Ú¯ù{…ÅÄwâX’bÝd¡ŽX宂÷~…Ræïulåô4[l§Ž‘HŸø£¤™…òNéŠúi1 ç „F…S+Žœ»db¼e«”)*êñi¯båôHºóÕ™À:`:†‘øá%›ý …0ø¸`"p ™"uŽ\T²ôÎUW8N,°8¦_$à”÷fuƒÿ:Äœé;ÔÔõ8>Ÿq¸RW£¤®Ü2*•i eŠ:æ<pm¼ºýyÚ¢z:DÍfi·æƒe•2 rjøØOYößáÍ vó6XÖ)SA:H² Œãè®OaDC d)øÊd@Ž]õ|y†ÛáÕ€4Ë!"NQó/„š+JÖÞƒë›%u…_!TƒèQ?|¼ÖÊ;½ð—¤W„P‡ƒMG(“¡iC¶‡¬£(8Ò™ •È—w­þÄÑ\Àà½Ze|oܘ ” õgÆ|¹Ê÷wà>1(Ÿ6²™â}ó³JÙõUÇVÊä AeM„aÛ_ßñÿY?u7‹ØO9±þ2äÄ&~<IEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±DxIDATxÚ½›Ë®«8EÃC0@d„ΌɓéJaCþÿ¯Úõ²Ë„QûµZW}YÙ{W• /Óÿ±.ÛÿÓ&Ërû땦Msû9%˯Uõ‡?×2Ïs¥M²‘´…’^ÿÚ¶ý‡¿výY’E‰¢ø'” ~! 8àêI¾s¾Q²!$â”Èi¬oß8—/ŒË 8„y¡œûã0å#Ãë)sëëc”U`8ÆÜÇ#”uFà…swS²o Âx5ˆ)öQ¶@€ƒM ˜Mû„Y¦|uKgã+Íbê픿ÀTÖ4çÙ­_Æ,Q¶*a F“r4˘ËIÈ{4b e„ë¬ÌµgÏâ;ecu}®³þ1vß(ù^Ô™ž=ëhrÝ !1¹ªæ>ç˜e_(.™ŠÊ µ@ÔÅåÄ[æ[ÓÖY÷™²;y¡È» €˜á#åDW³ó¬»O”C~ýã1Ãû™ôL]DË”ëAŠ)s¿ŸAþcÝ ‹”ÃRœe©X6ã)åq)a0¶ÊlgŽ…ã)‡!4˜5ªÌæ½S¶ï)K¹¨ŽaËÆZ‰¹ü@Ê{Çܱe¼˜Ë¤P÷ëŽˬ˜h˜QŽ˜8V•rn¶tˆ?°ìrf¶„Žéø™™€r âš? tN¬Ü-×#/Ç–·Ák¿üÈç;°Ž2ÞŒÆrD¤Ì‹`^ˆToõDzeF2›a˜•9¯`«!ì¥÷KMMy gNb©0(öÆ éc´+€¨éÞü`ÁïªÚ/½=±{À$ ƒÿLåò©ÓÁõ놗·+¨/%E=ã‹®5tÑWšï–T×=ž)ñM¯¤(Jm= páhª…A%Œå$”q@™FV“/j( ç•«_ž* ÄÙ¥:Å(¿Jñ5ÈaÐlà ‘Lœ?ïe¿_ LõÔ0&a®…xÎHú¾bô{§Æéÿðb é]^‰‹Å|~‹ sKÞ—cp"RÁ’I¤Ú¯ù{…ÅÄwâX’bÝd¡ŽX宂÷~…Ræïulåô4[l§Ž‘HŸø£¤™…òNéŠúi1 ç „F…S+Žœ»db¼e«”)*êñi¯båôHºóÕ™À:`:†‘øá%›ý …0ø¸`"p ™"uŽ\T²ôÎUW8N,°8¦_$à”÷fuƒÿ:Äœé;ÔÔõ8>Ÿq¸RW£¤®Ü2*•i eŠ:æ<pm¼ºýyÚ¢z:DÍfi·æƒe•2 rjøØOYößáÍ vó6XÖ)SA:H² Œãè®OaDC d)øÊd@Ž]õ|y†ÛáÕ€4Ë!"NQó/„š+JÖÞƒë›%u…_!TƒèQ?|¼ÖÊ;½ð—¤W„P‡ƒMG(“¡iC¶‡¬£(8Ò™ •È—w­þÄÑ\Àà½Ze|oܘ ” õgÆ|¹Ê÷wà>1(Ÿ6²™â}ó³JÙõUÇVÊä AeM„aÛ_ßñÿY?u7‹ØO9±þ2äÄ&~<IEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±DxIDATxÚ½›Ë®«8EÃC0@d„ΌɓéJaCþÿ¯Úõ²Ë„QûµZW}YÙ{W• /Óÿ±.ÛÿÓ&Ërû땦Msû9%˯Uõ‡?×2Ïs¥M²‘´…’^ÿÚ¶ý‡¿výY’E‰¢ø'” ~! 8àêI¾s¾Q²!$â”Èi¬oß8—/ŒË 8„y¡œûã0å#Ãë)sëëc”U`8ÆÜÇ#”uFà…swS²o Âx5ˆ)öQ¶@€ƒM ˜Mû„Y¦|uKgã+Íbê픿ÀTÖ4çÙ­_Æ,Q¶*a F“r4˘ËIÈ{4b e„ë¬ÌµgÏâ;ecu}®³þ1vß(ù^Ô™ž=ëhrÝ !1¹ªæ>ç˜e_(.™ŠÊ µ@ÔÅåÄ[æ[ÓÖY÷™²;y¡È» €˜á#åDW³ó¬»O”C~ýã1Ãû™ôL]DË”ëAŠ)s¿ŸAþcÝ ‹”ÃRœe©X6ã)åq)a0¶ÊlgŽ…ã)‡!4˜5ªÌæ½S¶ï)K¹¨ŽaËÆZ‰¹ü@Ê{Çܱe¼˜Ë¤P÷ëŽˬ˜h˜QŽ˜8V•rn¶tˆ?°ìrf¶„Žéø™™€r âš? tN¬Ü-×#/Ç–·Ák¿üÈç;°Ž2ÞŒÆrD¤Ì‹`^ˆToõDzeF2›a˜•9¯`«!ì¥÷KMMy gNb©0(öÆ éc´+€¨éÞü`ÁïªÚ/½=±{À$ ƒÿLåò©ÓÁõ놗·+¨/%E=ã‹®5tÑWšï–T×=ž)ñM¯¤(Jm= páhª…A%Œå$”q@™FV“/j( ç•«_ž* ÄÙ¥:Å(¿Jñ5ÈaÐlà ‘Lœ?ïe¿_ LõÔ0&a®…xÎHú¾bô{§Æéÿðb é]^‰‹Å|~‹ sKÞ—cp"RÁ’I¤Ú¯ù{…ÅÄwâX’bÝd¡ŽX宂÷~…Ræïulåô4[l§Ž‘HŸø£¤™…òNéŠúi1 ç „F…S+Žœ»db¼e«”)*êñi¯båôHºóÕ™À:`:†‘øá%›ý …0ø¸`"p ™"uŽ\T²ôÎUW8N,°8¦_$à”÷fuƒÿ:Äœé;ÔÔõ8>Ÿq¸RW£¤®Ü2*•i eŠ:æ<pm¼ºýyÚ¢z:DÍfi·æƒe•2 rjøØOYößáÍ vó6XÖ)SA:H² Œãè®OaDC d)øÊd@Ž]õ|y†ÛáÕ€4Ë!"NQó/„š+JÖÞƒë›%u…_!TƒèQ?|¼ÖÊ;½ð—¤W„P‡ƒMG(“¡iC¶‡¬£(8Ò™ •È—w­þÄÑ\Àà½Ze|oܘ ” õgÆ|¹Ê÷wà>1(Ÿ6²™â}ó³JÙõUÇVÊä AeM„aÛ_ßñÿY?u7‹ØO9±þ2äÄ&~<IEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D›IDATxÚ½›[«›JÇãå(T E‘ }0æE„Bò ùþߪ³n3kŒI¼„c{Z´þöÿ²Ö¸“ôôø?®Óú?ÚfYnÀuKÓ¶­¾NÉòs]ÿàs™ç9‚Ò6YIZCIÏ?]×ýÅŸöú±$‹EñW(ü…(à€w¨'ùÌùDÉ„ˆS"§µ¾}âœ>0þ._À!Ì å\®»)/^O)˜êÞ주…†ÓaÌeÚCyÏ\£p.ñfJö‰A¯1Å6ÊppHÓ¢i¯0Ë”nél|Ó,¦YOùY LmMsžU÷eÌe­Æ`4)G³Œ9„Qò­è™žõMôžrÞ !1¹jó=žæ˜e[(.™šj†Z Mñ޲â-ó£i{6¼¦lN^(rÅ f|IÙÑ-£2[1}3¼¢ìòë/¯>Ïdfš"Z¦œwBPL™ûó òŸša\¤ì–â,KŲ¹O)÷K ƒ±-³“9JŒ§ì†ÐbÖh™Í?z¦¬?S–rQÖMsú‚”特àÈx1§/H¡é×–Y1Ñ8£ì-˜8V—òÜlÐ!þÀ²Ó‘Ý:¦ãgJdÊ!ˆþ€Ò7¶e£¦“‚Z|.\²ëTXËŒ¢Êž´”¡cÿ0ŽŠr(ûðáÏÏ圲ý°_¢,h)F²ìôÃféó&ƒ…9°˜Ó £Ì@‹/™£5Œ¦6L–ú­|í±dˆ9}Á08_‚\€bŠß0å¸a²“S™Û1ÈEiÉRè¬T³Oéc•#Äœ¾.²Ÿ}û¸lÓG-)õq)~\ܼܯ×Fk9¾ŸûÑ1n²¢]/t Ï´Ø&Z²/T¬VǾ8&é‹ù ¥¦ŠÝ4%Æô‹0–r>¼ñ%Œ~ºpÒ§Fâ§Á#?>ÖPÑ@œézƒb7á¤þd|™É+Êcˆ¤ž.pâ„бoÙ’’WŸQŒ¬œ¢À;« \èº[óƒkåa¢ÁsüUxŽá¡ïT7PfŒ„_º(©oƒÆ—Ãø‘bÉ€C¤¡(F4Û¿¯sÿDyÀ_·_󠮈TDÁ|ÈÓêkÈÛÏ'óWѽáîÑó.ñ¿<öQ‡iºNÆí_Öôö>Ÿ>7n´ña ~ä?0Ö|Þ([Ìl›¬Ñ±ŽÂ„ ñ3cõ¿M˜†kñº¿¾áßY„cÖˆØN9pý8dàÄGûGIEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±DÑIDATxÚ½š]‹£L…5: à ¹H¼ ,$ zéÿÿWo}uwµšÄðv†ÙeÙñ™sNUuGôÿÇ æÿ×K’¤ðÂuãËåøqJ’N§zò4M _¢™¤9”øðS–å?ú‚õ$@E»P$¸E(ä w¤'zÏyGI<„!1''Î|{Ç Þ0þM/ä0æNr®ÕjÊS†Ó“ÌñQ¬£¼„ FÒ̵[CyÍð\ãp®»Å”äƒ1N a²e”9äP“"æB¦=ÃLSÞº¥³q•˜b>åg&1'0Ízv|Lc¦(s•†¢‰%šiL°2Ž¦ÊæP–@¤ÎòT{Ödï)3«ëy=ªîöŽ’.…`)1èYS„¯)‡Å“ªj~ìº!f@YŠMæÄeFZ°ŠìeÄYæZêìöœ²8yC1[R`@1íSÊ*ˆ®2.fÓ·g”U~ý“1#û™é™" §)‡•“§n?Ãü»âÖNRVK±–ÅÆ²¡GÉ×Kñƒ*ƒÎì2%ÆQVCx0k VäŽ)ó÷”©\TLje]¡Ä2î˜+µŒ|@ w¿î´ Ą퀲¶ÀŒc§Üœ›á€Žñ{–[f‹ï˜Ž_(aíQ6Aló{”¦€*k5e›Òâr‘"«º ,«eSö¬%÷ãøom«(›²÷®/‡”å›ýeBKÖ²eÁ ¤/“ æMÄ0Œ˜žWd–²Õ0îJœ0Iì¦rÕP‘&ø€a¸¿x¹ ¶Ž¿ÊvÃÌLŽM¿@a.JKº•Â{¥ê}NŸJ9$L°¹ñu!»Þ‡ã2¤OZj¢œ¶KqíbûåQU…Ö²=|SÈtî'Ǥ’eëxá y *ÙÓ’| ÄNjÛ7Ž™ôkÀ|„râ»kÊŽÒÏZÀÔ@9lÈt #MÔéÂRȱö#êI[ÈËCå‚ZNÙ\ÜDv“瘥lÅ1Ûù¬¥3ZΛ3·…â sa-õwÄÃR¿Ä, ÛA²RòÞâw —XÇZêóWÜ7SN§Ü3Œw¢àŽ\ÿmÕÂ\Ÿ_LøÔ.pºü)µ…³7[˜OiÏû_ ÄùŠÜˆІ`,¶Äj¢Ü·T²)0]a.Îåü¹ÄéÏj ûÅ©Œbél»ü¢ckw±Rn)»A© C)Yˆ”â×™™Æ^£a¶'yŒ˜8]K)ecQ:$©XhkÏ@IòuÁÈ“öËFÙ £Xб¶ý .Éa-…£OGÙ_÷°ºÝe]‘™g0ž_nRv"«ÏAtONË1¥nE9zuLM ëô÷teì×aà—H‘:Fþ¿`Á.†ñ/Åpò'~Úg²WRxŸdÊï/SÒC¹øV5ûå Ìë{ØòMããCÊå¾XL)õ•Ž¢§ãž1 7Êý—PPÌJYŽŠXALömý”=P¢8–Y€áž—"Ê]K±©pK¶_¿Áœ.úc –Ns£)mÏ{E¬¥4¦ÂjÎOJLr€ž™ƒá>‘NE‰/E5 o.ôÎ-KgbX Û•:»H¼Ý"6CÁcå¯ÜU8^P –óaÊ1NªÄ61;%%úŠýºñöµßSøDyD„I1Æð…Ù%¶ŠRή Û%™`nçn1Zz¦FsJóAp$ ßýòâ‰_i¿`¾ÅÞ¹º"£És2Æ‘rJ‘bOµ[ ‰DÊ®¡ f6I:#9ÊË Õ '?1È.+C¹EvÅÖ/)b3[hÓØÿûûu÷-Ñ…Õ k¬G/f¨Ø­[RÃÒjHÜð¿÷_{uwôqD «A’¤@âŸí­[T^Ö.Ù¼Lô`X}>ë;½Ý‘1wá è€C qç/ë—­/δœá=¥º7~=F‘Åà/2+µËöÈÝ2¬]¾_Ü+¨åëÛ¿ß]#Š8 bRâDˆ'į.†˜}˜‘| –Ù#¬Äz…X a×(ÔŽ …zxØ«ëÁ“‘Š<ãp|Ȉ ƒcç1l Mb)b9µRúÃç/ýŽ11ëÐ~¶é~·Í®æ£RâŠ8´†µVŠ£tÄD CßcsùØêúµÃË•—ñ‹_m;~.Ö]ø¢÷8öÎ-­dW©òâYÌR¦ž$àbs1­B5¢fˆ5Y$—¶ž ô¨‰Ø]8 ë•©_×&¾Wñ”ˆÑ”¬B5ÄÐ`1C *‘yo¾&)}Q¡ÁD€" uHWMSP£ØME@ZŠÿ|Ÿ0V’ä%K–vuÆ.3#Ñ>ÿÁ­3˜c4^–q·aKøÖšy_û½2¢ô`vWæI±Žf]Mi1„•xv¥ ?C’;ó° Á2©­ÎE¢„ CSnYÑõŒ@ôo×ÇUf«ê2}Ò¤Œ>ÛfE×€¼’®ru‘a¼b³Lî&x›JÿšÂ˜ ¯ ?á*§Ã@nº€GÉORÀ4ËÙ%áró­Â¿õï)¨¦(º®ivþBpÓpJ"z“£LžPúð&œªÂkW;þÞàêºBëБŒÇ×KJßÞˆ ”$«CÇath!†3yòÅ0Ätˆ¿zG«(!cv÷5”ºíçSúåÀ*ü•±UŠQÏPòü³£u2$ñ—ˆHºFt»ãÈ‹ÏÁ¶-ø¤[¦ÖͨGåûÌ­×”œ@z…JŰû5”¾æ‡ËÂÅñê¡UaœªÍ ï¹[ï(,Ǭ' žL®%ÒSO\SýQ·¯uÌ¡°‰;ïó>ϯªÈoŽ·y,¡¨€<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D :IDATxÚ½›{‹âHÅÕ¼ !”Иh  •À€" ó—ßÿ[í}Õ+F‰lõḭ̀,õësν·ªwuÿ?ÖjúZÇq_¸.aX×»¯Sâd»ßÿÐ×6O’„@aL$M¡„ÛŸãñø—~Áú ´¢ÍW(1ì"rÐ;Ҽ缣ÄB“˜“§ßÞqVoÇrs!9‡f6å)ÃêÉ5fw-çQ^B#éæÐÏ¡¼fx®q8‡ÍÇ”øƒ1V a²Ï(S È¡&ELM¦=ÃŒSÞºåfc+ 0åtÊÏDbö`šñlwÇŒQ¦* EJ4ã˜ÕBÈc4M6…ò Dê,O\ÏÎÙ{ÊÄêz^gצoßQ’O!XgŽôì\®_S¶CXLâTóuÓ1Êg¡˜dö\f¤  Ì^Qf@¬e¶5¡ÎÚ甓×} Ó=¥Ì‚¸UÆÅ bÎeûŒ2˯¿2fä<Ó=SfëqÊv&„Ää‰=Ï0ÿ¾l»QÊl)ƲP[6c)ù|)~0PeЙ}戱”ÙÌ.« ò_?R¦Ÿ)c¹8#–õ¥#fõ)s –±bV_ÂÝïv ZbÖÝ€2·À´cû\ߛႎñ{–­–Ìß17~¡¬•GY1ÍïQÎ%TYçR–I!-6)²¦ÏÀ2åPeÏZrß1Ž¿í:‡²({ÿògûrHùü°£ŒhÉ:¶lõÃéË$ÃÙŠ˜Õ ã ¦§Å™¡,5Œ»'LÚ©Üœ©È³ú‚ax¾x¹ ŽŽ_ e¹az&‡º_ Æ0GK²”Âg¥Óûœ>•2Seaã»…l{®Ë>RTA”ýr)¶]L¿\›†)S–‡¯ ™îýä˜T2iI‰²t¼ð<ЕLZZ¡Ä_(±½sìkÇ6옪¢Õw({.±‹Ka-ÙZ¥7¤ldz„‘ÄÎí‚(œK‘®¾C¡ž4…̱ˆ–V'¢ì¿r¸Ø‰l'?̱®ˆVLY‹b¦óY ^•ªâ¶ú‚cúñ¢Pl!Óµ_UàRÂ…Ž‰a‰_bHŸ-*ô W¼Œrä³ÅïŽRCV—Å”ý>÷ “Ó%Sr[¨…!¹{aÃzèz£ä´P Q8{}„1”¤²ŠVa¾€"bâBèùñÉѲ¤’u¹Ʊ4€IO†&?³1ì§âÅB·dŽÍ=ÅŽòHÙJcÍʬ³˜p~‘éiì•1Æ÷WUD7¡$s)G9X ]’È0¼Œáá"˜0Îç#obØ/GÊŽ¤àá§K•rÓÔñv.…£OF²GÈ¢$š:žWdúŒSÅN…5t±¤ÛXzÓ‚K¼ÿst[Ŧb*Œ UQÁˆðL¾$s,c¿FSÃJØVt+xöN1ŒÿS '¿ç·}cR¢ªH£(º¥(æ—(Éöøñ£jöËH¤ª-¢DH©/‹9J}É‹K§À¤ÂÚT˜R¨Ž´Ô(æÊñèñP 4K›B©:õ)ACË|€áž—"f)µ‘‚©4}UÔó'¤c»,Ûî§Fs4=ŸŒJ¡éREü¢êº_¤`0ñzf †ûDjXÏ/ &˜Ü]°ï‹”(·T²úC?Y eÉD +a»_‰‘Ò÷%ô Q"¿úe ˆIòýÏñF¿«F»ryïµ FO3?â!y¢c-‡ÅP4/1G]ÁØ(±V¢“·wʨ°í’²–]&ßB9¿pìW—¥)T`}¹NS.1Š%âŸ÷ƒÊ ¢¡lÆ9GófŸG¤;X(;òaæ+.±[”Âû#Ov5ŠÁrþ!Ìñ‘@7UbH›Äq¨ëK±Hƒ¥ˆø.E0Í~…r “`6ŒáÙ%¶ŠRbWè–—ö‹Nb ?‚?£_M¹3…0.ç¨?!Ž$–à5…C‘V9£ŸæË Â9ýš'WÄ`49böÚ8Ò@NI#Rì¦ãmÏÖ/¤túNA(CÙ`™¡ää{™edh·.2¼Bϯ ß)À°*ÒWäÛ-MísË]P³tõ¸‹:v1ËN/ ýÂTÚâvºÝn'XQT9OG¯;¤°ä iK  ^%FQ3Yt?òøÇiQUå>éíwŒ¹AÛ\Lä1¸‚RÂÑã½BU° !`Ügã‡] ~Ó ³³´Y&vÏ®«à% T C¥Eå=ïE1)¶"†“»±K‡‚R K é».-Rÿ9?–Ù#¬Øz…X)›|ÃMÏ7=¸%UH)${KiÈ3lj (Ž[Ž]¬„Bá:øRjø.iØõÀžúþÉ&c•SÀºOØ.nG ¯”(¤s –Ò_8úÿÔ«Ã/åÕs£_¸‡ybí¿ãÛ]«yÓ‹óÑasG 1å…R˜A޼I,Á3Ä §Öœp Ã1‹…\]»DŠY#”{/jÞŽAµì:^1CÆ ýÑ»J:­å>FÉTCœ v–#Ã0LqQuõYé(Q¢DRîeƒjà1+°7vÊ„r)ª3¹¸/ø½÷û„1zD[Ky°ó!gS]žâSÚ^cvÁÃÚ† Íb!ÃàY‹zJ¹g€Ù˜ƒÞxÉcç@z©.i%âÕ×#åž•s5 ÁB‡ "t—ØH:S_^«ŒQÚ¬<fCÛùF\¯Ò#áH}2”òðÙžuVögøVAΕH²»&l6"ýƒ5Ê…1 nu%ç¬Ã&"§¾†‘Ï\µ™ál¶¹nìjtõ–™ë–²åõûü¨7úóÙnm0ÍùÌ2BœêRÝ} å¾n™Ó7 E5¢áLŒÒaxn è>rïZæ élVß‹Š!CÙTF2yJ¹¯AN† ¬#Ü›‚f8gÖx ¿¤ÜÕºENVú+s,Dužuÿ„rWrˆ[kbíò´º^S œ|kY’h„mCÇ2õt¯Ÿé¥lÙºkgü:{yùùdÞwm×zÿµ³¯r~É[ sì÷»ö’üíå>ï>7îs\ƒt&O›äŠö­sïYƒXÞ1¦}ž_n½~ú_¨÷ŒÉÿo‚µÇ÷m b:…%ycq’ˆÏ) Ök<±IE®'IEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D ÌIDATxÚ½šÛª£Ì…=FPÄ „6 ’ üJÖ•ïÿV{êhÌI»ÒÝôE·ßcÌ9«ÔãÿcŸÿÓv³Éàƒëš$m[ý9e“íöûúì¶Y–(iãIŸP’ÝÏñxü~Áú ´¢èO($ØE(ä w¤'~ÏyGÙxMbΖ8-øö޼aü7¿Ã˜+É9t‹)OVÏVcª[½Œò‚•ŽÂ†%”× Ï5ç}MÙ¼c0ƪ!Lñår¨IÓ’iÏ0ó”·n¹ÙØJLý9åçCbö`šñ¬ºÍcæ(Ÿ*QŠ&QÑÌc‚•ÇhºâÊ7UgÛÌõìR¼§|X]ÏëìÖ ý;Jö-ë̃ž]êð5e÷5„ÅdN5ߢaŠ™P¾ Å$³ç2#-Xuñвb-³­ uÖ?§|¼¦è-)°  ù”²âV3ˆ¹Ôý3Ê"¿þScFígºgê"œ§ìBHÌ6³ûæ?Ô½œ¥,–b,K´eS1–²].Ū :s(1–²ƒ٥`•Aþá#åó=e.§c”eCíˆ þ@ÊcǨe¬˜à¤p÷»ƒ–˜PN(K L;¶ßês3Ð1~ϲ`ÍlñsãW”Px”UÓüåRC•I—²N i±¹¨"ë†,eUö¬eë;Æñ÷R:”UÙû‡?Û—SÊ÷›ýeNK(sCYiØ$}5Ép`¡°”•†ñÓÓ¢‹¬¥¦¬5Œ»'Ì&±S¹»`‘‰ ó<=70™¡¢aŸN'u†Áø¿Åpò{õ¶)Q.ð)‚„2>—EQজÿþs(Ùîøõ£jöËP ê’;La§ù µÜ‰Ò^¿s<êÍ^GŸtiXœõ¬—a7Hay?§;RPÌ7”ãѱö«m‡Tög3…IKØ€a§3k‰“ ´Ìîy•¼®â:í{.Ûû¹D-P å¿Ó¿Ó,J•€e»ý§ÑMÏg¦U Žë¼Õ¾unDÏŽ¡–”ÏcÌf=ó †ûÄÔ°ö«‹´—.–øL¾³@˲1¬„첡àléÓ^è=X ÜÐþý;ÝÏšb²íþçø£ßU£]Û Œ™÷¦4¥„Í/ÄrÒ”C‹b(š—˜£®`l”V¢ÎÆ"-r«%Š, r¿3¥ŠÀlwPÎ/\c»ÅÓË„‚›W“«³ñýœ ÔJ¾¢€ePf e3Ï9š7ûÜ'vÜ«{‰¼äÖGJ•JŠ%HïgõT¡jQ –óaŽ:©c§„(¿xÞÇ]Þ„gÝ.@HC%v†?Sn1a2̆1|av‰­¢Ô•·Õ®rIS`Œá‘µ)Ó4-g¦Ÿ)1…0.稿¡ÉF /•|ŒÛ0´‹jÇÊØòôžò|IÍ“«b0š-böÚ8Ò@N©F¤Ø3×-ö«:y(ücØ)…Q gž\–ªAÎvÏ ³Œ íÖUÍ­V˜†åä°ÖÁfY ûܲŠ[Vƒ®±w1ÃK˜ì‚­^¤t8ºãæQb>î3Ø[…Vƒ$íH(¯2’XŠ>µÀö‹aÀŸÒÊ1Ë¡ c®Šƒ ÝVLä–e(Áè顤Y Ñ€ !àïMéRÆCǃ?tƬÌ,m+ik×.CA ›z¥lòpyš{Oà‡CLчALÚXša„h%é@C2',ó²Iɯ¼ôßYDÕ£XëÊ0Bˆ¡”Ü¢S¡Q Ú²LQ‹ÊÞR:òŒÃñAzÄ+Jˆ:G*‚DE £‹!0&!|"uöλ¤ˆ1 ëk^éç'›ŒUj:²cWÔE…ÄžüÂÐÑ.¬„‡7Và 1±ƒ¡?=K&:Tq‘|t\ëì%-ª0ùø^lŒ]kù¢Wç·«C—ÊŽÆ@©9ùK™8¡˜{“XƒgˆAN«9ÉTÕ/éÐ „Ô"ãæ¾{”š˜/Ç V]_·¡ë–b•¿¤ç—G):TCœ¸u–•›nG†Î•Ô.DN¥xïÄëÕ(LŒæ´®O ûnuƒ“‰…8ã<…1F’bv¬»0ö…¤6¡(‚Yã3J?hL?¬Jye:‘…ØLBÇ-)ÄSÊX&:0½ñ •BT;Á«Ú¢5>§ŒE |»¿Æ*][ºÃÐRȱñ¥/ê `"ºÞ eè&¡.ñKØ®—”1,êáW97"Ôåµ'b" u/Š9)ßS"L‡žÜÈ9}}!À,[[*w'”)dæ;W0Y5'bXÄŸÈæAŰťY¹ïšº†Ë%zX@€<ŒŽ!BN;å)e„»Bâ ]‡{^|²„ZoòÞ|óv=¡Œ°µI\þÁß,á96~JC¼aG^uÀU+¾ŽÐãq°¼¡Œx7U(· ¤.Üúã7”QHäô|Ê*ðêµú{Ï:¤fWÏøÂ{¾×`zóÕòéµ^|§ÿgòùÇ. Û'âÉìú2*/BDч–¸)°—7ßµvkTÊpª@GþÒ­÷äø$/rý§o®òþ;ðÂù‘…·±Ë·©Naß„ÓÖ¬ùÙ¸ŒËW 5w~ž,¦$Ó/û|%eÅúH£ß¾3gAIEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D DIDATxÚ½› «£:…ýŠB¤E,žBµB ú Q eúÿÿÕ»÷N¢ÑÚ/{¸™aîÀÌõa­µ“ìDǺýÃzÿ¯f¾ÀgÏ˲ø×)~°Ýíöôc» ‚€@^æ¾Iz‡âm÷Çãñ/ý„± ´"çW(>ÆA(ä w¤Ç}ÍyEñ'M’œ q2ðíÇzÁø»<#1g’“«)£žÆÄM²Žò‚•ŽÂäýÊsÆÄ5Nî|Lñ_1$fTC˜ð3Ê;äÐ$ELF¦=Â,S^ºef3V`’÷)û7!ˆÙiƒgq³ŒY¢¼«Da(OE³Œ±¾„ÜGS„ïP>¨:Û¦gUøšòfu=®³¦èëW”àSÖ™!=«û9eû1DŠ Œjnœ~Ž™Q> eHf'ËŒ´`$á3Ê ÈhÙ85¡ÎêÇ”“×½ 6Ó=¤¬‚˜U&‹ÄTIýˆ²Ê¯¿j™Qû™ž3Ih/S¶+!$fŒûæß'u·HY-e°ÌÓ–ÍÅŒ”Íz)Ó` Ê`fö¡!f¤¬†È…Ù¤`•Aþö=åý=e)cÆ(ËúÄcý‚”û“Ó”ÅX¿ EÎ~sÆ e Æîf”µ¦Ûmtß :ÆO–¥Sʺµe꘿¢D|Bù 2Lþ ¥B-̤|'…´Œ¹¨"ƒ`º¨eå«ì¥–ÍÔ1*2Á-Ë |•ý´ùçeR fR>ßì—(-°`Ö]jYcý‚a³ôÕæŸØ¢œP¾4L6˜-1@ln™”o “³W_ç’ÃZ)!„±~Á0Ü_¦¹4°ºDí”ò½azMVRbYJð-Eî•ãÜGo #Ê—ß,d¤Ä0m60¬VRvßK1¦Kë—,á)åûðÇBva)®£Ö€X%'Ê·Ë‹ÜröbX‰;f2@ Qü_(12ÌË §£r iyʇB=¿—Å\I)P¶_/ȸëŸ]èôg‰`(%„øÊ~뻸<¦å\(áŒG@Ù}KÙ,ô}ÇæB¬¶ä0.'¤| Ùq¯ù=ƒ Ñ5º|ëØqfåNx aQz‰Ò”ÅûƱ£Ÿåy>냀ð("½œ,ÿ ŠŸÁÖ›f-A8¢«1뼚x`VÕqk,D'¢kš^¿Ñ²¥k7›-3X*:»ür¢h½–£ç8ÍýTWS‘E®ðcà\@‹·Y§eçÅ öuí’––EH±Ù80a¬óÚJ†úr l‰Ó–Pj~¸œ.§h ök1Ï-¨å^Ä0»®‡:¶v;·¾ãa(*'¥°; ‡YÞú [dpÎòàåR<©ˆr*Á±•”#íݯ¸ÏÂ:f•QÄã µlV£÷H؈ 8©ÞǘüÌüí*Šzݳ>ìŒíp¢…å 1 %ó×™~£¯_茕m¦w-Ì}Æ-÷ìï>Ç`"tp¦ƒv”y'ï”Aeý¹Œˆ`Í´nçàsËŽž ,·0"Îj—îðÈÒÙÿ®??0‡!» ŒÿSÌ1ãÂiŠ*I’>Lpb¡óDjÿûßÏ”ÒF’lŸRÜH4uÙ°JVFIïH̿IaØeçOÅ@ð@©lµ¥NŠ0ph­/'ý9”RPÌ'œŽ@é»aOähbºIÄåðKW›¢R¹¤µ@q=¦Ì¬á)µ4¨%oþý‘¹´XÔ-ç$ë{`Ùv÷n4Gº¥Žy× í˜ÒãÅHxý!J™Ê™Ó2FZ0 sæÌ‘Žw{¤$bt¬(ÿ®RKéìK‹NhYð&F¿FF-i«Ó¨%Ç»„Š´çšÒ* ˆ 6»ýñF¿«JÎ;'´ˆš(yÞôµ¤œ8S+ Qò ÅP4O1ê=5ºg”0©š<›&±uøÌjõ¢F”Øõ³ÙB9?qM1ð=(,Ã@)¢¡-’ŽåØ÷ÿ¹ [Z‘ç}7ƒ2ƒh(›eÎqx³¿£ÃÃì*ÒZxW“–¼)BqÂoK¹Q«[…8C1XÎ{Âï ª´vÄ€ÕØávµIáPb4)KNEŒ˜VQ—0f#1òÁÒ%iÕQ3⟠V÷|¬ä®«ëö±Î¾þ¨Ä˜Ee;j¹I aLÎQ¡Û-)Ám( S¥ «}gÃègâJ±œx‰-YŠÍÍps•#£Ù f§# 䔄l(Õ@ÁMŽuØC`Ky9 ¤%ÃàD‰_S,3TƒœÍN‚†1ÈÀDÔ™DeÚMÀrÜž@)ñhQòñÞ2v3©]“zÌ!Z^·$¬®g{,\ÆÇ¤ÎÆíh#EªA’¶¤@Hnõ=|bê?8"x0<ø;ƒÒÇsVm7 :0¼”®!óš~Ž£¦: RRón<‡ýtÀàÉ ô˜0ä;˜ŽSUUõ0ðV3 ;è98vÝì¾Ï]Š8$I¾~¼¯gO½1H¤/rH+ K‚ö2­‰^–PÕBðtúΉçÅòõPçQ`r!jžVNCÃI":¢” ƒö):û‘Rg2œ)hDH*J*ÀŸª Œã„ŸÉÎÏz¿Ër™¿Kr$Æ“z„¤ó˜ ðÔ!‚`:Uˆ- @D':ýý«¾AŒk`èWÄyŠ€ OBäõ·ô‹JÒ—5‡9€sÿŽÏQt-“%w‡ v÷_™<(#J­´bðˤ$6n’“iŽŒÌ•J$EA*‚F+ò×Ê­Wj\é½§5eZÅ ƒ”Ä R¨D¦(hñÝë-,P qh6\5bî¢(¤]Ú/2Œ,‹”[R …qïƒU¤D—Êd Å·eŠÄ z\s5B™%ѹO3QJŒ*¾£Ô½ÆÄc˜˜…nUR)±u&d˜xH¹…€qrÉ!RkÎ0ÜØd8ZˆvkRÂbî×¥†.0èÛŒ$ yÓ 2S¢9â)åfã‚OŒ$©§ÏÅ{-7®q2vsÈýwJ€A9-Rù”@¥C ìºÄî! ß\iIOzh4rm •*ß¹EX‚,}?f‡Ä©*g6 ²ªšèй‹a2Γ@¹Ù(8}¥'ëQ™ˆ{V[m)j:Š%%¾ëÃ6AqªjB „†,YTòèEï6”ôȧ«ç+‚ Ä6ëJþöö>å& ‰Ws„#܉ƒ!nŸPcS{%Ÿ:>Ž0µ,gòŒlëºQk„)C¼b<ý¦ÿGäK»6sˆÇ§ß'K3T÷[«nب¦qW|TÁïP€c$Û™Ĥ|»çŒ×ß‹{g†¢O¼xÊëoàÅdI7Ä ±¿b¼÷=¿XÁpî'¼ùoî‚x#òÏ)†¤…Öñ7)_Œÿô  ÃIEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D “IDATxÚ½› ÚÊÇ3yJIaGAY¸¹"!çL i¤ÓCMŠ„–ïÿ­®í™¼ Õ5}l[6¿ümí™Pãòÿ0cþ[×õà…v´í$ ÿ8Åõ–«Õš^Ë…çy²k&iÅ^®w»Ý?ôl $@5ŠÌ?Bq‘Сƒ¾#=ÖcÎ#Š;@4$ÅY'¿=âÿŒræHrÒìeÊ$£Ó³h0a½F¹ AŒŽŽÆ¤õ+”ûŒ×TpRóiŠûˆ¡0ÂÏQæ@C‹1 9m 3Nyè­~lºLL4Ÿ²ž AÌ œÖú,,Ç1c”¹J4†BcëÐŒcŒ7!·¡É‚9”g :Ï^ßgyð˜23»¦ó¬ÌêâÅ{‚yÖƒ>Ë#vŸ²|¢Äx½l.ÍúsEy.(mdV*ÍH &@Ü£¼é\Ö-MȳbšòtäJÓMÅÈIÊK~–©d1yTLQ^ò×?ºÌè~Ö¬™(`ã”勳ðº~†ñ¯£BŽR^–ÒºÌn\v-¦£,^—2 d¬Ì:è‰é(/CTaîS0Ë þì–2¿§ŒÅ¥·b´Ëê¨'ÆøRnW .L °kÊ;RÔêﯘЌÃäåÕk<¶Z4s3 èaš3_ËŒwjËÐc½ðCã•_L (oAÚÅßx qeTk\fü)¤eÑÛѨ 0RŠå­Ø+--%„eÏæÙ£¼ûÁð—¤PÁ| 5=-Ï7û1 ²ÄDˆÑZå‹–ò¦ÃÚèÛažEâ`ôìÐQÞt˜ªc 7Á‘¯ ‰ÖrðÊ»£:æÙ!táHå;\SÞuP–®µ« A)ŽãhÊûólÇQþò}CQ¼w)«#Ì-YáT#îQÞ\øk—6aþ5Ã8 À_eõ–·8EüÚYøƒû1fQÞ þʆ2_‹C5 ¼£¼–%0œÝ„’ËBÊØ×÷U =4 Ǹ5 ¢€ÃIÌË”50,³¸ ºZ%±dE€ÝÒwˆ²|…²sñˆ§àƼ%% ˆ‘îã5ÊîŒrT‡íË?ÅçÓɉÁg@Y=KQ:ÿ0%DHÁĆmÎñi»ßûþ)O20¥L0 ,[‚1Á¾Ðäù|Únî<ë1`XȨFä,H¬Í׺¾¾Ä™o·{¨Ê†ý„Ç#â“ AE?ê,"-§ýÞ4sgSv®m%aúJ¤¢(*6G_õÐ"ù ]uù8“²[a Æu`bùœAžÕÅBò;ú ÀagÂÿ4W‹gßcP@‚¨ÎÊÔŒã͆‚Ï6¥l‡x¦–U˜ZPÝQÃÌrXåfZ¥Ú€É (áH;Ã^ÌÒ²L`¯Pðјè D±RáŸÏçÍ)$Ei™™É;ÏšæTÈáA ”08ŸžÉZªØ°½õĻ”ˆñÉsâÚ„vóõùùóçÏÏÓ û­ã<6»‹í–6ž±þ¤_F¥Yœ>•¡»œ½SAŽÙó qèÄhRÏY æô ZN E‚Çž)—0%!lÙDƒKŠîbr:ù˜{ðWð^Û]Ì L/Iïp ß‹@Æ&1G+¸Ë§(è6÷ï/ž‚I~P—27ÉËÄýüDC·A—ä $᛬£»zˆÁÇT­­hƒgú-/êß›óv?”Ãl*EÌÁu4_½‡.[›úŸh1éb /Ø­dØÙÍ7ÿùøøÜÝÛ#ÄÀÛ}š.0ü0ëÀ7ñس,Ó,ˆý(±®çyǤ”Å¿ÿýþíÛ59Øý…P#,R¼åî%â©éWh˜œT1nb~m~}|ŒPh¸DÃLJr|(fù©é´„eiIƒ»â£)°XÁ2ßï«ÚåƒÉ <+¤ ˜”Ú7 ¶ÝÚ´ò™{´ò³.'{r®Ú,#‘á–hßKæ.f—·Ãb•›arôåÇæ;8ìãc»÷™¯–¿ºÌ-…DJ¡\,WwC“9YÙy ´Ÿ*»ÇðÇæ¯oþφ‚Ë¥ÂÎÆá7- g~ü†%¬™;Sä¥ßxÌaH±é©õ1ü½ùëCiáÓ,Kˆ¼ƒÉ¥v´³@—y÷1¦¨M¿m¿².SŒ&žU …2ykÄíøÅ—|¥Ä) Fr±Zï¦1©õµD&¤ò¥Øé׿›ÒbˆüS5*,= Þ`04˜]êe_‹ ßsD³Óß¿þ¢õ²­$ÃÓ*½-£àW‰÷˜ÅÒyÊk!Px«EÂHR~}§¸ÀªdR…¾Ò­Fý„^ öûV  Åfô¸åšBZbƒ)¿¾)ÊáÉÔãC³b* >‘ 3|¶&Ì5g·³8+ãní“O\­_¿PËççÞÁ“ ÊÖkHA‡¥´ãal†>š ^d gi¬W% qEY†G­i™ÿ­KO¬*ÜOBUÑJææLIQÓãôÌæ"šÂƒzЦ‘sª–´\Hä )Lúýy{r…ú)4 ĬÐq=ô-[ˆZjgcãÀ…Mêàå°mÅ.ܶB­-‡–‚éOj³XáÇEºÎ¸^­–¶à¦i½•SœiJÅŒOšR  –þîÜ2´¥½z–$I|yd~}E©°ƒ¨A\^’ÇèO”éãL‹¸w:Z†HQj£AôëþäF>ÇÙÇwÔ«5ÎTˆÚvÃõý*±åsì7ý“Þ:T˜£«åš»2ϳÔžB4ÆðÅpOÕy–ƒÁ&,"œ‚)y_Ë÷-F)R¢èwu†‹V yÉ`0ͼ®3Ó4ñK3Ëk¢¢€Ý¾ä>¤´Îà¾N- ®h…!’¢¹Ø®Ì(C¿’Yô¡0AIY±.$Ìœ¡¦QccÐ\»#Üê˜HᔣÆÑâ†Ð1Ä$'¯uç3½øÍ¬¸±«´RÑâvÁÏ£\hØ‘LkÒ£±d׈ɵ8¢äHu]Ö|ÑŸ…Ú|—ñøsãbP=ÄàîïÕ”ç(š3Xw}g=Ö1Òø­ t_Õý ?E„¹ï¶yßþÄÿ³²ï¶y"ž§¼aÿau¢7EÌ<IEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D IDATxÚ½›‹všÚ†å&Ý ÕÒSvÕ@èØU6ÒžŒøþouþ9×⢂1¦ã,Ó\•ÏÞÐÙáÿ±f×?5žÏmYg–¦äþ#“ÍÞS[z-KÛ tÝõ«*Ë·l)š8¢¼ -Ræš5ê2K4%DY=¤¼SŠÓ(æT3¹*ÈISd L&”wù~e"¦B‘ÍúUY"ÌÙ1õ€òßoæ)½¶fG«Ê|7<¡¼½Ùw ;£èŒÕQ‹iÒd³wŒ¥ëÏfçGÍEÆÔåFƒyTL½çÌr¢(ò£b@¹Í`KÚˆ‡Q6’Hs2”ZQn1ØÒD!iÄ8ÊD$ QÍ*G°cf7l¹7â ¯Gl-Z¸‚, QJ‹ýVÊjŽÂ›‹ †å×µ($¿ð 3{s⯨…¤ÂaÌ2‚èuû˜¨„`Êò ˆÍŠˆ)†e9¾æj ÁmI-oÙyÍcÓHGýªBÆr‘ò¨’ÃÐó™rµ[.2ØX…¦ºž¤n=P›e~%…qªM0`¬ˆI€…v&œ˜k)«9œ>»Ê!E6Ìà±/ÔDWÜ,PWP6ó}ëã>'pÜBËNÏ·ižç„iã¬ºŠ²¡ÝÜC꨹̿ÔÏ/ß¾­×_œTʨŀ²Ü¼Æ@ðž5žÁUáÓÓv÷ôD”Ÿ÷?þˆ4?ë(—!ž¹¿ÄpÖñ²ÝíŒÝn·§Å ¸DÒ7¯Yl‰i±,.Ø ˜7ÍËö·ñOüÔG¢ 0ûVÅó‚ň‘\`8ÂEzèõzû{÷_#Ž»”löó'(t G¾z>IAQ4×ep¢ƒQ"tËæi· ~Çÿ5`³íö¥µØ/zŠÂì'(k¤Ùl•ëe`úËÓܲû½Û%Û'вçg²˜ï`2Ò5ZloUã Ç‚Ï)Ícs>ýo?~€³%!Òù¤åñ—cQ;ƒk&µx ºí´±,Æ so{v˜ýüüùó'^/€<³Á@qØdÂA8›Þ¨–y §…_Mc4 ‹¥§ûëïßþýöù­õZzåþ¹%³|ôf:Ê~"’—&ŠÑù ¥8°šï¦í-<ãeýýû÷õ¿k&ÀZ!¯(ŠC&1íÕ„û熎jdͦ9¡±·m;^ßß}úúõû'|úúõþž”-‡)T|¸¾}V<·W¯õ1 7p¢l‚CƒEˆ->ÚLÁ4ÀФšûùò ³Y,K¹øo›ÕÞ 8~æùnûíñËÃGËQžiÿ]ÐÒ¢¨Ÿ/ªÙ |F)ý'|Yðø±Yìƒ4tÝÔÜ}ÿëÓÝLJ=EïÁV/,D?+Y4]ûO1ºÄIBêÂÆœŠÐ{Ô°Øýçß¿>Ü}¸»85OÈ.s`ܺîÃŪ˜b/N/~NàrtP¥F<ç¶½Œõ§ÏŸîhÝ9Å5X£}^ —d½¹¨#Çûs1 „mæ9ab˜²Ømö/Ï¿>~D ù š|œõ•¡Bo¬µÚ‰ðE Ò¦b ‰9¡ÄŽV-Åí(Póôó#0x|©ŠÄÕ4X¦ÇÔ.j£S‰(˪Jù¤šeD1Љ'bLGOÛ§1Åk)[ò C !%`;Ýi¾­f¢ï°V†7JÔ»¹·X¹Æô=ë´è)wR›E¼]ÿ9&sSG†¬"­S`©ªj0Wj1…3_ /˜9’ÌRZ,Pb5L{¿·ÿJ÷“–ÔéË ö÷z(Ù€‚ ã8¼³ “ÙÇO=¥ Êr£´Àb­–¼;—3Ë/0­ãÍ÷5¢Âûh)c{ËÕàzñRÓg„âJ ¼/)UëyÝ]à˜¡ÂNn„YCªq‘¸4% æ¼ÂÐÉ|¿¦%j8>êü{OIi É!’Y¸0Õ8’c"´a´P¤d4Zz!èÄ!¶Û€›þ°°h¬d ¦_œSzˆ e${‹©f\"Ç#AWW$&H#Ñ4ZDç݈ @n'ï³úzvŪ)&–“¯qIÿÈ7<¿%&@–i𲱦 5E Oõå 3Fʉ;PäËw2¶TÈQ0Sƒ$ý£(çŒ\I uõ.[=Ç+6cŠA²8_Rr‚=Ç#ŒS!'J:-‡qÊ¡I%F9˜Ž,?º5`HHÚH%.ù¤h™¾‹ Èél0sãl­?!Æ@‰¬,J‹“”ƒËj‡HÁÁÁËåQïü>0—Šá3)§÷ ¿S!ï8ÇK1”ŽŽÁ!¬µqœ*c” ó”1g D.ÕSR•%£!\×â"å ¹¨|)7&F%ÒA!Tlu.9 /q 9¿O‰0i.1’SÊO]gìŒ5ðûqxBFî¹&lXPô(¹JB+£÷ˆ .¡üQ(½ŒÆ<`òTKVÆFæHÈ“€¦ ²]ê9\C9h…ˉ@´Ð™Ó¶ÆçM›† ë°Œß×§ÌQŠRõ‰Dt#ë8­ôbÌ'“”CMaPjÚ†ŒÖ!ƒÃ+ÞázÊA0Fúå†í`Ö«L*™¾wTà …|Û®:x·QEo[Y& îƒåA¿(Š£ãKB1ô¹èA“ǺpO/½­8ZšvTâÅ å·P$Fî] i%úé8Ív;ÜF‘œviÇÇì꯾.çµûÆ…8{ëbXPÄhu|+EqĈ™z!¯ãšûù…h¨ ãUŒ«ÿo‚'Niÿ]÷ò7ü?‹£°}%¨n§¼cýã OGÒ±ÛIEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±D#IDATxÚ½› [›È†ÃWR“"éTE ¡;Z8¸[CÎq[óÿÿÕ>ï;C€„˜h÷:“ÔK]ÃÍó~Ï$;Ùü?Öäô?§Ó´Ö®Çá¿N™ÎËå%?óÙlÆ 7vN$Bq—«Õê/~b]‚T«ÈþW(S"t‹QÄ!Û±ç8çe:@´$Í™3'†ÝŽq&G/âhÌšå$é»)žy‹ Kù>Ê«ÂïLÒ¼‡ò:c`5íœÄ~3ezŒ¡1ƈ·QN‡“”01ífœrÔZ}ßt‘Œëúù¿‘E=Jy·”­ÉÜÖd»b:ÊüýR†ŽA”!3ÑÓQÞ Ñ…¹O¡(ƒÿ­}Êé=eÌb½Œ1&kdOÌä÷¤\ƹŸƒŒI8e:1“ß‘²šbÜS¾•¸³íˆÎZÈdcÕ;”÷°u:¹ò28¼ãà ‹CrÿÀd“÷ÖèÀ|¬¼É¤ª4gÕUL¦Xj@y3c;±]ƒ¡—çùE¯Ý%—ˆ²ºOy£”ÕNî1°HãØÔr#`2Õ£¼É÷«Yì:¶ÕgÐÊ2/à8[ 9¦îQÞàûÕw»Ï 9žçÕ‰C« ²åôf¿šÃò£ ²™X2OœN‹¨µÉ&o1ØŠºîÐ}†¯Š·/Ê(˜…3yƒÁhgLˆaIx‘L@IS²-å4ƒÍÝiÌù1Êð‚ a7*£ìIm›Ê29¦6”S 6w×ðGvH‡o ¬¼,|n‘LÓ\»_Êñ]ׂ}>Ê`§×pt‘Ûy”mYHò~§evŒ²„Óíú Ž@ \O&váU[våá·Tc39šøsfŒú£"[ájEË`GcPh-Š)Ë×k79W`4©-þùÕÞ·zZ^qþ%1¬C: "·“iˆ¢eÕÞŸ(Ò¢)ݲB˃¶ 4#v×Ó™ë ko‡Seª¥:<@¢OCq˜ÁL‰¯§ó9f‹µ »»éTe‘è0ÁëÈ=#´9[Ù%.ÌÍ´µDFøÙîŸlc”K“4:¨£i™”èSáó#­{ÛFk)›=9À°– 9½TÙ¨q%sÔ—ûû?þxxx¸¹yº»þúñW/ibKQÙð®Q–{”™{Àé:veJ"Ÿÿý‹ÖßÏ·„åüëÏŸJ`ïZÔƒ—g#~™ÁXÑCÇ®„ÏËûûç_¿æ—Ëe‹!£}åê*ˆŠ<–õMáo&îÀbËÆÊ2VN^3d±¼¼œƒòL”§+ˆùøõûOåE޹V½Ü©ÔdÚ§Lc׉^Weè ç?Þßþ {-çó¾vÌUÓä90=«“uG¡aqDû NA7½¿½½ýñƒÝòëÇóã-AîîîÈ/ßkP¼Häi*ðíãõ´ÌÑC¢1ÈAiCnh««‹ pnÿüóù™„Üò¤|Z|.Ò)š>0íg=-¡c¸B0ÏQ¹šSYýŸ7Ÿ.ê m®»ë­Á@AC§Ju½À¯Úº•ä…?1œb•îŒO–×ÖÕÓͧOŸ.>áqsÞç8¾ºRQ‹¡¯H2Y½-ÕdÝEò,L刂sb-’ÿ>===}ºùÀÍÓÓÝ“@ K!JC®»VwvÙa;·%}и ª>×çgggwOôå „çšAJ|m1tϺèU(o¢ÍmŒvé–¶ÍIæ¤ñ|µ Õ×ó>œŸ]Ÿ3áúúš* E$1èiþÄ$ÌjÚMáÈ}/g±¾ÿŽ Ÿ}øpÍë0"FÀ^ M¸°ú®XlX./ã$•£õ˜6^Ô8k§ÁuŸø‰õ¢€ˆ´ ˜`XbXþ3-óËa%›Â;b´i¶¥(^êúÊz±,BlA ˆÃZ‹¢<‰§‹ ¼ƒiÁ jãŸH„ص6®ñ €Aꪺ ÆnÃPÊìr¿ÃÄØIëù¨á ˆ„ô.R#åK -ª¶,Ø n/äNƒ½|UOœõtÉÚà®i£K?­Ö¡â®¢Ýöêã·1=qlNó…+¥ ¾Ü÷h…èö&›õL›Lú´©A-üãÒMÙ„¿.ÎÎÎÏ¿|ÛÑ‚K4£hóÕ€1ˆNª€ž¯ ¿lÈýt]»H¤MÔ±–3·‹çÛ§”ŸÇüã"q\ZhJ%^:Ì´ ‘’eYåESf *QIÑpžzAâèéi†jr­)ß&{Ë£a_`샒R`g1Ü3SÁ`¨çg ÐÜ1+§ÎÙYžŸ†®–éÏÏ_>üüùË—‰±9³¾¸õWà« „mö(¶¡"ÓŽ™E‹Y¹‘]i ”P¤ù>Òúü- ìƒê gyO"o1™J-ΙöüÚËH ÿ «â¸SJ™Õ:²³-E·ƒÕ¯Ç§3c²(‘ôB*"-ÇËÓ(C$dµ&W ô•X 4Ò4 Ì<²}"‰õÎi5í(Sø.´%&žJÜ>\Ëa"F´'«üöšùá˜é|¹\ÖM )EiÜ-7 œ÷)†SùµªmP ¥²v†vEõ‰(,;ã3¥Á§J_IJ©n¤…ËüÇo~"»®D]:òU*IKUb§:òíúQÀb<¦Ðh2%- ­¥¶Û ›j-çD)2C§Ç'ŠQúɘLï‘òˆî3%á}Î|*©/!”µûgá i!ŠWÂøYç{ø–(y·(ú)ŠÇy¢"‡›ÅQªC9hZ÷Ïž¡åœ-æÙ¹GùlŒM‰BSD]m(>S°òí|Þï;ZÌ4Ê=ÊIÌŽY͇;m±/^ÊšÎZ=±2Qw:¼ÈØ¿4dTÌ©ªë˜™%M ÛÑcÚìù´0¥IAÉ¢¨—3~-j›¨è8žq¾G< Åf1ÓYSXºðD–(Pt6t×R¤ÍZ"  ª-ËœYp/õM{ÝUGÙ8Fì~;»Ä’µÿrÿt®-– ›µEjÛ…ò}¿½2uC¿Dž¯o•â«Â½lO®Ð(¨ƒ¹Ii ¬;üRDÆl§DÖ*« . <Ϋ¬£Øõ‰õºfŒ¡^~~FQFY®,„-[,M¨M–GœÏµÛY|D4¢Îuç–Ôõ@IiÁ¢æcžÊoÇ ~?O6$1FXʲ E!;ëhp/CvkתˆõÀä&©$(iký#IÂXäÄNb·ÚB‰)O¤©6¦” %unZQ¼á{dzi-eè0&ÆH;Âr\欓@&¤y-ÃÖteä–ài,'“Eð8Ÿï@O”wFòDcòÒXiíJ¿‹:Ññ‡¼€$:<6äaÈ'à¶ïƒ‚¡£PŒcð8ÂMcØ-»ï%ÙÃÎ]ór(j$Ïv.yFFM’*ÕØD iÖ³1½Ò62ω‚¹®I ŸŠñ‘Õ.¥)“6œ(Cé²k×Pcãy>[Or,êƒvZ9Ÿ…ƒ1µÚ§lì2ìa\h²-¥õy¨Ÿ"•Èïmë|1ÿ¶öêS„ÁhŽ!¹æ‚™vÌ»(ÙI™0¥iLª ¥õõõs„²Émm4§M—aú»>A+äÔ¥U¢¥¨­¹Æßáy™èàé@=1â–AÖJ D;ž³¾n—lðž¸ÌK=;œA}a@‰¢CXê"f‚¸~‡²iP“-ljÍC¿µ•v»¤Ú'Li Úd›C”b‹ ývŒ¤ÏhÍemm5tý.e#4&Ñ—sÂ;µŒÄ4ƒdÈ@v?C"šÜfŽµË¸\ë°¸¤u¼Ž®žë7¯Q *JàÝxˆi´Ãh³Ä¸¤S¢vrŒ²Ñµ8¬(áwÒ´™ˆa·ÑÆÚºdÇó;ýÏ)Ó¤Äáa‰®l:ªìÖXÈÖ%š± ùÌ02'³Ã$Û<[B¡«ŠÕ•G-hsœŒ & =©½»¡!}!m"ŽùäeCÍ €ØEzzáž››ò;ÒÙk\ÉÏõÕsh0É©CiD£#·•ÑËĺï—Í©”MMÓÉF¯À*ZV/Í6§S6Ч, ¬ŽÑ+)j¼®¥lè0 FÑ’¢¨·:z9òÊç`±èz¢·Š­Š~‘ß~9x­W>Ó‹—änY…eõ}Þ aµyeÃ/¶H“e®>Œ)5ˆàW G>k­zu£/`àòC©x2eȪèçˆ:r•ãŸWÃHRÝ×VPtô§|ž¿…¨í£_çé8•‚U,·ýAÕ§½ü ÿŸ…êGÕ‘ z?å7Ö?&çÒÚ,_„IEND®B`‚ IHDReÁïüÀPLTEUTTŽŽŽ²²²ÊÊÊÚÚÚâââØ $Ý)+*)kjj®æææêêê‡644÷wR¦¦¦îîîø[<;ÎYCú”nG ¾¾¾œœœööö†††›"«ZFEED³))½zf. ‚‚‚{^^^ÐiQþ¦|þþþ”*(Î}ÒÒÒ–––þ³Žß>2NNN~~~¹jP[ð§‡þ¾˜u*&þɤ‹_PÿÿÿF«â@tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ{±DÇIDATxÚ½› [£H†Ã5J™,M¤cÓ6„±Ú†‡™^A½öjþÿ¿Úïœâ¢Ñ™gËãhÂËwîUÉ,ÿµ8ÿ©¡m/ñE+7Í0ôþqн\o6[þZ¯–Ë%ƒÌÐ8“tÅ\ow»ÝOþk P­"ý¡ØD裈C¶c=ÆÛœ·(öÑ’gÅœv{‹³xƒñs~Gar–ŦœdôzV-Æ+üQ^…¦ñNƒ‰êP^gŒ¬¦œéï¦Øo1¦WÃñ>Ê9âp’&d£ÂÌSÞ´ÖÐ7}¤ãŸOÙž !ÌFëlæó˜9ʹJ »Æl\3YüMȱkbqå=&ÎVË¡ÍRñ6åÌè:gE\goQ–ï…Pœ ÄÍR_{²~7D‰Y¢¹Ðë)fByŸS:ÏlT˜± _¼Fù¤7YŸšˆ³ì4åÝžo)m š‰©NR>F™ fˆIýìåCöúÙ”™¦Ÿµ9ã mž²þ „Ŭ–}?#ÿ×~VÍR>,¥3™Ùšl*¦§¬>.eìD2³1=åÃU˜‡Š2ø_;¦¼£§Ìøe1Éj fñN)ÃÏŒõ¬ÉqÊôbï’²±C£vJ·§”õj˜1d2ˆÑª åŒÛmò<Œ4+±,§Š‡£- è«vnÆ€Nî™lqvmÙá…f-°Jpdœwú‚Ìk(šQÞdlqŸº–,šU&–¤æf×P6ý(ÓRRQV )oIYãõEe-úU’ž ™CZz¿4A×&“Ê«¾ßml;,äÑé‘~È[¨Í€b´rL5 ¼:ÜécíJËrã0_n¶ýð×ç唲|¡Wå&sµˆÌÕz=«ETÊd‹× ¶Û-M3ÒfuXŽãV~ê×hò2 Õæ¹ñ W2*˜Y#fñŠÁv«<÷N2ÍG~Çž‘ÁpævÞk郬£œ0ØÚ6Ì:a+'óDºÆÒ¢x³dm˜¼Z-qÊAƘÅ)ƒÁ†°Ê¶Òj0j#,*•Bוš!Cˆ‚£Ü/ÊŒÁ¶ÞÚ™a”ÒDKãºÖ ”›¤ÿèUa„a[ÈÈ/-Ë#ÊÖƒ:Ä1ÌhbNâd‘a …CYcÌb&ñ·yÍoɶÊÒÂ…‘GÙ\šZ®yÉ—á}Ö"™²9ªX¡°NèqáEyެψS¥ž×DòPËØù¨Š©{ÂçYy¡i¯ì·ê˹øc³ÅETq<¢ìÆB¼*9f8–d:9ÊE AÓpp‚ø:Ü2¢ ì‘uÂçzd„öºë]K*UbŽS– º\§Êû˜!e—CH9ËÈtÏ@YÜ f‹]n ó² 9!¥‡(„eݾnš©3Ï@‰êèéññééööáá> w»µé!õNq2¿µØ²B=)gnVQ”Þ?Üÿºÿ„u}½¿ürõÇ÷_÷…‰9 ÅàåΆ½¢§¨®ºCÜÓgr½J‹¢.žžŸÿ~|¼½f¿¿¼¼¸ºø~S #4 Vœ9Ž›õ~Ù´FžZ+AÝ­Ò"Jž~?¯×›õóóï¿5—ßon$q(˜äqúPŒ,ˆ?‰2–¬‘~ÞýÓóVé]+Ì5©fwWUê™GE~&ÜJBX Ï!¦!Æ·R’ÓQ,BC¼<=7®#Jc³KØìËåÍ]¸~FD-Ë= 8Gfao0iMüÎóIV Ïóüáöñùy½å]ê3Q>õZnî4•nÀl:*°|ÝïjÖ~ÏÑE¹sIIÇBâÂÿžyã¸$NÀZ6¹>Á,(é…IµÞã’—{^—— A»—›  ƒIXÌ%Úš«µä}s¹ÝšñC!àÆùîç¦þ÷E·.Õ7äÉÝ‹ÆBו>æK fº\Î0Cá.H ¦Ü 0ÓþÈ¡VØ»íãWR t\’¬»;r»TJ\—koZÔr¦”!¹ÎÓÞ`dï„z«•EvýºÙ“w¾~½ƒ†—Œ* #àx·BT ?JµÙv†ÂÉ õØ0rZ Pîhö±Q_^´—úV± $3|bz6[“K‡ÌÅZB¦ òõñýpTgÚH!ÈÏ EMSŒHÌŽ‡¸GöIÅl?85ìˆS&IyÄñ°¿à-É Ur-CãhìBÔQ$Ü™^É~§Û©Tµ4l=F$bË»B%’Nýpûõoã챂ÌÈÕ(íå#êž—¦˜ˆüy¥ Iw]¸¦’‹ƒ‰Æ)Ü ÓÉ6ŒEñûOdöçÓ,E5ÈWË%¿G‘çØAxuìEñ¤çÓÔ§V‚4ѱ–Uº]Ìô3'p%ÇP<í)'>å@µmCo‡`£¢¨xñ4^J§Riä:¥ Žk%g˜WTô%ekÜ}¿ºº¸ú×Å,'Âd -a*0ÕÉ™éjýâÂ\N°(a¡%5èèj{ÿßoŸ±¾ýph]Q¥è"i]§õ¸ÿ«Ãám¡4¶[MèA@ƒ(VÍUxgþúr…õùGârZ0¨L5ÄÄ÷ÐH(9»ÈODÞŒ@ i¡}…Cy^Ròƒb„LSžÿ¤b“I# _»NÇÑ(1J+)E1©Ñä µòæ ©BΨIÉ ±)­Ì3)mòû½¢F¥X‰2˜ù¸Qôiѳ„j^h¿¯šM`ÂC ¥ Íü!ä¤*Lê(¶¢\ýp=­ ‘"³Š)HÚdŽ¢jŒ…±8èm†h bÉ;‹Ð—zˆ¼³öW¤å›ãe}€RÕsDAZ²Øt@t|Þ™•Ž–aÎlL5F¶C§PvSósõ ´|³"¡T«8v\ ¾“Ìj)]_Õ@GCa«\§}™ªûL‰<¢X¾go1Ç{_ÑÔd‰^S-j_·fuöËP >W¨VìjM³AÓEh¶”;Ò3²~½Ã¾}úú…´|þQÇ ÊÝUqÆZJ÷”’‹JUsŠ–†vƒBÒåL¯å`P-¶4=DsÞ„~!1ŸqÇVɧ]Ðà§rB¡g Õd>gh"5̱éj£~iN<¸¶Eý°—˪åB9+,ŽDÛDMY.&´…JT °Á@¡‡É`ÇdT›…&î¿“Å–‘ˈŸfÔ;#$eÕuo¶Ð>EÆR\î¡%K,;Ç´gJ|p„"šÑ@}£´¸‘T”ÈÐ3LÍë@1h"DôªŠæ¢* T*cJîO®¼n‚Áßý*dH˜¢â„Ff3ÊÜÆ=IÂJÚG£nþ€hä ‹²è€¢ëž²\¨‘à??~|Ã*5‰ÜpLôfn›ºfA÷kú>ðDŒ²šUª†ò—(-ýYß!ª5I*&®ª·\Ê]ìNü ã : ¥R“pìÂ2N’¨ÿJè¿« óoû uÅEÌóñéàt´PoÌÐQSFçžZ-Ï s›N%óЋj'í „_§tj@ÏÏ(n¨ûºÜŠyš¤)Š9<ƒ­#¿ð<ÃãC'/¤=Xnö‹>ÓCÃEŽáBdôRï„ÎÚè(sµn’¢\Æ ÏÆ1€bŠ%BC7á{™çs šz¬®¨ÓÝ·—ïuÝ‹­%;¯TÇJf??F»ô‹4\ ¤2ªìpå q¿ ,G_mH¥é°Ì+!­YTrâs}U¦84Å)_ÜMˆúˆÑ_^áçRè¨H½¶î.?0ÕÈ뽚Ãù”ƒdL ¬Ñ–9vËá=”ƒlΧÔÂÕýæGünÀ¨F^‘' ¯|­O' ^­©Þ-'¯õÊgz¥:pcT¿´Ñ 8™‹gQê*°Æ÷OVÒ†ªÿ&O»äMJËi×8ÿúVr*KÎ¥GŽã¨»rÿ{ùãœÏÀˡ퇾èyo^ãœÏóK9,‡rôðªÓßEÁÜýXËy/Çÿg!eoµ·‚ê㔿±þMm®·Âß IEND®B`‚MEND! ÷Õlibmng-2.0.2/contrib/msvc/0000755000000000000000000000000012005307152014064 5ustar rootrootlibmng-2.0.2/contrib/msvc/mngplg/0000755000000000000000000000000012005307152015350 5ustar rootrootlibmng-2.0.2/contrib/msvc/mngplg/COPYING-LCMS0000644000000000000000000006347612005307152017157 0ustar rootroot GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 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. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; 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. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libmng-2.0.2/contrib/msvc/mngplg/readme.txt0000644000000000000000000002000712005307152017345 0ustar rootrootMNGPLG A simple browser plug-in for the MNG image/animation file format. By Jason Summers Version 1.0.1 2 Oct 2002 Web site: COPYRIGHT NOTICE Copyright (c) 2000-2002 by Jason Summers THIS SOFTWARE 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. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 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 THIS SOFTWARE 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 THIS SOFTWARE (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 THIS SOFTWARE TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 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. The origin of this source code must not be misrepresented; you must not claim that you wrote the original software. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original source. 3. Altered binary versions must not be misrepresented as being the original. 4. This Copyright notice may not be removed or altered from any source or altered source distribution, although you may add a Copyright notice for yourself for any code that you have written. This software uses several third-party libraries (listed below), some of which are optional. If you redistribute MNGPLG, it is your responsibility to comply with the licenses of any libraries used. This package includes a compiled executable plug-in file, npmngplg.dll. This file includes code from lcms, which is distributed under the LGPL. To the best of my understanding, that basically means that anyone distributing that file must (1) make it possible for the recipient to modify the plug-in to use a new or modified version of lcms, and (2) make available the lcms source code. Requirement (1) is satisfied by the inclusion of the source code. For requirement (2), you can find out how to get the lcms source code at the web site listed at the beginning of this document, if necessary. --------- Based on libmng. Copyright (c) 2000,2002 Gerard Juyn (gerard@libmng.com) Uses the zlib compression library. (C) 1995-2002 Jean-loup Gailly and Mark Adler This software is based in part on the work of the Independent JPEG Group. Copyright (C) 1991-1998, Thomas G. Lane Uses the lcms color management library by Martí Maria Saguer. (distributed under the GNU LESSER GENERAL PUBLIC LICENSE) --------- SECURITY NOTICE Although I've tried to write it carefully, MNGPLG has not had any sort of security audit. Due to the nature of plug-ins, it is possible for certain types of bugs to exist which may allow remote web sites to take control of your computer or do harm to it by sending a carefully constructed data file to the plug-in. If you are paranoid about security, you may not wish to leave MNGPLG enabled in your browser for an extended period of time. --------- INTRODUCTION MNGPLG is a Netscape-style browser plug-in which displays the MNG image/animation format. It is configured to claim the following MIME types: video/x-mng video/mng image/x-jng image/jng It claims the file extensions ".mng" and ".jng", but file extensions should only apply when no MIME type is available (e.g. on an FTP site, or on your local hard disk). It can also display PNG image files, but it would cause too many problems for it to try to claim the PNG data type. If you are configuring a web server to support MNG and JNG, the correct MIME types to use are "video/x-mng" and "image/x-jng", since the MIME types have not, as of this writing, been officially registered. REQUIREMENTS MNG requires a 32-bit Windows operating system, and a 32-bit web browser that supports Netscape-style plug-ins. For example, it works in Netscape 3 and higher, Opera 3.51 and higher, and Microsoft Internet Explorer from about version 3 to 5.0. (It does not readily work in IE 5.5sp2 and higher.) Netscape 6 and higher (and related browsers) include native support for MNG, so it should not be necessary to use this plug-in. INSTALLATION There's no install program. To install it, copy the included "npmngplg.dll" file to your browser's "Plugins" folder, then restart your browser. For Netscape 4.x, the Plugins folder is typically located somewhere like: C:\Program Files\Netscape\Communicator\Program\Plugins Note: Windows Explorer, by default, is configured to hide files that end in ".dll". You should probably change that setting. I'd tell you how, but it's different in almost every version of Windows. In Netscape 4.x, you can verify that the plug-in is installed by choosing Help|About Plug-ins from the main menu (with JavaScript enabled). To uninstall, delete the npmngplg.dll file. It does not create any other files. It currently does not write anything to the Windows registry. HOW TO USE (FOR END USERS) Right-click on an MNG image as it is being displayed to get a menu with some of the usual features. Right-click and choose "Properties" to display some internal information about the image. Some images have embedded text information that will be shown in the "Image comments" area. For technical reasons, some or all of the comments may not be available until the animation completes a full loop. HOW TO USE (FOR WEB DEVELOPERS) First, if at all possible, configure your web server (not browser) to assign the MIME type "video/x-mng" to files that end in ".mng", and assign type "image/x-jng" to files that end in ".jng". The most reliable way to embed MNG files in a web page is (unfortunately) to use the nonstandard tag. For example: The src, width, and height attributes are required. Width and height should match the actual width and height of the image. Transparency is not supported, and probably never will be. However, you can supply a background color to use in transparent areas by using the BGCOLOR attribute in the EMBED tag, i.e.: You cannot use color names like "red"; you must use the hexadecimal format as in the example. An image can be made into a "hotlink" by including an HREF and optionally a TARGET attribute in the EMBED tag. For example: SOURCE CODE The C source code is included. I've only tested it with libmng 1.0.5, but it's probably also compatible with other versions, maybe with minor changes. To compile it, you'll need: - libmng MNG library . libmng in turn uses some other libraries: - zlib compression library - IJG JPEG library - [optional] lcms "Little Color Management System" library. If you include lcms, turn on the MNG_FULL_CMS option in libmng_conf.h before compiling. Note that lcms is distributed under the LGPL -- be sure you understand the implications of that before distributing any resulting executable files. If you don't include lcms, comment out the "#define MNGPLG_CMS" line in npmngplg.c. I also recommend turning on the MNG_ERROR_TELLTALE and MNG_SUPPORT_DYNAMICMNG options in libmng_conf.h. The files from the Netscape plug-in SDK are no longer needed as of MNGPNG 0.9.4. Make sure to include the npmngplg.def file in your project, or declare the necessary DLL entry points in some other way. libmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/0000755000000000000000000000000012005307152020054 5ustar rootrootlibmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/npmngplg.mak0000644000000000000000000001350212005307152022371 0ustar rootroot# Microsoft Developer Studio Generated NMAKE File, Based on npmngplg.dsp !IF "$(CFG)" == "" CFG=npmngplg - Win32 Debug !MESSAGE No configuration specified. Defaulting to npmngplg - Win32 Debug. !ENDIF !IF "$(CFG)" != "npmngplg - Win32 Release" && "$(CFG)" != "npmngplg - Win32 Debug" !MESSAGE Invalid configuration "$(CFG)" specified. !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 "npmngplg.mak" CFG="npmngplg - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "npmngplg - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "npmngplg - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE !ERROR An invalid configuration is specified. !ENDIF !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF !IF "$(CFG)" == "npmngplg - Win32 Release" OUTDIR=.\Release INTDIR=.\Release # Begin Custom Macros OutDir=.\Release # End Custom Macros ALL : "$(OUTDIR)\npmngplg.dll" CLEAN : -@erase "$(INTDIR)\npmngplg.obj" -@erase "$(INTDIR)\npmngplg.res" -@erase "$(INTDIR)\vc60.idb" -@erase "$(OUTDIR)\npmngplg.dll" -@erase "$(OUTDIR)\npmngplg.exp" -@erase "$(OUTDIR)\npmngplg.lib" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "..\libmng-1.0.5" /I "..\zlib-1.1.4" /I "..\jpgsrc6b" /I "..\lcms-1.09b\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fp"$(INTDIR)\npmngplg.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c .c{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .c{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << MTL=midl.exe MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 RSC=rc.exe RSC_PROJ=/l 0x409 /fo"$(INTDIR)\npmngplg.res" /d "NDEBUG" BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\npmngplg.bsc" BSC32_SBRS= \ LINK32=link.exe LINK32_FLAGS=..\libmng-1.0.5\Release\libmng.lib ..\zlib-1.1.4\Release\zlib.lib ..\jpgsrc6b\Release\libjpeg.lib ..\lcms-1.09b\src\Release\lcms.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\npmngplg.pdb" /machine:I386 /def:".\npmngplg.def" /out:"$(OUTDIR)\npmngplg.dll" /implib:"$(OUTDIR)\npmngplg.lib" DEF_FILE= \ ".\npmngplg.def" LINK32_OBJS= \ "$(INTDIR)\npmngplg.obj" \ "$(INTDIR)\npmngplg.res" "$(OUTDIR)\npmngplg.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "npmngplg - Win32 Debug" OUTDIR=.\Debug INTDIR=.\Debug ALL : "..\..\program files\opera\program\plugins\npmngplg.dll" CLEAN : -@erase "$(INTDIR)\npmngplg.obj" -@erase "$(INTDIR)\npmngplg.res" -@erase "$(INTDIR)\vc60.idb" -@erase "$(INTDIR)\vc60.pdb" -@erase "$(OUTDIR)\npmngplg.exp" -@erase "$(OUTDIR)\npmngplg.lib" -@erase "$(OUTDIR)\npmngplg.pdb" -@erase "..\..\program files\opera\program\plugins\npmngplg.dll" -@erase "..\..\program files\opera\program\plugins\npmngplg.ilk" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\libmng-1.0.5" /I "..\zlib-1.1.4" /I "..\jpgsrc6b" /I "..\lcms-1.09b\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\npmngplg.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c .c{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .c{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << MTL=midl.exe MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 RSC=rc.exe RSC_PROJ=/l 0x409 /fo"$(INTDIR)\npmngplg.res" /d "_DEBUG" BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\npmngplg.bsc" BSC32_SBRS= \ LINK32=link.exe LINK32_FLAGS=..\libmng-1.0.5\Debug\libmng.lib ..\zlib-1.1.4\Debug\zlib.lib ..\jpgsrc6b\Debug\libjpeg.lib ..\lcms-1.09b\src\Debug\lcms.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"$(OUTDIR)\npmngplg.pdb" /debug /machine:I386 /def:".\npmngplg.def" /out:"c:\program files\opera\program\plugins\npmngplg.dll" /implib:"$(OUTDIR)\npmngplg.lib" /pdbtype:sept DEF_FILE= \ ".\npmngplg.def" LINK32_OBJS= \ "$(INTDIR)\npmngplg.obj" \ "$(INTDIR)\npmngplg.res" "..\..\program files\opera\program\plugins\npmngplg.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ENDIF !IF "$(NO_EXTERNAL_DEPS)" != "1" !IF EXISTS("npmngplg.dep") !INCLUDE "npmngplg.dep" !ELSE !MESSAGE Warning: cannot find "npmngplg.dep" !ENDIF !ENDIF !IF "$(CFG)" == "npmngplg - Win32 Release" || "$(CFG)" == "npmngplg - Win32 Debug" SOURCE=.\npmngplg.c !IF "$(CFG)" == "npmngplg - Win32 Release" CPP_SWITCHES=/nologo /MT /W3 /GX /O2 /I "..\libmng-1.0.5" /I "..\zlib-1.1.4" /I "..\jpgsrc6b" /I "..\lcms-1.09b\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c "$(INTDIR)\npmngplg.obj" : $(SOURCE) "$(INTDIR)" $(CPP) @<< $(CPP_SWITCHES) $(SOURCE) << !ELSEIF "$(CFG)" == "npmngplg - Win32 Debug" CPP_SWITCHES=/nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\libmng-1.0.5" /I "..\zlib-1.1.4" /I "..\jpgsrc6b" /I "..\lcms-1.09b\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c "$(INTDIR)\npmngplg.obj" : $(SOURCE) "$(INTDIR)" $(CPP) @<< $(CPP_SWITCHES) $(SOURCE) << !ENDIF SOURCE=.\npmngplg.rc "$(INTDIR)\npmngplg.res" : $(SOURCE) "$(INTDIR)" $(RSC) $(RSC_PROJ) $(SOURCE) !ENDIF libmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/npmngplg.def0000644000000000000000000000014412005307152022355 0ustar rootrootLIBRARY npmngplg EXPORTS NP_GetEntryPoints @1 NP_Initialize @2 NP_Shutdown @3 libmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/cur_ns.cur0000644000000000000000000000050612005307152022061 0ustar rootroot 0( @€ÿÿÿþ?þþþoþm¶m¶ ¶ ¶ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÀÿÿÀÿÿÀÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿàÿÿàIÿÿáÿÿÿáÿÿÿáÿÿÿáÿÿÿóÿÿÿlibmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/npapidefs.h0000644000000000000000000001462612005307152022207 0ustar rootroot// npapidefs.h // minimal version of the defs from the NS plugin SDK #ifndef NPAPIDEFS_H #define NPAPIDEFS_H #define NP_VERSION_MAJOR 0 #define NP_VERSION_MINOR 11 #define NPVERS_HAS_STREAMOUTPUT 8 #define NPVERS_HAS_NOTIFICATION 9 #define NPVERS_HAS_LIVECONNECT 9 #define NPVERS_HAS_WINDOWLESS 11 #define NPERR_NO_ERROR 0 #define NPERR_GENERIC_ERROR 1 #define NPERR_INVALID_INSTANCE_ERROR 2 #define NPERR_INVALID_FUNCTABLE_ERROR 3 #define NPERR_MODULE_LOAD_FAILED_ERROR 4 #define NPERR_OUT_OF_MEMORY_ERROR 5 #define NPERR_INVALID_PLUGIN_ERROR 6 #define NPERR_INVALID_PLUGIN_DIR_ERROR 7 #define NPERR_INCOMPATIBLE_VERSION_ERROR 8 #define NPERR_INVALID_PARAM 9 #define NPERR_INVALID_URL 10 #define NPERR_FILE_NOT_FOUND 11 #define NPERR_NO_DATA 12 #define NPERR_STREAM_NOT_SEEKABLE 13 #define NP_EMBED 1 #define NP_FULL 2 #define NP_NORMAL 1 #define NP_SEEK 2 #define NP_ASFILE 3 #define NP_ASFILEONLY 4 #define NPRES_DONE 0 #define NPRES_NETWORK_ERR 1 #define NPRES_USER_BREAK 2 typedef unsigned short uint16; typedef unsigned long uint32; typedef short int16; typedef long int32; typedef unsigned char NPBool; typedef int16 NPError; typedef int16 NPReason; typedef char* NPMIMEType; typedef HRGN NPRegion; typedef void* JRIGlobalRef; struct JRIEnvInterface; typedef struct JRIEnvInterface JRIEnvInterface; typedef const JRIEnvInterface* JRIEnv; struct _jobject; typedef struct _jobject *jobject; typedef jobject jref; typedef struct _NPRect { uint16 top; uint16 left; uint16 bottom; uint16 right; } NPRect; typedef struct _NPP { void* pdata; void* ndata; } NPP_t; typedef NPP_t* NPP; typedef struct _NPStream { void* pdata; void* ndata; const char* url; uint32 end; uint32 lastmodified; void* notifyData; } NPStream; typedef enum { NPPVpluginNameString = 1, NPPVpluginDescriptionString, NPPVpluginWindowBool, NPPVpluginTransparentBool } NPPVariable; typedef enum { NPNVxDisplay = 1, NPNVxtAppContext, NPNVnetscapeWindow, NPNVjavascriptEnabledBool, NPNVasdEnabledBool, NPNVisOfflineBool } NPNVariable; typedef enum { NPWindowTypeWindow = 1, NPWindowTypeDrawable } NPWindowType; typedef struct _NPSavedData { int32 len; void* buf; } NPSavedData; typedef struct _NPByteRange { int32 offset; uint32 length; struct _NPByteRange* next; } NPByteRange; typedef struct _NPFullPrint { NPBool pluginPrinted; NPBool printOne; void* platformPrint; } NPFullPrint; typedef struct _NPWindow { void* window; int32 x; int32 y; uint32 width; uint32 height; NPRect clipRect; NPWindowType type; } NPWindow; typedef struct _NPEmbedPrint { NPWindow window; void* platformPrint; } NPEmbedPrint; typedef struct _NPPrint { uint16 mode; union { NPFullPrint fullPrint; NPEmbedPrint embedPrint; } print; } NPPrint; typedef struct _NPEvent { uint16 event; uint32 wParam; uint32 lParam; } NPEvent; typedef NPError (*NPP_NewUPP)(NPMIMEType,NPP,uint16,int16,char* argn[],char* argv[],NPSavedData*); typedef NPError (*NPP_DestroyUPP)(NPP instance, NPSavedData** save); typedef NPError (*NPP_SetWindowUPP)(NPP,NPWindow*); typedef NPError (*NPP_NewStreamUPP)(NPP,NPMIMEType,NPStream*,NPBool,uint16*); typedef NPError (*NPP_DestroyStreamUPP)(NPP,NPStream*,NPReason); typedef int32 (*NPP_WriteReadyUPP)(NPP instance,NPStream*); typedef int32 (*NPP_WriteUPP)(NPP,NPStream*,int32,int32,void*); typedef void (*NPP_StreamAsFileUPP)(NPP,NPStream*,const char*); typedef void (*NPP_PrintUPP)(NPP,NPPrint*); typedef int16 (*NPP_HandleEventUPP)(NPP,void*); typedef void (*NPP_URLNotifyUPP)(NPP,const char*,NPReason,void*); typedef NPError (*NPP_GetValueUPP)(NPP,NPPVariable,void*); typedef NPError (*NPP_SetValueUPP)(NPP,NPNVariable,void*); typedef NPError (*NPN_GetValueUPP)(NPP,NPNVariable,void*); typedef NPError (*NPN_SetValueUPP)(NPP,NPPVariable,void*); typedef NPError (*NPN_GetURLNotifyUPP)(NPP,const char*,const char*,void*); typedef NPError (*NPN_PostURLNotifyUPP)(NPP,const char*,const char*,uint32,const char*,NPBool,void*); typedef NPError (*NPN_GetURLUPP)(NPP,const char*,const char*); typedef NPError (*NPN_PostURLUPP)(NPP,const char*,const char*,uint32,const char*,NPBool); typedef NPError (*NPN_RequestReadUPP)(NPStream*,NPByteRange*); typedef NPError (*NPN_NewStreamUPP)(NPP,NPMIMEType,const char*,NPStream**); typedef int32 (*NPN_WriteUPP)(NPP,NPStream*,int32,void*); typedef NPError (*NPN_DestroyStreamUPP)(NPP,NPStream*,NPReason); typedef void (*NPN_StatusUPP)(NPP instance, const char*); typedef const char* (*NPN_UserAgentUPP)(NPP); typedef void* (*NPN_MemAllocUPP)(uint32); typedef void (*NPN_MemFreeUPP)(void*); typedef uint32 (*NPN_MemFlushUPP)(uint32); typedef void (*NPN_ReloadPluginsUPP)(NPBool); typedef JRIEnv* (*NPN_GetJavaEnvUPP)(void); typedef jref (*NPN_GetJavaPeerUPP)(NPP); typedef void (*NPN_InvalidateRectUPP)(NPP,NPRect*); typedef void (*NPN_InvalidateRegionUPP)(NPP,NPRegion); typedef void (*NPN_ForceRedrawUPP)(NPP); typedef struct _NPPluginFuncs { uint16 size; uint16 version; NPP_NewUPP newp; NPP_DestroyUPP destroy; NPP_SetWindowUPP setwindow; NPP_NewStreamUPP newstream; NPP_DestroyStreamUPP destroystream; NPP_StreamAsFileUPP asfile; NPP_WriteReadyUPP writeready; NPP_WriteUPP write; NPP_PrintUPP print; NPP_HandleEventUPP event; NPP_URLNotifyUPP urlnotify; JRIGlobalRef javaClass; NPP_GetValueUPP getvalue; NPP_SetValueUPP setvalue; } NPPluginFuncs; typedef struct _NPNetscapeFuncs { uint16 size; uint16 version; NPN_GetURLUPP geturl; NPN_PostURLUPP posturl; NPN_RequestReadUPP requestread; NPN_NewStreamUPP newstream; NPN_WriteUPP write; NPN_DestroyStreamUPP destroystream; NPN_StatusUPP status; NPN_UserAgentUPP uagent; NPN_MemAllocUPP memalloc; NPN_MemFreeUPP memfree; NPN_MemFlushUPP memflush; NPN_ReloadPluginsUPP reloadplugins; NPN_GetJavaEnvUPP getJavaEnv; NPN_GetJavaPeerUPP getJavaPeer; NPN_GetURLNotifyUPP geturlnotify; NPN_PostURLNotifyUPP posturlnotify; NPN_GetValueUPP getvalue; NPN_SetValueUPP setvalue; NPN_InvalidateRectUPP invalidaterect; NPN_InvalidateRegionUPP invalidateregion; NPN_ForceRedrawUPP forceredraw; } NPNetscapeFuncs; #endif // NPAPIDEFS_H libmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/npmngplg.rc0000644000000000000000000001036112005307152022225 0ustar rootroot//Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #ifndef _MAC ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,1,1 PRODUCTVERSION 1,0,1,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904e4" BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Jason Summers\0" VALUE "FileDescription", "MNG Plug-in 1.0.1\0" VALUE "FileExtents", "mng|mng|jng|jng\0" VALUE "FileOpenName", "MNG Animation (*.mng)|MNG Animation (*.mng)|JNG Image (*.jng)|JNG Image (*.jng)\0" VALUE "FileVersion", "1.0.1\0" VALUE "InternalName", "npmngplg\0" VALUE "LegalCopyright", "Copyright © 2000-2002\0" VALUE "LegalTrademarks", "\0" VALUE "MIMEType", "video/mng|video/x-mng|image/jng|image/x-jng\0" VALUE "OriginalFilename", "npmngplg.dll\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "MNG Plug-in 1.0.1\0" VALUE "ProductVersion", "1.0.1\0" VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END #endif // !_MAC ///////////////////////////////////////////////////////////////////////////// // // Dialog // ABOUTDLG DIALOG DISCARDABLE 0, 0, 282, 137 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "MNGPLG" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,225,7,50,14,WS_GROUP EDITTEXT IDC_PRGINFO,7,7,213,123,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | WS_GROUP END PROPDLG DIALOG DISCARDABLE 0, 0, 344, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Image properties" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,287,7,50,14,WS_GROUP EDITTEXT IDC_IMGINFO,7,7,275,97,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | WS_VSCROLL | WS_GROUP LTEXT "Image comments:",IDC_STATIC,7,108,56,8 EDITTEXT IDC_MNGTEXT,7,119,275,60,ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_GROUP END ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO // #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO DISCARDABLE BEGIN "ABOUTDLG", DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 275 TOPMARGIN, 7 BOTTOMMARGIN, 130 END "PROPDLG", DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 337 TOPMARGIN, 7 BOTTOMMARGIN, 179 END END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Cursor // CURHAND_NS CURSOR DISCARDABLE "cur_ns.cur" #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED libmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/npmngplg.dsp0000644000000000000000000001041012005307152022402 0ustar rootroot# Microsoft Developer Studio Project File - Name="npmngplg" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=npmngplg - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "npmngplg.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 "npmngplg.mak" CFG="npmngplg - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "npmngplg - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "npmngplg - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "npmngplg - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "..\libmng-1.0.5" /I "..\zlib-1.1.4" /I "..\jpgsrc6b" /I "..\lcms-1.09b\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 ..\libmng-1.0.5\Release\libmng.lib ..\zlib-1.1.4\Release\zlib.lib ..\jpgsrc6b\Release\libjpeg.lib ..\lcms-1.09b\src\Release\lcms.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib /nologo /subsystem:windows /dll /machine:I386 # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "npmngplg - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\libmng-1.0.5" /I "..\zlib-1.1.4" /I "..\jpgsrc6b" /I "..\lcms-1.09b\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 ..\libmng-1.0.5\Debug\libmng.lib ..\zlib-1.1.4\Debug\zlib.lib ..\jpgsrc6b\Debug\libjpeg.lib ..\lcms-1.09b\src\Debug\lcms.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"c:\program files\opera\program\plugins\npmngplg.dll" /pdbtype:sept !ENDIF # Begin Target # Name "npmngplg - Win32 Release" # Name "npmngplg - Win32 Debug" # Begin Source File SOURCE=.\cur_ns.cur # End Source File # Begin Source File SOURCE=.\npapidefs.h # End Source File # Begin Source File SOURCE=.\npmngplg.c !IF "$(CFG)" == "npmngplg - Win32 Release" # SUBTRACT CPP /YX !ELSEIF "$(CFG)" == "npmngplg - Win32 Debug" # SUBTRACT CPP /Fr /YX /Yc /Yu !ENDIF # End Source File # Begin Source File SOURCE=.\npmngplg.def # End Source File # Begin Source File SOURCE=.\npmngplg.rc # End Source File # End Target # End Project libmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/cur_ie.cur0000644000000000000000000000050612005307152022036 0ustar rootroot 0( @€ÿÿÿüüþþþÿÿÿ7ÿwÿgûÛÚØÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿøÿÿøÿÿðÿÿðÿÿàÿÿàÿÀÿÀÿ€ÿÿÿÿðÿÿðÿÿðÿÿð?ÿÿðÿÿÿðÿÿÿðÿÿÿðÿÿÿùÿÿÿlibmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/npmngplg.dsw0000644000000000000000000000077612005307152022427 0ustar rootrootMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "npmngplg"=.\npmngplg.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### libmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/resource.h0000644000000000000000000000110012005307152022044 0ustar rootroot//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by npmngplg.rc // #define IDR_DATA1 106 #define IDC_PRGINFO 1000 #define IDC_IMGINFO 1001 #define IDC_MNGTEXT 1002 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 110 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1004 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif libmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/npmngplg.c0000644000000000000000000013523112005307152022047 0ustar rootroot/* -*- Mode: C; tab-width: 4; -*- */ /* npmngplg.c * MNG browser plugin * By Jason Summers * Based on libmng by Gerard Juyn */ #include #include #include #include #include #include #include #include "resource.h" #include "libmng.h" #include "jversion.h" // part of libjpeg #include "zlib.h" // for zlibVersion #include "npapidefs.h" #define MNGPLG_CMS //#define MNGPLG_TRACE #define IDBASE 47000 #define ID_SAVEAS (IDBASE+0) #define ID_COPYIMAGE (IDBASE+1) #define ID_COPYURL (IDBASE+2) #define ID_VIEWIMAGE (IDBASE+3) #define ID_ABOUT (IDBASE+4) #define ID_FREEZE (IDBASE+5) #define ID_RESTARTANIM (IDBASE+6) #define ID_COPYLINKLOC (IDBASE+7) #define ID_STOPANIM (IDBASE+8) #define ID_SHOWERROR (IDBASE+9) #define ID_PROPERTIES (IDBASE+10) #define MNGPLGVERS "1.0.1" /* instance-specific data */ typedef struct pluginstruct_ { NPWindow* fWindow; uint16 fMode; HWND fhWnd; WNDPROC fDefaultWindowProc; NPP instance; mng_handle mng; #define STATE_INIT 0 #define STATE_LOADING 1 // stream opened #define STATE_VALIDFRAME 2 // at least one frame has been displayed #define STATE_LOADED 3 // image loaded; stream closed #define MAXLEN_TEXT 5000 #define MAXLEN_URL 300 #define MAXLEN_TARGET 100 // I think I'm not doing this very well. Probably there really needs to be // two state variables, one for loading from the network, and one for // the libmng processing. (or use libmng's new getstate API?) int loadstate; int paintedyet; int scrolling; // allow scrolling of the image? int xscrollpos, yscrollpos; int windowwidth, windowheight; // client size of current window int diblinesize; DWORD dibsize; DWORD filesize; DWORD libmngpos; // count of bytes that have been sent to libmng DWORD byteswanted; // libmng asked for this many more bytes (add to libmngpos) unsigned char *mngdata; // stores the MNG file in memory DWORD bytesloaded; // DWORD bytesalloc; // size of mngdata int needresume; // if previous mng_readdisplay call returned NEEDMOREDATA char *textdata; int errorflag; // set if an error occurs that prevents displaying the image char errormsg[256]; unsigned char *lpdib; // pointer to header section of dib unsigned char *lpdibbits; // pointer to "bits" section of dib (follows the header) LPBITMAPINFOHEADER lpdibinfo; // alias for lpdib int frozen; int timer_set; int timer2_set; int dynamicmng; int mouse_over_mng; int mouse_captured; int force_bgcolor; mng_uint16 bg_r,bg_g,bg_b; // background color unsigned char url[MAX_PATH]; // the url of the stream int islink; HCURSOR linkcursor; HBRUSH bkgdbrush; unsigned char linkurl[MAXLEN_URL]; unsigned char linktarget[MAXLEN_TARGET]; } PluginInstance; /* global variables */ #ifdef MNGPLG_TRACE static FILE *tracefile; #endif static const char* gInstanceLookupString = "pdata"; static HMODULE g_hInst = NULL; static HCURSOR hcurHandNS; static HFONT hfontMsg; /* function prototypes */ LRESULT CALLBACK DlgProcAbout(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK DlgProcProp(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK PluginWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); void set_scrollbars(PluginInstance *This); //////////////////////////// NPN_functions static NPNetscapeFuncs* g_pNavigatorFuncs; static NPPluginFuncs* g_pluginFuncs; static const char* NPN_UserAgent(NPP instance) { return g_pNavigatorFuncs->uagent(instance); } static NPError NPN_GetURL(NPP instance, const char *url, const char *target) { return g_pNavigatorFuncs->geturl(instance, url, target); } /* ----------------------------------------------------------------------- */ BOOL APIENTRY DllMain(HANDLE hModule, DWORD reason, LPVOID lpReserved) { switch(reason) { case DLL_PROCESS_ATTACH: g_hInst=hModule; break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return TRUE; } /* ----------------------------------------------------------------------- */ static void warn(PluginInstance *This, char *fmt, ...) { va_list ap; char buf[2048]; HWND hwnd; va_start(ap, fmt); wvsprintf(buf,fmt, ap); va_end(ap); if(This) hwnd= This->fhWnd; else hwnd=NULL; MessageBox(hwnd,buf,"MNG Plug-in",MB_OK|MB_ICONWARNING); } static void set_error(PluginInstance *This, char *fmt, ...) { va_list ap; char buf[2048]; HWND hwnd; va_start(ap, fmt); wvsprintf(buf,fmt, ap); va_end(ap); if(This) hwnd= This->fhWnd; else hwnd=NULL; This->errorflag=1; lstrcpyn(This->errormsg,buf,256); if(This->lpdib) { free(This->lpdib); This->lpdib=NULL; } This->xscrollpos = This->yscrollpos = 0; if(This->fhWnd) InvalidateRect(This->fhWnd,NULL,TRUE); } /* ----------------------------------------------------------------------- */ // MNG callbacks #define MNGPLG_CALLBACK MNG_DECL static mng_ptr MNGPLG_CALLBACK memallocfunc(mng_size_t n) { return (mng_ptr) calloc(n,1); } static void MNGPLG_CALLBACK memfreefunc(mng_ptr p, mng_size_t n) { free((void*)p); } static mng_bool MNGPLG_CALLBACK callback_openstream (mng_handle mng) { // PluginInstance *This; // This = (PluginInstance*) mng_get_userdata(mng); return MNG_TRUE; } static mng_bool MNGPLG_CALLBACK callback_closestream (mng_handle mng) { PluginInstance *This; This = (PluginInstance*) mng_get_userdata(mng); This->loadstate = STATE_LOADED; // this is probably redundant return MNG_TRUE; } static mng_bool MNGPLG_CALLBACK callback_readdata (mng_handle mng,mng_ptr pBuf, mng_uint32 Buflen,mng_uint32 *pRead) { int n; PluginInstance *This; This = (PluginInstance*) mng_get_userdata(mng); #ifdef MNGPLG_TRACE fprintf(tracefile,"readdata callback buflen=%d loadstate=%d bytesloaded=%d libmngpos=%d\n", Buflen,This->loadstate,This->bytesloaded, This->libmngpos); #endif // do we have enough data available? if(This->bytesloaded - This->libmngpos >= Buflen) { CopyMemory(pBuf,&This->mngdata[This->libmngpos],Buflen); (*pRead)= Buflen; This->libmngpos += Buflen; #ifdef MNGPLG_TRACE fprintf(tracefile,"returning full: %d\n",Buflen); #endif This->byteswanted=0; return MNG_TRUE; } else if(This->loadstate>=STATE_LOADED) { // We don't have the data it asked for, but we're at the end // of file, so send it anyway...? n=This->bytesloaded-This->libmngpos; if(n>0) { CopyMemory(pBuf,&This->mngdata[This->libmngpos],n); This->libmngpos+=n; } (*pRead)=n; // so what do we return? #ifdef MNGPLG_TRACE fprintf(tracefile,"returning partial: %d\n",n); #endif This->byteswanted=0; return MNG_TRUE; } // else we don't yet have the data it's requesting #ifdef MNGPLG_TRACE fprintf(tracefile,"returning 0\n"); #endif (*pRead)=0; This->byteswanted=Buflen; return MNG_TRUE; } static mng_bool MNGPLG_CALLBACK callback_processheader(mng_handle mng,mng_uint32 iWidth,mng_uint32 iHeight) { PluginInstance *This; This = (PluginInstance*) mng_get_userdata(mng); This->diblinesize = (((iWidth * 24)+31)/32)*4; This->dibsize = sizeof(BITMAPINFOHEADER) + This->diblinesize*iHeight; This->lpdib = calloc(This->dibsize,1); This->lpdibinfo = (LPBITMAPINFOHEADER)This->lpdib; This->lpdibbits = &This->lpdib[sizeof(BITMAPINFOHEADER)]; ZeroMemory((void*)This->lpdib,sizeof(BITMAPINFOHEADER)); This->lpdibinfo->biSize = sizeof(BITMAPINFOHEADER); This->lpdibinfo->biWidth = iWidth; This->lpdibinfo->biHeight = iHeight; This->lpdibinfo->biPlanes = 1; This->lpdibinfo->biBitCount = 24; mng_set_canvasstyle (mng, MNG_CANVAS_BGR8); /* if(This->fhWnd) { if((int)iWidth > This->windowwidth || (int)iHeight > This->windowheight) { This->scrolling=1; } } */ set_scrollbars(This); return MNG_TRUE; } static mng_ptr MNGPLG_CALLBACK callback_getcanvasline (mng_handle mng, mng_uint32 iLinenr) { unsigned char *pp; PluginInstance *This; This = (PluginInstance*) mng_get_userdata(mng); pp = (&This->lpdibbits[(This->lpdibinfo->biHeight-1-iLinenr)*This->diblinesize]); return (mng_ptr) pp; } static mng_bool MNGPLG_CALLBACK callback_refresh (mng_handle mng, mng_uint32 iLeft, mng_uint32 iTop, mng_uint32 iRight, mng_uint32 iBottom) { PluginInstance *This; RECT rect; This = (PluginInstance*) mng_get_userdata(mng); if(This->loadstateloadstate=STATE_VALIDFRAME; } if(This->fhWnd) { if(This->paintedyet) { rect.left= iLeft - This->xscrollpos; rect.top= iTop - This->yscrollpos; rect.right= iLeft+iRight; rect.bottom= iTop+iBottom; InvalidateRect(This->fhWnd,&rect,FALSE); } else { // Make sure the first paint clears the whole plugin window InvalidateRect(This->fhWnd,NULL,TRUE); This->paintedyet=1; } UpdateWindow(This->fhWnd); } return MNG_TRUE; } static mng_uint32 MNGPLG_CALLBACK callback_gettickcount (mng_handle mng) { return GetTickCount(); } static mng_bool MNGPLG_CALLBACK callback_settimer (mng_handle mng,mng_uint32 iMsecs) { PluginInstance *This; This = (PluginInstance*) mng_get_userdata(mng); if(This->fhWnd) { if(!SetTimer(This->fhWnd,1,(UINT)iMsecs,NULL)) { warn(This,"Unable to create a timer for animation"); This->frozen=1; //return MNG_FALSE; return MNG_TRUE; } This->timer_set=1; } return MNG_TRUE; } static mng_bool MNGPLG_CALLBACK callback_processtext(mng_handle mng, mng_uint8 iType, mng_pchar zKeyword, mng_pchar zText, mng_pchar zLanguage, mng_pchar zTranslation) { PluginInstance *This; int pos,i; This = (PluginInstance*) mng_get_userdata(mng); if(!This->textdata) { This->textdata=(char*)malloc(MAXLEN_TEXT+10); if(!This->textdata) return MNG_TRUE; lstrcpy(This->textdata,""); } pos=lstrlen(This->textdata); if(pos>=(MAXLEN_TEXT-10)) return MNG_TRUE; if(pos>0) { /* separate items with a blank line */ This->textdata[pos++]='\r'; This->textdata[pos++]='\n'; This->textdata[pos++]='\r'; This->textdata[pos++]='\n'; } for(i=0;zKeyword[i];i++) { if(postextdata[pos++]=zKeyword[i]; } This->textdata[pos++]=':'; This->textdata[pos++]=' '; for(i=0;zText[i];i++) { if(postextdata[pos++]='\r'; } This->textdata[pos++]=zText[i]; } } This->textdata[pos++]='\0'; return MNG_TRUE; } #ifdef MNGPLG_TRACE static mng_bool MNGPLG_CALLBACK callback_traceproc (mng_handle mng, mng_int32 iFuncnr, mng_int32 iFuncseq, mng_pchar zFuncname) { if(tracefile) { fprintf(tracefile,"%d\t%d\t%d\t%s\n",(int)mng,iFuncnr,iFuncseq,zFuncname); } return MNG_TRUE; } #endif /* ----------------------------------------------------------------------- */ static int file_exists(const char *fn) { HANDLE h; // try to open with no access h=CreateFile(fn,0,FILE_SHARE_READ,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL); if(h == INVALID_HANDLE_VALUE) { return 0; } CloseHandle(h); return 1; } static void handle_read_error(PluginInstance *This, mng_retcode rv) { mng_int8 iSeverity; mng_chunkid iChunkname; mng_uint32 iChunkseq; mng_int32 iExtra1; mng_int32 iExtra2; mng_pchar zErrortext; #ifdef MNGPLG_TRACE fprintf(tracefile,"returned: %d\n",rv); #endif switch(rv) { case MNG_NOERROR: case MNG_NEEDTIMERWAIT: break; case MNG_NEEDMOREDATA: if(This->loadstate>=STATE_LOADED) { set_error(This,"Unexpected end of file"); } else { This->needresume=1; } break; case MNG_INVALIDSIG: set_error(This,"Invalid or missing MNG file (maybe a 404 Not Found error)"); break; default: mng_getlasterror(This->mng, &iSeverity,&iChunkname,&iChunkseq,&iExtra1, &iExtra2,&zErrortext); if(zErrortext) { set_error(This,"Error reported by libmng (%d)\r\n\r\n%s",(int)rv,zErrortext); } else { set_error(This,"Error %d reported by libmng",(int)rv); } } } #ifdef MNGPLG_CMS static int init_color_management(PluginInstance *This) { mng_set_outputsrgb(This->mng); return 1; } #endif // return 1 if okay static int my_init_mng(PluginInstance *This) { mng_retcode rv; int err; This->mng = mng_initialize((mng_ptr)This,memallocfunc,memfreefunc,NULL); //(mng_memalloc) (mng_memfree) #ifdef MNGPLG_CMS init_color_management(This); #endif err=0; rv=mng_setcb_openstream (This->mng, callback_openstream ); if(rv) err++; rv=mng_setcb_closestream (This->mng, callback_closestream ); if(rv) err++; rv=mng_setcb_readdata (This->mng, callback_readdata ); if(rv) err++; rv=mng_setcb_processheader (This->mng, callback_processheader); if(rv) err++; rv=mng_setcb_getcanvasline (This->mng, callback_getcanvasline); if(rv) err++; rv=mng_setcb_refresh (This->mng, callback_refresh ); if(rv) err++; rv=mng_setcb_gettickcount (This->mng, callback_gettickcount ); if(rv) err++; rv=mng_setcb_settimer (This->mng, callback_settimer ); if(rv) err++; rv=mng_setcb_processtext (This->mng, callback_processtext ); if(rv) err++; #ifdef MNGPLG_TRACE rv=mng_setcb_traceproc (This->mng, callback_traceproc ); if(rv) err++; #endif if(err) { warn(This,"Error setting libmng callback functions"); return 0; } rv= mng_set_suspensionmode (This->mng,MNG_TRUE); if(rv) { warn(This,"Error setting suspension mode"); return 0; } // if the web page author provided a bgcolor, use it if(This->force_bgcolor) { rv=mng_set_bgcolor (This->mng, This->bg_r, This->bg_g, This->bg_b); } #ifdef MNGPLG_TRACE fprintf(tracefile,"initial readdisplay\n"); #endif handle_read_error(This, mng_readdisplay(This->mng) ); return 1; } /* Global initialization */ static NPError NPP_Initialize(void) { if(!g_hInst) { warn(NULL,"MNG plugin error: Cannot load resources"); } #ifdef MNGPLG_TRACE tracefile=fopen("c:\\temp\\mngtrace.txt","w"); #endif #ifndef IDC_HAND #define IDC_HAND MAKEINTRESOURCE(32649) #endif hcurHandNS = LoadCursor(NULL,IDC_HAND); if(!hcurHandNS) { hcurHandNS=LoadCursor(g_hInst,"CURHAND_NS"); } hfontMsg=CreateFont(-12,0,0,0,FW_DONTCARE,TRUE,0,0,ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DRAFT_QUALITY, VARIABLE_PITCH|FF_SWISS,"Arial"); return NPERR_NO_ERROR; } /* Global shutdown */ static void NPP_Shutdown(void) { #ifdef MNGPLG_TRACE if(tracefile) { fclose(tracefile); tracefile=NULL; } #endif if(hfontMsg) DeleteObject((HGDIOBJ)hfontMsg); return; } static unsigned char gethex(const char *s) { int v[2]; int i; v[0]=v[1]=0; for(i=0;i<2;i++) { if(s[i]>='a' && s[i]<='f') v[i]=s[i]-87; if(s[i]>='A' && s[i]<='F') v[i]=s[i]-55; if(s[i]>='0' && s[i]<='9') v[i]=s[i]-48; } return (unsigned char)(v[0]*16+v[1]); } static void hexcolor2rgb(const char *s, mng_uint16 *r, mng_uint16 *g, mng_uint16 *b) { if(lstrlen(s)!=7) return; if(s[0]!='#') return; (*r)= gethex(&s[1]); (*r)= ((*r)<<8)|(*r); (*g)= gethex(&s[3]); (*g)= ((*g)<<8)|(*g); (*b)= gethex(&s[5]); (*b)= ((*b)<<8)|(*b); } static void find_window_size(PluginInstance *This) { RECT r; if(This->scrolling) { // make sure scrollbars exist if needed ShowScrollBar(This->fhWnd,SB_BOTH,TRUE); } GetClientRect(This->fhWnd, &r); This->windowwidth=r.right; This->windowheight=r.bottom; } static void set_scrollbars(PluginInstance *This) { SCROLLINFO si; int maxpos; if(!This->scrolling) return; if(!This->fhWnd) return; ZeroMemory(&si,sizeof(SCROLLINFO)); si.cbSize = sizeof(SCROLLINFO); // horizontal if(This->lpdib) { maxpos=This->lpdibinfo->biWidth-This->windowwidth; if(maxpos<0) maxpos=0; if(This->xscrollpos>maxpos) This->xscrollpos=maxpos; if(This->xscrollpos<0) This->xscrollpos=0; si.fMask = SIF_ALL|SIF_DISABLENOSCROLL; si.nMin = 0; si.nMax = This->lpdibinfo->biWidth -1; si.nPage = This->windowwidth; si.nPos = This->xscrollpos; } else { // no image to display si.fMask = SIF_ALL|SIF_DISABLENOSCROLL; si.nMin = 0; si.nMax = 0; si.nPage = 1; si.nPos = 0; } SetScrollInfo(This->fhWnd,SB_HORZ,&si,TRUE); // vertical if(This->lpdib) { maxpos=This->lpdibinfo->biHeight-This->windowheight; if(maxpos<0) maxpos=0; if(This->yscrollpos>maxpos) This->yscrollpos=maxpos; if(This->yscrollpos<0) This->yscrollpos=0; si.fMask = SIF_ALL|SIF_DISABLENOSCROLL; si.nMin = 0; si.nMax = This->lpdibinfo->biHeight -1; si.nPage = This->windowheight; si.nPos = This->yscrollpos; } SetScrollInfo(This->fhWnd,SB_VERT,&si,TRUE); } #define SCROLLLINE 40 static void scrollmsg(PluginInstance *This, UINT msg,int code, short int pos) { int page; int dx, dy; // amount of scrolling int x_orig, y_orig; if(!This->scrolling) return; if(!This->lpdib) return; x_orig=This->xscrollpos; y_orig=This->yscrollpos; if(msg==WM_HSCROLL) { page=This->windowwidth-15; if(pagexscrollpos-=SCROLLLINE; break; case SB_LINERIGHT: This->xscrollpos+=SCROLLLINE; break; case SB_PAGELEFT: This->xscrollpos-=page; break; case SB_PAGERIGHT: This->xscrollpos+=page; break; case SB_LEFT: This->xscrollpos=0; break; case SB_RIGHT: This->xscrollpos=This->lpdibinfo->biWidth; break; case SB_THUMBTRACK: This->xscrollpos=pos; break; default: return; } set_scrollbars(This); } else if(msg==WM_VSCROLL) { page=This->windowheight-15; if(pageyscrollpos-=SCROLLLINE; break; case SB_LINEDOWN: This->yscrollpos+=SCROLLLINE; break; case SB_PAGEUP: This->yscrollpos-=page; break; case SB_PAGEDOWN: This->yscrollpos+=page; break; case SB_TOP: This->yscrollpos=0; break; case SB_BOTTOM: This->yscrollpos=This->lpdibinfo->biHeight; break; case SB_THUMBTRACK: This->yscrollpos=pos; break; default: return; } set_scrollbars(This); } dx= x_orig - This->xscrollpos; dy= y_orig - This->yscrollpos; if(dx || dy) { // if any change // GetClientRect(This->fhWnd,&cliprect); ScrollWindowEx(This->fhWnd,dx,dy,NULL,NULL /*&cliprect*/,NULL,NULL,SW_INVALIDATE); } } /* Once-per-instance initialization */ static NPError NPP_New(NPMIMEType pluginType,NPP instance,uint16 mode, int16 argc,char* argn[],char* argv[],NPSavedData* saved) { PluginInstance* This; int i; if (instance == NULL) { return NPERR_INVALID_INSTANCE_ERROR; } instance->pdata = calloc(sizeof(PluginInstance),1); This = (PluginInstance*) instance->pdata; if (This == NULL) { return NPERR_OUT_OF_MEMORY_ERROR; } This->force_bgcolor=1; This->bg_r = This->bg_g = This->bg_b = 0xffff; /* record some info for later lookup */ This->fWindow = NULL; This->fMode = mode; This->fhWnd = NULL; This->fDefaultWindowProc = NULL; This->instance = instance; /* save the instance id for reverse lookups */ This->scrolling = (mode==NP_FULL); This->xscrollpos = This->yscrollpos = 0; This->windowwidth = This->windowheight = 0; This->loadstate = STATE_INIT; This->paintedyet = 0; This->mng=0; This->lpdib=NULL; lstrcpy(This->url,""); This->frozen=0; This->needresume=0; This->errorflag=0; lstrcpy(This->errormsg,""); This->dibsize = This->filesize = 0; lstrcpy(This->linkurl,""); lstrcpy(This->linktarget,"_self"); This->islink=0; This->timer_set=0; This->timer2_set=0; This->dynamicmng= -1; This->mouse_over_mng=0; This->mouse_captured=0; This->linkcursor = hcurHandNS; // examine the tag arguments for(i=0;iforce_bgcolor=1; hexcolor2rgb(argv[i],&This->bg_r,&This->bg_g,&This->bg_b); } else if(!_stricmp(argn[i],"href")) { lstrcpyn(This->linkurl,argv[i],MAXLEN_URL); This->islink=1; } else if(!_stricmp(argn[i],"target")) { lstrcpyn(This->linktarget,argv[i],MAXLEN_TARGET); } } This->bkgdbrush=NULL; if(This->force_bgcolor) This->bkgdbrush=CreateSolidBrush(RGB(This->bg_r,This->bg_g,This->bg_b)); return NPERR_NO_ERROR; } static void BeforeDestroyWindow(PluginInstance *This) { if(This->timer_set) { KillTimer(This->fhWnd,1); This->timer_set=0; } if(This->timer2_set) { KillTimer(This->fhWnd,2); This->timer2_set=0; } if(This->mouse_captured) { ReleaseCapture(); This->mouse_captured=0; } SetWindowLong( This->fhWnd, GWL_WNDPROC, (LONG)This->fDefaultWindowProc); // unsubclass This->fDefaultWindowProc = NULL; This->fhWnd = NULL; } static NPError NPP_Destroy(NPP instance, NPSavedData** save) { PluginInstance* This; if (instance == NULL) return NPERR_INVALID_INSTANCE_ERROR; This = (PluginInstance*) instance->pdata; if(!This) return NPERR_INVALID_INSTANCE_ERROR; if(This->mng) { This->dynamicmng=0; mng_cleanup(&This->mng); This->mng=0; } if(This->lpdib) { free(This->lpdib); This->lpdib=NULL; } if(This->mngdata) { free(This->mngdata); This->mngdata=NULL; This->bytesalloc=0; } if(This->textdata) { free(This->textdata); This->textdata=NULL; } if( This->fhWnd ) { // un-subclass the plugin window BeforeDestroyWindow(This); } if(This->bkgdbrush) DeleteObject((HGDIOBJ)This->bkgdbrush); if(This) { if(instance->pdata) free(instance->pdata); instance->pdata = NULL; } return NPERR_NO_ERROR; } /* Browser is providing us with a window */ static NPError NPP_SetWindow(NPP instance, NPWindow* window) { NPError result = NPERR_NO_ERROR; PluginInstance* This; if (instance == NULL) return NPERR_INVALID_INSTANCE_ERROR; This = (PluginInstance*) instance->pdata; if( This->fhWnd != NULL ) { /* If we already have a window... */ if( (window == NULL) || ( window->window == NULL ) ) { /* There is now no window to use. get rid of the old * one and exit. */ BeforeDestroyWindow(This); This->fWindow=window; return NPERR_NO_ERROR; } else if ( This->fhWnd == (HWND) window->window ) { /* The new window is the same as the old one. Redraw and get out. */ This->fWindow=window; InvalidateRect( This->fhWnd, NULL, FALSE ); /* UpdateWindow( This->fhWnd ); */ return NPERR_NO_ERROR; } else { /* Unsubclass the old window, so that we can subclass the new * one later. */ BeforeDestroyWindow(This); } } else if( (window == NULL) || ( window->window == NULL ) ) { /* We can just get out of here if there is no current * window and there is no new window to use. */ This->fWindow=window; return NPERR_NO_ERROR; } /* Subclass the new window so that we can begin drawing and * receiving window messages. */ This->fDefaultWindowProc = (WNDPROC)SetWindowLong( (HWND)window->window, GWL_WNDPROC, (LONG)PluginWindowProc); This->fhWnd = (HWND) window->window; SetProp( This->fhWnd, gInstanceLookupString, (HANDLE)This); This->fWindow = window; find_window_size(This); set_scrollbars(This); InvalidateRect( This->fhWnd, NULL, TRUE ); UpdateWindow( This->fhWnd ); return result; } // browser is announcing its intent to send data to us static NPError NPP_NewStream(NPP instance,NPMIMEType type,NPStream *stream, NPBool seekable,uint16 *stype) { PluginInstance* This; if(instance==NULL) return NPERR_INVALID_INSTANCE_ERROR; This = (PluginInstance*) instance->pdata; if(!This) return NPERR_GENERIC_ERROR; /* save the URL for later */ lstrcpyn(This->url,stream->url,MAX_PATH); This->libmngpos=0; This->bytesloaded=0; This->bytesalloc=0; This->byteswanted=0; This->mngdata=NULL; This->textdata=NULL; // if we know the total length of the stream in advance // (most of the time we will, hopefully), allocate that amount. if(stream->end > 0) { This->mngdata = malloc(stream->end); This->bytesalloc= stream->end; } my_init_mng(This); This->loadstate=STATE_LOADING; (*stype)=NP_NORMAL; return NPERR_NO_ERROR; } static int32 NPP_WriteReady(NPP instance, NPStream *stream) { /* Number of bytes ready to accept in NPP_Write() */ /* We can handle any amount, so just return some really big number. */ return (int32)0X0FFFFFFF; } #define ALLOC_CHUNK_SIZE 131072 static int32 NPP_Write(NPP instance, NPStream *stream, int32 offset, int32 len, void *buffer) { PluginInstance* This; #ifdef MNGPLG_TRACE fprintf(tracefile,"NPP_Write offs=%d len=%d\n",offset,len); #endif if(!instance) return -1; This = (PluginInstance*) instance->pdata; if(!This) return -1; if(len<1) return len; if(offset+len > (int)This->bytesalloc) { // oops, overflowed our memory buffer This->bytesalloc += ALLOC_CHUNK_SIZE; if(This->mngdata) { This->mngdata=realloc(This->mngdata, This->bytesalloc); } else { // first time This->mngdata=malloc(This->bytesalloc); } if(!This->mngdata) { warn(This,"Cannot allocate memory for image (%d,%d,%p",offset,len,buffer); return -1; } } // now we should have enough room to copy the data to memory CopyMemory(&This->mngdata[offset],buffer,len); This->bytesloaded = offset+len; // now, check if it's time to call mng_read_resume if(This->needresume && (This->bytesloaded >= (This->libmngpos + This->byteswanted)) ) { This->needresume=0; // handle_read_error(This, mng_read_resume(This->mng) ); #ifdef MNGPLG_TRACE fprintf(tracefile,"NPP_Write display_resume bytesloaded=%d libmngpos=%d byteswanted=%d\n", This->bytesloaded,This->libmngpos,This->byteswanted); #endif handle_read_error(This, mng_display_resume(This->mng) ); } return len; // The number of bytes accepted -- we always accept them all. } /* DestroyStream gets called after the file has finished loading, */ static NPError NPP_DestroyStream(NPP instance, NPStream *stream, NPError reason) { PluginInstance* This; if(!instance) return NPERR_INVALID_INSTANCE_ERROR; This = (PluginInstance*) instance->pdata; // if(reason==NPRES_DONE) { This->filesize = This->bytesloaded; This->loadstate = STATE_LOADED; // } if(reason!=NPRES_DONE) { set_error(This,"Image load failed or was canceled (%d)",(int)reason); This->needresume=0; if(This->timer_set) { KillTimer(This->fhWnd,1); This->timer_set=0; } return NPERR_NO_ERROR; } #ifdef MNGPLG_TRACE fprintf(tracefile,"NPP_DestroyStream reason=%d needresume=%d\n",reason,This->needresume); #endif if(This->needresume) { This->needresume=0; // handle_read_error(This, mng_read_resume(This->mng) ); handle_read_error(This, mng_display_resume(This->mng) ); // This->needresume=0; } return NPERR_NO_ERROR; } static void NPP_StreamAsFile(NPP instance, NPStream *stream, const char* fname) { return; } // Print embedded plug-in (via the browser's Print command) static void NPP_Print(NPP instance, NPPrint* printInfo) { PluginInstance* This; if (instance == NULL) return; This = (PluginInstance*) instance->pdata; if(printInfo == NULL) { // Some browsers (Netscape) set printInfo to NULL to tell the plugin // to print in full page mode (this may be a bug). // PrintFullPage(); -- full page printing not implemented return; } if (printInfo->mode == NP_FULL) { /* the plugin is full-page, and the browser is giving it a chance * to print in the manner of its choosing */ void* platformPrint = printInfo->print.fullPrint.platformPrint; NPBool printOne = printInfo->print.fullPrint.printOne; /* Setting this to FALSE and returning *should* cause the browser to * call NPP_Print again, this time with mode=NP_EMBED. * However, that doesn't happen with any browser I've ever seen :-(. * Instead of the following line, you will probably need to implement * printing yourself. You also might as well set pluginPrinted to TRUE, * though every browser I've tested ignores it. */ printInfo->print.fullPrint.pluginPrinted = FALSE; /* or */ /* PrintFullPage(); * printInfo->print.fullPrint.pluginPrinted = TRUE; */ } else { // we are embedded, and the browser had provided a printer context HDC pdc; int prevstretchmode; NPWindow* printWindow; if(This->loadstate < STATE_VALIDFRAME) return; printWindow= &(printInfo->print.embedPrint.window); /* embedPrint.platformPrint is a Windows device context in disguise */ /* The definition of NPWindow changed between API verion 0.9 and 0.11, * increasing in size from 28 to 32 bytes. This normally makes it * impossible for version 0.9 browsers to print version 0.11 plugins * (because the platformPrint field ends up at the wrong offset) -- * unless the plugin takes special care to detect this situation. * To work around it, if we are compiled with API 0.11 or higher, * and the browser is version 0.9 or earlier, we look for the HDC * 4 bytes earlier, at offset 28 instead of 32 (of the embedPrint * sub-structure). */ if(sizeof(NPWindow)>28 && /* i.e. is plugin API >= 0.11? */ HIBYTE(g_pNavigatorFuncs->version)==0 && LOBYTE(g_pNavigatorFuncs->version)<=9) { char *tmpc; HDC *tmph; tmpc= (char*)&(printInfo->print.embedPrint); tmph= (HDC*)&tmpc[28]; pdc= *tmph; } else { pdc= (HDC) (printInfo->print.embedPrint.platformPrint); } if(!This->lpdib) return; prevstretchmode=SetStretchBltMode(pdc,COLORONCOLOR); StretchDIBits(pdc, printWindow->x,printWindow->y, printWindow->width,printWindow->height, /* dest coords */ 0,0,This->lpdibinfo->biWidth, This->lpdibinfo->biHeight, /* source coords */ This->lpdibbits, (LPBITMAPINFO)This->lpdib, DIB_RGB_COLORS,SRCCOPY); if(prevstretchmode) SetStretchBltMode(pdc,prevstretchmode); } return; } /*+++++++++++++++++++++++++++++++++++++++++++++++++ * NPP_URLNotify: * Notifies the instance of the completion of a URL request. +++++++++++++++++++++++++++++++++++++++++++++++++*/ static void NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData) { return; } /**********************************************************************/ /* Try to make a filename from the url. Caller must provide fn[MAX_PATH] buffer. * This function attempts to extract a bitmap filename from a URL, * but if it doesn't look like it contains an appropriate name, * it leaves it blank. */ static void url2filename(char *fn, char *url) { int title,ext,i; lstrcpy(fn,""); ext=0; /* position of the file extention */ title=0; /* position of the base filename */ for(i=0;url[i];i++) { if(url[i]=='.') ext=i+1; if(url[i]=='/') title=i+1; if(url[i]=='\\') title=i+1; // handle Microsoft's bogus file: "URLs" if(url[i]==':') title=i+1; if(url[i]=='=') title=i+1; } if (!_stricmp(&url[ext],"mng") || !_stricmp(&url[ext],"jng") || !_stricmp(&url[ext],"png") ) { lstrcpyn(fn,&url[title],MAX_PATH); } } // sanitize string and escape '&'s for use in a menu static void escapeformenu(unsigned char *s1) { int f, t, len; unsigned char s2[200]; t=0; len=lstrlen(s1); if(len>50) len=50; for(f=0;fmng || This->loadstatebytesloaded != This->filesize) { warn(This,"Image not loaded -- can't save"); return; } if(lstrlen(This->url)) { url2filename(fn,This->url); } else { lstrcpy(fn,""); } ZeroMemory(&ofn,sizeof(OPENFILENAME)); ofn.lStructSize=sizeof(OPENFILENAME); ofn.hwndOwner=This->fhWnd; ofn.nFilterIndex=1; ofn.lpstrTitle="Save Image As..."; ofn.lpstrFile=fn; ofn.nMaxFile=MAX_PATH; ofn.Flags=OFN_PATHMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT; t=mng_get_sigtype(This->mng); if(t==mng_it_png) { ofn.lpstrDefExt="png"; // FIXME also give an option of MNG ofn.lpstrFilter="PNG (*.png)\0*.png\0\0"; } else if(t==mng_it_jng) { ofn.lpstrDefExt="jng"; // FIXME also give an option of MNG ofn.lpstrFilter="JNG (*.jng)\0*.jng\0\0"; } else { ofn.lpstrFilter="MNG (*.mng)\0*.mng\0\0"; ofn.lpstrDefExt="mng"; } if(GetSaveFileName(&ofn)) { // save to filename: ofn.lpstrFile hfile=CreateFile(ofn.lpstrFile,GENERIC_WRITE,FILE_SHARE_READ, NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(hfile==INVALID_HANDLE_VALUE) { warn(This,"Unable to write file"); } else { b=WriteFile(hfile, This->mngdata, This->filesize, &byteswritten,NULL); if(!b || byteswritten != This->filesize) { warn(This,"Error writing file"); } CloseHandle(hfile); } } } static void CopyToClipboard(PluginInstance *This,unsigned char *mem,int size,UINT format) { HGLOBAL hClip; LPVOID lpClip; if(!mem) return; if(!OpenClipboard(NULL)) { warn(This,"Can't open the clipboard"); return; } if(EmptyClipboard()) { hClip=GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE,size); lpClip=GlobalLock(hClip); if(lpClip) { CopyMemory(lpClip,mem,size); GlobalUnlock(hClip); if(!SetClipboardData(format,hClip)) { warn(This,"Can't set clipboard data"); } } else { warn(This,"Can't allocate memory for clipboard"); } } else { warn(This,"Can't clear the clipboard"); } CloseClipboard(); } static void AboutDialog(PluginInstance *This) { DialogBoxParam(g_hInst,"ABOUTDLG",This->fhWnd,(DLGPROC)DlgProcAbout,(LPARAM)This); } static void PropDialog(PluginInstance *This) { //if(This->textdata) DialogBoxParam(g_hInst,"PROPDLG",This->fhWnd,(DLGPROC)DlgProcProp,(LPARAM)This); } static void display_last_error(PluginInstance *This) { if(This->errorflag) { warn(This,"%s",This->errormsg); } } static void DynamicMNG_FireEvent(PluginInstance *This, mng_uint8 eventtype, POINTS pos) { mng_retcode r; if(!This->mng) return; if(This->dynamicmng == 0) return; if(This->dynamicmng == -1) { r=mng_status_dynamic(This->mng); if(r==MNG_FALSE) { return; } else { This->dynamicmng=1; } } mng_trapevent(This->mng, eventtype, pos.x+This->xscrollpos, pos.y+This->yscrollpos); } static void ContextMenu(PluginInstance *This, HWND hwnd) { int cmd; HMENU menu; POINT pt; unsigned char buf[MAX_PATH], buf2[200]; pt.x=0; pt.y=0; GetCursorPos(&pt); // create context menu dynamically menu=CreatePopupMenu(); if(This->errorflag) { AppendMenu(menu,MF_ENABLED,ID_SHOWERROR,"SHOW ERROR MESSAGE"); AppendMenu(menu,MF_SEPARATOR,0,NULL); } AppendMenu(menu,(This->loadstate>=STATE_LOADED?MF_ENABLED:MF_GRAYED),ID_SAVEAS,"Save Image &As..."); AppendMenu(menu,(This->lpdib?MF_ENABLED:MF_GRAYED),ID_COPYIMAGE,"&Copy Image"); AppendMenu(menu,MF_ENABLED,ID_COPYURL,"Cop&y Image Location"); if(This->islink) { AppendMenu(menu,MF_ENABLED,ID_COPYLINKLOC,"Copy Link Location"); } url2filename(buf,This->url); escapeformenu(buf); if(lstrlen(buf)) { wsprintf(buf2,"View Image (%s)",buf); } else { wsprintf(buf2,"View Image"); } AppendMenu(menu,MF_ENABLED,ID_VIEWIMAGE,buf2); AppendMenu(menu,MF_SEPARATOR,0,NULL); // AppendMenu(menu,(This->mng?MF_ENABLED:MF_GRAYED),ID_STOPANIM,"Stop Animation"); AppendMenu(menu,(This->mng?MF_ENABLED:MF_GRAYED)| (This->frozen?MF_CHECKED:MF_UNCHECKED),ID_FREEZE,"&Freeze Animation"); // AppendMenu(menu,(This->mng?MF_ENABLED:MF_GRAYED),ID_RESTARTANIM,"Restart Animation"); AppendMenu(menu,MF_SEPARATOR,0,NULL); AppendMenu(menu,MF_ENABLED,ID_PROPERTIES,"Properties..."); AppendMenu(menu,MF_ENABLED,ID_ABOUT,"About MNG Plug-in..."); cmd=TrackPopupMenuEx(menu, TPM_LEFTALIGN|TPM_TOPALIGN|TPM_NONOTIFY|TPM_RETURNCMD| TPM_RIGHTBUTTON,pt.x,pt.y,hwnd,NULL); DestroyMenu(menu); switch(cmd) { case ID_STOPANIM: if(This->mng) { KillTimer(This->fhWnd,1); This->timer_set=0; mng_display_freeze(This->mng); } break; case ID_FREEZE: This->frozen = !This->frozen; if(This->frozen) { KillTimer(This->fhWnd,1); This->timer_set=0; mng_display_freeze(This->mng); } else { handle_read_error(This, mng_display_resume(This->mng) ); } break; case ID_RESTARTANIM: if(!This->frozen) { KillTimer(This->fhWnd,1); This->timer_set=0; mng_display_freeze(This->mng); } This->frozen=1; mng_display_reset(This->mng); This->frozen=0; handle_read_error(This, mng_display_resume(This->mng) ); break; case ID_SAVEAS: SaveImage(This); break; case ID_COPYIMAGE: if(This->lpdib) { CopyToClipboard(This,(unsigned char*)This->lpdib,This->dibsize,CF_DIB); } else { warn(This,"No image to copy"); } break; case ID_COPYURL: CopyToClipboard(This,This->url,lstrlen(This->url)+1,CF_TEXT); break; case ID_COPYLINKLOC: if(This->islink) { CopyToClipboard(This,This->linkurl,lstrlen(This->linkurl)+1,CF_TEXT); } break; case ID_VIEWIMAGE: if(lstrlen(This->url)) NPN_GetURL(This->instance,This->url,"_self"); break; case ID_PROPERTIES: PropDialog(This); break; case ID_ABOUT: AboutDialog(This); break; case ID_SHOWERROR: display_last_error(This); break; } } /*+++++++++++++++++++++++++++++++++++++++++++++++++ * PluginWindowProc * Handle the Windows window-event loop. +++++++++++++++++++++++++++++++++++++++++++++++++*/ static LRESULT CALLBACK PluginWindowProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { PluginInstance* This; HDC hdc; RECT rect; This = (PluginInstance*) GetProp(hWnd, gInstanceLookupString); if(!This) return DefWindowProc( hWnd, Msg, wParam, lParam); switch(Msg) { case WM_ERASEBKGND: { HBRUSH br; hdc= (HDC)wParam; if(This->bkgdbrush) br=This->bkgdbrush; else br=GetStockObject(GRAY_BRUSH); GetClientRect(hWnd,&rect); FillRect(hdc,&rect,br); return 1; } case WM_HSCROLL: case WM_VSCROLL: scrollmsg(This,Msg,(int)(LOWORD(wParam)),(short int)(HIWORD(wParam))); return 0; case WM_SIZE: find_window_size(This); set_scrollbars(This); return 0; case WM_CONTEXTMENU: case WM_RBUTTONUP: ContextMenu(This, hWnd); return 0; case WM_SETCURSOR: if(LOWORD(lParam)==HTCLIENT) { if(This->islink) { SetCursor(This->linkcursor); return 1; } } break; case WM_LBUTTONDOWN: SetCapture(This->fhWnd); This->mouse_captured=1; if(This->dynamicmng && This->mng && !This->errorflag) { DynamicMNG_FireEvent(This,4,MAKEPOINTS(lParam)); } return 0; case WM_LBUTTONUP: { RECT rc; POINT pt; if(This->mouse_captured) { ReleaseCapture(); This->mouse_captured=0; } if(This->dynamicmng && This->mng && !This->errorflag) { DynamicMNG_FireEvent(This,5,MAKEPOINTS(lParam)); } // if mouse is not over image, don't follow links, etc. GetWindowRect(This->fhWnd,&rc); GetCursorPos(&pt); if(!PtInRect(&rc,pt)) return 0; if(This->islink) { NPN_GetURL(This->instance,This->linkurl,This->linktarget); return 0; } else if(This->errorflag) { display_last_error(This); } } return 0; case WM_MOUSEMOVE: if(This->dynamicmng && This->mng && This->lpdib && !This->errorflag) { POINTS pos; int overimage; pos=MAKEPOINTS(lParam); overimage=0; if(pos.x>=0 && pos.xlpdibinfo->biWidth && pos.y>=0 && pos.ylpdibinfo->biHeight) { overimage=1; } if(overimage) { if(This->mouse_over_mng) { // mouse is still over image: mouse move event DynamicMNG_FireEvent(This,2,pos); // 2=mouse move } else { // mouse wasn't over the image but now it is: mouse-enter event DynamicMNG_FireEvent(This,1,pos); // mouse enter } } else { // mouse not now over image if(This->mouse_over_mng) { // ... but it used to be pos.x=0; pos.y=0; DynamicMNG_FireEvent(This,3,pos); // 3=mouse leave } } This->mouse_over_mng=overimage; // remember for next time if(This->mouse_over_mng && (This->dynamicmng==1) ) { #define MOUSE_POLL_INTERVAL 100 // milliseconds SetTimer(This->fhWnd,2,MOUSE_POLL_INTERVAL,NULL); This->timer2_set=0; } } return 0; case WM_PAINT: { PAINTSTRUCT paintStruct; HDC hdc; RECT rect2; hdc = BeginPaint( hWnd, &paintStruct ); SetWindowOrgEx(hdc,This->xscrollpos,This->yscrollpos,NULL); GetClientRect(hWnd,&rect); if(This) { if(This->errorflag || !This->lpdib) { SelectObject(hdc,hfontMsg); Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom); rect2.left=rect.left+2; rect2.top=rect.top+2; rect2.right=rect.right-2; rect2.bottom=rect.bottom-2; if(This->errorflag) { DrawText(hdc,"MNG PLUG-IN ERROR!",-1,&rect2,DT_LEFT|DT_WORDBREAK); } else { if(This->loadstate>=STATE_LOADING) { DrawText(hdc,"MNG image loading...",-1,&rect2,DT_LEFT|DT_WORDBREAK); } else { DrawText(hdc,"MNG plug-in",-1,&rect2,DT_LEFT|DT_WORDBREAK); } } } else if(This->lpdib) { StretchDIBits(hdc, 0,0,This->lpdibinfo->biWidth,This->lpdibinfo->biHeight, 0,0,This->lpdibinfo->biWidth,This->lpdibinfo->biHeight, &((BYTE*)(This->lpdib))[sizeof(BITMAPINFOHEADER)], (LPBITMAPINFO)This->lpdib,DIB_RGB_COLORS,SRCCOPY); } } EndPaint( hWnd, &paintStruct ); } return 0; case WM_TIMER: switch(wParam) { case 1: // the main animation timer KillTimer(hWnd,1); This->timer_set=0; #ifdef MNGPLG_TRACE fprintf(tracefile,"WM_TIMER display_resume bytesloaded=%d\n",This->bytesloaded); #endif if(This->mng) { if(!This->needresume) { handle_read_error(This, mng_display_resume(This->mng) ); } } return 0; case 2: // timer for polling mouse position { RECT rc; POINT pt; POINTS pos; GetWindowRect(hWnd,&rc); GetCursorPos(&pt); if(!PtInRect(&rc,pt)) { KillTimer(hWnd,2); pos.x=0; pos.y=0; DynamicMNG_FireEvent(This,3,pos); // 3=mouse leave This->mouse_over_mng=0; } } return 0; } break; } /* Forward unprocessed messages on to their original destination * (the window proc we replaced) */ return This->fDefaultWindowProc(hWnd, Msg, wParam, lParam); } static LRESULT CALLBACK DlgProcProp(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { char buf[4096],buf2[1024]; switch(Msg) { case WM_INITDIALOG: { DWORD tabs[1]; PluginInstance *This=(PluginInstance*)lParam; tabs[0]= 60; SendDlgItemMessage(hWnd,IDC_IMGINFO,EM_SETTABSTOPS,(WPARAM)1,(LPARAM)tabs); wsprintf(buf,"URL:\t%s\r\n",This->url); if(This->lpdib) { wsprintf(buf2,"Dimensions:\t%d x %d\r\n",This->lpdibinfo->biWidth, This->lpdibinfo->biHeight); lstrcat(buf,buf2); } if(This->lpdib && This->fMode==NP_EMBED) { wsprintf(buf2,"Window:\t%d x %d\r\n",This->windowwidth, This->windowheight); lstrcat(buf,buf2); } if(This->filesize) { wsprintf(buf2,"File size:\t%u bytes\r\n",This->filesize); lstrcat(buf,buf2); } #ifdef _DEBUG if(This->mngdata && This->lpdib && This->bytesalloc && This->dibsize) { // note this doesn't include memory used by libmng wsprintf(buf2,"Memory used:\t%u bytes\r\n", This->bytesalloc + This->dibsize); lstrcat(buf,buf2); } #endif if(This->islink) { wsprintf(buf2,"Link to:\t%s\r\n",This->linkurl); lstrcat(buf,buf2); if(strcmp(This->linktarget,"_self")) { wsprintf(buf2,"Link target:\t%s\r\n",This->linktarget); lstrcat(buf,buf2); } } if(This->loadstate >= STATE_VALIDFRAME) { wsprintf(buf2,"Signature:\t%s\r\n",get_imagetype_name(mng_get_sigtype(This->mng))); lstrcat(buf,buf2); wsprintf(buf2,"Image type:\t%s\r\n",get_imagetype_name(mng_get_imagetype(This->mng))); lstrcat(buf,buf2); wsprintf(buf2,"Simplicity:\t0x%08x\r\n",mng_get_simplicity(This->mng)); lstrcat(buf,buf2); wsprintf(buf2,"Frame count:\t%u\r\n",mng_get_framecount(This->mng)); lstrcat(buf,buf2); wsprintf(buf2,"Layer count:\t%u\r\n",mng_get_layercount(This->mng)); lstrcat(buf,buf2); wsprintf(buf2,"Play time:\t%u\r\n",mng_get_playtime(This->mng)); lstrcat(buf,buf2); } SetDlgItemText(hWnd,IDC_IMGINFO,buf); if(This->textdata) SetDlgItemText(hWnd,IDC_MNGTEXT,This->textdata); } return(TRUE); case WM_CLOSE: EndDialog(hWnd,0); return(TRUE); case WM_COMMAND: switch(wParam) { case IDOK: case IDCANCEL: EndDialog(hWnd,0); return(TRUE); } } return(FALSE); } static LRESULT CALLBACK DlgProcAbout(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { char buf[4096],buf2[1024],buf3[300]; switch(Msg) { case WM_INITDIALOG: { //DWORD tabs[1]; PluginInstance *This=(PluginInstance*)lParam; //tabs[0]= 60; //SendDlgItemMessage(hWnd,IDC_IMGINFO,EM_SETTABSTOPS,(WPARAM)1,(LPARAM)tabs); wsprintf(buf,"MNGPLG Plug-in, Version %s\r\n%s" #ifdef _DEBUG " DEBUG BUILD" #endif "\r\nCopyright (C) 2000-2002 by Jason Summers\r\n\r\n",MNGPLGVERS,__DATE__); wsprintf(buf2,"Based on libmng by Gerard Juyn.\r\n"); lstrcat(buf,buf2); wsprintf(buf2,"libmng version: %s\r\n\r\n",mng_version_text()); lstrcat(buf,buf2); wsprintf(buf2,"Uses the zlib compression library.\r\n"); lstrcat(buf,buf2); wsprintf(buf2,"zlib version: %s\r\n\r\n",zlibVersion()); lstrcat(buf,buf2); wsprintf(buf2,"This software is based in part on the work of the " "Independent JPEG Group.\r\n"); lstrcat(buf,buf2); // This really only gives the version of the libjpeg header used when // compiling this plugin, but I don't know how to query libjpeg for its // version. wsprintf(buf2,"IJG JPEG library version: %s\r\n%s\r\n\r\n",JVERSION,JCOPYRIGHT); lstrcat(buf,buf2); #ifdef MNGPLG_CMS wsprintf(buf2,"Uses the lcms color management library by Martí Maria. " "lcms is distributed under the terms of the GNU LESSER GENERAL PUBLIC LICENSE. " "See the file COPYING-LCMS.\r\n\r\n"); lstrcat(buf,buf2); #endif if(GetModuleFileName(g_hInst,buf3,260)) { wsprintf(buf2,"MNGPLG location: %s\r\n",buf3); lstrcat(buf,buf2); } SetDlgItemText(hWnd,IDC_PRGINFO,buf); } return(TRUE); case WM_CLOSE: EndDialog(hWnd,0); return(TRUE); case WM_COMMAND: switch(wParam) { case IDOK: case IDCANCEL: EndDialog(hWnd,0); return(TRUE); } } return(FALSE); } ///////////////////// ///////////////////// low-level plug-in NPAPI functions static JRIGlobalRef Private_GetJavaClass(void) { return NULL; } NPError WINAPI NP_GetEntryPoints(NPPluginFuncs* pFuncs) { if(!pFuncs) return NPERR_INVALID_FUNCTABLE_ERROR; pFuncs->version = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR; pFuncs->newp = NPP_New; pFuncs->destroy = NPP_Destroy; pFuncs->setwindow = NPP_SetWindow; pFuncs->newstream = NPP_NewStream; pFuncs->destroystream = NPP_DestroyStream; pFuncs->asfile = NPP_StreamAsFile; pFuncs->writeready = NPP_WriteReady; pFuncs->write = NPP_Write; pFuncs->print = NPP_Print; pFuncs->event = NULL; g_pluginFuncs = pFuncs; return NPERR_NO_ERROR; } NPError WINAPI NP_Initialize(NPNetscapeFuncs* pFuncs) { int navMinorVers; if(!pFuncs) return NPERR_INVALID_FUNCTABLE_ERROR; g_pNavigatorFuncs = pFuncs; // save it for future reference if(HIBYTE(pFuncs->version) > NP_VERSION_MAJOR) return NPERR_INCOMPATIBLE_VERSION_ERROR; navMinorVers = g_pNavigatorFuncs->version & 0xFF; if(navMinorVers>=NPVERS_HAS_NOTIFICATION) g_pluginFuncs->urlnotify = NPP_URLNotify; if( navMinorVers>=NPVERS_HAS_LIVECONNECT) g_pluginFuncs->javaClass = Private_GetJavaClass(); return NPP_Initialize(); } NPError WINAPI NP_Shutdown() { NPP_Shutdown(); g_pNavigatorFuncs = NULL; return NPERR_NO_ERROR; } libmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/npmngplg.dep0000644000000000000000000000106712005307152022374 0ustar rootroot# Microsoft Developer Studio Generated Dependency File, included by npmngplg.mak .\npmngplg.c : \ "..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\ "..\jpgsrc6b\jconfig.h"\ "..\jpgsrc6b\jmorecfg.h"\ "..\jpgsrc6b\jpeglib.h"\ "..\jpgsrc6b\jversion.h"\ "..\lcms-1.08a\include\icc34.h"\ "..\lcms-1.08a\include\lcms.h"\ "..\libmng-1.0.4\libmng.h"\ "..\libmng-1.0.4\libmng_conf.h"\ "..\libmng-1.0.4\libmng_types.h"\ "..\zlib-1.1.4\zconf.h"\ "..\zlib-1.1.4\zlib.h"\ ".\npapidefs.h"\ .\npmngplg.rc : \ ".\cur_ie.cur"\ ".\cur_ns.cur"\ libmng-2.0.2/contrib/msvc/mngplg/mngplg-src-1.0.1/license.txt0000644000000000000000000000364512005307152022247 0ustar rootrootMNGPLG A simple browser plug-in for the MNG image/animation file format. By Jason Summers Web site: COPYRIGHT NOTICE Copyright (c) 2000-2002 by Jason Summers THIS SOFTWARE 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. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 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 THIS SOFTWARE 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 THIS SOFTWARE (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 THIS SOFTWARE TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 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. The origin of this source code must not be misrepresented; you must not claim that you wrote the original software. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original source. 3. Altered binary versions must not be misrepresented as being the original. 4. This Copyright notice may not be removed or altered from any source or altered source distribution, although you may add a Copyright notice for yourself for any code that you have written. libmng-2.0.2/contrib/msvc/libmng-msvc.lib/0000755000000000000000000000000012005307152017047 5ustar rootrootlibmng-2.0.2/contrib/msvc/libmng-msvc.lib/libmng.lib0000644000000000000000000027420212005307152021016 0ustar rootroot! / 1041772546 0 23880 ` ÁÄ Å@Æ’Æ’ÇÇÇtÇtÇàÇàÈTÈTÈÈÈÈÉ>É>É´É´Ê*Ê*Ê Ê ËËËŠËŠËþËþÌtÌtÌêÌêÍ`Í`ÍÐÍÐÎ@Î@ββÏ$Ï$ϚϚРРÐ|Ð|ÐîÐîÑdÑdÑÔÑÔÒJÒJÒ¼Ò¼Ó.Ó.ӜӜÔÔÔ†Ô†ÔðÔðÕbÕbÕÖÕÖÖJÖJÖ¾Ö¾×4×4×®×®Ø Ø ØœØœÙÙÙ~Ù~ÙòÙòÚhÚhÚÖÚÖÛDÛDÛ²Û²Ü&Ü&ܚܚÝÝ݂݂ÝòÝòÞbÞbÞØÞØßFßFß´ß´à*à*é~é~éðéðêbêbêÒêÒëJëJëÄëÄì4ì4ìªìªííííîîînînîÜîÜïJïJï¾ï¾ð4ð4ð¤ð¤ñññŠñŠñþñþòròròâòâóJóJó²ó²ôôôŠôŠôôôôõ^õ^õÐõÐöBöBö´ö´÷&÷&÷–÷–øøø|ø|øôøôùfùfùØùØúNúNú¾ú¾û.û.ûžûžüüü„ü„üôüôýfýfýÚýÚþNþNþÄþÄÿ8ÿ8ÿ®ÿ®""˜˜  zzìì^^ÐÐ@@²²""˜˜  ‚‚úúnnääZZÎÎ@@¶¶ , , œ œ   | | ð ð ^ ^ Ð Ð < < ¨ ¨   Š ŠllÞÞPPÄÄ22¢¢††øøllààRRÆÆ<<°°""˜˜  ‚‚øøjjÚÚNNÄÄ88¬¬  ””€€òòbbÔÔFF¸¸**œœ€€òò d d Ö Ö!H!H!º!º",","ž"ž###ˆ#ˆ#ú#ú$l$l$Þ$Þ%P%P%Â%Â&4&4&¦&¦'''Š'Š'ü'ü(n(n(à(à)R)R)Ä)Ä*6*6*¨*¨+++’+’,,,z,z,ì,ì-^-^-Ð-Ð.B.B.º.º/,/,/ž/ž000ˆ0ˆ0ú0ú1l1l1Þ1Þ2P2P2Â2Â34343¦3¦444Œ4Œ4þ4þ5r5r5ê5ê6\6\6Ì6Ì7:7:7¬7¬8888999t9t9æ9æ:X:X:Ê:Ê;<;<;®;®< < <’<’===r=r=ê=ê>\>\>Î>Î?@?@?²?²@$@$@–@–AAAxAxAêAêBZBZBÌBÌC>C>C°C°D D D’D’EEEtEtEæEæFXFXFÊFÊG:G:G²G²H$H$HšHšI I I~I~IðIðJ`J`JØJØKJKJK¼K¼L4L4L¦L¦MMMŠMŠMüMüNnNnNàNàOROROÄOÄP6P6PªPªQQQQRRRlRlRÚRÚSHSHS°S°T T TTUUUvUvUêUêV`V`VÔVÔWJWJW¾W¾X4X4X¨X¨YYY–Y–Z Z Z€Z€ZöZö[l[l\X\X[â[â\Ì\Ì]>]>]²]²^^^Š^Š_r_r^þ^þ_ä_ä`V`V`Ì`Ìa:a:aªaªbbbbcccvcvcêcêd\d\dÐdÐeFeFeºeºf,f,f¢f¢gggŒgŒhhhththähäiXiXiÎiÎjBjBj¶j¶k*k*kžkžlll†l†lþlþmpmpmàmànRnRnÄnÄo6o6oªoªpppŒpŒpþpþqpqpqæqær\r\rÐrÐsBsBs´s´t"t"t–t–u u u|u|uêuêvZvZvÊvÊw<w<wªwªxxã¦ã¦æÈæÈç²ç²ã4ã4è”è”è"è"ääééåàåàç<ç<áäáäâTâTâÄâÄávávááàšàšä–ä–æPæPåååtåt__IMPORT_DESCRIPTOR_libmng__NULL_IMPORT_DESCRIPTORlibmng_NULL_THUNK_DATA__imp__jcopy_block_row@12_jcopy_block_row@12__imp__jcopy_sample_rows@24_jcopy_sample_rows@24__imp__jdiv_round_up@8_jdiv_round_up@8__imp__jinit_1pass_quantizer@4_jinit_1pass_quantizer@4__imp__jinit_2pass_quantizer@4_jinit_2pass_quantizer@4__imp__jinit_c_coef_controller@8_jinit_c_coef_controller@8__imp__jinit_c_main_controller@8_jinit_c_main_controller@8__imp__jinit_c_master_control@8_jinit_c_master_control@8__imp__jinit_c_prep_controller@8_jinit_c_prep_controller@8__imp__jinit_color_converter@4_jinit_color_converter@4__imp__jinit_color_deconverter@4_jinit_color_deconverter@4__imp__jinit_compress_master@4_jinit_compress_master@4__imp__jinit_d_coef_controller@8_jinit_d_coef_controller@8__imp__jinit_d_main_controller@8_jinit_d_main_controller@8__imp__jinit_d_post_controller@8_jinit_d_post_controller@8__imp__jinit_downsampler@4_jinit_downsampler@4__imp__jinit_forward_dct@4_jinit_forward_dct@4__imp__jinit_huff_decoder@4_jinit_huff_decoder@4__imp__jinit_huff_encoder@4_jinit_huff_encoder@4__imp__jinit_input_controller@4_jinit_input_controller@4__imp__jinit_inverse_dct@4_jinit_inverse_dct@4__imp__jinit_marker_reader@4_jinit_marker_reader@4__imp__jinit_marker_writer@4_jinit_marker_writer@4__imp__jinit_master_decompress@4_jinit_master_decompress@4__imp__jinit_memory_mgr@4_jinit_memory_mgr@4__imp__jinit_merged_upsampler@4_jinit_merged_upsampler@4__imp__jinit_phuff_decoder@4_jinit_phuff_decoder@4__imp__jinit_phuff_encoder@4_jinit_phuff_encoder@4__imp__jinit_upsampler@4_jinit_upsampler@4__imp__jpeg_CreateCompress@12_jpeg_CreateCompress@12__imp__jpeg_CreateDecompress@12_jpeg_CreateDecompress@12__imp__jpeg_abort@4_jpeg_abort@4__imp__jpeg_abort_compress@4_jpeg_abort_compress@4__imp__jpeg_abort_decompress@4_jpeg_abort_decompress@4__imp__jpeg_add_quant_table@20_jpeg_add_quant_table@20__imp__jpeg_alloc_huff_table@4_jpeg_alloc_huff_table@4__imp__jpeg_alloc_quant_table@4_jpeg_alloc_quant_table@4__imp__jpeg_calc_output_dimensions@4_jpeg_calc_output_dimensions@4__imp__jpeg_consume_input@4_jpeg_consume_input@4__imp__jpeg_copy_critical_parameters@8_jpeg_copy_critical_parameters@8__imp__jpeg_default_colorspace@4_jpeg_default_colorspace@4__imp__jpeg_destroy@4_jpeg_destroy@4__imp__jpeg_destroy_compress@4_jpeg_destroy_compress@4__imp__jpeg_destroy_decompress@4_jpeg_destroy_decompress@4__imp__jpeg_fdct_float@4_jpeg_fdct_float@4__imp__jpeg_fdct_ifast@4_jpeg_fdct_ifast@4__imp__jpeg_fdct_islow@4_jpeg_fdct_islow@4__imp__jpeg_fill_bit_buffer@16_jpeg_fill_bit_buffer@16__imp__jpeg_finish_compress@4_jpeg_finish_compress@4__imp__jpeg_finish_decompress@4_jpeg_finish_decompress@4__imp__jpeg_finish_output@4_jpeg_finish_output@4__imp__jpeg_free_large@12_jpeg_free_large@12__imp__jpeg_free_small@12_jpeg_free_small@12__imp__jpeg_gen_optimal_table@12_jpeg_gen_optimal_table@12__imp__jpeg_get_large@8_jpeg_get_large@8__imp__jpeg_get_small@8_jpeg_get_small@8__imp__jpeg_has_multiple_scans@4_jpeg_has_multiple_scans@4__imp__jpeg_huff_decode@20_jpeg_huff_decode@20__imp__jpeg_save_markers@12_jpeg_save_markers@12__imp__jpeg_set_colorspace@8_jpeg_set_colorspace@8__imp__jpeg_set_defaults@4_jpeg_set_defaults@4__imp__jpeg_set_linear_quality@12_jpeg_set_linear_quality@12__imp__jpeg_set_marker_processor@12_jpeg_set_marker_processor@12__imp__jpeg_set_quality@12_jpeg_set_quality@12__imp__jpeg_simple_progression@4_jpeg_simple_progression@4__imp__jpeg_start_compress@8_jpeg_start_compress@8__imp__jpeg_start_decompress@4_jpeg_start_decompress@4__imp__jpeg_start_output@8_jpeg_start_output@8__imp__jpeg_std_error@4_jpeg_std_error@4__imp__jpeg_stdio_dest@8_jpeg_stdio_dest@8__imp__jpeg_stdio_src@8_jpeg_stdio_src@8__imp__jpeg_suppress_tables@8_jpeg_suppress_tables@8__imp__jpeg_write_coefficients@8_jpeg_write_coefficients@8__imp__jpeg_write_m_byte@8_jpeg_write_m_byte@8__imp__jpeg_write_m_header@12_jpeg_write_m_header@12__imp__jpeg_write_marker@16_jpeg_write_marker@16__imp__jpeg_write_raw_data@12_jpeg_write_raw_data@12__imp__jpeg_write_scanlines@12_jpeg_write_scanlines@12__imp__jpeg_write_tables@4_jpeg_write_tables@4__imp__jround_up@8_jround_up@8__imp__jzero_far@8_jzero_far@8__imp__mng_cleanup@4_mng_cleanup@4__imp__mng_copy_chunk@12_mng_copy_chunk@12__imp__mng_create@4_mng_create@4__imp__mng_display@4_mng_display@4__imp__mng_display_freeze@4_mng_display_freeze@4__imp__mng_display_goframe@8_mng_display_goframe@8__imp__mng_display_golayer@8_mng_display_golayer@8__imp__mng_display_gotime@8_mng_display_gotime@8__imp__mng_display_reset@4_mng_display_reset@4__imp__mng_display_resume@4_mng_display_resume@4__imp__mng_get_alphabitdepth@4_mng_get_alphabitdepth@4__imp__mng_get_alphacompression@4_mng_get_alphacompression@4__imp__mng_get_alphadepth@4_mng_get_alphadepth@4__imp__mng_get_alphafilter@4_mng_get_alphafilter@4__imp__mng_get_alphainterlace@4_mng_get_alphainterlace@4__imp__mng_get_bgcolor@16_mng_get_bgcolor@16__imp__mng_get_bitdepth@4_mng_get_bitdepth@4__imp__mng_get_bkgdstyle@4_mng_get_bkgdstyle@4__imp__mng_get_cacheplayback@4_mng_get_cacheplayback@4__imp__mng_get_canvasstyle@4_mng_get_canvasstyle@4__imp__mng_get_colortype@4_mng_get_colortype@4__imp__mng_get_compression@4_mng_get_compression@4__imp__mng_get_currentframe@4_mng_get_currentframe@4__imp__mng_get_currentlayer@4_mng_get_currentlayer@4__imp__mng_get_currentplaytime@4_mng_get_currentplaytime@4__imp__mng_get_dfltimggamma@4_mng_get_dfltimggamma@4__imp__mng_get_dfltimggammaint@4_mng_get_dfltimggammaint@4__imp__mng_get_displaygamma@4_mng_get_displaygamma@4__imp__mng_get_displaygammaint@4_mng_get_displaygammaint@4__imp__mng_get_doprogressive@4_mng_get_doprogressive@4__imp__mng_get_filter@4_mng_get_filter@4__imp__mng_get_framecount@4_mng_get_framecount@4__imp__mng_get_imageheight@4_mng_get_imageheight@4__imp__mng_get_imagelevel@4_mng_get_imagelevel@4__imp__mng_get_imagetype@4_mng_get_imagetype@4__imp__mng_get_imagewidth@4_mng_get_imagewidth@4__imp__mng_get_interlace@4_mng_get_interlace@4__imp__mng_get_jpeg_dctmethod@4_mng_get_jpeg_dctmethod@4__imp__mng_get_jpeg_maxjdat@4_mng_get_jpeg_maxjdat@4__imp__mng_get_jpeg_optimized@4_mng_get_jpeg_optimized@4__imp__mng_get_jpeg_progressive@4_mng_get_jpeg_progressive@4__imp__mng_get_jpeg_quality@4_mng_get_jpeg_quality@4__imp__mng_get_jpeg_smoothing@4_mng_get_jpeg_smoothing@4__imp__mng_get_lastbackchunk@20_mng_get_lastbackchunk@20__imp__mng_get_lastseekname@8_mng_get_lastseekname@8__imp__mng_get_layercount@4_mng_get_layercount@4__imp__mng_get_maxcanvasheight@4_mng_get_maxcanvasheight@4__imp__mng_get_maxcanvaswidth@4_mng_get_maxcanvaswidth@4__imp__mng_get_playtime@4_mng_get_playtime@4__imp__mng_get_refreshpass@4_mng_get_refreshpass@4__imp__mng_get_runtime@4_mng_get_runtime@4__imp__mng_get_sectionbreaks@4_mng_get_sectionbreaks@4__imp__mng_get_sigtype@4_mng_get_sigtype@4__imp__mng_get_simplicity@4_mng_get_simplicity@4__imp__mng_get_speed@4_mng_get_speed@4__imp__mng_get_srgb@4_mng_get_srgb@4__imp__mng_get_starttime@4_mng_get_starttime@4__imp__mng_get_storechunks@4_mng_get_storechunks@4__imp__mng_get_suspensionmode@4_mng_get_suspensionmode@4__imp__mng_get_ticks@4_mng_get_ticks@4__imp__mng_get_totalframes@4_mng_get_totalframes@4__imp__mng_get_totallayers@4_mng_get_totallayers@4__imp__mng_get_totalplaytime@4_mng_get_totalplaytime@4__imp__mng_get_usebkgd@4_mng_get_usebkgd@4__imp__mng_get_userdata@4_mng_get_userdata@4__imp__mng_get_viewgamma@4_mng_get_viewgamma@4__imp__mng_get_viewgammaint@4_mng_get_viewgammaint@4__imp__mng_get_zlib_level@4_mng_get_zlib_level@4__imp__mng_get_zlib_maxidat@4_mng_get_zlib_maxidat@4__imp__mng_get_zlib_memlevel@4_mng_get_zlib_memlevel@4__imp__mng_get_zlib_method@4_mng_get_zlib_method@4__imp__mng_get_zlib_strategy@4_mng_get_zlib_strategy@4__imp__mng_get_zlib_windowbits@4_mng_get_zlib_windowbits@4__imp__mng_getcb_closestream@4_mng_getcb_closestream@4__imp__mng_getcb_errorproc@4_mng_getcb_errorproc@4__imp__mng_getcb_getalphaline@4_mng_getcb_getalphaline@4__imp__mng_getcb_getbkgdline@4_mng_getcb_getbkgdline@4__imp__mng_getcb_getcanvasline@4_mng_getcb_getcanvasline@4__imp__mng_getcb_gettickcount@4_mng_getcb_gettickcount@4__imp__mng_getcb_memalloc@4_mng_getcb_memalloc@4__imp__mng_getcb_memfree@4_mng_getcb_memfree@4__imp__mng_getcb_openstream@4_mng_getcb_openstream@4__imp__mng_getcb_processheader@4_mng_getcb_processheader@4__imp__mng_getcb_processneed@4_mng_getcb_processneed@4__imp__mng_getcb_processsave@4_mng_getcb_processsave@4__imp__mng_getcb_processseek@4_mng_getcb_processseek@4__imp__mng_getcb_processterm@4_mng_getcb_processterm@4__imp__mng_getcb_processtext@4_mng_getcb_processtext@4__imp__mng_getcb_processunknown@4_mng_getcb_processunknown@4__imp__mng_getcb_readdata@4_mng_getcb_readdata@4__imp__mng_getcb_refresh@4_mng_getcb_refresh@4__imp__mng_getcb_settimer@4_mng_getcb_settimer@4__imp__mng_getcb_writedata@4_mng_getcb_writedata@4__imp__mng_getchunk_back@32_mng_getchunk_back@32__imp__mng_getchunk_basi@56_mng_getchunk_basi@56__imp__mng_getchunk_bkgd@36_mng_getchunk_bkgd@36__imp__mng_getchunk_chrm@44_mng_getchunk_chrm@44__imp__mng_getchunk_clip@36_mng_getchunk_clip@36__imp__mng_getchunk_clon@44_mng_getchunk_clon@44__imp__mng_getchunk_dbyk@24_mng_getchunk_dbyk@24__imp__mng_getchunk_defi@52_mng_getchunk_defi@52__imp__mng_getchunk_dhdr@36_mng_getchunk_dhdr@36__imp__mng_getchunk_disc@16_mng_getchunk_disc@16__imp__mng_getchunk_drop@16_mng_getchunk_drop@16__imp__mng_getchunk_endl@12_mng_getchunk_endl@12__imp__mng_getchunk_evnt@12_mng_getchunk_evnt@12__imp__mng_getchunk_evnt_entry@52_mng_getchunk_evnt_entry@52__imp__mng_getchunk_expi@20_mng_getchunk_expi@20__imp__mng_getchunk_fpri@16_mng_getchunk_fpri@16__imp__mng_getchunk_fram@76_mng_getchunk_fram@76__imp__mng_getchunk_gama@16_mng_getchunk_gama@16__imp__mng_getchunk_hist@16_mng_getchunk_hist@16__imp__mng_getchunk_iccp@32_mng_getchunk_iccp@32__imp__mng_getchunk_idat@16_mng_getchunk_idat@16__imp__mng_getchunk_ihdr@36_mng_getchunk_ihdr@36__imp__mng_getchunk_itxt@48_mng_getchunk_itxt@48__imp__mng_getchunk_jdat@16_mng_getchunk_jdat@16__imp__mng_getchunk_jhdr@48_mng_getchunk_jhdr@48__imp__mng_getchunk_loop@36_mng_getchunk_loop@36__imp__mng_getchunk_magn@48_mng_getchunk_magn@48__imp__mng_getchunk_mhdr@36_mng_getchunk_mhdr@36__imp__mng_getchunk_move@28_mng_getchunk_move@28__imp__mng_getchunk_need@16_mng_getchunk_need@16__imp__mng_getchunk_ordr@12_mng_getchunk_ordr@12__imp__mng_getchunk_ordr_entry@20_mng_getchunk_ordr_entry@20__imp__mng_getchunk_past@28_mng_getchunk_past@28__imp__mng_getchunk_past_src@56_mng_getchunk_past_src@56__imp__mng_getchunk_phyg@24_mng_getchunk_phyg@24__imp__mng_getchunk_phys@24_mng_getchunk_phys@24__imp__mng_getchunk_plte@16_mng_getchunk_plte@16__imp__mng_getchunk_pplt@12_mng_getchunk_pplt@12__imp__mng_getchunk_pplt_entry@32_mng_getchunk_pplt_entry@32__imp__mng_getchunk_prom@20_mng_getchunk_prom@20__imp__mng_getchunk_save@20_mng_getchunk_save@20__imp__mng_getchunk_save_entry@40_mng_getchunk_save_entry@40__imp__mng_getchunk_sbit@20_mng_getchunk_sbit@20__imp__mng_getchunk_seek@16_mng_getchunk_seek@16__imp__mng_getchunk_show@24_mng_getchunk_show@24__imp__mng_getchunk_splt@32_mng_getchunk_splt@32__imp__mng_getchunk_srgb@16_mng_getchunk_srgb@16__imp__mng_getchunk_term@24_mng_getchunk_term@24__imp__mng_getchunk_text@24_mng_getchunk_text@24__imp__mng_getchunk_time@32_mng_getchunk_time@32__imp__mng_getchunk_trns@52_mng_getchunk_trns@52__imp__mng_getchunk_unknown@20_mng_getchunk_unknown@20__imp__mng_getchunk_ztxt@28_mng_getchunk_ztxt@28__imp__mng_getimgdata_chunk@16_mng_getimgdata_chunk@16__imp__mng_getimgdata_chunkseq@16_mng_getimgdata_chunkseq@16__imp__mng_getimgdata_seq@16_mng_getimgdata_seq@16__imp__mng_getlasterror@28_mng_getlasterror@28__imp__mng_initialize@16_mng_initialize@16__imp__mng_iterate_chunks@12_mng_iterate_chunks@12__imp__mng_putchunk_back@28_mng_putchunk_back@28__imp__mng_putchunk_basi@52_mng_putchunk_basi@52__imp__mng_putchunk_bkgd@32_mng_putchunk_bkgd@32__imp__mng_putchunk_chrm@40_mng_putchunk_chrm@40__imp__mng_putchunk_clip@32_mng_putchunk_clip@32__imp__mng_putchunk_clon@40_mng_putchunk_clon@40__imp__mng_putchunk_dbyk@20_mng_putchunk_dbyk@20__imp__mng_putchunk_defi@48_mng_putchunk_defi@48__imp__mng_putchunk_dhdr@32_mng_putchunk_dhdr@32__imp__mng_putchunk_disc@12_mng_putchunk_disc@12__imp__mng_putchunk_drop@12_mng_putchunk_drop@12__imp__mng_putchunk_endl@8_mng_putchunk_endl@8__imp__mng_putchunk_evnt@8_mng_putchunk_evnt@8__imp__mng_putchunk_evnt_entry@48_mng_putchunk_evnt_entry@48__imp__mng_putchunk_expi@16_mng_putchunk_expi@16__imp__mng_putchunk_fpri@12_mng_putchunk_fpri@12__imp__mng_putchunk_fram@72_mng_putchunk_fram@72__imp__mng_putchunk_gama@12_mng_putchunk_gama@12__imp__mng_putchunk_hist@12_mng_putchunk_hist@12__imp__mng_putchunk_iccp@28_mng_putchunk_iccp@28__imp__mng_putchunk_idat@12_mng_putchunk_idat@12__imp__mng_putchunk_iend@4_mng_putchunk_iend@4__imp__mng_putchunk_ihdr@32_mng_putchunk_ihdr@32__imp__mng_putchunk_ipng@4_mng_putchunk_ipng@4__imp__mng_putchunk_itxt@44_mng_putchunk_itxt@44__imp__mng_putchunk_jdat@12_mng_putchunk_jdat@12__imp__mng_putchunk_jhdr@44_mng_putchunk_jhdr@44__imp__mng_putchunk_jsep@4_mng_putchunk_jsep@4__imp__mng_putchunk_loop@32_mng_putchunk_loop@32__imp__mng_putchunk_magn@44_mng_putchunk_magn@44__imp__mng_putchunk_mend@4_mng_putchunk_mend@4__imp__mng_putchunk_mhdr@32_mng_putchunk_mhdr@32__imp__mng_putchunk_move@24_mng_putchunk_move@24__imp__mng_putchunk_need@12_mng_putchunk_need@12__imp__mng_putchunk_ordr@8_mng_putchunk_ordr@8__imp__mng_putchunk_ordr_entry@16_mng_putchunk_ordr_entry@16__imp__mng_putchunk_past@24_mng_putchunk_past@24__imp__mng_putchunk_past_src@52_mng_putchunk_past_src@52__imp__mng_putchunk_phyg@20_mng_putchunk_phyg@20__imp__mng_putchunk_phys@20_mng_putchunk_phys@20__imp__mng_putchunk_plte@12_mng_putchunk_plte@12__imp__mng_putchunk_pplt@8_mng_putchunk_pplt@8__imp__mng_putchunk_pplt_entry@28_mng_putchunk_pplt_entry@28__imp__mng_putchunk_prom@16_mng_putchunk_prom@16__imp__mng_putchunk_save@16_mng_putchunk_save@16__imp__mng_putchunk_save_entry@36_mng_putchunk_save_entry@36__imp__mng_putchunk_sbit@16_mng_putchunk_sbit@16__imp__mng_putchunk_seek@12_mng_putchunk_seek@12__imp__mng_putchunk_show@20_mng_putchunk_show@20__imp__mng_putchunk_splt@28_mng_putchunk_splt@28__imp__mng_putchunk_srgb@12_mng_putchunk_srgb@12__imp__mng_putchunk_term@20_mng_putchunk_term@20__imp__mng_putchunk_text@20_mng_putchunk_text@20__imp__mng_putchunk_time@28_mng_putchunk_time@28__imp__mng_putchunk_trns@48_mng_putchunk_trns@48__imp__mng_putchunk_unknown@16_mng_putchunk_unknown@16__imp__mng_putchunk_ztxt@24_mng_putchunk_ztxt@24__imp__mng_putimgdata_ihdr@40_mng_putimgdata_ihdr@40__imp__mng_putimgdata_jhdr@52_mng_putimgdata_jhdr@52__imp__mng_read@4_mng_read@4__imp__mng_read_resume@4_mng_read_resume@4__imp__mng_readdisplay@4_mng_readdisplay@4__imp__mng_reset@4_mng_reset@4__imp__mng_set_bgcolor@16_mng_set_bgcolor@16__imp__mng_set_bkgdstyle@8_mng_set_bkgdstyle@8__imp__mng_set_cacheplayback@8_mng_set_cacheplayback@8__imp__mng_set_canvasstyle@8_mng_set_canvasstyle@8__imp__mng_set_dfltimggamma@12_mng_set_dfltimggamma@12__imp__mng_set_dfltimggammaint@8_mng_set_dfltimggammaint@8__imp__mng_set_displaygamma@12_mng_set_displaygamma@12__imp__mng_set_displaygammaint@8_mng_set_displaygammaint@8__imp__mng_set_doprogressive@8_mng_set_doprogressive@8__imp__mng_set_jpeg_dctmethod@8_mng_set_jpeg_dctmethod@8__imp__mng_set_jpeg_maxjdat@8_mng_set_jpeg_maxjdat@8__imp__mng_set_jpeg_optimized@8_mng_set_jpeg_optimized@8__imp__mng_set_jpeg_progressive@8_mng_set_jpeg_progressive@8__imp__mng_set_jpeg_quality@8_mng_set_jpeg_quality@8__imp__mng_set_jpeg_smoothing@8_mng_set_jpeg_smoothing@8__imp__mng_set_maxcanvasheight@8_mng_set_maxcanvasheight@8__imp__mng_set_maxcanvassize@12_mng_set_maxcanvassize@12__imp__mng_set_maxcanvaswidth@8_mng_set_maxcanvaswidth@8__imp__mng_set_outputprofile@8_mng_set_outputprofile@8__imp__mng_set_outputprofile2@12_mng_set_outputprofile2@12__imp__mng_set_outputsrgb@4_mng_set_outputsrgb@4__imp__mng_set_sectionbreaks@8_mng_set_sectionbreaks@8__imp__mng_set_speed@8_mng_set_speed@8__imp__mng_set_srgb@8_mng_set_srgb@8__imp__mng_set_srgbimplicit@4_mng_set_srgbimplicit@4__imp__mng_set_srgbprofile@8_mng_set_srgbprofile@8__imp__mng_set_srgbprofile2@12_mng_set_srgbprofile2@12__imp__mng_set_storechunks@8_mng_set_storechunks@8__imp__mng_set_suspensionmode@8_mng_set_suspensionmode@8__imp__mng_set_usebkgd@8_mng_set_usebkgd@8__imp__mng_set_userdata@8_mng_set_userdata@8__imp__mng_set_viewgamma@12_mng_set_viewgamma@12__imp__mng_set_viewgammaint@8_mng_set_viewgammaint@8__imp__mng_set_zlib_level@8_mng_set_zlib_level@8__imp__mng_set_zlib_maxidat@8_mng_set_zlib_maxidat@8__imp__mng_set_zlib_memlevel@8_mng_set_zlib_memlevel@8__imp__mng_set_zlib_method@8_mng_set_zlib_method@8__imp__mng_set_zlib_strategy@8_mng_set_zlib_strategy@8__imp__mng_set_zlib_windowbits@8_mng_set_zlib_windowbits@8__imp__mng_setcb_closestream@8_mng_setcb_closestream@8__imp__mng_setcb_errorproc@8_mng_setcb_errorproc@8__imp__mng_setcb_getalphaline@8_mng_setcb_getalphaline@8__imp__mng_setcb_getbkgdline@8_mng_setcb_getbkgdline@8__imp__mng_setcb_getcanvasline@8_mng_setcb_getcanvasline@8__imp__mng_setcb_gettickcount@8_mng_setcb_gettickcount@8__imp__mng_setcb_memalloc@8_mng_setcb_memalloc@8__imp__mng_setcb_memfree@8_mng_setcb_memfree@8__imp__mng_setcb_openstream@8_mng_setcb_openstream@8__imp__mng_setcb_processheader@8_mng_setcb_processheader@8__imp__mng_setcb_processmend@8_mng_setcb_processmend@8__imp__mng_setcb_processneed@8_mng_setcb_processneed@8__imp__mng_setcb_processsave@8_mng_setcb_processsave@8__imp__mng_setcb_processseek@8_mng_setcb_processseek@8__imp__mng_setcb_processterm@8_mng_setcb_processterm@8__imp__mng_setcb_processtext@8_mng_setcb_processtext@8__imp__mng_setcb_processunknown@8_mng_setcb_processunknown@8__imp__mng_setcb_readdata@8_mng_setcb_readdata@8__imp__mng_setcb_refresh@8_mng_setcb_refresh@8__imp__mng_setcb_settimer@8_mng_setcb_settimer@8__imp__mng_setcb_writedata@8_mng_setcb_writedata@8__imp__mng_status_creating@4_mng_status_creating@4__imp__mng_status_displaying@4_mng_status_displaying@4__imp__mng_status_dynamic@4_mng_status_dynamic@4__imp__mng_status_error@4_mng_status_error@4__imp__mng_status_reading@4_mng_status_reading@4__imp__mng_status_running@4_mng_status_running@4__imp__mng_status_runningevent@4_mng_status_runningevent@4__imp__mng_status_suspendbreak@4_mng_status_suspendbreak@4__imp__mng_status_timerbreak@4_mng_status_timerbreak@4__imp__mng_status_writing@4_mng_status_writing@4__imp__mng_supports_func@16_mng_supports_func@16__imp__mng_trapevent@16_mng_trapevent@16__imp__mng_updatemngheader@16_mng_updatemngheader@16__imp__mng_updatemngsimplicity@8_mng_updatemngsimplicity@8__imp__mng_version_beta@0_mng_version_beta@0__imp__mng_version_dll@0_mng_version_dll@0__imp__mng_version_major@0_mng_version_major@0__imp__mng_version_minor@0_mng_version_minor@0__imp__mng_version_release@0_mng_version_release@0__imp__mng_version_so@0_mng_version_so@0__imp__mng_version_text@0_mng_version_text@0__imp__mng_write@4_mng_write@4__imp__jpeg_make_c_derived_tbl@16_jpeg_make_c_derived_tbl@16__imp__jpeg_quality_scaling@4_jpeg_quality_scaling@4__imp__jpeg_read_header@8_jpeg_read_header@8__imp__jpeg_input_complete@4_jpeg_input_complete@4__imp__jpeg_read_scanlines@12_jpeg_read_scanlines@12__imp__jpeg_read_raw_data@12_jpeg_read_raw_data@12__imp__jpeg_make_d_derived_tbl@16_jpeg_make_d_derived_tbl@16__imp__jpeg_resync_to_restart@8_jpeg_resync_to_restart@8__imp__jpeg_new_colormap@4_jpeg_new_colormap@4__imp__jpeg_read_coefficients@4_jpeg_read_coefficients@4__imp__jpeg_idct_float@20_jpeg_idct_float@20__imp__jpeg_idct_ifast@20_jpeg_idct_ifast@20__imp__jpeg_idct_islow@20_jpeg_idct_islow@20__imp__jpeg_idct_4x4@20_jpeg_idct_4x4@20__imp__jpeg_idct_2x2@20_jpeg_idct_2x2@20__imp__jpeg_idct_1x1@20_jpeg_idct_1x1@20__imp__jpeg_mem_available@16_jpeg_mem_available@16__imp__jpeg_open_backing_store@12_jpeg_open_backing_store@12__imp__jpeg_mem_init@4_jpeg_mem_init@4__imp__jpeg_mem_term@4_jpeg_mem_term@4/ 1041772546 0 25402 ` Á Ä@Å’ÆÇtÇàÇTÈÈÈ>É´É*Ê ÊËŠËþËtÌêÌ`ÍÐÍ@βÎ$ÏšÏ Ð|ÐîÐdÑÔÑJÒ¼Ò.ÓœÓÔ†ÔðÔbÕÖÕJÖ¾Ö4×®× ØœØÙ~ÙòÙhÚÖÚDÛ²Û&ÜšÜÝ‚ÝòÝbÞØÞFß´ß*à~éðébêÒêJëÄë4ìªìííînîÜîJï¾ï4ð¤ðñŠñþñròâòJó²óôŠôôô^õÐõBö´ö&÷–÷ø|øôøfùØùNú¾ú.ûžûü„üôüfýÚýNþÄþ8ÿ®ÿ"˜ zì^Ð@²"˜ ‚únäZÎ@¶, œ  | ð ^ Ð < ¨  Š lÞPÄ2¢†ølàRÆ<°"˜ ‚øjÚNÄ8¬ ”€òbÔF¸*œ€òd Ö H!º!,"ž"#ˆ#ú#l$Þ$P%Â%4&¦&'Š'ü'n(à(R)Ä)6*¨*+’+,z,ì,^-Ð-B.º.,/ž/0ˆ0ú0l1Þ1P2Â243¦34Œ4þ4r5ê5\6Ì6:7¬7889t9æ9X:Ê:<;®; <’<=r=ê=\>Î>@?²?$@–@AxAêAZBÌB>C°C D’DEtEæEXFÊF:G²G$HšH I~IðI`JØJJK¼K4L¦LMŠMüMnNàNROÄO6PªPQQRlRÚRHS°S TTUvUêU`VÔVJW¾W4X¨XY–Y Z€ZöZl[X\â[Ì\>]²]^Š^r_þ^ä_V`Ì`:aªabbcvcêc\dÐdFeºe,f¢fgŒghthähXiÎiBj¶j*kžkl†lþlpmàmRnÄn6oªopŒpþppqæq\rÐrBs´s"t–t u|uêuZvÊv?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=?>@ABCDFEGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}  !"#$%&'()*+,-./0123456789:;<=ûúùö÷øÓ¶àëÃñÑØ×æ>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=?>@ABCDFEGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}__IMPORT_DESCRIPTOR_libmng__NULL_IMPORT_DESCRIPTOR__imp__jcopy_block_row@12__imp__jcopy_sample_rows@24__imp__jdiv_round_up@8__imp__jinit_1pass_quantizer@4__imp__jinit_2pass_quantizer@4__imp__jinit_c_coef_controller@8__imp__jinit_c_main_controller@8__imp__jinit_c_master_control@8__imp__jinit_c_prep_controller@8__imp__jinit_color_converter@4__imp__jinit_color_deconverter@4__imp__jinit_compress_master@4__imp__jinit_d_coef_controller@8__imp__jinit_d_main_controller@8__imp__jinit_d_post_controller@8__imp__jinit_downsampler@4__imp__jinit_forward_dct@4__imp__jinit_huff_decoder@4__imp__jinit_huff_encoder@4__imp__jinit_input_controller@4__imp__jinit_inverse_dct@4__imp__jinit_marker_reader@4__imp__jinit_marker_writer@4__imp__jinit_master_decompress@4__imp__jinit_memory_mgr@4__imp__jinit_merged_upsampler@4__imp__jinit_phuff_decoder@4__imp__jinit_phuff_encoder@4__imp__jinit_upsampler@4__imp__jpeg_CreateCompress@12__imp__jpeg_CreateDecompress@12__imp__jpeg_abort@4__imp__jpeg_abort_compress@4__imp__jpeg_abort_decompress@4__imp__jpeg_add_quant_table@20__imp__jpeg_alloc_huff_table@4__imp__jpeg_alloc_quant_table@4__imp__jpeg_calc_output_dimensions@4__imp__jpeg_consume_input@4__imp__jpeg_copy_critical_parameters@8__imp__jpeg_default_colorspace@4__imp__jpeg_destroy@4__imp__jpeg_destroy_compress@4__imp__jpeg_destroy_decompress@4__imp__jpeg_fdct_float@4__imp__jpeg_fdct_ifast@4__imp__jpeg_fdct_islow@4__imp__jpeg_fill_bit_buffer@16__imp__jpeg_finish_compress@4__imp__jpeg_finish_decompress@4__imp__jpeg_finish_output@4__imp__jpeg_free_large@12__imp__jpeg_free_small@12__imp__jpeg_gen_optimal_table@12__imp__jpeg_get_large@8__imp__jpeg_get_small@8__imp__jpeg_has_multiple_scans@4__imp__jpeg_huff_decode@20__imp__jpeg_idct_1x1@20__imp__jpeg_idct_2x2@20__imp__jpeg_idct_4x4@20__imp__jpeg_idct_float@20__imp__jpeg_idct_ifast@20__imp__jpeg_idct_islow@20__imp__jpeg_input_complete@4__imp__jpeg_make_c_derived_tbl@16__imp__jpeg_make_d_derived_tbl@16__imp__jpeg_mem_available@16__imp__jpeg_mem_init@4__imp__jpeg_mem_term@4__imp__jpeg_new_colormap@4__imp__jpeg_open_backing_store@12__imp__jpeg_quality_scaling@4__imp__jpeg_read_coefficients@4__imp__jpeg_read_header@8__imp__jpeg_read_raw_data@12__imp__jpeg_read_scanlines@12__imp__jpeg_resync_to_restart@8__imp__jpeg_save_markers@12__imp__jpeg_set_colorspace@8__imp__jpeg_set_defaults@4__imp__jpeg_set_linear_quality@12__imp__jpeg_set_marker_processor@12__imp__jpeg_set_quality@12__imp__jpeg_simple_progression@4__imp__jpeg_start_compress@8__imp__jpeg_start_decompress@4__imp__jpeg_start_output@8__imp__jpeg_std_error@4__imp__jpeg_stdio_dest@8__imp__jpeg_stdio_src@8__imp__jpeg_suppress_tables@8__imp__jpeg_write_coefficients@8__imp__jpeg_write_m_byte@8__imp__jpeg_write_m_header@12__imp__jpeg_write_marker@16__imp__jpeg_write_raw_data@12__imp__jpeg_write_scanlines@12__imp__jpeg_write_tables@4__imp__jround_up@8__imp__jzero_far@8__imp__mng_cleanup@4__imp__mng_copy_chunk@12__imp__mng_create@4__imp__mng_display@4__imp__mng_display_freeze@4__imp__mng_display_goframe@8__imp__mng_display_golayer@8__imp__mng_display_gotime@8__imp__mng_display_reset@4__imp__mng_display_resume@4__imp__mng_get_alphabitdepth@4__imp__mng_get_alphacompression@4__imp__mng_get_alphadepth@4__imp__mng_get_alphafilter@4__imp__mng_get_alphainterlace@4__imp__mng_get_bgcolor@16__imp__mng_get_bitdepth@4__imp__mng_get_bkgdstyle@4__imp__mng_get_cacheplayback@4__imp__mng_get_canvasstyle@4__imp__mng_get_colortype@4__imp__mng_get_compression@4__imp__mng_get_currentframe@4__imp__mng_get_currentlayer@4__imp__mng_get_currentplaytime@4__imp__mng_get_dfltimggamma@4__imp__mng_get_dfltimggammaint@4__imp__mng_get_displaygamma@4__imp__mng_get_displaygammaint@4__imp__mng_get_doprogressive@4__imp__mng_get_filter@4__imp__mng_get_framecount@4__imp__mng_get_imageheight@4__imp__mng_get_imagelevel@4__imp__mng_get_imagetype@4__imp__mng_get_imagewidth@4__imp__mng_get_interlace@4__imp__mng_get_jpeg_dctmethod@4__imp__mng_get_jpeg_maxjdat@4__imp__mng_get_jpeg_optimized@4__imp__mng_get_jpeg_progressive@4__imp__mng_get_jpeg_quality@4__imp__mng_get_jpeg_smoothing@4__imp__mng_get_lastbackchunk@20__imp__mng_get_lastseekname@8__imp__mng_get_layercount@4__imp__mng_get_maxcanvasheight@4__imp__mng_get_maxcanvaswidth@4__imp__mng_get_playtime@4__imp__mng_get_refreshpass@4__imp__mng_get_runtime@4__imp__mng_get_sectionbreaks@4__imp__mng_get_sigtype@4__imp__mng_get_simplicity@4__imp__mng_get_speed@4__imp__mng_get_srgb@4__imp__mng_get_starttime@4__imp__mng_get_storechunks@4__imp__mng_get_suspensionmode@4__imp__mng_get_ticks@4__imp__mng_get_totalframes@4__imp__mng_get_totallayers@4__imp__mng_get_totalplaytime@4__imp__mng_get_usebkgd@4__imp__mng_get_userdata@4__imp__mng_get_viewgamma@4__imp__mng_get_viewgammaint@4__imp__mng_get_zlib_level@4__imp__mng_get_zlib_maxidat@4__imp__mng_get_zlib_memlevel@4__imp__mng_get_zlib_method@4__imp__mng_get_zlib_strategy@4__imp__mng_get_zlib_windowbits@4__imp__mng_getcb_closestream@4__imp__mng_getcb_errorproc@4__imp__mng_getcb_getalphaline@4__imp__mng_getcb_getbkgdline@4__imp__mng_getcb_getcanvasline@4__imp__mng_getcb_gettickcount@4__imp__mng_getcb_memalloc@4__imp__mng_getcb_memfree@4__imp__mng_getcb_openstream@4__imp__mng_getcb_processheader@4__imp__mng_getcb_processneed@4__imp__mng_getcb_processsave@4__imp__mng_getcb_processseek@4__imp__mng_getcb_processterm@4__imp__mng_getcb_processtext@4__imp__mng_getcb_processunknown@4__imp__mng_getcb_readdata@4__imp__mng_getcb_refresh@4__imp__mng_getcb_settimer@4__imp__mng_getcb_writedata@4__imp__mng_getchunk_back@32__imp__mng_getchunk_basi@56__imp__mng_getchunk_bkgd@36__imp__mng_getchunk_chrm@44__imp__mng_getchunk_clip@36__imp__mng_getchunk_clon@44__imp__mng_getchunk_dbyk@24__imp__mng_getchunk_defi@52__imp__mng_getchunk_dhdr@36__imp__mng_getchunk_disc@16__imp__mng_getchunk_drop@16__imp__mng_getchunk_endl@12__imp__mng_getchunk_evnt@12__imp__mng_getchunk_evnt_entry@52__imp__mng_getchunk_expi@20__imp__mng_getchunk_fpri@16__imp__mng_getchunk_fram@76__imp__mng_getchunk_gama@16__imp__mng_getchunk_hist@16__imp__mng_getchunk_iccp@32__imp__mng_getchunk_idat@16__imp__mng_getchunk_ihdr@36__imp__mng_getchunk_itxt@48__imp__mng_getchunk_jdat@16__imp__mng_getchunk_jhdr@48__imp__mng_getchunk_loop@36__imp__mng_getchunk_magn@48__imp__mng_getchunk_mhdr@36__imp__mng_getchunk_move@28__imp__mng_getchunk_need@16__imp__mng_getchunk_ordr@12__imp__mng_getchunk_ordr_entry@20__imp__mng_getchunk_past@28__imp__mng_getchunk_past_src@56__imp__mng_getchunk_phyg@24__imp__mng_getchunk_phys@24__imp__mng_getchunk_plte@16__imp__mng_getchunk_pplt@12__imp__mng_getchunk_pplt_entry@32__imp__mng_getchunk_prom@20__imp__mng_getchunk_save@20__imp__mng_getchunk_save_entry@40__imp__mng_getchunk_sbit@20__imp__mng_getchunk_seek@16__imp__mng_getchunk_show@24__imp__mng_getchunk_splt@32__imp__mng_getchunk_srgb@16__imp__mng_getchunk_term@24__imp__mng_getchunk_text@24__imp__mng_getchunk_time@32__imp__mng_getchunk_trns@52__imp__mng_getchunk_unknown@20__imp__mng_getchunk_ztxt@28__imp__mng_getimgdata_chunk@16__imp__mng_getimgdata_chunkseq@16__imp__mng_getimgdata_seq@16__imp__mng_getlasterror@28__imp__mng_initialize@16__imp__mng_iterate_chunks@12__imp__mng_putchunk_back@28__imp__mng_putchunk_basi@52__imp__mng_putchunk_bkgd@32__imp__mng_putchunk_chrm@40__imp__mng_putchunk_clip@32__imp__mng_putchunk_clon@40__imp__mng_putchunk_dbyk@20__imp__mng_putchunk_defi@48__imp__mng_putchunk_dhdr@32__imp__mng_putchunk_disc@12__imp__mng_putchunk_drop@12__imp__mng_putchunk_endl@8__imp__mng_putchunk_evnt@8__imp__mng_putchunk_evnt_entry@48__imp__mng_putchunk_expi@16__imp__mng_putchunk_fpri@12__imp__mng_putchunk_fram@72__imp__mng_putchunk_gama@12__imp__mng_putchunk_hist@12__imp__mng_putchunk_iccp@28__imp__mng_putchunk_idat@12__imp__mng_putchunk_iend@4__imp__mng_putchunk_ihdr@32__imp__mng_putchunk_ipng@4__imp__mng_putchunk_itxt@44__imp__mng_putchunk_jdat@12__imp__mng_putchunk_jhdr@44__imp__mng_putchunk_jsep@4__imp__mng_putchunk_loop@32__imp__mng_putchunk_magn@44__imp__mng_putchunk_mend@4__imp__mng_putchunk_mhdr@32__imp__mng_putchunk_move@24__imp__mng_putchunk_need@12__imp__mng_putchunk_ordr@8__imp__mng_putchunk_ordr_entry@16__imp__mng_putchunk_past@24__imp__mng_putchunk_past_src@52__imp__mng_putchunk_phyg@20__imp__mng_putchunk_phys@20__imp__mng_putchunk_plte@12__imp__mng_putchunk_pplt@8__imp__mng_putchunk_pplt_entry@28__imp__mng_putchunk_prom@16__imp__mng_putchunk_save@16__imp__mng_putchunk_save_entry@36__imp__mng_putchunk_sbit@16__imp__mng_putchunk_seek@12__imp__mng_putchunk_show@20__imp__mng_putchunk_splt@28__imp__mng_putchunk_srgb@12__imp__mng_putchunk_term@20__imp__mng_putchunk_text@20__imp__mng_putchunk_time@28__imp__mng_putchunk_trns@48__imp__mng_putchunk_unknown@16__imp__mng_putchunk_ztxt@24__imp__mng_putimgdata_ihdr@40__imp__mng_putimgdata_jhdr@52__imp__mng_read@4__imp__mng_read_resume@4__imp__mng_readdisplay@4__imp__mng_reset@4__imp__mng_set_bgcolor@16__imp__mng_set_bkgdstyle@8__imp__mng_set_cacheplayback@8__imp__mng_set_canvasstyle@8__imp__mng_set_dfltimggamma@12__imp__mng_set_dfltimggammaint@8__imp__mng_set_displaygamma@12__imp__mng_set_displaygammaint@8__imp__mng_set_doprogressive@8__imp__mng_set_jpeg_dctmethod@8__imp__mng_set_jpeg_maxjdat@8__imp__mng_set_jpeg_optimized@8__imp__mng_set_jpeg_progressive@8__imp__mng_set_jpeg_quality@8__imp__mng_set_jpeg_smoothing@8__imp__mng_set_maxcanvasheight@8__imp__mng_set_maxcanvassize@12__imp__mng_set_maxcanvaswidth@8__imp__mng_set_outputprofile2@12__imp__mng_set_outputprofile@8__imp__mng_set_outputsrgb@4__imp__mng_set_sectionbreaks@8__imp__mng_set_speed@8__imp__mng_set_srgb@8__imp__mng_set_srgbimplicit@4__imp__mng_set_srgbprofile2@12__imp__mng_set_srgbprofile@8__imp__mng_set_storechunks@8__imp__mng_set_suspensionmode@8__imp__mng_set_usebkgd@8__imp__mng_set_userdata@8__imp__mng_set_viewgamma@12__imp__mng_set_viewgammaint@8__imp__mng_set_zlib_level@8__imp__mng_set_zlib_maxidat@8__imp__mng_set_zlib_memlevel@8__imp__mng_set_zlib_method@8__imp__mng_set_zlib_strategy@8__imp__mng_set_zlib_windowbits@8__imp__mng_setcb_closestream@8__imp__mng_setcb_errorproc@8__imp__mng_setcb_getalphaline@8__imp__mng_setcb_getbkgdline@8__imp__mng_setcb_getcanvasline@8__imp__mng_setcb_gettickcount@8__imp__mng_setcb_memalloc@8__imp__mng_setcb_memfree@8__imp__mng_setcb_openstream@8__imp__mng_setcb_processheader@8__imp__mng_setcb_processmend@8__imp__mng_setcb_processneed@8__imp__mng_setcb_processsave@8__imp__mng_setcb_processseek@8__imp__mng_setcb_processterm@8__imp__mng_setcb_processtext@8__imp__mng_setcb_processunknown@8__imp__mng_setcb_readdata@8__imp__mng_setcb_refresh@8__imp__mng_setcb_settimer@8__imp__mng_setcb_writedata@8__imp__mng_status_creating@4__imp__mng_status_displaying@4__imp__mng_status_dynamic@4__imp__mng_status_error@4__imp__mng_status_reading@4__imp__mng_status_running@4__imp__mng_status_runningevent@4__imp__mng_status_suspendbreak@4__imp__mng_status_timerbreak@4__imp__mng_status_writing@4__imp__mng_supports_func@16__imp__mng_trapevent@16__imp__mng_updatemngheader@16__imp__mng_updatemngsimplicity@8__imp__mng_version_beta@0__imp__mng_version_dll@0__imp__mng_version_major@0__imp__mng_version_minor@0__imp__mng_version_release@0__imp__mng_version_so@0__imp__mng_version_text@0__imp__mng_write@4_jcopy_block_row@12_jcopy_sample_rows@24_jdiv_round_up@8_jinit_1pass_quantizer@4_jinit_2pass_quantizer@4_jinit_c_coef_controller@8_jinit_c_main_controller@8_jinit_c_master_control@8_jinit_c_prep_controller@8_jinit_color_converter@4_jinit_color_deconverter@4_jinit_compress_master@4_jinit_d_coef_controller@8_jinit_d_main_controller@8_jinit_d_post_controller@8_jinit_downsampler@4_jinit_forward_dct@4_jinit_huff_decoder@4_jinit_huff_encoder@4_jinit_input_controller@4_jinit_inverse_dct@4_jinit_marker_reader@4_jinit_marker_writer@4_jinit_master_decompress@4_jinit_memory_mgr@4_jinit_merged_upsampler@4_jinit_phuff_decoder@4_jinit_phuff_encoder@4_jinit_upsampler@4_jpeg_CreateCompress@12_jpeg_CreateDecompress@12_jpeg_abort@4_jpeg_abort_compress@4_jpeg_abort_decompress@4_jpeg_add_quant_table@20_jpeg_alloc_huff_table@4_jpeg_alloc_quant_table@4_jpeg_calc_output_dimensions@4_jpeg_consume_input@4_jpeg_copy_critical_parameters@8_jpeg_default_colorspace@4_jpeg_destroy@4_jpeg_destroy_compress@4_jpeg_destroy_decompress@4_jpeg_fdct_float@4_jpeg_fdct_ifast@4_jpeg_fdct_islow@4_jpeg_fill_bit_buffer@16_jpeg_finish_compress@4_jpeg_finish_decompress@4_jpeg_finish_output@4_jpeg_free_large@12_jpeg_free_small@12_jpeg_gen_optimal_table@12_jpeg_get_large@8_jpeg_get_small@8_jpeg_has_multiple_scans@4_jpeg_huff_decode@20_jpeg_idct_1x1@20_jpeg_idct_2x2@20_jpeg_idct_4x4@20_jpeg_idct_float@20_jpeg_idct_ifast@20_jpeg_idct_islow@20_jpeg_input_complete@4_jpeg_make_c_derived_tbl@16_jpeg_make_d_derived_tbl@16_jpeg_mem_available@16_jpeg_mem_init@4_jpeg_mem_term@4_jpeg_new_colormap@4_jpeg_open_backing_store@12_jpeg_quality_scaling@4_jpeg_read_coefficients@4_jpeg_read_header@8_jpeg_read_raw_data@12_jpeg_read_scanlines@12_jpeg_resync_to_restart@8_jpeg_save_markers@12_jpeg_set_colorspace@8_jpeg_set_defaults@4_jpeg_set_linear_quality@12_jpeg_set_marker_processor@12_jpeg_set_quality@12_jpeg_simple_progression@4_jpeg_start_compress@8_jpeg_start_decompress@4_jpeg_start_output@8_jpeg_std_error@4_jpeg_stdio_dest@8_jpeg_stdio_src@8_jpeg_suppress_tables@8_jpeg_write_coefficients@8_jpeg_write_m_byte@8_jpeg_write_m_header@12_jpeg_write_marker@16_jpeg_write_raw_data@12_jpeg_write_scanlines@12_jpeg_write_tables@4_jround_up@8_jzero_far@8_mng_cleanup@4_mng_copy_chunk@12_mng_create@4_mng_display@4_mng_display_freeze@4_mng_display_goframe@8_mng_display_golayer@8_mng_display_gotime@8_mng_display_reset@4_mng_display_resume@4_mng_get_alphabitdepth@4_mng_get_alphacompression@4_mng_get_alphadepth@4_mng_get_alphafilter@4_mng_get_alphainterlace@4_mng_get_bgcolor@16_mng_get_bitdepth@4_mng_get_bkgdstyle@4_mng_get_cacheplayback@4_mng_get_canvasstyle@4_mng_get_colortype@4_mng_get_compression@4_mng_get_currentframe@4_mng_get_currentlayer@4_mng_get_currentplaytime@4_mng_get_dfltimggamma@4_mng_get_dfltimggammaint@4_mng_get_displaygamma@4_mng_get_displaygammaint@4_mng_get_doprogressive@4_mng_get_filter@4_mng_get_framecount@4_mng_get_imageheight@4_mng_get_imagelevel@4_mng_get_imagetype@4_mng_get_imagewidth@4_mng_get_interlace@4_mng_get_jpeg_dctmethod@4_mng_get_jpeg_maxjdat@4_mng_get_jpeg_optimized@4_mng_get_jpeg_progressive@4_mng_get_jpeg_quality@4_mng_get_jpeg_smoothing@4_mng_get_lastbackchunk@20_mng_get_lastseekname@8_mng_get_layercount@4_mng_get_maxcanvasheight@4_mng_get_maxcanvaswidth@4_mng_get_playtime@4_mng_get_refreshpass@4_mng_get_runtime@4_mng_get_sectionbreaks@4_mng_get_sigtype@4_mng_get_simplicity@4_mng_get_speed@4_mng_get_srgb@4_mng_get_starttime@4_mng_get_storechunks@4_mng_get_suspensionmode@4_mng_get_ticks@4_mng_get_totalframes@4_mng_get_totallayers@4_mng_get_totalplaytime@4_mng_get_usebkgd@4_mng_get_userdata@4_mng_get_viewgamma@4_mng_get_viewgammaint@4_mng_get_zlib_level@4_mng_get_zlib_maxidat@4_mng_get_zlib_memlevel@4_mng_get_zlib_method@4_mng_get_zlib_strategy@4_mng_get_zlib_windowbits@4_mng_getcb_closestream@4_mng_getcb_errorproc@4_mng_getcb_getalphaline@4_mng_getcb_getbkgdline@4_mng_getcb_getcanvasline@4_mng_getcb_gettickcount@4_mng_getcb_memalloc@4_mng_getcb_memfree@4_mng_getcb_openstream@4_mng_getcb_processheader@4_mng_getcb_processneed@4_mng_getcb_processsave@4_mng_getcb_processseek@4_mng_getcb_processterm@4_mng_getcb_processtext@4_mng_getcb_processunknown@4_mng_getcb_readdata@4_mng_getcb_refresh@4_mng_getcb_settimer@4_mng_getcb_writedata@4_mng_getchunk_back@32_mng_getchunk_basi@56_mng_getchunk_bkgd@36_mng_getchunk_chrm@44_mng_getchunk_clip@36_mng_getchunk_clon@44_mng_getchunk_dbyk@24_mng_getchunk_defi@52_mng_getchunk_dhdr@36_mng_getchunk_disc@16_mng_getchunk_drop@16_mng_getchunk_endl@12_mng_getchunk_evnt@12_mng_getchunk_evnt_entry@52_mng_getchunk_expi@20_mng_getchunk_fpri@16_mng_getchunk_fram@76_mng_getchunk_gama@16_mng_getchunk_hist@16_mng_getchunk_iccp@32_mng_getchunk_idat@16_mng_getchunk_ihdr@36_mng_getchunk_itxt@48_mng_getchunk_jdat@16_mng_getchunk_jhdr@48_mng_getchunk_loop@36_mng_getchunk_magn@48_mng_getchunk_mhdr@36_mng_getchunk_move@28_mng_getchunk_need@16_mng_getchunk_ordr@12_mng_getchunk_ordr_entry@20_mng_getchunk_past@28_mng_getchunk_past_src@56_mng_getchunk_phyg@24_mng_getchunk_phys@24_mng_getchunk_plte@16_mng_getchunk_pplt@12_mng_getchunk_pplt_entry@32_mng_getchunk_prom@20_mng_getchunk_save@20_mng_getchunk_save_entry@40_mng_getchunk_sbit@20_mng_getchunk_seek@16_mng_getchunk_show@24_mng_getchunk_splt@32_mng_getchunk_srgb@16_mng_getchunk_term@24_mng_getchunk_text@24_mng_getchunk_time@32_mng_getchunk_trns@52_mng_getchunk_unknown@20_mng_getchunk_ztxt@28_mng_getimgdata_chunk@16_mng_getimgdata_chunkseq@16_mng_getimgdata_seq@16_mng_getlasterror@28_mng_initialize@16_mng_iterate_chunks@12_mng_putchunk_back@28_mng_putchunk_basi@52_mng_putchunk_bkgd@32_mng_putchunk_chrm@40_mng_putchunk_clip@32_mng_putchunk_clon@40_mng_putchunk_dbyk@20_mng_putchunk_defi@48_mng_putchunk_dhdr@32_mng_putchunk_disc@12_mng_putchunk_drop@12_mng_putchunk_endl@8_mng_putchunk_evnt@8_mng_putchunk_evnt_entry@48_mng_putchunk_expi@16_mng_putchunk_fpri@12_mng_putchunk_fram@72_mng_putchunk_gama@12_mng_putchunk_hist@12_mng_putchunk_iccp@28_mng_putchunk_idat@12_mng_putchunk_iend@4_mng_putchunk_ihdr@32_mng_putchunk_ipng@4_mng_putchunk_itxt@44_mng_putchunk_jdat@12_mng_putchunk_jhdr@44_mng_putchunk_jsep@4_mng_putchunk_loop@32_mng_putchunk_magn@44_mng_putchunk_mend@4_mng_putchunk_mhdr@32_mng_putchunk_move@24_mng_putchunk_need@12_mng_putchunk_ordr@8_mng_putchunk_ordr_entry@16_mng_putchunk_past@24_mng_putchunk_past_src@52_mng_putchunk_phyg@20_mng_putchunk_phys@20_mng_putchunk_plte@12_mng_putchunk_pplt@8_mng_putchunk_pplt_entry@28_mng_putchunk_prom@16_mng_putchunk_save@16_mng_putchunk_save_entry@36_mng_putchunk_sbit@16_mng_putchunk_seek@12_mng_putchunk_show@20_mng_putchunk_splt@28_mng_putchunk_srgb@12_mng_putchunk_term@20_mng_putchunk_text@20_mng_putchunk_time@28_mng_putchunk_trns@48_mng_putchunk_unknown@16_mng_putchunk_ztxt@24_mng_putimgdata_ihdr@40_mng_putimgdata_jhdr@52_mng_read@4_mng_read_resume@4_mng_readdisplay@4_mng_reset@4_mng_set_bgcolor@16_mng_set_bkgdstyle@8_mng_set_cacheplayback@8_mng_set_canvasstyle@8_mng_set_dfltimggamma@12_mng_set_dfltimggammaint@8_mng_set_displaygamma@12_mng_set_displaygammaint@8_mng_set_doprogressive@8_mng_set_jpeg_dctmethod@8_mng_set_jpeg_maxjdat@8_mng_set_jpeg_optimized@8_mng_set_jpeg_progressive@8_mng_set_jpeg_quality@8_mng_set_jpeg_smoothing@8_mng_set_maxcanvasheight@8_mng_set_maxcanvassize@12_mng_set_maxcanvaswidth@8_mng_set_outputprofile2@12_mng_set_outputprofile@8_mng_set_outputsrgb@4_mng_set_sectionbreaks@8_mng_set_speed@8_mng_set_srgb@8_mng_set_srgbimplicit@4_mng_set_srgbprofile2@12_mng_set_srgbprofile@8_mng_set_storechunks@8_mng_set_suspensionmode@8_mng_set_usebkgd@8_mng_set_userdata@8_mng_set_viewgamma@12_mng_set_viewgammaint@8_mng_set_zlib_level@8_mng_set_zlib_maxidat@8_mng_set_zlib_memlevel@8_mng_set_zlib_method@8_mng_set_zlib_strategy@8_mng_set_zlib_windowbits@8_mng_setcb_closestream@8_mng_setcb_errorproc@8_mng_setcb_getalphaline@8_mng_setcb_getbkgdline@8_mng_setcb_getcanvasline@8_mng_setcb_gettickcount@8_mng_setcb_memalloc@8_mng_setcb_memfree@8_mng_setcb_openstream@8_mng_setcb_processheader@8_mng_setcb_processmend@8_mng_setcb_processneed@8_mng_setcb_processsave@8_mng_setcb_processseek@8_mng_setcb_processterm@8_mng_setcb_processtext@8_mng_setcb_processunknown@8_mng_setcb_readdata@8_mng_setcb_refresh@8_mng_setcb_settimer@8_mng_setcb_writedata@8_mng_status_creating@4_mng_status_displaying@4_mng_status_dynamic@4_mng_status_error@4_mng_status_reading@4_mng_status_running@4_mng_status_runningevent@4_mng_status_suspendbreak@4_mng_status_timerbreak@4_mng_status_writing@4_mng_supports_func@16_mng_trapevent@16_mng_updatemngheader@16_mng_updatemngsimplicity@8_mng_version_beta@0_mng_version_dll@0_mng_version_major@0_mng_version_minor@0_mng_version_release@0_mng_version_so@0_mng_version_text@0_mng_write@4libmng_NULL_THUNK_DATAlibmng.dll/ 1041772546 0 715 ` L0>ëà .debug$SAl@B.idata$2­Á@0À.idata$6 ßÁ@ À libmng.dll(ÿ Microsoft (R) LINK libmng.dll@comp.idÿ ÿÿ.idata$2@Àh.idata$6.idata$4@Àh.idata$5@Àh8P__IMPORT_DESCRIPTOR_libmng__NULL_IMPORT_DESCRIPTORlibmng_NULL_THUNK_DATA libmng.dll/ 1041772546 0 250 ` L0>¹.debug$SAd@B.idata$3¥@0À libmng.dll(ÿ Microsoft (R) LINK@comp.idÿ ÿÿ__NULL_IMPORT_DESCRIPTORlibmng.dll/ 1041772546 0 277 ` L0>Õ.debug$SAŒ@B.idata$5Í@0À.idata$4Ñ@0À libmng.dll(ÿ Microsoft (R) LINK@comp.idÿ ÿÿlibmng_NULL_THUNK_DATA libmng.dll/ 1041772546 0 51 ` ÿÿL0> _jcopy_block_row@12libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _jcopy_sample_rows@24libmng.dll libmng.dll/ 1041772546 0 48 ` ÿÿL0> _jdiv_round_up@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$ _jinit_1pass_quantizer@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$ _jinit_2pass_quantizer@4libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>& _jinit_c_coef_controller@8libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>& _jinit_c_main_controller@8libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>% _jinit_c_master_control@8libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>& _jinit_c_prep_controller@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$ _jinit_color_converter@4libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>& _jinit_color_deconverter@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$ _jinit_compress_master@4libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>& _jinit_d_coef_controller@8libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&! _jinit_d_main_controller@8libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&" _jinit_d_post_controller@8libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> # _jinit_downsampler@4libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> $ _jinit_forward_dct@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!% _jinit_huff_decoder@4libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!& _jinit_huff_encoder@4libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%' _jinit_input_controller@4libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> ( _jinit_inverse_dct@4libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>") _jinit_marker_reader@4libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"* _jinit_marker_writer@4libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&+ _jinit_master_decompress@4libmng.dlllibmng.dll/ 1041772546 0 51 ` ÿÿL0>, _jinit_memory_mgr@4libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%- _jinit_merged_upsampler@4libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>". _jinit_phuff_decoder@4libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"/ _jinit_phuff_encoder@4libmng.dlllibmng.dll/ 1041772546 0 50 ` ÿÿL0>0 _jinit_upsampler@4libmng.dlllibmng.dll/ 1041772546 0 55 ` ÿÿL0>#1 _jpeg_CreateCompress@12libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%2 _jpeg_CreateDecompress@12libmng.dll libmng.dll/ 1041772546 0 45 ` ÿÿL0>3 _jpeg_abort@4libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>"4 _jpeg_abort_compress@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$5 _jpeg_abort_decompress@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$6 _jpeg_add_quant_table@20libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$7 _jpeg_alloc_huff_table@4libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%8 _jpeg_alloc_quant_table@4libmng.dll libmng.dll/ 1041772546 0 62 ` ÿÿL0>*9 _jpeg_calc_output_dimensions@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!: _jpeg_consume_input@4libmng.dll libmng.dll/ 1041772546 0 64 ` ÿÿL0>,; _jpeg_copy_critical_parameters@8libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&< _jpeg_default_colorspace@4libmng.dlllibmng.dll/ 1041772546 0 47 ` ÿÿL0>= _jpeg_destroy@4libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$> _jpeg_destroy_compress@4libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&? _jpeg_destroy_decompress@4libmng.dlllibmng.dll/ 1041772546 0 50 ` ÿÿL0>@ _jpeg_fdct_float@4libmng.dlllibmng.dll/ 1041772546 0 50 ` ÿÿL0>A _jpeg_fdct_ifast@4libmng.dlllibmng.dll/ 1041772546 0 50 ` ÿÿL0>B _jpeg_fdct_islow@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$C _jpeg_fill_bit_buffer@16libmng.dlllibmng.dll/ 1041772546 0 55 ` ÿÿL0>#D _jpeg_finish_compress@4libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%E _jpeg_finish_decompress@4libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!F _jpeg_finish_output@4libmng.dll libmng.dll/ 1041772546 0 51 ` ÿÿL0>G _jpeg_free_large@12libmng.dll libmng.dll/ 1041772546 0 51 ` ÿÿL0>H _jpeg_free_small@12libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>&I _jpeg_gen_optimal_table@12libmng.dlllibmng.dll/ 1041772546 0 49 ` ÿÿL0>J _jpeg_get_large@8libmng.dll libmng.dll/ 1041772546 0 49 ` ÿÿL0>K _jpeg_get_small@8libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>&L _jpeg_has_multiple_scans@4libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> M _jpeg_huff_decode@20libmng.dlllibmng.dll/ 1041772546 0 49 ` ÿÿL0>_jpeg_idct_1x1@20libmng.dll libmng.dll/ 1041772546 0 49 ` ÿÿL0>_jpeg_idct_2x2@20libmng.dll libmng.dll/ 1041772546 0 49 ` ÿÿL0>_jpeg_idct_4x4@20libmng.dll libmng.dll/ 1041772546 0 51 ` ÿÿL0>_jpeg_idct_float@20libmng.dll libmng.dll/ 1041772546 0 51 ` ÿÿL0>_jpeg_idct_ifast@20libmng.dll libmng.dll/ 1041772546 0 51 ` ÿÿL0>_jpeg_idct_islow@20libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>"_jpeg_input_complete@4libmng.dlllibmng.dll/ 1041772546 0 59 ` ÿÿL0>'_jpeg_make_c_derived_tbl@16libmng.dll libmng.dll/ 1041772546 0 59 ` ÿÿL0>'_jpeg_make_d_derived_tbl@16libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>" _jpeg_mem_available@16libmng.dlllibmng.dll/ 1041772546 0 48 ` ÿÿL0> _jpeg_mem_init@4libmng.dlllibmng.dll/ 1041772546 0 48 ` ÿÿL0> _jpeg_mem_term@4libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> _jpeg_new_colormap@4libmng.dlllibmng.dll/ 1041772546 0 59 ` ÿÿL0>' _jpeg_open_backing_store@12libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#_jpeg_quality_scaling@4libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%_jpeg_read_coefficients@4libmng.dll libmng.dll/ 1041772546 0 51 ` ÿÿL0>_jpeg_read_header@8libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>"_jpeg_read_raw_data@12libmng.dlllibmng.dll/ 1041772546 0 55 ` ÿÿL0>#_jpeg_read_scanlines@12libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%_jpeg_resync_to_restart@8libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!N _jpeg_save_markers@12libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>"O _jpeg_set_colorspace@8libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> P _jpeg_set_defaults@4libmng.dlllibmng.dll/ 1041772546 0 59 ` ÿÿL0>'Q _jpeg_set_linear_quality@12libmng.dll libmng.dll/ 1041772546 0 61 ` ÿÿL0>)R _jpeg_set_marker_processor@12libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> S _jpeg_set_quality@12libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&T _jpeg_simple_progression@4libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"U _jpeg_start_compress@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$V _jpeg_start_decompress@4libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> W _jpeg_start_output@8libmng.dlllibmng.dll/ 1041772546 0 49 ` ÿÿL0>X _jpeg_std_error@4libmng.dll libmng.dll/ 1041772546 0 50 ` ÿÿL0>Y _jpeg_stdio_dest@8libmng.dlllibmng.dll/ 1041772546 0 49 ` ÿÿL0>Z _jpeg_stdio_src@8libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#[ _jpeg_suppress_tables@8libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>&\ _jpeg_write_coefficients@8libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> ] _jpeg_write_m_byte@8libmng.dlllibmng.dll/ 1041772546 0 55 ` ÿÿL0>#^ _jpeg_write_m_header@12libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!_ _jpeg_write_marker@16libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#` _jpeg_write_raw_data@12libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$a _jpeg_write_scanlines@12libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> b _jpeg_write_tables@4libmng.dlllibmng.dll/ 1041772546 0 44 ` ÿÿL0>c _jround_up@8libmng.dlllibmng.dll/ 1041772546 0 44 ` ÿÿL0>d _jzero_far@8libmng.dlllibmng.dll/ 1041772546 0 46 ` ÿÿL0>e _mng_cleanup@4libmng.dlllibmng.dll/ 1041772546 0 50 ` ÿÿL0>f _mng_copy_chunk@12libmng.dlllibmng.dll/ 1041772546 0 45 ` ÿÿL0>g _mng_create@4libmng.dll libmng.dll/ 1041772546 0 46 ` ÿÿL0>h _mng_display@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!i _mng_display_freeze@4libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>"j _mng_display_goframe@8libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"k _mng_display_golayer@8libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!l _mng_display_gotime@8libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> m _mng_display_reset@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!n _mng_display_resume@4libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$o _mng_get_alphabitdepth@4libmng.dlllibmng.dll/ 1041772546 0 59 ` ÿÿL0>'p _mng_get_alphacompression@4libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!q _mng_get_alphadepth@4libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>"r _mng_get_alphafilter@4libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%s _mng_get_alphainterlace@4libmng.dll libmng.dll/ 1041772546 0 51 ` ÿÿL0>t _mng_get_bgcolor@16libmng.dll libmng.dll/ 1041772546 0 51 ` ÿÿL0>u _mng_get_bitdepth@4libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> v _mng_get_bkgdstyle@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$w _mng_get_cacheplayback@4libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"x _mng_get_canvasstyle@4libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> y _mng_get_colortype@4libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"z _mng_get_compression@4libmng.dlllibmng.dll/ 1041772546 0 55 ` ÿÿL0>#{ _mng_get_currentframe@4libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#| _mng_get_currentlayer@4libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>&} _mng_get_currentplaytime@4libmng.dlllibmng.dll/ 1041772546 0 55 ` ÿÿL0>#~ _mng_get_dfltimggamma@4libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>& _mng_get_dfltimggammaint@4libmng.dlllibmng.dll/ 1041772546 0 55 ` ÿÿL0>#€ _mng_get_displaygamma@4libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>& _mng_get_displaygammaint@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$‚ _mng_get_doprogressive@4libmng.dlllibmng.dll/ 1041772546 0 49 ` ÿÿL0>ƒ _mng_get_filter@4libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!„ _mng_get_framecount@4libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>"… _mng_get_imageheight@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!† _mng_get_imagelevel@4libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> ‡ _mng_get_imagetype@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!ˆ _mng_get_imagewidth@4libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> ‰ _mng_get_interlace@4libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%Š _mng_get_jpeg_dctmethod@4libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#‹ _mng_get_jpeg_maxjdat@4libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%Œ _mng_get_jpeg_optimized@4libmng.dll libmng.dll/ 1041772546 0 59 ` ÿÿL0>' _mng_get_jpeg_progressive@4libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#Ž _mng_get_jpeg_quality@4libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>% _mng_get_jpeg_smoothing@4libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>% _mng_get_lastbackchunk@20libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#‘ _mng_get_lastseekname@8libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!’ _mng_get_layercount@4libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>&“ _mng_get_maxcanvasheight@4libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%” _mng_get_maxcanvaswidth@4libmng.dll libmng.dll/ 1041772546 0 51 ` ÿÿL0>• _mng_get_playtime@4libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>"– _mng_get_refreshpass@4libmng.dlllibmng.dll/ 1041772546 0 50 ` ÿÿL0>— _mng_get_runtime@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$˜ _mng_get_sectionbreaks@4libmng.dlllibmng.dll/ 1041772546 0 50 ` ÿÿL0>™ _mng_get_sigtype@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!š _mng_get_simplicity@4libmng.dll libmng.dll/ 1041772546 0 48 ` ÿÿL0>› _mng_get_speed@4libmng.dlllibmng.dll/ 1041772546 0 47 ` ÿÿL0>œ _mng_get_srgb@4libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> _mng_get_starttime@4libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"ž _mng_get_storechunks@4libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%Ÿ _mng_get_suspensionmode@4libmng.dll libmng.dll/ 1041772546 0 48 ` ÿÿL0>  _mng_get_ticks@4libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"¡ _mng_get_totalframes@4libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"¢ _mng_get_totallayers@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$£ _mng_get_totalplaytime@4libmng.dlllibmng.dll/ 1041772546 0 50 ` ÿÿL0>¤ _mng_get_usebkgd@4libmng.dlllibmng.dll/ 1041772546 0 51 ` ÿÿL0>¥ _mng_get_userdata@4libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> ¦ _mng_get_viewgamma@4libmng.dlllibmng.dll/ 1041772546 0 55 ` ÿÿL0>#§ _mng_get_viewgammaint@4libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!¨ _mng_get_zlib_level@4libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#© _mng_get_zlib_maxidat@4libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$ª _mng_get_zlib_memlevel@4libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"« _mng_get_zlib_method@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$¬ _mng_get_zlib_strategy@4libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&­ _mng_get_zlib_windowbits@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$® _mng_getcb_closestream@4libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"¯ _mng_getcb_errorproc@4libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%° _mng_getcb_getalphaline@4libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$± _mng_getcb_getbkgdline@4libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&² _mng_getcb_getcanvasline@4libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%³ _mng_getcb_gettickcount@4libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!´ _mng_getcb_memalloc@4libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> µ _mng_getcb_memfree@4libmng.dlllibmng.dll/ 1041772546 0 55 ` ÿÿL0>#¶ _mng_getcb_openstream@4libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>&· _mng_getcb_processheader@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$¸ _mng_getcb_processneed@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$¹ _mng_getcb_processsave@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$º _mng_getcb_processseek@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$» _mng_getcb_processterm@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$¼ _mng_getcb_processtext@4libmng.dlllibmng.dll/ 1041772546 0 59 ` ÿÿL0>'½ _mng_getcb_processunknown@4libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!¾ _mng_getcb_readdata@4libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> ¿ _mng_getcb_refresh@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!À _mng_getcb_settimer@4libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>"Á _mng_getcb_writedata@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_getchunk_back@32libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!à _mng_getchunk_basi@56libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ä _mng_getchunk_bkgd@36libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Å _mng_getchunk_chrm@44libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Æ _mng_getchunk_clip@36libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ç _mng_getchunk_clon@44libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!È _mng_getchunk_dbyk@24libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!É _mng_getchunk_defi@52libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ê _mng_getchunk_dhdr@36libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ë _mng_getchunk_disc@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ì _mng_getchunk_drop@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Í _mng_getchunk_endl@12libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Î _mng_getchunk_evnt@12libmng.dll libmng.dll/ 1041772546 0 59 ` ÿÿL0>'Ï _mng_getchunk_evnt_entry@52libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ð _mng_getchunk_expi@20libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ñ _mng_getchunk_fpri@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ò _mng_getchunk_fram@76libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ó _mng_getchunk_gama@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ô _mng_getchunk_hist@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Õ _mng_getchunk_iccp@32libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ö _mng_getchunk_idat@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!× _mng_getchunk_ihdr@36libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ø _mng_getchunk_itxt@48libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ù _mng_getchunk_jdat@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ú _mng_getchunk_jhdr@48libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Û _mng_getchunk_loop@36libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ü _mng_getchunk_magn@48libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Ý _mng_getchunk_mhdr@36libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!Þ _mng_getchunk_move@28libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ß _mng_getchunk_need@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!à _mng_getchunk_ordr@12libmng.dll libmng.dll/ 1041772546 0 59 ` ÿÿL0>'á _mng_getchunk_ordr_entry@20libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!â _mng_getchunk_past@28libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%ã _mng_getchunk_past_src@56libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ä _mng_getchunk_phyg@24libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!å _mng_getchunk_phys@24libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!æ _mng_getchunk_plte@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ç _mng_getchunk_pplt@12libmng.dll libmng.dll/ 1041772546 0 59 ` ÿÿL0>'è _mng_getchunk_pplt_entry@32libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!é _mng_getchunk_prom@20libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ê _mng_getchunk_save@20libmng.dll libmng.dll/ 1041772546 0 59 ` ÿÿL0>'ë _mng_getchunk_save_entry@40libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ì _mng_getchunk_sbit@20libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!í _mng_getchunk_seek@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!î _mng_getchunk_show@24libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ï _mng_getchunk_splt@32libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ð _mng_getchunk_srgb@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ñ _mng_getchunk_term@24libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ò _mng_getchunk_text@24libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ó _mng_getchunk_time@32libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ô _mng_getchunk_trns@52libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$õ _mng_getchunk_unknown@20libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!ö _mng_getchunk_ztxt@28libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$÷ _mng_getimgdata_chunk@16libmng.dlllibmng.dll/ 1041772546 0 59 ` ÿÿL0>'ø _mng_getimgdata_chunkseq@16libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>"ù _mng_getimgdata_seq@16libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> ú _mng_getlasterror@28libmng.dlllibmng.dll/ 1041772546 0 50 ` ÿÿL0>û _mng_initialize@16libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"ü _mng_iterate_chunks@12libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!ý _mng_putchunk_back@28libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!þ _mng_putchunk_basi@52libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!ÿ _mng_putchunk_bkgd@32libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_chrm@40libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_clip@32libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_clon@40libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_dbyk@20libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_defi@48libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_dhdr@32libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_disc@12libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_drop@12libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0>  _mng_putchunk_endl@8libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0>  _mng_putchunk_evnt@8libmng.dlllibmng.dll/ 1041772546 0 59 ` ÿÿL0>'  _mng_putchunk_evnt_entry@48libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!  _mng_putchunk_expi@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!  _mng_putchunk_fpri@12libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!  _mng_putchunk_fram@72libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_gama@12libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_hist@12libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_iccp@28libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_idat@12libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0>  _mng_putchunk_iend@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_ihdr@32libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0>  _mng_putchunk_ipng@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_itxt@44libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_jdat@12libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_jhdr@44libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0>  _mng_putchunk_jsep@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_loop@32libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_magn@44libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0>  _mng_putchunk_mend@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_mhdr@32libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_move@24libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_putchunk_need@12libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0>  _mng_putchunk_ordr@8libmng.dlllibmng.dll/ 1041772546 0 59 ` ÿÿL0>'  _mng_putchunk_ordr_entry@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!! _mng_putchunk_past@24libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%" _mng_putchunk_past_src@52libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!# _mng_putchunk_phyg@20libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!$ _mng_putchunk_phys@20libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!% _mng_putchunk_plte@12libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> & _mng_putchunk_pplt@8libmng.dlllibmng.dll/ 1041772546 0 59 ` ÿÿL0>'' _mng_putchunk_pplt_entry@28libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!( _mng_putchunk_prom@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!) _mng_putchunk_save@16libmng.dll libmng.dll/ 1041772546 0 59 ` ÿÿL0>'* _mng_putchunk_save_entry@36libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!+ _mng_putchunk_sbit@16libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!, _mng_putchunk_seek@12libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!- _mng_putchunk_show@20libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!. _mng_putchunk_splt@28libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!/ _mng_putchunk_srgb@12libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!0 _mng_putchunk_term@20libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!1 _mng_putchunk_text@20libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!2 _mng_putchunk_time@28libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!3 _mng_putchunk_trns@48libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$4 _mng_putchunk_unknown@16libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!5 _mng_putchunk_ztxt@24libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#6 _mng_putimgdata_ihdr@40libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#7 _mng_putimgdata_jhdr@52libmng.dll libmng.dll/ 1041772546 0 43 ` ÿÿL0>8 _mng_read@4libmng.dll libmng.dll/ 1041772546 0 50 ` ÿÿL0>9 _mng_read_resume@4libmng.dlllibmng.dll/ 1041772546 0 50 ` ÿÿL0>: _mng_readdisplay@4libmng.dlllibmng.dll/ 1041772546 0 44 ` ÿÿL0>; _mng_reset@4libmng.dlllibmng.dll/ 1041772546 0 51 ` ÿÿL0>< _mng_set_bgcolor@16libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> = _mng_set_bkgdstyle@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$> _mng_set_cacheplayback@8libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"? _mng_set_canvasstyle@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$@ _mng_set_dfltimggamma@12libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&A _mng_set_dfltimggammaint@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$B _mng_set_displaygamma@12libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&C _mng_set_displaygammaint@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$D _mng_set_doprogressive@8libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%E _mng_set_jpeg_dctmethod@8libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#F _mng_set_jpeg_maxjdat@8libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%G _mng_set_jpeg_optimized@8libmng.dll libmng.dll/ 1041772546 0 59 ` ÿÿL0>'H _mng_set_jpeg_progressive@8libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#I _mng_set_jpeg_quality@8libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%J _mng_set_jpeg_smoothing@8libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>&K _mng_set_maxcanvasheight@8libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%L _mng_set_maxcanvassize@12libmng.dll libmng.dll/ 1041772546 0 57 ` ÿÿL0>%M _mng_set_maxcanvaswidth@8libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>&O _mng_set_outputprofile2@12libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$N _mng_set_outputprofile@8libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!P _mng_set_outputsrgb@4libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$Q _mng_set_sectionbreaks@8libmng.dlllibmng.dll/ 1041772546 0 48 ` ÿÿL0>R _mng_set_speed@8libmng.dlllibmng.dll/ 1041772546 0 47 ` ÿÿL0>S _mng_set_srgb@8libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#T _mng_set_srgbimplicit@4libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$V _mng_set_srgbprofile2@12libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"U _mng_set_srgbprofile@8libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"W _mng_set_storechunks@8libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%X _mng_set_suspensionmode@8libmng.dll libmng.dll/ 1041772546 0 50 ` ÿÿL0>Y _mng_set_usebkgd@8libmng.dlllibmng.dll/ 1041772546 0 51 ` ÿÿL0>Z _mng_set_userdata@8libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>![ _mng_set_viewgamma@12libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#\ _mng_set_viewgammaint@8libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!] _mng_set_zlib_level@8libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#^ _mng_set_zlib_maxidat@8libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$_ _mng_set_zlib_memlevel@8libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"` _mng_set_zlib_method@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$a _mng_set_zlib_strategy@8libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&b _mng_set_zlib_windowbits@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$c _mng_setcb_closestream@8libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"d _mng_setcb_errorproc@8libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%e _mng_setcb_getalphaline@8libmng.dll libmng.dll/ 1041772546 0 56 ` ÿÿL0>$f _mng_setcb_getbkgdline@8libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>&g _mng_setcb_getcanvasline@8libmng.dlllibmng.dll/ 1041772546 0 57 ` ÿÿL0>%h _mng_setcb_gettickcount@8libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!i _mng_setcb_memalloc@8libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> j _mng_setcb_memfree@8libmng.dlllibmng.dll/ 1041772546 0 55 ` ÿÿL0>#k _mng_setcb_openstream@8libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>&l _mng_setcb_processheader@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$m _mng_setcb_processmend@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$n _mng_setcb_processneed@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$o _mng_setcb_processsave@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$p _mng_setcb_processseek@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$q _mng_setcb_processterm@8libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$r _mng_setcb_processtext@8libmng.dlllibmng.dll/ 1041772546 0 59 ` ÿÿL0>'s _mng_setcb_processunknown@8libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!t _mng_setcb_readdata@8libmng.dll libmng.dll/ 1041772546 0 52 ` ÿÿL0> u _mng_setcb_refresh@8libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!v _mng_setcb_settimer@8libmng.dll libmng.dll/ 1041772546 0 54 ` ÿÿL0>"w _mng_setcb_writedata@8libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"x _mng_status_creating@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$y _mng_status_displaying@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>!z _mng_status_dynamic@4libmng.dll libmng.dll/ 1041772546 0 51 ` ÿÿL0>{ _mng_status_error@4libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!| _mng_status_reading@4libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!} _mng_status_running@4libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>&~ _mng_status_runningevent@4libmng.dlllibmng.dll/ 1041772546 0 58 ` ÿÿL0>& _mng_status_suspendbreak@4libmng.dlllibmng.dll/ 1041772546 0 56 ` ÿÿL0>$€ _mng_status_timerbreak@4libmng.dlllibmng.dll/ 1041772546 0 53 ` ÿÿL0>! _mng_status_writing@4libmng.dll libmng.dll/ 1041772546 0 53 ` ÿÿL0>!‚ _mng_supports_func@16libmng.dll libmng.dll/ 1041772546 0 49 ` ÿÿL0>ƒ _mng_trapevent@16libmng.dll libmng.dll/ 1041772546 0 55 ` ÿÿL0>#„ _mng_updatemngheader@16libmng.dll libmng.dll/ 1041772546 0 58 ` ÿÿL0>&… _mng_updatemngsimplicity@8libmng.dlllibmng.dll/ 1041772546 0 51 ` ÿÿL0>† _mng_version_beta@0libmng.dll libmng.dll/ 1041772546 0 50 ` ÿÿL0>‡ _mng_version_dll@0libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> ˆ _mng_version_major@0libmng.dlllibmng.dll/ 1041772546 0 52 ` ÿÿL0> ‰ _mng_version_minor@0libmng.dlllibmng.dll/ 1041772546 0 54 ` ÿÿL0>"Š _mng_version_release@0libmng.dlllibmng.dll/ 1041772546 0 49 ` ÿÿL0>‹ _mng_version_so@0libmng.dll libmng.dll/ 1041772546 0 51 ` ÿÿL0>Œ _mng_version_text@0libmng.dll libmng.dll/ 1041772546 0 44 ` ÿÿL0> _mng_write@4libmng.dlllibmng-2.0.2/contrib/msvc/libmng-msvc.lib/README.txt0000644000000000000000000000260512005307152020550 0ustar rootroot.lib & .def files to link an MSVC project against the standard DLL build with BCB. Please note that this version is created for libmng 1.0.5, but should work with 1.0.6 as there were no API changes between the two versions. These files are courtesy of Alex Volkov. Here's what he had to say about it: ------------------------------------------------------------------------------- That reminds me, I remade the MSVC libmng.lib for linking to the bcb-generated dll. The .lib and its corresponding .def are attached. The .def I generated by simply dumping all the exports from the bcb .dll and later added the .def to the contrib/msvc/win32dll project. The .def is necessary for MSVC to name the imports correctly, otherwise it produces mangled symbol names. What is ironic is that it is not necessary to completely build the dll with msvc -- you need just the resulting .lib -- but you still have to setup the entire project for building the dll because of the stdcall calling convention. The resulting .lib is not perfect -- the hints are all off, of course -- but it does the job. In any case, the win32 exes linked with the attached .lib in fact work with bcb-generated dll just fine. I know the building process can be somehow automated, but I have not had the time to work on that, and for me it was a one-shot deal. Alex. ------------------------------------------------------------------------------- libmng-2.0.2/contrib/msvc/libmng-msvc.lib/libmng.def0000644000000000000000000001716012005307152021004 0ustar rootrootLIBRARY libmng EXPORTS jcopy_block_row jcopy_sample_rows jdiv_round_up jinit_1pass_quantizer jinit_2pass_quantizer jinit_c_coef_controller jinit_c_main_controller jinit_c_master_control jinit_c_prep_controller jinit_color_converter jinit_color_deconverter jinit_compress_master jinit_d_coef_controller jinit_d_main_controller jinit_d_post_controller jinit_downsampler jinit_forward_dct jinit_huff_decoder jinit_huff_encoder jinit_input_controller jinit_inverse_dct jinit_marker_reader jinit_marker_writer jinit_master_decompress jinit_memory_mgr jinit_merged_upsampler jinit_phuff_decoder jinit_phuff_encoder jinit_upsampler jpeg_CreateCompress jpeg_CreateDecompress jpeg_abort jpeg_abort_compress jpeg_abort_decompress jpeg_add_quant_table jpeg_alloc_huff_table jpeg_alloc_quant_table jpeg_calc_output_dimensions jpeg_consume_input jpeg_copy_critical_parameters jpeg_default_colorspace jpeg_destroy jpeg_destroy_compress jpeg_destroy_decompress jpeg_fdct_float jpeg_fdct_ifast jpeg_fdct_islow jpeg_fill_bit_buffer jpeg_finish_compress jpeg_finish_decompress jpeg_finish_output jpeg_free_large jpeg_free_small jpeg_gen_optimal_table jpeg_get_large jpeg_get_small jpeg_has_multiple_scans jpeg_huff_decode jpeg_save_markers jpeg_set_colorspace jpeg_set_defaults jpeg_set_linear_quality jpeg_set_marker_processor jpeg_set_quality jpeg_simple_progression jpeg_start_compress jpeg_start_decompress jpeg_start_output jpeg_std_error jpeg_stdio_dest jpeg_stdio_src jpeg_suppress_tables jpeg_write_coefficients jpeg_write_m_byte jpeg_write_m_header jpeg_write_marker jpeg_write_raw_data jpeg_write_scanlines jpeg_write_tables jround_up jzero_far mng_cleanup mng_copy_chunk mng_create mng_display mng_display_freeze mng_display_goframe mng_display_golayer mng_display_gotime mng_display_reset mng_display_resume mng_get_alphabitdepth mng_get_alphacompression mng_get_alphadepth mng_get_alphafilter mng_get_alphainterlace mng_get_bgcolor mng_get_bitdepth mng_get_bkgdstyle mng_get_cacheplayback mng_get_canvasstyle mng_get_colortype mng_get_compression mng_get_currentframe mng_get_currentlayer mng_get_currentplaytime mng_get_dfltimggamma mng_get_dfltimggammaint mng_get_displaygamma mng_get_displaygammaint mng_get_doprogressive mng_get_filter mng_get_framecount mng_get_imageheight mng_get_imagelevel mng_get_imagetype mng_get_imagewidth mng_get_interlace mng_get_jpeg_dctmethod mng_get_jpeg_maxjdat mng_get_jpeg_optimized mng_get_jpeg_progressive mng_get_jpeg_quality mng_get_jpeg_smoothing mng_get_lastbackchunk mng_get_lastseekname mng_get_layercount mng_get_maxcanvasheight mng_get_maxcanvaswidth mng_get_playtime mng_get_refreshpass mng_get_runtime mng_get_sectionbreaks mng_get_sigtype mng_get_simplicity mng_get_speed mng_get_srgb mng_get_starttime mng_get_storechunks mng_get_suspensionmode mng_get_ticks mng_get_totalframes mng_get_totallayers mng_get_totalplaytime mng_get_usebkgd mng_get_userdata mng_get_viewgamma mng_get_viewgammaint mng_get_zlib_level mng_get_zlib_maxidat mng_get_zlib_memlevel mng_get_zlib_method mng_get_zlib_strategy mng_get_zlib_windowbits mng_getcb_closestream mng_getcb_errorproc mng_getcb_getalphaline mng_getcb_getbkgdline mng_getcb_getcanvasline mng_getcb_gettickcount mng_getcb_memalloc mng_getcb_memfree mng_getcb_openstream mng_getcb_processheader mng_getcb_processneed mng_getcb_processsave mng_getcb_processseek mng_getcb_processterm mng_getcb_processtext mng_getcb_processunknown mng_getcb_readdata mng_getcb_refresh mng_getcb_settimer mng_getcb_writedata mng_getchunk_back mng_getchunk_basi mng_getchunk_bkgd mng_getchunk_chrm mng_getchunk_clip mng_getchunk_clon mng_getchunk_dbyk mng_getchunk_defi mng_getchunk_dhdr mng_getchunk_disc mng_getchunk_drop mng_getchunk_endl mng_getchunk_evnt mng_getchunk_evnt_entry mng_getchunk_expi mng_getchunk_fpri mng_getchunk_fram mng_getchunk_gama mng_getchunk_hist mng_getchunk_iccp mng_getchunk_idat mng_getchunk_ihdr mng_getchunk_itxt mng_getchunk_jdat mng_getchunk_jhdr mng_getchunk_loop mng_getchunk_magn mng_getchunk_mhdr mng_getchunk_move mng_getchunk_need mng_getchunk_ordr mng_getchunk_ordr_entry mng_getchunk_past mng_getchunk_past_src mng_getchunk_phyg mng_getchunk_phys mng_getchunk_plte mng_getchunk_pplt mng_getchunk_pplt_entry mng_getchunk_prom mng_getchunk_save mng_getchunk_save_entry mng_getchunk_sbit mng_getchunk_seek mng_getchunk_show mng_getchunk_splt mng_getchunk_srgb mng_getchunk_term mng_getchunk_text mng_getchunk_time mng_getchunk_trns mng_getchunk_unknown mng_getchunk_ztxt mng_getimgdata_chunk mng_getimgdata_chunkseq mng_getimgdata_seq mng_getlasterror mng_initialize mng_iterate_chunks mng_putchunk_back mng_putchunk_basi mng_putchunk_bkgd mng_putchunk_chrm mng_putchunk_clip mng_putchunk_clon mng_putchunk_dbyk mng_putchunk_defi mng_putchunk_dhdr mng_putchunk_disc mng_putchunk_drop mng_putchunk_endl mng_putchunk_evnt mng_putchunk_evnt_entry mng_putchunk_expi mng_putchunk_fpri mng_putchunk_fram mng_putchunk_gama mng_putchunk_hist mng_putchunk_iccp mng_putchunk_idat mng_putchunk_iend mng_putchunk_ihdr mng_putchunk_ipng mng_putchunk_itxt mng_putchunk_jdat mng_putchunk_jhdr mng_putchunk_jsep mng_putchunk_loop mng_putchunk_magn mng_putchunk_mend mng_putchunk_mhdr mng_putchunk_move mng_putchunk_need mng_putchunk_ordr mng_putchunk_ordr_entry mng_putchunk_past mng_putchunk_past_src mng_putchunk_phyg mng_putchunk_phys mng_putchunk_plte mng_putchunk_pplt mng_putchunk_pplt_entry mng_putchunk_prom mng_putchunk_save mng_putchunk_save_entry mng_putchunk_sbit mng_putchunk_seek mng_putchunk_show mng_putchunk_splt mng_putchunk_srgb mng_putchunk_term mng_putchunk_text mng_putchunk_time mng_putchunk_trns mng_putchunk_unknown mng_putchunk_ztxt mng_putimgdata_ihdr mng_putimgdata_jhdr mng_read mng_read_resume mng_readdisplay mng_reset mng_set_bgcolor mng_set_bkgdstyle mng_set_cacheplayback mng_set_canvasstyle mng_set_dfltimggamma mng_set_dfltimggammaint mng_set_displaygamma mng_set_displaygammaint mng_set_doprogressive mng_set_jpeg_dctmethod mng_set_jpeg_maxjdat mng_set_jpeg_optimized mng_set_jpeg_progressive mng_set_jpeg_quality mng_set_jpeg_smoothing mng_set_maxcanvasheight mng_set_maxcanvassize mng_set_maxcanvaswidth mng_set_outputprofile mng_set_outputprofile2 mng_set_outputsrgb mng_set_sectionbreaks mng_set_speed mng_set_srgb mng_set_srgbimplicit mng_set_srgbprofile mng_set_srgbprofile2 mng_set_storechunks mng_set_suspensionmode mng_set_usebkgd mng_set_userdata mng_set_viewgamma mng_set_viewgammaint mng_set_zlib_level mng_set_zlib_maxidat mng_set_zlib_memlevel mng_set_zlib_method mng_set_zlib_strategy mng_set_zlib_windowbits mng_setcb_closestream mng_setcb_errorproc mng_setcb_getalphaline mng_setcb_getbkgdline mng_setcb_getcanvasline mng_setcb_gettickcount mng_setcb_memalloc mng_setcb_memfree mng_setcb_openstream mng_setcb_processheader mng_setcb_processmend mng_setcb_processneed mng_setcb_processsave mng_setcb_processseek mng_setcb_processterm mng_setcb_processtext mng_setcb_processunknown mng_setcb_readdata mng_setcb_refresh mng_setcb_settimer mng_setcb_writedata mng_status_creating mng_status_displaying mng_status_dynamic mng_status_error mng_status_reading mng_status_running mng_status_runningevent mng_status_suspendbreak mng_status_timerbreak mng_status_writing mng_supports_func mng_trapevent mng_updatemngheader mng_updatemngsimplicity mng_version_beta mng_version_dll mng_version_major mng_version_minor mng_version_release mng_version_so mng_version_text mng_write libmng-2.0.2/contrib/msvc/mngview/0000755000000000000000000000000012005307152015540 5ustar rootrootlibmng-2.0.2/contrib/msvc/mngview/Main.cpp0000644000000000000000000002235512005307152017137 0ustar rootroot//--------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------- // // MNGView Sample Application for VC6: // Loads all MNG/JNG/PNG Files LibMNG can do // Can save a single Frame to PNG Format. // // This code is public domain. // Created by Nikolaus Brennig, November 14th, 2000. // virtualnik@nol.at // http://cust.nol.at/ppee // // Tab: 4 // //--------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------- #define WIN32_LEAN_AND_MEAN #include "Main.h" //--------------------------------------------------------------------------------------------- // Libs (its up to you to make VC find the libs; set the paths in the options): //--------------------------------------------------------------------------------------------- #pragma comment(lib,"comctl32.lib") #pragma comment(lib,"libmng.lib") #pragma comment(lib,"libjpeg.lib") #pragma comment(lib,"libz.lib") #pragma comment(lib,"lcmsstat.lib") //--------------------------------------------------------------------------------------------- // Vars: //--------------------------------------------------------------------------------------------- HWND hPicWin; HINSTANCE hinst; HMENU hMenu; HDC MemDC, hdc; HBITMAP MemImage, DefaultMemImage; ANIMFILE AnimFile; RECT rcRect; OPENFILENAME ofn, sfn; int W, H, Bits; int dx, dy; char OFNFile[1024]; char CurDir[1024]; //--------------------------------------------------------------------------------------------- // Loads a file: //--------------------------------------------------------------------------------------------- VOID LoadOFN( HWND hwnd ) { GetCurrentDirectory( sizeof(CurDir), CurDir ); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hwnd; ofn.lpstrFile = OFNFile; ofn.nMaxFile = sizeof(OFNFile); ofn.lpstrFilter = "Network Graphics (*.mng;*.jng:*.png)\0*.mng;*.jng;*.png\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = NULL; ofn.lpstrInitialDir = CurDir; ofn.lpstrTitle = "Load:"; ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NONETWORKBUTTON; // Display the Open dialog box. if( GetOpenFileName(&ofn) ) { dx = dy = W = H = 0; if( AnimFile.isAnimation == 1 ) CleanUpMNG(); LoadMNG( OFNFile, hwnd, hdc ); } } //--------------------------------------------------------------------------------------------- // Saves a file: //--------------------------------------------------------------------------------------------- VOID SaveSFN( HWND hwnd ) { GetCurrentDirectory( sizeof(CurDir), CurDir ); // Initialize OPENFILENAME sfn.lStructSize = sizeof(OPENFILENAME); sfn.hwndOwner = hwnd; sfn.lpstrFile = OFNFile; sfn.nMaxFile = sizeof(OFNFile); sfn.lpstrFilter = "PNG\0*.png\0"; sfn.nFilterIndex = 1; sfn.lpstrFileTitle = 0; sfn.nMaxFileTitle = 0; sfn.lpstrInitialDir = CurDir; sfn.lpstrTitle = "Save an Image"; sfn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_NONETWORKBUTTON; // Display the Open dialog box. if( GetSaveFileName(&sfn) ) { SaveMNG( OFNFile, MemDC, MemImage ); } } //--------------------------------------------------------------------------------------------- // For stringhandling... //--------------------------------------------------------------------------------------------- VOID catpath( char *dst, const char *src ) { int len = lstrlen(dst); if( len > 0 && (dst[len-1] != '\\' && dst[len-1] != '/') ) lstrcat( dst, "\\" ); lstrcat( dst, src ); } //--------------------------------------------------------------------------------------------- // MainWindow WindowProc //--------------------------------------------------------------------------------------------- long WINAPI WindowProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { case WM_TIMER: { int wTimerID = wParam; if( AnimFile.isAnimation == 1 && wTimerID == 2 ) { UpdateMNG(); SendMessage( hPicWin, WM_PAINT, 0, 0 ); } } break; case WM_COMMAND: switch( LOWORD(wParam) ) { case FILE_OPEN: LoadOFN(hwnd); break; case FILE_SAVE: SaveSFN(hwnd); break; case FILE_EXIT: DestroyWindow( hPicWin ); break; case HELP_ABOUT: Warning( "MNGView Sample Application for VC6.\n" \ "This Code is Public Domain.\n" \ "Created by Nikolaus Brennig." ); break; } break; case WM_ERASEBKGND: return 0L; case WM_PAINT: // GetDC: GetClientRect( hPicWin, &rcRect ); hdc = GetDC( hPicWin ); if( MemDC == 0 ) { BitBlt( hdc, 0, 0, rcRect.right, rcRect.bottom, MemDC, 0, 0, BLACKNESS ); ReleaseDC( hPicWin, hdc ); break; } // Erase: // Upper area... BitBlt( hdc, 0, 0, rcRect.right, (0+dy), MemDC, 0, 0, BLACKNESS ); // Lower area... BitBlt( hdc, 0, (0+dy)+H, rcRect.right, rcRect.bottom - ((0+dy)+H), MemDC, 0, 0, BLACKNESS ); // Left area... BitBlt( hdc, 0, 0, (0+dx), rcRect.bottom, MemDC, 0, 0, BLACKNESS ); // Right area... BitBlt( hdc, (0+dx)+W, 0, rcRect.right, rcRect.bottom, MemDC, 0, 0, BLACKNESS ); // Show Imageframe: BitBlt( hdc, dx, dy, W, H, MemDC, 0, 0, SRCCOPY ); // Release DC... ReleaseDC( hPicWin, hdc ); break; case WM_HSCROLL: { int nScrollCode = (int) LOWORD(wParam); // scroll bar value if( nScrollCode == SB_LINELEFT ) dx += 10; if( nScrollCode == SB_LINERIGHT ) dx -= 10; SendMessage( hwnd, WM_PAINT, 0, 0 ); } break; case WM_VSCROLL: { int nScrollCode = (int) LOWORD(wParam); // scroll bar value if( nScrollCode == SB_LINEUP ) dy += 10; if( nScrollCode == SB_LINEDOWN ) dy -= 10; SendMessage( hwnd, WM_PAINT, 0, 0 ); } break; case WM_GETMINMAXINFO: ((MINMAXINFO*)lParam)->ptMinTrackSize.x = 550; ((MINMAXINFO*)lParam)->ptMinTrackSize.y = 450; return 0L; case WM_DESTROY: if( AnimFile.isAnimation == 1 ) CleanUpMNG(); if( hMenu ) DestroyMenu( hMenu ); PostQuitMessage(0); return 0L; } return DefWindowProc( hwnd, message, wParam, lParam ); } //--------------------------------------------------------------------------------------------- // ok, initen wir mal das Window mit den Styleparametern... //--------------------------------------------------------------------------------------------- BOOL InitApplication( HINSTANCE hInstance, int nCmdShow, LPSTR lpCommandLine ) { WNDCLASSEX wcex; ZeroMemory( &wcex, sizeof(wcex) ); wcex.cbSize = sizeof(wcex); wcex.style = 0; wcex.lpfnWndProc = WindowProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(APPICON)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = HBRUSH(GetStockObject(BLACK_BRUSH)); wcex.lpszMenuName = 0; wcex.lpszClassName = "MNGViewClass"; wcex.hIconSm = 0; if( !RegisterClassEx(&wcex) ) return Error( "RegisterClass failed!" ); // Init: W = 0; H = 0; AnimFile.isAnimation = 0; MemDC = 0; MemImage = 0; DefaultMemImage = 0; // Create the Window: hPicWin = CreateWindowEx( 0, "MNGViewClass", TITLE, WS_OVERLAPPEDWINDOW|WS_SYSMENU|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_HSCROLL|WS_VSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); if( !hPicWin ) return Error( "Couldn't create Window!" ); // Load our menu... hMenu = LoadMenu( GetModuleHandle(NULL), MAKEINTRESOURCE(THEMENU) ); if( hMenu == 0 ) Warning( "Unable to load Menu!" ); SetMenu( hPicWin, hMenu ); InitCommonControls(); UpdateWindow(hPicWin); ShowWindow(hPicWin, SW_NORMAL); return true; } //--------------------------------------------------------------------------------------------- // Ok. Das ist die Startfunktion, die wird als erstes von Windows augerufen... //--------------------------------------------------------------------------------------------- int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MSG msg; hinst = hInstance; if( !InitApplication(hInstance, nCmdShow, lpCmdLine) ) return -1; while( GetMessage(&msg, NULL, 0, 0) ) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } //--------------------------------------------------------------------------------------------- // Error //--------------------------------------------------------------------------------------------- BOOL Error( const char *err ) { MessageBox( hPicWin, err, TITLE, MB_ICONHAND+MB_OK ); DestroyWindow( hPicWin ); return FALSE; } //--------------------------------------------------------------------------------------------- // Warning //--------------------------------------------------------------------------------------------- BOOL Warning( const char *err ) { MessageBox( hPicWin, err, TITLE, MB_ICONHAND+MB_OK ); return FALSE; } libmng-2.0.2/contrib/msvc/mngview/mng.cpp0000644000000000000000000004405212005307152017032 0ustar rootroot//--------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------- // // MNGView Sample Application for VC6: // Loads all MNG/JNG/PNG Files LibMNG can do // Can save a single Frame to PNG Format. // // This code is public domain. // Created by Nikolaus Brennig, November 14th, 2000. // virtualnik@nol.at // http://cust.nol.at/ppee // // Tab: 4 // //--------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------- #define WIN32_LEAN_AND_MEAN #include "Main.h" #include //--------------------------------------------------------------------------------------------- // VARS: //--------------------------------------------------------------------------------------------- typedef struct { FILE *file; LPSTR filename; mng_uint32 delay; } mngstuff; int lineWidth; BYTE *mngdestbuffer; mngstuff *mymngstuff; mng_handle Curmng; /////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// //--------------------------------------------------------------------------------------------- // callbacks for the mng decoder: //--------------------------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// //--------------------------------------------------------------------------------------------- // memory allocation; data must be zeroed //--------------------------------------------------------------------------------------------- mng_ptr mymngalloc( mng_uint32 size ) { return (mng_ptr)calloc(1, size); } //--------------------------------------------------------------------------------------------- // memory deallocation //--------------------------------------------------------------------------------------------- void mymngfree(mng_ptr p, mng_uint32 size) { free(p); } //--------------------------------------------------------------------------------------------- // Stream open: //--------------------------------------------------------------------------------------------- mng_bool mymngopenstream(mng_handle mng) { mngstuff *mymng; // look up our stream struct mymng = (mngstuff*)mng_get_userdata(mng); // open the file mymng->file = fopen( mymng->filename, "rb" ); if( mymng->file == NULL ) { char temp[100]; sprintf( temp, "Unable to open File: %s", mymng->filename ); Warning( temp ); return MNG_FALSE; } return MNG_TRUE; } //--------------------------------------------------------------------------------------------- // Stream open for Writing: //--------------------------------------------------------------------------------------------- mng_bool mymngopenstreamwrite(mng_handle mng) { mngstuff *mymng; // look up our stream struct mymng = (mngstuff*)mng_get_userdata(mng); // open the file mymng->file = fopen( mymng->filename, "wb" ); if( mymng->file == NULL ) { Warning( "unable to open file!" ); return MNG_FALSE; } return MNG_TRUE; } //--------------------------------------------------------------------------------------------- // Stream close: //--------------------------------------------------------------------------------------------- mng_bool mymngclosestream(mng_handle mng) { return MNG_TRUE; // We close the file ourself, mng_cleanup doesnt seem to do it... } //--------------------------------------------------------------------------------------------- // feed data to the decoder //--------------------------------------------------------------------------------------------- mng_bool mymngreadstream( mng_handle mng, mng_ptr buffer, mng_uint32 size, mng_uint32 *bytesread ) { mngstuff *mymng; // look up our stream struct mymng = (mngstuff*)mng_get_userdata(mng); // read the requested amount of data from the file *bytesread = fread( buffer, sizeof(BYTE), size, mymng->file ); return MNG_TRUE; } //--------------------------------------------------------------------------------------------- // the header's been read. set up the display stuff //--------------------------------------------------------------------------------------------- mng_bool mymngprocessheader( mng_handle mng, mng_uint32 width, mng_uint32 height ) { // Store values: W = width; H = height; Bits = 24; lineWidth = ((((W * Bits) + 31) >> 5) << 2); // Create decoderbuffer: mngdestbuffer = new BYTE[lineWidth*H]; if( mngdestbuffer == 0 ) Warning( "Out of Memory!" ); // Create the MemoryBitmap now, we store there the image... if( DefaultMemImage ) SelectObject( MemDC, DefaultMemImage ); if( MemDC ) DeleteDC( MemDC ); if( MemImage ) DeleteObject( MemImage ); hdc = GetDC( hPicWin ); MemDC = CreateCompatibleDC( 0 ); MemImage = CreateCompatibleBitmap( hdc, W, H ); DefaultMemImage = (HBITMAP)SelectObject( MemDC, MemImage ); ReleaseDC( hPicWin, hdc ); // Set output style: mng_set_canvasstyle( mng, MNG_CANVAS_BGR8 ); return MNG_TRUE; } //--------------------------------------------------------------------------------------------- // return a row pointer for the decoder to fill //--------------------------------------------------------------------------------------------- mng_ptr mymnggetcanvasline( mng_handle mng, mng_uint32 line ) { return (mng_ptr)(mngdestbuffer + (lineWidth*(H-1-line))); } //--------------------------------------------------------------------------------------------- // timer //--------------------------------------------------------------------------------------------- mng_uint32 mymnggetticks(mng_handle mng) { return (mng_uint32)GetTickCount(); } //--------------------------------------------------------------------------------------------- // Refresh: //--------------------------------------------------------------------------------------------- mng_bool mymngrefresh( mng_handle mng, mng_uint32 x, mng_uint32 y, mng_uint32 w, mng_uint32 h ) { PBITMAPINFO bmpi = (PBITMAPINFO)LocalAlloc(LPTR, sizeof(BITMAPINFOHEADER)); bmpi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmpi->bmiHeader.biWidth = W; bmpi->bmiHeader.biHeight = H; bmpi->bmiHeader.biPlanes = 1; bmpi->bmiHeader.biCompression = BI_RGB; bmpi->bmiHeader.biBitCount = Bits; bmpi->bmiHeader.biSizeImage = 0; bmpi->bmiHeader.biClrUsed = 0; bmpi->bmiHeader.biClrImportant = 0; // Now blt the Image onto our MemDC... StretchDIBits( MemDC, 0, 0, W, H, 0, 0, W, H, mngdestbuffer, bmpi, 0, SRCCOPY ); LocalFree((PBITMAPINFO)bmpi); return MNG_TRUE; } //--------------------------------------------------------------------------------------------- // interframe delay callback //--------------------------------------------------------------------------------------------- mng_bool mymngsettimer(mng_handle mng, mng_uint32 msecs) { mngstuff *mymng; // look up our stream struct mymng = (mngstuff*)mng_get_userdata(mng); // set the timer for when the decoder wants to be woken mymng->delay = msecs; return MNG_TRUE; } //--------------------------------------------------------------------------------------------- // Error Callback; //--------------------------------------------------------------------------------------------- mng_bool mymngerror( mng_handle mng, mng_int32 code, mng_int8 severity, mng_chunkid chunktype, mng_uint32 chunkseq, mng_int32 extra1, mng_int32 extra2, mng_pchar text ) { char chunk[5]; // pull out the chuck type as a string // FIXME: does this assume unsigned char? chunk[0] = (char)((chunktype >> 24) & 0xFF); chunk[1] = (char)((chunktype >> 16) & 0xFF); chunk[2] = (char)((chunktype >> 8) & 0xFF); chunk[3] = (char)((chunktype ) & 0xFF); chunk[4] = '\0'; // output the error: char temp[1000]; sprintf( temp, "error playing chunk %s (%d)", chunk, chunkseq ); Warning( temp ); // No need for anymore decoding: KillTimer( hPicWin, 2 ); // error occured; return MNG_FALSE; } //--------------------------------------------------------------------------------------------- // Load a MNG/JNG/PNG file: //--------------------------------------------------------------------------------------------- VOID LoadMNG( LPSTR Filename, HWND hwnd, HDC hdc ) { // allocate our stream data structure mymngstuff = (mngstuff*)calloc(1, sizeof(*mymngstuff)); if( mymngstuff == NULL ) { Warning( "Unable to allocate MNG struct!" ); return; } // pass the name of the file we want to play mymngstuff->filename = Filename; // set up the mng decoder for our stream Curmng = mng_initialize(mymngstuff, mymngalloc, mymngfree, MNG_NULL); if(Curmng == MNG_NULL) { free(mymngstuff); Warning( "MNG Init Error!" ); return; } // No need to store chunks: mng_set_storechunks(Curmng, MNG_FALSE); // Set the colorprofile, lcms uses this: mng_set_srgb( Curmng, MNG_TRUE ); char DestDir[2048]; SearchPath( NULL, "MNGVIEW.EXE", NULL, sizeof(DestDir), DestDir, NULL ); lstrcpyn( DestDir, DestDir, lstrlen(DestDir)-lstrlen("MNGVIEW.EXE") ); catpath( DestDir, "sRGB.icm" ); FILE *RGBfile = fopen( DestDir, "rb" ); if( RGBfile == 0 ) { mng_cleanup(&Curmng); free(mymngstuff); Warning( "Need file \"sRGB.icm\" !" ); return; } fclose(RGBfile); mng_set_outputprofile(Curmng, DestDir); // Set white as background color: WORD Red = (255 << 8) + 255; WORD Green = (255 << 8) + 255; WORD Blue = (255 << 8) + 255; mng_set_bgcolor( Curmng, Red, Green, Blue ); // If PNG Background is available, use it: mng_set_usebkgd( Curmng, MNG_TRUE ); // set the callbacks mng_setcb_errorproc(Curmng, mymngerror); mng_setcb_openstream(Curmng, mymngopenstream); mng_setcb_closestream(Curmng, mymngclosestream); mng_setcb_readdata(Curmng, mymngreadstream); mng_setcb_gettickcount(Curmng, mymnggetticks); mng_setcb_settimer(Curmng, mymngsettimer); mng_setcb_processheader(Curmng, mymngprocessheader); mng_setcb_getcanvasline(Curmng, mymnggetcanvasline); mng_setcb_refresh(Curmng, mymngrefresh); // Read the stuff: mng_readdisplay(Curmng); AnimFile.CurFrame = mng_get_layercount( Curmng ); AnimFile.MaxFrame = mng_get_framecount( Curmng ); AnimFile.isAnimation = 1; AnimFile.Delay = mymngstuff->delay; // Start the whole thing: SetTimer( hPicWin, 2, mymngstuff->delay, 0 ); } //--------------------------------------------------------------------------------------------- // Called when loading a new file or Appquit: //--------------------------------------------------------------------------------------------- void CleanUpMNG() { KillTimer( hPicWin, 2 ); mng_cleanup(&Curmng); fclose( mymngstuff->file ); free(mymngstuff); delete [] mngdestbuffer; } //--------------------------------------------------------------------------------------------- // Called when timer says next frame/layer/update is needed: //--------------------------------------------------------------------------------------------- void UpdateMNG() { mymngstuff->delay = 0; if( MNG_NEEDTIMERWAIT == mng_display_resume(Curmng) ) { KillTimer( hPicWin, 2 ); SetTimer( hPicWin, 2, mymngstuff->delay, 0 ); } else { CleanUpMNG(); AnimFile.CurFrame = -1; AnimFile.MaxFrame = -1; AnimFile.isAnimation = -1; AnimFile.Delay = -1; } } /////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// //--------------------------------------------------------------------------------------------- // MNG WRITING STUFF: //--------------------------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// int OffsetX=0,OffsetY=0,OffsetW=0,OffsetH=0; BYTE *srcbuffer=0, *tmpbuffer; //--------------------------------------------------------------------------------------------- // Callback for writing data: //--------------------------------------------------------------------------------------------- mng_bool mymngwritedata( mng_handle hMNG, mng_ptr pBuf, mng_uint32 iSize, mng_uint32 *iWritten ) { mngstuff *pMydata = (mngstuff*)mng_get_userdata(hMNG); *iWritten = fwrite( pBuf, sizeof(BYTE), iSize, pMydata->file ); if( *iWritten < iSize ) { Warning( "write error" ); return MNG_FALSE; } return MNG_TRUE; } //--------------------------------------------------------------------------------------------- // swap Rs and Bs... //--------------------------------------------------------------------------------------------- BOOL RGBFromBGR( BYTE *buf, UINT widthPix, UINT height ) { UINT col, row; LPBYTE pRed, pBlu; BYTE tmp; if (buf==NULL)return FALSE; INT TmpRow = 0; INT WidthBytes = widthPix*3; if(WidthBytes & 0x003) WidthBytes = (WidthBytes | 3) + 1; INT OurCol = 0; for( row=0; rowbmiHeader.biSize = sizeof(BITMAPINFOHEADER); pbmi->bmiHeader.biWidth = bmp.bmWidth; pbmi->bmiHeader.biHeight = -bmp.bmHeight; pbmi->bmiHeader.biPlanes = bmp.bmPlanes; pbmi->bmiHeader.biBitCount = 24; pbmi->bmiHeader.biCompression = BI_RGB; pbmi->bmiHeader.biSizeImage = LineWidth * H * FrameCount; pbmi->bmiHeader.biClrImportant = 0; // Alloc Memory... srcbuffer = 0; srcbuffer = new BYTE[LineWidth*H*FrameCount]; if( srcbuffer == 0 ) Warning( "srcbuffer == 0!" ); // get the buffer and modify the format: if( 0 == GetDIBits( MemDC, hBmp2, 0, (WORD) (H*FrameCount), srcbuffer, pbmi, 0 ) ) Warning( "no GetDIBits!!!" ); RGBFromBGR( srcbuffer, W, H*FrameCount ); if( srcbuffer == 0 ) Warning( "srcbuffer == 0!" ); // Freee. LocalFree((PBITMAPINFO)pbmi); } //--------------------------------------------------------------------------------------------- // Writes a single PNG datastream //--------------------------------------------------------------------------------------------- VOID WritePNG( mng_handle hMNG, int Frame, int FrameCount ) { BYTE *dstbuffer; INT LineWidth; INT WidthBytes; OffsetX=0; OffsetY=0; OffsetW=W; OffsetH=H; // Get WidthBytes... WidthBytes = W*3; LineWidth = W*3; if(LineWidth & 0x003) LineWidth = (LineWidth | 3) + 1; tmpbuffer = new BYTE[(WidthBytes+1)*OffsetH]; if( tmpbuffer == 0 ) Warning( "Out of Memory!" ); // Write DEFI chunk. mng_putchunk_defi( hMNG, 0, 0, 0, MNG_TRUE, OffsetX, OffsetY, MNG_FALSE, 0, 0, 0, 0 ); // Write Header: mng_putchunk_ihdr( hMNG, OffsetW, OffsetH, MNG_BITDEPTH_8/*iBitdepth*/, MNG_COLORTYPE_RGB/*iColortype*/, MNG_COMPRESSION_DEFLATE/*iCompression*/, MNG_FILTER_ADAPTIVE/*iFilter*/, MNG_INTERLACE_NONE /*iInterlace*/ ); // transfer data, add Filterbyte: for( int Row=0; Row No Filter. tmpbuffer[Row*(WidthBytes+1)]=0; // Copy the scanline: memcpy( tmpbuffer+Row*(WidthBytes+1)+1, srcbuffer+((OffsetY+Row)*(LineWidth))+OffsetX, WidthBytes ); } // Free srcbuffer if not animated GIF: delete [] srcbuffer; // Compress data with ZLib (Deflate): dstbuffer = new BYTE[(WidthBytes+1)*OffsetH]; if( dstbuffer == 0 ) Warning( "Out of Memory!" ); DWORD dstbufferSize=(WidthBytes+1)*OffsetH; // Compress data: if( Z_OK != compress2( (Bytef *)dstbuffer, (ULONG *)&dstbufferSize, (const Bytef*)tmpbuffer, (ULONG) (WidthBytes+1)*OffsetH, 9 )) Warning( "Unable to compress imagedata!" ); // Write Data into MNG File: mng_putchunk_idat( hMNG, dstbufferSize, (mng_ptr*)dstbuffer); mng_putchunk_iend(hMNG); // Free the stuff: delete [] tmpbuffer; delete [] dstbuffer; } //--------------------------------------------------------------------------------------------- // Writes a MNG (24bit) //--------------------------------------------------------------------------------------------- VOID SaveMNG( LPSTR Filename, HDC hdc, HBITMAP hBmp ) { mng_handle hMNG; // check if currently a MNG file is loaded: if( AnimFile.isAnimation == 1 ) CleanUpMNG(); // Creates the srcbuffer for imagedata: CreateSrcBuffer( 0, 1, hBmp ); // allocate our stream data structure mymngstuff = (mngstuff*)calloc(1, sizeof(*mymngstuff)); if( mymngstuff == NULL ) { Warning( "Cannot allocate data buffer." ); return; } // pass the name of the file we want to play mymngstuff->filename = Filename; // init the lib: hMNG = mng_initialize((mng_ptr)mymngstuff, mymngalloc, mymngfree, MNG_NULL); if( !hMNG ) { Warning( "Cannot initialize libmng." ); return; } else { mng_setcb_openstream(hMNG, mymngopenstreamwrite ); mng_setcb_closestream(hMNG, mymngclosestream); mng_setcb_writedata(hMNG, mymngwritedata); // Write File: mng_create(hMNG); // Just a single Frame (save a normal PNG): WritePNG( hMNG, 0, 1 ); // Now write file: mng_write(hMNG); // Free the stuff: fclose( mymngstuff->file ); mng_cleanup(&hMNG); } free( mymngstuff ); } libmng-2.0.2/contrib/msvc/mngview/MNGView.plg0000644000000000000000000000210712005307152017520 0ustar rootroot

Erstellungsprotokoll

--------------------Konfiguration: MNGView - Win32 Release--------------------

Befehlszeilen

Erstellen der temporären Datei "C:\WINDOWS\TEMP\RSPF386.TMP" mit Inhalten [ /nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"Release/MNGView.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c "F:\Nikgames\Libmng\contrib\MNGView\Main.cpp" ] Creating command line "cl.exe @C:\WINDOWS\TEMP\RSPF386.TMP" Erstellen der temporären Datei "C:\WINDOWS\TEMP\RSPF387.TMP" mit Inhalten [ kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:no /pdb:"Release/MNGView.pdb" /machine:I386 /out:"MNGView.exe" .\Release\Main.obj .\Release\mng.obj .\Release\Main.res ] Erstellen der Befehlzeile "link.exe @C:\WINDOWS\TEMP\RSPF387.TMP"

Ausgabefenster

Kompilierung läuft... Main.cpp Linker-Vorgang läuft...

Ergebnisse

MNGView.exe - 0 Fehler, 0 Warnung(en)
libmng-2.0.2/contrib/msvc/mngview/Mng.ico0000644000000000000000000000427612005307152016766 0ustar rootroot ¨( @€  ´¶´ôúüÜÚÜüþü ­véùa¿l'i0dör BMP fZiöle(i‚n õd¿o|Éw‚Csgg iBcoþn¨O æƒâº ‚šg£K@gÌ‘±r -«/ø¿¯`[gÖ1€xc €üè|€§pZüv€¿â‚ 8#S'o€/ô·Ç¯rÖ1g7Ývú\¿ügì²evr€?“ ²·ù¿@/œÈÉKO@ ô‘·ür¿/œ7/øþrúƒ¿\¨´²røù¿¿ä ìd±Pør¿\NoPsnepåF³{:÷P\¿NIKPGA­M³RE÷BS¿\S{LPPOWVIEWè\dIPCOè*NdXSPõ\¿PpðNåNGõ.¿IäCdOP`€þ´r„¼S ¹÷¿ Ph¹÷׿\ œ‚sd g<|ƒ‚èêgdPP pZÌåögLvPN¨ƒ P;×/Œv¨-ößv×ÙD/÷ׯ¿,VÖ´1rôT´r`Zƒöœ–vø-rg×vþûD¿0§’-÷é¿ÿÿÿ¿ÿxn´ƒrp0Ro\Ÿøn¿ vø¿/¿\ȪOsŒgƒȬ öo×¢¯{PÖ1´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€libmng-2.0.2/contrib/msvc/mngview/Main.h0000644000000000000000000000433612005307152016603 0ustar rootroot//--------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------- // // MNGView Sample Application for VC6: // Loads all MNG/JNG/PNG Files LibMNG can do // Can save a single Frame to PNG Format. // // This code is public domain. // Created by Nikolaus Brennig, November 14th, 2000. // virtualnik@nol.at // http://cust.nol.at/ppee // // Tab: 4 // //--------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------- #ifndef _MAIN_H #define _MAIN_H //--------------------------------------------------------------------------------------------- // Includes: //--------------------------------------------------------------------------------------------- #define WIN32_LEAN_AND_MEAN #include #include #include #include #include "Resource.h" //--------------------------------------------------------------------------------------------- // Defines: //--------------------------------------------------------------------------------------------- #define TITLE "MNGView Sample Application 1.0" //--------------------------------------------------------------------------------------------- // global Vars: //--------------------------------------------------------------------------------------------- extern HWND hPicWin; extern HINSTANCE hinst; extern HDC MemDC, hdc; extern HBITMAP MemImage, DefaultMemImage; extern int W, H, Bits; typedef struct { int MaxFrame; int CurFrame; int Delay; int isAnimation; } ANIMFILE; extern ANIMFILE AnimFile; //--------------------------------------------------------------------------------------------- // Function prototypes: //--------------------------------------------------------------------------------------------- BOOL Error( const char *err ); BOOL Warning( const char *err ); VOID catpath( char *dst, const char *src ); // MNG.cpp specific: VOID LoadMNG( LPSTR Filename, HWND hwnd, HDC hdc ); VOID SaveMNG( LPSTR Filename, HDC hdc, HBITMAP hBmp ); VOID UpdateMNG(); VOID CleanUpMNG(); #endiflibmng-2.0.2/contrib/msvc/mngview/resource.h0000644000000000000000000000130412005307152017536 0ustar rootroot//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by Main.rc // #define THEMENU 102 #define APPICON 200 #define FILE_OPEN 40002 #define FILE_EXIT 40003 #define HELP_ABOUT 40004 #define FILE_SAVE 40005 #define IDC_STATIC -1 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 104 #define _APS_NEXT_COMMAND_VALUE 40006 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif libmng-2.0.2/contrib/msvc/mngview/MNGView.opt0000644000000000000000000013700012005307152017541 0ustar rootrootÐÏࡱá>þÿ þÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿ  þÿÿÿ þÿÿÿþÿÿÿI"#$%&'()*þÿÿÿ,-./01234þÿÿÿ6789:;<=>þÿÿÿ@ABCDEFGHþÿÿÿþÿÿÿKLMNOPQRSþÿÿÿUVWXYZ[\]þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿ ¡ûeoNÀþÿÿÿWorkspace State  ÿÿÿÿBrowserÿÿÿÿ Editorÿÿÿÿÿÿÿÿmngview.F:\Nikgames\Libmng\contrib\MNGView\MNGView.dspëÄûÿ9øÿ Linker-Vorgang läuft...NLY_AGGREGATABLE(x) #define DECLARE_OPAQUE32(x) #define DECLARE_PARSE_MAP() #define DECLARE_POLY_AGGREGATABLE(x) #define DECLARE_PROPERTY_SUPPORT(class) #define DECLARE_PROPPAGEIDS(class_name) #define DECLARE_PROTECT_FINAL_CONSTRUCT() #define DECLARE_REGISTRY(class, pid, vpid, nid, flags) #define DECLARE_REGISTRY_RESOURCE(x) #define DECLARE_REGISTRY_RESOURCEID(x) #define DECLARE_SERIAL(class_name) #define DECLARE_STATIC_REGISTRY_RESOURCE(x) #define DECLARE_STATIC_REGISTRY_RESOURCEID(x) #define DECLARE_VIEW_STATUS(statusFlags) #define DECLARE_WND_CLASS(WndClassName) #define DECLARE_WND_SUPERCLASS(WndClassName, OrigWndClassName) #define DEFINE_COMMAND(x, szCommand) #define DELEGATE_DUAL_INTERFACE(objectClass, dualClass) #define END_CONNECTION_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_DUAL_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define EXTERN_PROCESS_LOCAL(class_name, ident_name) extern AFX_DATA PROCESS_LOCAL(class_name, ident_name) #define EXT_SNAPINMENUID(id) #define IMPLEMENT_DUAL_ERRORINFO(objectClass, riidSource) #define IMPLEMENT_DYNAMIC(class_name, base_class_name) #define IMPLEMENT_DYNCREATE(class_name, base_class_name) #define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECREATE_EX(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECTLTYPE(class_name, idsUserTypeName, dwOleMisc) #define IMPLEMENT_OLETYPELIB(class_name, tlid, wVerMajor, wVerMinor) #define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) #define INIT_INTERFACE_PART(theClass, localClass) #define PROCESS_LOCAL(class_name, ident_name) AFX_DATADEF CProcessLocal ident_name; #define PURE = 0 #define SNAPINMENUID(id) #define THIS void #define THIS_ #define TRD°r Ð'oùr‡XDlXDl'rðkztxÿÿÿ@ð‚D|tx- Üár˜,j£Æ?Ô©£ÆðÞ¡*`"©£ÆÅÆÙÆ?Ô©£Æ?Ô©£ÆÅÆÙÆCá©yÜß©ŸçßÇç©£ÆÅÆÙÆÍ©yܵ穟çµçÇçâ²pë§ÜÔM0M0õì©£ÆÅÆÙÆíÆ©yܔܩŸç”ÜÇçy©©¯Ö¼Ö·ØÐÖ©Kߟô·ØÐÖ©¯Ö¼Ö·ØÐÖ$söðÖ<  7;b; 1 '-ž  15ò;  FOš   #ž  =A‡: n ¥¥Í  ÉÉ|¼ ék1 ŽŽ1q  ŒŒ?Û ÒÒ51 8;  ÏÏ…  í‰G  ê;   ÝÝýÐ  ÍÍÃî  ÎÎÜ| üüöÉ   ¢:  ÐÐhR ªª¼M1 ““ȇG ••E; 1 ©  %%ý:  // ÇG žž[¨ œœÂ ÌÌMz ——Hž šš.Þ 1 554<  OO#œ ##=  --Ÿ; G  AA^<  !DD™¼ "h¬ #™™‹ $««+<  %ÓÓ#<  &551;  '##çs G (’’]ì )””kq  *››<  +‘‘n ,––¶j -55K .;;¾<  /OOã;  055ù<  1;;=  2OO+;  3##·; G 4--ô<  5ÔÔÎ; G 6AA;  7DDàm 800¼{ 9//kmG :¢¢; ;++UmG <--<  =˜˜ˆ >##– ?--x @AAv ACC";  BËËd C..#1 D¡¡ÔG E**c1 F,,V(G G6 H©©Þ< @ I99é< @ J::; G@ K,,i; 1@ L))‚; G@ M++v; G@ N**®: @ O33º: @ P44ü; @ QII < @ RJJŸ< @ S""u< @ T< @ U!!ƒ< @ V  å: @ W??ñ: @ XH‡sw.F:\Nikgames\Libmng\contrib\MNGView\MNGView.dspëÄûÿ9øÿ Linker-Vorgang läuft...NLY_AGGREGATABLE(x) #define DECLARE_OPAQUE32(x) #define DECLARE_PARSE_MAP() #define DECLARE_POLY_AGGREGATABLE(x) #define DECLARE_PROPERTY_SUPPORT(class) #define DECLARE_PROPPAGEIDS(class_name) #define DECLARE_PROTECT_FINAL_CONSTRUCT() #define DECLARE_REGISTRY(class, pid, vpid, nid, flags) #define DECLARE_REGISTRY_RESOURCE(x) #define DECLARE_REGISTRY_RESOURCEID(x) #define DECLARE_SERIAL(class_name) #define DECLARE_STATIC_REGISTRY_RESOURCE(x) #define DECLARE_STATIC_REGISTRY_RESOURCEID(x) #define DECLARE_VIEW_STATUS(statusFlags) #define DECLARE_WND_CLASS(WndClassName) #define DECLARE_WND_SUPERCLASS(WndClassName, OrigWndClassName) #define DEFINE_COMMAND(x, szCommand) #define DELEGATE_DUAL_INTERFACE(objectClass, dualClass) #define END_CONNECTION_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_DUAL_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define EXTERN_PROCESS_LOCAL(class_name, ident_name) extern AFX_DATA PROCESS_LOCAL(class_name, ident_name) #define EXT_SNAPINMENUID(id) #define IMPLEMENT_DUAL_ERRORINFO(objectClass, riidSource) #define IMPLEMENT_DYNAMIC(class_name, base_class_name) #define IMPLEMENT_DYNCREATE(class_name, base_class_name) #define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECREATE_EX(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECTLTYPE(class_name, idsUserTypeName, dwOleMisc) #define IMPLEMENT_OLETYPELIB(class_name, tlid, wVerMajor, wVerMinor) #define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) #define INIT_INTERFACE_PART(theClass, localClass) #define PROCESS_LOCAL(class_name, ident_name) AFX_DATADEF CProcessLocal ident_name; #define PURE = 0 #define SNAPINMENUID(id) #define THIS void #define THIS_ #define TRD°r Ð'oùr‡XDlXDl'rðkztxÿÿÿ@ð‚D|tx- Üár˜,j£Æ?Ô©£ÆðÞ¡*`"©£ÆÅÆÙÆ?Ô©£Æ?Ô©£ÆÅÆÙÆCá©yÜß©ŸçßÇç©£ÆÅÆÙÆÍ©yܵ穟çµçÇçâ²pë§ÜÔM0M0õì©£ÆÅÆÙÆíÆ©yܔܩŸç”ÜÇçy©©¯Ö¼Ö·ØÐÖ©Kߟô·ØÐÖ©¯Ö¼Ö·ØÐÖ$söðÖ<  7;b; 1 '-ž  15ò;  FOš   #ž  =A‡: n ¥¥Í  ÉÉ|¼ ék1 ŽŽ1q  ŒŒ?Û ÒÒ51 8;  ÏÏ…  í‰G  ê;   ÝÝýÐ  ÍÍÃî  ÎÎÜ| üüöÉ   ¢:  ÐÐhR ªª¼M1 ““ȇG ••E; 1 ©  %%ý:  // ÇG žž[¨ œœÂ ÌÌMz ——Hž šš.Þ 1 554<  OO#œ ##=  --Ÿ; G  AA^<  !DD™¼ "h¬ #™™‹ $««+<  %ÓÓ#<  &551;  '##çs G (’’]ì )””kq  *››<  +‘‘n ,––¶j -55K .;;¾<  /OOã;  055ù<  1;;=  2OO+;  3##·; G 4--ô<  5ÔÔÎ; G 6AA;  7DDàm 800¼{ 9//kmG :¢¢; ;++UmG <--<  =˜˜ˆ >##– ?--x @AAv ACC";  BËËd C..#1 D¡¡ÔG E**c1 F,,V(G G6 H©©Þ< @ I99é< @ J::; G@ K,,i; 1@ L))‚; G@ M++v; G@ N**®: @ O33º: @ P44ü; @ QII < @ RJJŸ< @ S""u< @ T< @ U!!ƒ< @ V  å: @ W??ñ: @ XH‡sMLJLw.F:\Nikgames\Libmng\contrib\MNGView\MNGView.dspëÄûÿ9øÿ Linker-Vorgang läuft...NLY_AGGREGATABLE(x) #define DECLARE_OPAQUE32(x) #define DECLARE_PARSE_MAP() #define DECLARE_POLY_AGGREGATABLE(x) #define DECLARE_PROPERTY_SUPPORT(class) #define DECLARE_PROPPAGEIDS(class_name) #define DECLARE_PROTECT_FINAL_CONSTRUCT() #define DECLARE_REGISTRY(class, pid, vpid, nid, flags) #define DECLARE_REGISTRY_RESOURCE(x) #define DECLARE_REGISTRY_RESOURCEID(x) #define DECLARE_SERIAL(class_name) #define DECLARE_STATIC_REGISTRY_RESOURCE(x) #define DECLARE_STATIC_REGISTRY_RESOURCEID(x) #define DECLARE_VIEW_STATUS(statusFlags) #define DECLARE_WND_CLASS(WndClassName) #define DECLARE_WND_SUPERCLASS(WndClassName, OrigWndClassName) #define DEFINE_COMMAND(x, szCommand) #define DELEGATE_DUAL_INTERFACE(objectClass, dualClass) #define END_CONNECTION_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_DUAL_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define EXTERN_PROCESS_LOCAL(class_name, ident_name) extern AFX_DATA PROCESS_LOCAL(class_name, ident_name) #define EXT_SNAPINMENUID(id) #define IMPLEMENT_DUAL_ERRORINFO(objectClass, riidSource) #define IMPLEMENT_DYNAMIC(class_name, base_class_name) #define IMPLEMENT_DYNCREATE(class_name, base_class_name) #define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECREATE_EX(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECTLTYPE(class_name, idsUserTypeName, dwOleMisc) #define IMPLEMENT_OLETYPELIB(class_name, tlid, wVerMajor, wVerMinor) #define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) #define INIT_INTERFACE_PART(theClass, localClass) #define PROCESS_LOCAL(class_name, ident_name) AFX_DATADEF CProcessLocal ident_name; #define PURE = 0 #define SNAPINMENUID(id) #define THIS void #define THIS_ #define TRD°r Ð'oùr‡XDlXDl'rðkztxÿÿÿ@ð‚D|tx- Üár˜,j£Æ?Ô©£ÆðÞ¡*`"©£ÆÅÆÙÆ?Ô©£Æ?Ô©£ÆÅÆÙÆCá©yÜß©ŸçßÇç©£ÆÅÆÙÆÍ©yܵ穟çµçÇçâ²pë§ÜÔM0M0õì©£ÆÅÆÙÆíÆ©yܔܩŸç”ÜÇçy©©¯Ö¼Ö·ØÐÖ©Kߟô·ØÐÖ©¯Ö¼Ö·ØÐÖ$söðÖ<  7;b; 1 '-ž  15ò;  FOš   #ž  =A‡: n ¥¥Í  ÉÉ|¼ ék1 ŽŽ1q  ŒŒ?Û ÒÒ51 8;  ÏÏ…  í‰G  ê;   ÝÝýÐ  ÍÍÃî  ÎÎÜ| üüöÉ   ¢:  ÐÐhR ªª¼M1 ““ȇG ••E; 1 ©  %%ý:  // ÇG žž[¨ œœÂ ÌÌMz ——Hž šš.Þ 1 554<  OO#œ ##=  --Ÿ; G  AA^<  !DD™¼ "h¬ #™™‹ $««+<  %ÓÓ#<  &551;  '##çs G (’’]ì )””kq  *››<  +‘‘n ,––¶j -55K .;;¾<  /OOã;  055ù<  1;;=  2OO+;  3##·; G 4--ô<  5ÔÔÎ; G 6AA;  7DDàm 800¼{ 9//kmG :¢¢; ;++UmG <--<  =˜˜ˆ >##– ?--x @AAv ACC";  BËËd C..#1 D¡¡ÔG E**c1 F,,V(G G6 H©©Þ< @ I99é< @ J::; G@ K,,i; 1@ L))‚; G@ M++v; G@ N**®: @ O33º: @ P44ü; @ QII < @ RJJŸ< @ S""u< @ T< @ U!!ƒ< @ V  å: @ W??ñ: @ XH‡sWorkspace Window"ÿÿÿÿÿÿÿÿ!IPI_MNGViewÿÿÿÿÿÿÿÿÿÿÿÿ+IPI_ ÿÿÿÿÿÿÿÿÿÿÿÿ5ClassView Window"ÿÿÿÿÿÿÿÿÿÿÿÿ?MNGViewKlassenMNGView KlassenMNGView Klassen RessourcenMain RessourcenMain RessourcenDateien&Arbeitsbereich "MNGView": 1 Projekt(e)MNGView DateienQuellcodedateienHeader-DateienMain.cppMain.cpp&Arbeitsbereich "MNGView": 1 Projekt(e)DateienCLARE_REGISTRY(class, pid, vpid, nid, flags) #define DECLARE_REGISTRY_RESOURCE(x) #define DECLARE_REGISTRY_RESOURCEID(x) #define DECLARE_SERIAL(class_name) #define DECLARE_STATIC_REGISTRY_RESOURCE(x) #define DECLARE_STATIC_REGISTRY_RESOURCEID(x) #define DECLARE_VIEW_STATUS(statusFlags) #define DECLARE_WND_CLASS(WndClassName) #define DECLARE_WND_SUPERCLASS(WndClassName, OrigWndClassName) #define DEFINE_COMMAND(x, szCommand) #define DELEGATE_DUAL_INTERFACE(objectClass, dualClass) #define END_CONNECTION_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_DUAL_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define EXTERN_PROCESS_LOCAL(class_name, ident_name) extern AFX_DATA PROCESS_LOCAL(class_name, ident_name) #define EXT_SNAPINMENUID(id) #define IMPLEMENT_DUAL_ERRORINFO(objectClass, riidSource) #define IMPLEMENT_DYNAMIC(class_name, base_class_name) #define IMPLEMENT_DYNCREATE(class_name, base_class_name) #define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECREATE_EX(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECTLTYPE(class_name, idsUserTypeName, dwOleMisc) #define IMPLEMENT_OLETYPELIB(class_name, tlid, wVerMajor, wVerMinor) #define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) #define INIT_INTERFACE_PART(theClass, localClass) #define PROCESS_LOCAL(class_name, ident_name) AFX_DATADEF CProcessLocal ident_name; #define PURE = 0 #define SNAPINMENUID(id) #define THIS void #define THIS_ #define TRD°r Ð'oùr‡XDlXDl'rðkztxÿÿÿ@ð‚D|tx- Üár˜,j£Æ?Ô©£ÆðÞ¡*`"©£ÆÅÆÙÆ?Ô©£Æ?Ô©£ÆÅÆÙÆCá©yÜß©ŸçßÇç©£ÆÅÆÙÆÍ©yܵ穟çµçÇçâ²pë§ÜÔM0M0õì©£ÆÅÆÙÆíÆ©yܔܩŸç”ÜÇçy©©¯Ö¼Ö·ØÐÖ©Kߟô·ØÐÖ©¯Ö¼Ö·ØÐÖ$söðÖ<  7;b; 1 '-ž  15ò;  FOš   #ž  =A‡: n ¥¥Í  ÉÉ|¼ ék1 ŽŽ1q  ŒŒ?Û ÒÒ51 8;  ÏÏ…  í‰G  ê;   ÝÝýÐ  ÍÍÃî  ÎÎÜ| üüöÉ   ¢:  ÐÐhR ªª¼M1 ““ȇG ••E; 1 ©  %%ý:  // ÇG žž[¨ œœÂ ÌÌMz ——Hž šš.Þ 1 554<  OO#œ ##=  --Ÿ; G  AA^<  !DD™¼ "h¬ #™™‹ $««+<  %ÓÓ#<  &551;  '##çs G (’’]ì )””kq  *››<  +‘‘n ,––¶j -55K .;;¾<  /OOã;  055ù<  1;;=  2OO+;  3##·; G 4--ô<  5ÔÔÎ; G 6AA;  7DDàm 800¼{ 9//kmG :¢¢; ;++UmG <--<  =˜˜ˆ >##– ?--x @AAv ACC";  BËËd C..#1 D¡¡ÔG E**c1 F,,V(G G6 H©©Þ< @ I99é< @ J::; G@ K,,i; 1@ L))‚; G@ M++v; G@ N**®: @ O33º: @ P44ü; @ QII < @ RJJŸ< @ S""u< @ T< @ U!!ƒ< @ V  å: @ W??ñ: @ XH‡s`êMNGView - Win32 Release MNGView.dspCProjectMNGView - Win32 ReleaseMNGView - Win32 Release€êûMNGView - Win32 Debug€êSSBR CTargetItemMNGView - Win32 ReleaseSSBRQuellcodedateien CProjGroupSSBRDJWHeader-Dateien CProjGroupSSBRDJWRessourcendateien CProjGroupSSBRDJWdepCDependencyContainerSSBR basetsd.hCDependencyFileSSBR jpeglib.hCDependencyFileSSBRicc34.hCDependencyFileSSBRzlib.hCDependencyFileSSBRlibmng.hCDependencyFileSSBR jconfig.hCDependencyFileSSBRzconf.hCDependencyFileSSBR libmng_conf.hCDependencyFileSSBR jmorecfg.hCDependencyFileSSBRlcms.hCDependencyFileSSBRlibmng_types.hCDependencyFileSSBRDJWDJWDJWtClass, dualClass) #define END_CONNECTION_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_DUAL_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define EXTERN_PROCESS_LOCAL(class_name, ident_name) extern AFX_DATA PROCESS_LOCAL(class_name, ident_name) #define EXT_SNAPINMENUID(id) #define IMPLEMENT_DUAL_ERRORINFO(objectClass, riidSource) #define IMPLEMENT_DYNAMIC(class_name, base_class_name) #define IMPLEMENT_DYNCREATE(class_name, base_class_name) #define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECREATE_EX(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECTLTYPE(class_name, idsUserTypeName, dwOleMisc) #define IMPLEMENT_OLETYPELIB(class_name, tlid, wVerMajor, wVerMinor) #define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) #define INIT_INTERFACE_PART(theClass, localClass) #define PROCESS_LOCAL(class_name, ident_name) AFX_DATADEF CProcessLocal ident_name; #define PURE = 0 #define SNAPINMENUID(id) #define THIS void #define THIS_ #define TRD°r Ð'oùr‡XDlXDl'rðkztxÿÿÿ@ð‚D|tx- Üár˜,j£Æ?Ô©£ÆðÞ¡*`"©£ÆÅÆÙÆ?Ô©£Æ?Ô©£ÆÅÆÙÆCá©yÜß©ŸçßÇç©£ÆÅÆÙÆÍ©yܵ穟çµçÇçâ²pë§ÜÔM0M0õì©£ÆÅÆÙÆíÆ©yܔܩŸç”ÜÇçy©©¯Ö¼Ö·ØÐÖ©Kߟô·ØÐÖ©¯Ö¼Ö·ØÐÖ$söðÖ<  7;b; 1 '-ž  15ò;  FOš   #ž  =A‡: n ¥¥Í  ÉÉ|¼ ék1 ŽŽ1q  ŒŒ?Û ÒÒ51 8;  ÏÏ…  í‰G  ê;   ÝÝýÐ  ÍÍÃî  ÎÎÜ| üüöÉ   ¢:  ÐÐhR ªª¼M1 ““ȇG ••E; 1 ©  %%ý:  // ÇG žž[¨ œœÂ ÌÌMz ——Hž šš.Þ 1 554<  OO#œ ##=  --Ÿ; G  AA^<  !DD™¼ "h¬ #™™‹ $««+<  %ÓÓ#<  &551;  '##çs G (’’]ì )””kq  *››<  +‘‘n ,––¶j -55K .;;¾<  /OOã;  055ù<  1;;=  2OO+;  3##·; G 4--ô<  5ÔÔÎ; G 6AA;  7DDàm 800¼{ 9//kmG :¢¢; ;++UmG <--<  =˜˜ˆ >##– ?--x @AAv ACC";  BËËd C..#1 D¡¡ÔG E**c1 F,,V(G G6 H©©Þ< @ I99é< @ J::; G@ K,,i; 1@ L))‚; G@ M++v; G@ N**®: @ O33º: @ P44ü; @ QII < @ RJJŸ< @ S""u< @ T< @ U!!ƒ< @ V  å: @ W??ñ: @ XH‡s`êMNGViewÿÿÿÿÿÿCProjectMNGView - Win32 ReleaseMNGView - Win32 Release€êûMNGView - Win32 Debug€êSSBR CTargetItemMNGView - Win32 ReleaseSSBRQuellcodedateien CProjGroupSSBRDJWHeader-Dateien CProjGroupSSBRDJWRessourcendateien CProjGroupSSBRDJWdepCDependencyContainerSSBR basetsd.hCDependencyFileSSBR jpeglib.hCDependencyFileSSBRicc34.hCDependencyFileSSBRzlib.hCDependencyFileSSBRlibmng.hCDependencyFileSSBR jconfig.hCDependencyFileSSBRzconf.hCDependencyFileSSBR libmng_conf.hCDependencyFileSSBR jmorecfg.hCDependencyFileSSBRlcms.hCDependencyFileSSBRlibmng_types.hCDependencyFileSSBRDJWDJWDJWtClass, dualClass) #define END_CONNECTION_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_DUAL_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define EXTERN_PROCESS_LOCAL(class_name, ident_name) extern AFX_DATA PROCESS_LOCAL(class_name, ident_name) #define EXT_SNAPINMENUID(id) #define IMPLEMENT_DUAL_ERRORINFO(objectClass, riidSource) #define IMPLEMENT_DYNAMIC(class_name, base_class_name) #define IMPLEMENT_DYNCREATE(class_name, base_class_name) #define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECREATE_EX(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECTLTYPE(class_name, idsUserTypeName, dwOleMisc) #define IMPLEMENT_OLETYPELIB(class_name, tlid, wVerMajor, wVerMinor) #define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) #define INIT_INTERFACE_PART(theClass, localClass) #define PROCESS_LOCAL(class_name, ident_name) AFX_DATADEF CProcessLocal ident_name; #define PURE = 0 #define SNAPINMENUID(id) #define THIS void #define THIS_ #define TRD°r Ð'oùr‡XDlXDl'rðkztxÿÿÿ@ð‚D|tx- Üár˜,j£Æ?Ô©£ÆðÞ¡*`"©£ÆÅÆÙÆ?Ô©£Æ?Ô©£ÆÅÆÙÆCá©yÜß©ŸçßÇç©£ÆÅÆÙÆÍ©yܵ穟çµçÇçâ²pë§ÜÔM0M0õì©£ÆÅÆÙÆíÆ©yܔܩŸç”ÜÇçy©©¯Ö¼Ö·ØÐÖ©Kߟô·ØÐÖ©¯Ö¼Ö·ØÐÖ$söðÖ<  7;b; 1 '-ž  15ò;  FOš   #ž  =A‡: n ¥¥Í  ÉÉ|¼ ék1 ŽŽ1q  ŒŒ?Û ÒÒ51 8;  ÏÏ…  í‰G  ê;   ÝÝýÐ  ÍÍÃî  ÎÎÜ| üüöÉ   ¢:  ÐÐhR ªª¼M1 ““ȇG ••E; 1 ©  %%ý:  // ÇG žž[¨ œœÂ ÌÌMz ——Hž šš.Þ 1 554<  OO#œ ##=  --Ÿ; G  AA^<  !DD™¼ "h¬ #™™‹ $««+<  %ÓÓ#<  &551;  '##çs G (’’]ì )””kq  *››<  +‘‘n ,––¶j -55K .;;¾<  /OOã;  055ù<  1;;=  2OO+;  3##·; G 4--ô<  5ÔÔÎ; G 6AA;  7DDàm 800¼{ 9//kmG :¢¢; ;++UmG <--<  =˜˜ˆ >##– ?--x @AAv ACC";  BËËd C..#1 D¡¡ÔG E**c1 F,,V(G G6 H©©Þ< @ I99é< @ J::; G@ K,,i; 1@ L))‚; G@ M++v; G@ N**®: @ O33º: @ P44ü; @ QII < @ RJJŸ< @ S""u< @ T< @ U!!ƒ< @ V  å: @ W??ñ: @ XH‡sÿÿ CClsFldSlobMNGViewÿÿCProjectMNGView - Win32 ReleaseMNGView - Win32 Release€êûMNGView - Win32 Debug€êSSBR CTargetItemMNGView - Win32 ReleaseSSBRQuellcodedateien CProjGroupSSBRDJWHeader-Dateien CProjGroupSSBRDJWRessourcendateien CProjGroupSSBRDJWdepCDependencyContainerSSBR basetsd.hCDependencyFileSSBR jpeglib.hCDependencyFileSSBRicc34.hCDependencyFileSSBRzlib.hCDependencyFileSSBRlibmng.hCDependencyFileSSBR jconfig.hCDependencyFileSSBRzconf.hCDependencyFileSSBR libmng_conf.hCDependencyFileSSBR jmorecfg.hCDependencyFileSSBRlcms.hCDependencyFileSSBRlibmng_types.hCDependencyFileSSBRDJWDJWDJWtClass, dualClass) #define END_CONNECTION_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_DUAL_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define EXTERN_PROCESS_LOCAL(class_name, ident_name) extern AFX_DATA PROCESS_LOCAL(class_name, ident_name) #define EXT_SNAPINMENUID(id) #define IMPLEMENT_DUAL_ERRORINFO(objectClass, riidSource) #define IMPLEMENT_DYNAMIC(class_name, base_class_name) #define IMPLEMENT_DYNCREATE(class_name, base_class_name) #define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECREATE_EX(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECTLTYPE(class_name, idsUserTypeName, dwOleMisc) #define IMPLEMENT_OLETYPELIB(class_name, tlid, wVerMajor, wVerMinor) #define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) #define INIT_INTERFACE_PART(theClass, localClass) #define PROCESS_LOCAL(class_name, ident_name) AFX_DATADEF CProcessLocal ident_name; #define PURE = 0 #define SNAPINMENUID(id) #define THIS void #define THIS_ #define TRD°r Ð'oùr‡XDlXDl'rðkztxÿÿÿ@ð‚D|tx- Üár˜,j£Æ?Ô©£ÆðÞ¡*`"©£ÆÅÆÙÆ?Ô©£Æ?Ô©£ÆÅÆÙÆCá©yÜß©ŸçßÇç©£ÆÅÆÙÆÍ©yܵ穟çµçÇçâ²pë§ÜÔM0M0õì©£ÆÅÆÙÆíÆ©yܔܩŸç”ÜÇçy©©¯Ö¼Ö·ØÐÖ©Kߟô·ØÐÖ©¯Ö¼Ö·ØÐÖ$söðÖ<  7;b; 1 '-ž  15ò;  FOš   #ž  =A‡: n ¥¥Í  ÉÉ|¼ ék1 ŽŽ1q  ŒŒ?Û ÒÒ51 8;  ÏÏ…  í‰G  ê;   ÝÝýÐ  ÍÍÃî  ÎÎÜ| üüöÉ   ¢:  ÐÐhR ªª¼M1 ““ȇG ••E; 1 ©  %%ý:  // ÇG žž[¨ œœÂ ÌÌMz ——Hž šš.Þ 1 554<  OO#œ ##=  --Ÿ; G  AA^<  !DD™¼ "h¬ #™™‹ $««+<  %ÓÓ#<  &551;  '##çs G (’’]ì )””kq  *››<  +‘‘n ,––¶j -55K .;;¾<  /OOã;  055ù<  1;;=  2OO+;  3##·; G 4--ô<  5ÔÔÎ; G 6AA;  7DDàm 800¼{ 9//kmG :¢¢; ;++UmG <--<  =˜˜ˆ >##– ?--x @AAv ACC";  BËËd C..#1 D¡¡ÔG E**c1 F,,V(G G6 H©©Þ< @ I99é< @ J::; G@ K,,i; 1@ L))‚; G@ M++v; G@ N**®: @ O33º: @ P44ü; @ QII < @ RJJŸ< @ S""u< @ T< @ U!!ƒ< @ V  å: @ W??ñ: @ XH‡sDebuggerÿÿÿÿÿÿÿÿÿÿÿÿJDocumentsÿÿÿÿTÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ @ Control-C@ Control-Break€Datatype MisalignmentÀAccess ViolationÀ In Page ErrorÀIllegal InstructionŒÀArray Bounds ExceededÀFloat Denormal OperandŽÀFloat Divide by ZeroÀFloat Inexact ResultÀFloat Invalid Operation‘ÀFloat Overflow’ÀFloat Stack Check“ÀFloat UnderflowÀ No Memory%ÀNoncontinuable Exception&ÀInvalid Disposition”ÀInteger Divide by Zero•ÀInteger Overflow–ÀPrivileged InstructionýÀStack Overflow5À DLL Not FoundBÀDLL Initialization Failed~mÀModule Not FoundmÀProcedure Not FoundÀInvalid HandlecsmàMicrosoft C++ Exception Überwachung1 Überwachung2 Überwachung3 Überwachung4ûass; #define END_DUAL_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define EXTERN_PROCESS_LOCAL(class_name, ident_name) extern AFX_DATA PROCESS_LOCAL(class_name, ident_name) #define EXT_SNAPINMENUID(id) #define IMPLEMENT_DUAL_ERRORINFO(objectClass, riidSource) #define IMPLEMENT_DYNAMIC(class_name, base_class_name) #define IMPLEMENT_DYNCREATE(class_name, base_class_name) #define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECREATE_EX(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECTLTYPE(class_name, idsUserTypeName, dwOleMisc) #define IMPLEMENT_OLETYPELIB(class_name, tlid, wVerMajor, wVerMinor) #define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) #define INIT_INTERFACE_PART(theClass, localClass) #define PROCESS_LOCAL(class_name, ident_name) AFX_DATADEF CProcessLocal ident_name; #define PURE = 0 #define SNAPINMENUID(id) #define THIS void #define THIS_ #define TRD°r Ð'oùr‡XDlXDl'rðkztxÿÿÿ@ð‚D|tx- Üár˜,j£Æ?Ô©£ÆðÞ¡*`"©£ÆÅÆÙÆ?Ô©£Æ?Ô©£ÆÅÆÙÆCá©yÜß©ŸçßÇç©£ÆÅÆÙÆÍ©yܵ穟çµçÇçâ²pë§ÜÔM0M0õì©£ÆÅÆÙÆíÆ©yܔܩŸç”ÜÇçy©©¯Ö¼Ö·ØÐÖ©Kߟô·ØÐÖ©¯Ö¼Ö·ØÐÖ$söðÖ<  7;b; 1 '-ž  15ò;  FOš   #ž  =A‡: n ¥¥Í  ÉÉ|¼ ék1 ŽŽ1q  ŒŒ?Û ÒÒ51 8;  ÏÏ…  í‰G  ê;   ÝÝýÐ  ÍÍÃî  ÎÎÜ| üüöÉ   ¢:  ÐÐhR ªª¼M1 ““ȇG ••E; 1 ©  %%ý:  // ÇG žž[¨ œœÂ ÌÌMz ——Hž šš.Þ 1 554<  OO#œ ##=  --Ÿ; G  AA^<  !DD™¼ "h¬ #™™‹ $««+<  %ÓÓ#<  &551;  '##çs G (’’]ì )””kq  *››<  +‘‘n ,––¶j -55K .;;¾<  /OOã;  055ù<  1;;=  2OO+;  3##·; G 4--ô<  5ÔÔÎ; G 6AA;  7DDàm 800¼{ 9//kmG :¢¢; ;++UmG <--<  =˜˜ˆ >##– ?--x @AAv ACC";  BËËd C..#1 D¡¡ÔG E**c1 F,,V(G G6 H©©Þ< @ I99é< @ J::; G@ K,,i; 1@ L))‚; G@ M++v; G@ N**®: @ O33º: @ P44ü; @ QII < @ RJJŸ< @ S""u< @ T< @ U!!ƒ< @ V  å: @ W??ñ: @ XH‡s'.\Main.rc Menu THEMENU [Englisch (USA)]&{34866984-49EB-11CF-BF46-00AA004C12E2},ÿÿÿÿÿÿÿÿüÿÿÿéÿÿÿ„„ÊH˜C/C++öIú6hû¤Ôâû¤öI„öú&6Ÿ¤®»Éû " ŠŠ!Š! .\mng.cpp&{2AE27A3D-17F5-11D0-AF1B-00A0C90F9DE6},ÿÿÿÿÿÿÿÿüÿÿÿéÿÿÿÜÜ"ž˜C/C++öIú6hû¤Ôâû¤öI„öú&6Ÿ¤®»Éû " #-#-.\Main.h&{2AE27A3D-17F5-11D0-AF1B-00A0C90F9DE6},ÿÿÿÿÿÿÿÿüÿÿÿéÿÿÿ°°öž˜C/C++öIú6hû¤Ôâû¤öI„öú&6Ÿ¤®»Éû " ^ ^ .\Main.cpp&{2AE27A3C-17F5-11D0-AF1B-00A0C90F9DE6},ÿÿÿÿÿÿÿÿüÿÿÿéÿÿÿÆÆ žng3 Überwachung4ûass; #define END_DUAL_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define END_INTERFACE_PART(localClass) } m_x##localClass; friend class X##localClass; #define EXTERN_PROCESS_LOCAL(class_name, ident_name) extern AFX_DATA PROCESS_LOCAL(class_name, ident_name) #define EXT_SNAPINMENUID(id) #define IMPLEMENT_DUAL_ERRORINFO(objectClass, riidSource) #define IMPLEMENT_DYNAMIC(class_name, base_class_name) #define IMPLEMENT_DYNCREATE(class_name, base_class_name) #define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECREATE_EX(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) #define IMPLEMENT_OLECTLTYPE(class_name, idsUserTypeName, dwOleMisc) #define IMPLEMENT_OLETYPELIB(class_name, tlid, wVerMajor, wVerMinor) #define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) #define INIT_INTERFACE_PART(theClass, localClass) #define PROCESS_LOCAL(class_name, ident_name) AFX_DATADEF CProcessLocal ident_name; #define PURE = 0 #define SNAPINMENUID(id) #define THIS void #define THIS_ #define TRD°r Ð'oùr‡XDlXDl'rðkztxÿÿÿ@ð‚D|tx- Üár˜,j£Æ?Ô©£ÆðÞ¡*`"©£ÆÅÆÙÆ?Ô©£Æ?Ô©£ÆÅÆÙÆCá©yÜß©ŸçßÇç©£ÆÅÆÙÆÍ©yܵ穟çµçÇçâ²pë§ÜÔM0M0õì©£ÆÅÆÙÆíÆ©yܔܩŸç”ÜÇçy©©¯Ö¼Ö·ØÐÖ©Kߟô·ØÐÖ©¯Ö¼Ö·ØÐÖ$söðÖ<  7;b; 1 '-ž  15ò;  FOš   #ž  =A‡: n ¥¥Í  ÉÉ|¼ ék1 ŽŽ1q  ŒŒ?Û ÒÒ51 8;  ÏÏ…  í‰G  ê;   ÝÝýÐ  ÍÍÃî  ÎÎÜ| üüöÉ   ¢:  ÐÐhR ªª¼M1 ““ȇG ••E; 1 ©  %%ý:  // ÇG žž[¨ œœÂ ÌÌMz ——Hž šš.Þ 1 554<  OO#œ ##=  --Ÿ; G  AA^<  !DD™¼ "h¬ #™™‹ $««+<  %ÓÓ#<  &551;  '##çs G (’’]ì )””kq  *››<  +‘‘n ,––¶j -55K .;;¾<  /OOã;  055ù<  1;;=  2OO+;  3##·; G 4--ô<  5ÔÔÎ; G 6AA;  7DDàm 800¼{ 9//kmG :¢¢; ;++UmG <--<  =˜˜ˆ >##– ?--x @AAv ACC";  BËËd C..#1 D¡¡ÔG E**c1 F,,V(G G6 H©©Þ< @ I99é< @ J::; G@ K,,i; 1@ L))‚; G@ M++v; G@ N**®: @ O33º: @ P44ü; @ QII < @ RJJŸ< @ S""u< @ T< @ U!!ƒ< @ V  å: @ W??ñ: @ XH‡slibmng-2.0.2/contrib/msvc/mngview/Main.aps0000644000000000000000000011027012005307152017132 0ustar rootroot ÿÿÿÿ/$HWBÿÿ œŽF:\Nikgames\Libmng\contrib\MNGView\Main.rci~$HWBÿÿÈ0 !!resource.hTHEMENU102APPICON200FILE_OPEN40002FILE_EXIT40003HELP_ABOUT40004 IDC_STATIC-1 _APS_NEXT_RESOURCE_VALUE104_APS_NEXT_COMMAND_VALUE40005_APS_NEXT_CONTROL_VALUE1001_APS_NEXT_SYMED_VALUE101!!Windows.hWINVER0x0400!winresrc.h!winuser.rh_WIN32_IE0x0400SW_HIDE0SW_SHOWNORMAL1SW_NORMAL1 SW_SHOWMINIMIZED2!SW_SHOWMAXIMIZED3"SW_MAXIMIZE3#SW_SHOWNOACTIVATE4$SW_SHOW5%SW_MINIMIZE6&SW_SHOWMINNOACTIVE7'SW_SHOWNA8(SW_RESTORE9)SW_SHOWDEFAULT10*SW_FORCEMINIMIZE11+SW_MAX11,HIDE_WINDOW01SHOW_OPENWINDOW12SHOW_ICONWINDOW23SHOW_FULLSCREEN34SHOW_OPENNOACTIVATE45SW_PARENTCLOSING1:SW_OTHERZOOM2;SW_PARENTOPENING3<SW_OTHERUNZOOM4=VK_LBUTTON0x01CVK_RBUTTON0x02DVK_CANCEL0x03EVK_MBUTTON0x04FVK_BACK0x08HVK_TAB0x09IVK_CLEAR0x0CKVK_RETURN0x0DLVK_SHIFT0x10NVK_CONTROL0x11OVK_MENU0x12PVK_PAUSE0x13QVK_CAPITAL0x14RVK_KANA0x15TVK_HANGEUL0x15UVK_HANGUL0x15VVK_JUNJA0x17WVK_FINAL0x18XVK_HANJA0x19YVK_KANJI0x19ZVK_ESCAPE0x1B\VK_CONVERT0x1C^VK_NONCONVERT0x1D_VK_ACCEPT0x1E`VK_MODECHANGE0x1FaVK_SPACE0x20cVK_PRIOR0x21dVK_NEXT0x22eVK_END0x23fVK_HOME0x24gVK_LEFT0x25hVK_UP0x26iVK_RIGHT0x27jVK_DOWN0x28kVK_SELECT0x29lVK_PRINT0x2AmVK_EXECUTE0x2BnVK_SNAPSHOT0x2CoVK_INSERT0x2DpVK_DELETE0x2EqVK_HELP0x2FrVK_LWIN0x5BwVK_RWIN0x5CxVK_APPS0x5DyVK_NUMPAD00x60{VK_NUMPAD10x61|VK_NUMPAD20x62}VK_NUMPAD30x63~VK_NUMPAD40x64VK_NUMPAD50x65€VK_NUMPAD60x66VK_NUMPAD70x67‚VK_NUMPAD80x68ƒVK_NUMPAD90x69„VK_MULTIPLY0x6A…VK_ADD0x6B†VK_SEPARATOR0x6C‡VK_SUBTRACT0x6DˆVK_DECIMAL0x6E‰VK_DIVIDE0x6FŠVK_F10x70‹VK_F20x71ŒVK_F30x72VK_F40x73ŽVK_F50x74VK_F60x75VK_F70x76‘VK_F80x77’VK_F90x78“VK_F100x79”VK_F110x7A•VK_F120x7B–VK_F130x7C—VK_F140x7D˜VK_F150x7E™VK_F160x7FšVK_F170x80›VK_F180x81œVK_F190x82VK_F200x83žVK_F210x84ŸVK_F220x85 VK_F230x86¡VK_F240x87¢VK_NUMLOCK0x90¤VK_SCROLL0x91¥VK_LSHIFT0xA0¬VK_RSHIFT0xA1­VK_LCONTROL0xA2®VK_RCONTROL0xA3¯VK_LMENU0xA4°VK_RMENU0xA5±VK_PROCESSKEY0xE5´VK_ATTN0xF6·VK_CRSEL0xF7¸VK_EXSEL0xF8¹VK_EREOF0xF9ºVK_PLAY0xFA»VK_ZOOM0xFB¼VK_NONAME0xFC½VK_PA10xFD¾VK_OEM_CLEAR0xFE¿WM_NULL0x0000ÆWM_CREATE0x0001ÇWM_DESTROY0x0002ÈWM_MOVE0x0003ÉWM_SIZE0x0005ÊWM_ACTIVATE0x0006ÌWA_INACTIVE0ÐWA_ACTIVE1ÑWA_CLICKACTIVE2ÒWM_SETFOCUS0x0007ÔWM_KILLFOCUS0x0008ÕWM_ENABLE0x000AÖWM_SETREDRAW0x000B×WM_SETTEXT0x000CØWM_GETTEXT0x000DÙWM_GETTEXTLENGTH0x000EÚWM_PAINT0x000FÛWM_CLOSE0x0010ÜWM_QUERYENDSESSION0x0011ÝWM_QUIT0x0012ÞWM_QUERYOPEN0x0013ßWM_ERASEBKGND0x0014àWM_SYSCOLORCHANGE0x0015áWM_ENDSESSION0x0016âWM_SHOWWINDOW0x0018ãWM_WININICHANGE0x001AäWM_SETTINGCHANGEWM_WININICHANGEæWM_DEVMODECHANGE0x001BêWM_ACTIVATEAPP0x001CëWM_FONTCHANGE0x001DìWM_TIMECHANGE0x001EíWM_CANCELMODE0x001FîWM_SETCURSOR0x0020ïWM_MOUSEACTIVATE0x0021ðWM_CHILDACTIVATE0x0022ñWM_QUEUESYNC0x0023òWM_GETMINMAXINFO0x0024ôWM_PAINTICON0x0026õWM_ICONERASEBKGND0x0027öWM_NEXTDLGCTL0x0028÷WM_SPOOLERSTATUS0x002AøWM_DRAWITEM0x002BùWM_MEASUREITEM0x002CúWM_DELETEITEM0x002DûWM_VKEYTOITEM0x002EüWM_CHARTOITEM0x002FýWM_SETFONT0x0030þWM_GETFONT0x0031ÿWM_SETHOTKEY0x0032WM_GETHOTKEY0x0033WM_QUERYDRAGICON0x0037WM_COMPAREITEM0x0039WM_COMPACTING0x0041WM_COMMNOTIFY0x0044WM_WINDOWPOSCHANGING0x0046 WM_WINDOWPOSCHANGED0x0047 WM_POWER0x0048 PWR_OK1PWR_FAIL(-1)PWR_SUSPENDREQUEST1PWR_SUSPENDRESUME2PWR_CRITICALRESUME3WM_COPYDATA0x004AWM_CANCELJOURNAL0x004BWM_NOTIFY0x004EWM_INPUTLANGCHANGEREQUEST0x0050WM_INPUTLANGCHANGE0x0051WM_TCARD0x0052WM_HELP0x0053WM_USERCHANGED0x0054 WM_NOTIFYFORMAT0x0055!NFR_ANSI1#NFR_UNICODE2$NF_QUERY3%NF_REQUERY4&WM_CONTEXTMENU0x007B(WM_STYLECHANGING0x007C)WM_STYLECHANGED0x007D*WM_DISPLAYCHANGE0x007E+WM_GETICON0x007F,WM_SETICON0x0080-WM_NCCREATE0x00810WM_NCDESTROY0x00821WM_NCCALCSIZE0x00832WM_NCHITTEST0x00843WM_NCPAINT0x00854WM_NCACTIVATE0x00865WM_GETDLGCODE0x00876WM_SYNCPAINT0x00887WM_NCMOUSEMOVE0x00A08WM_NCLBUTTONDOWN0x00A19WM_NCLBUTTONUP0x00A2:WM_NCLBUTTONDBLCLK0x00A3;WM_NCRBUTTONDOWN0x00A4<WM_NCRBUTTONUP0x00A5=WM_NCRBUTTONDBLCLK0x00A6>WM_NCMBUTTONDOWN0x00A7?WM_NCMBUTTONUP0x00A8@WM_NCMBUTTONDBLCLK0x00A9AWM_KEYFIRST0x0100CWM_KEYDOWN0x0100DWM_KEYUP0x0101EWM_CHAR0x0102FWM_DEADCHAR0x0103GWM_SYSKEYDOWN0x0104HWM_SYSKEYUP0x0105IWM_SYSCHAR0x0106JWM_SYSDEADCHAR0x0107KWM_KEYLAST0x0108LWM_IME_STARTCOMPOSITION0x010DOWM_IME_ENDCOMPOSITION0x010EPWM_IME_COMPOSITION0x010FQWM_IME_KEYLAST0x010FRWM_INITDIALOG0x0110UWM_COMMAND0x0111VWM_SYSCOMMAND0x0112WWM_TIMER0x0113XWM_HSCROLL0x0114YWM_VSCROLL0x0115ZWM_INITMENU0x0116[WM_INITMENUPOPUP0x0117\WM_MENUSELECT0x011F]WM_MENUCHAR0x0120^WM_ENTERIDLE0x0121_WM_CTLCOLORMSGBOX0x0132iWM_CTLCOLOREDIT0x0133jWM_CTLCOLORLISTBOX0x0134kWM_CTLCOLORBTN0x0135lWM_CTLCOLORDLG0x0136mWM_CTLCOLORSCROLLBAR0x0137nWM_CTLCOLORSTATIC0x0138oWM_MOUSEFIRST0x0200rWM_MOUSEMOVE0x0200sWM_LBUTTONDOWN0x0201tWM_LBUTTONUP0x0202uWM_LBUTTONDBLCLK0x0203vWM_RBUTTONDOWN0x0204wWM_RBUTTONUP0x0205xWM_RBUTTONDBLCLK0x0206yWM_MBUTTONDOWN0x0207zWM_MBUTTONUP0x0208{WM_MBUTTONDBLCLK0x0209|WM_MOUSELAST0x0209‚WM_PARENTNOTIFY0x0210ŒWM_ENTERMENULOOP0x0211WM_EXITMENULOOP0x0212ŽWM_NEXTMENU0x0213‘WM_SIZING0x0214’WM_CAPTURECHANGED0x0215“WM_MOVING0x0216”WM_POWERBROADCAST0x0218•WM_DEVICECHANGE0x0219–WM_MDICREATE0x0220šWM_MDIDESTROY0x0221›WM_MDIACTIVATE0x0222œWM_MDIRESTORE0x0223WM_MDINEXT0x0224žWM_MDIMAXIMIZE0x0225ŸWM_MDITILE0x0226 WM_MDICASCADE0x0227¡WM_MDIICONARRANGE0x0228¢WM_MDIGETACTIVE0x0229£WM_MDISETMENU0x0230¦WM_ENTERSIZEMOVE0x0231§WM_EXITSIZEMOVE0x0232¨WM_DROPFILES0x0233©WM_MDIREFRESHMENU0x0234ªWM_IME_SETCONTEXT0x0281®WM_IME_NOTIFY0x0282¯WM_IME_CONTROL0x0283°WM_IME_COMPOSITIONFULL0x0284±WM_IME_SELECT0x0285²WM_IME_CHAR0x0286³WM_IME_KEYDOWN0x0290¹WM_IME_KEYUP0x0291ºWM_CUT0x0300ÃWM_COPY0x0301ÄWM_PASTE0x0302ÅWM_CLEAR0x0303ÆWM_UNDO0x0304ÇWM_RENDERFORMAT0x0305ÈWM_RENDERALLFORMATS0x0306ÉWM_DESTROYCLIPBOARD0x0307ÊWM_DRAWCLIPBOARD0x0308ËWM_PAINTCLIPBOARD0x0309ÌWM_VSCROLLCLIPBOARD0x030AÍWM_SIZECLIPBOARD0x030BÎWM_ASKCBFORMATNAME0x030CÏWM_CHANGECBCHAIN0x030DÐWM_HSCROLLCLIPBOARD0x030EÑWM_QUERYNEWPALETTE0x030FÒWM_PALETTEISCHANGING0x0310ÓWM_PALETTECHANGED0x0311ÔWM_HOTKEY0x0312ÕWM_PRINT0x0317ØWM_PRINTCLIENT0x0318ÙWM_HANDHELDFIRST0x0358ÛWM_HANDHELDLAST0x035FÜWM_AFXFIRST0x0360ÞWM_AFXLAST0x037FßWM_PENWINFIRST0x0380âWM_PENWINLAST0x038FãWM_APP0x8000çWM_USER0x0400ðWMSZ_LEFT1õWMSZ_RIGHT2öWMSZ_TOP3÷WMSZ_TOPLEFT4øWMSZ_TOPRIGHT5ùWMSZ_BOTTOM6úWMSZ_BOTTOMLEFT7ûWMSZ_BOTTOMRIGHT8üHTERROR(-2)HTTRANSPARENT(-1)HTNOWHERE0HTCLIENT1HTCAPTION2HTSYSMENU3 HTGROWBOX4 HTSIZEHTGROWBOX HTMENU5 HTHSCROLL6 HTVSCROLL7HTMINBUTTON8HTMAXBUTTON9HTLEFT10HTRIGHT11HTTOP12HTTOPLEFT13HTTOPRIGHT14HTBOTTOM15HTBOTTOMLEFT16HTBOTTOMRIGHT17HTBORDER18HTREDUCEHTMINBUTTONHTZOOMHTMAXBUTTONHTSIZEFIRSTHTLEFTHTSIZELASTHTBOTTOMRIGHTHTOBJECT19HTCLOSE20 HTHELP21!SMTO_NORMAL0x0000'SMTO_BLOCK0x0001(SMTO_ABORTIFHUNG0x0002)MA_ACTIVATE13MA_ACTIVATEANDEAT24MA_NOACTIVATE35MA_NOACTIVATEANDEAT46ICON_SMALL0;ICON_BIG1<SIZE_RESTORED0BSIZE_MINIMIZED1CSIZE_MAXIMIZED2DSIZE_MAXSHOW3ESIZE_MAXHIDE4FSIZENORMALSIZE_RESTOREDKSIZEICONICSIZE_MINIMIZEDLSIZEFULLSCREENSIZE_MAXIMIZEDMSIZEZOOMSHOWSIZE_MAXSHOWNSIZEZOOMHIDESIZE_MAXHIDEOWVR_ALIGNTOP0x0010TWVR_ALIGNLEFT0x0020UWVR_ALIGNBOTTOM0x0040VWVR_ALIGNRIGHT0x0080WWVR_HREDRAW0x0100XWVR_VREDRAW0x0200YWVR_REDRAW(WVR_HREDRAW | WVR_VREDRAW)[WVR_VALIDRECTS0x0400\MK_LBUTTON0x0001dMK_RBUTTON0x0002eMK_SHIFT0x0004fMK_CONTROL0x0008gMK_MBUTTON0x0010hWS_OVERLAPPED0x00000000L~WS_POPUP0x80000000LWS_CHILD0x40000000L€WS_MINIMIZE0x20000000LWS_VISIBLE0x10000000L‚WS_DISABLED0x08000000LƒWS_CLIPSIBLINGS0x04000000L„WS_CLIPCHILDREN0x02000000L…WS_MAXIMIZE0x01000000L†WS_CAPTION0x00C00000L‡WS_BORDER0x00800000LˆWS_DLGFRAME0x00400000L‰WS_VSCROLL0x00200000LŠWS_HSCROLL0x00100000L‹WS_SYSMENU0x00080000LŒWS_THICKFRAME0x00040000LWS_GROUP0x00020000LŽWS_TABSTOP0x00010000LWS_MINIMIZEBOX0x00020000L‘WS_MAXIMIZEBOX0x00010000L’WS_TILEDWS_OVERLAPPED•WS_ICONICWS_MINIMIZE–WS_SIZEBOXWS_THICKFRAME—WS_TILEDWINDOWWS_OVERLAPPEDWINDOW˜WS_OVERLAPPEDWINDOW(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX)¢WS_POPUPWINDOW(WS_POPUP | WS_BORDER | WS_SYSMENU)¦WS_CHILDWINDOW(WS_CHILD)¨WS_EX_DLGMODALFRAME0x00000001L­WS_EX_NOPARENTNOTIFY0x00000004L®WS_EX_TOPMOST0x00000008L¯WS_EX_ACCEPTFILES0x00000010L°WS_EX_TRANSPARENT0x00000020L±WS_EX_MDICHILD0x00000040L³WS_EX_TOOLWINDOW0x00000080L´WS_EX_WINDOWEDGE0x00000100LµWS_EX_CLIENTEDGE0x00000200L¶WS_EX_CONTEXTHELP0x00000400L·WS_EX_RIGHT0x00001000L¹WS_EX_LEFT0x00000000LºWS_EX_RTLREADING0x00002000L»WS_EX_LTRREADING0x00000000L¼WS_EX_LEFTSCROLLBAR0x00004000L½WS_EX_RIGHTSCROLLBAR0x00000000L¾WS_EX_CONTROLPARENT0x00010000LÀWS_EX_STATICEDGE0x00020000LÁWS_EX_APPWINDOW0x00040000LÂWS_EX_OVERLAPPEDWINDOW(WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)ÅWS_EX_PALETTEWINDOW(WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)ÆCS_VREDRAW0x0001ÎCS_HREDRAW0x0002ÏCS_DBLCLKS0x0008ÐCS_OWNDC0x0020ÑCS_CLASSDC0x0040ÒCS_PARENTDC0x0080ÓCS_NOCLOSE0x0200ÔCS_SAVEBITS0x0800ÕCS_BYTEALIGNCLIENT0x1000ÖCS_BYTEALIGNWINDOW0x2000×CS_GLOBALCLASS0x4000ØCS_IME0x00010000ÚCF_TEXT1áCF_BITMAP2âCF_METAFILEPICT3ãCF_SYLK4äCF_DIF5åCF_TIFF6æCF_OEMTEXT7çCF_DIB8èCF_PALETTE9éCF_PENDATA10êCF_RIFF11ëCF_WAVE12ìCF_UNICODETEXT13íCF_ENHMETAFILE14îCF_HDROP15ðCF_LOCALE16ñCF_MAX17òCF_OWNERDISPLAY0x0080õCF_DSPTEXT0x0081öCF_DSPBITMAP0x0082÷CF_DSPMETAFILEPICT0x0083øCF_DSPENHMETAFILE0x008EùCF_PRIVATEFIRST0x0200þCF_PRIVATELAST0x02FFÿCF_GDIOBJFIRST0x0300CF_GDIOBJLAST0x03FFMF_INSERT0x00000000L MF_CHANGE0x00000080L MF_APPEND0x00000100LMF_DELETE0x00000200LMF_REMOVE0x00001000LMF_BYCOMMAND0x00000000LMF_BYPOSITION0x00000400LMF_SEPARATOR0x00000800LMF_ENABLED0x00000000LMF_GRAYED0x00000001LMF_DISABLED0x00000002LMF_UNCHECKED0x00000000LMF_CHECKED0x00000008LMF_USECHECKBITMAPS0x00000200LMF_STRING0x00000000LMF_BITMAP0x00000004L MF_OWNERDRAW0x00000100L!MF_POPUP0x00000010L#MF_MENUBARBREAK0x00000020L$MF_MENUBREAK0x00000040L%MF_UNHILITE0x00000000L'MF_HILITE0x00000080L(MF_DEFAULT0x00001000L+MF_SYSMENU0x00002000L-MF_HELP0x00004000L.MF_RIGHTJUSTIFY0x00004000L0MF_MOUSESELECT0x00008000L3MF_END0x00000080L5MFT_STRINGMF_STRING:MFT_BITMAPMF_BITMAP;MFT_MENUBARBREAKMF_MENUBARBREAK<MFT_MENUBREAKMF_MENUBREAK=MFT_OWNERDRAWMF_OWNERDRAW>MFT_RADIOCHECK0x00000200L?MFT_SEPARATORMF_SEPARATOR@MFT_RIGHTORDER0x00002000LAMFT_RIGHTJUSTIFYMF_RIGHTJUSTIFYBMFS_GRAYED0x00000003LEMFS_DISABLEDMFS_GRAYEDFMFS_CHECKEDMF_CHECKEDGMFS_HILITEMF_HILITEHMFS_ENABLEDMF_ENABLEDIMFS_UNCHECKEDMF_UNCHECKEDJMFS_UNHILITEMF_UNHILITEKMFS_DEFAULTMF_DEFAULTLSC_SIZE0xF000\SC_MOVE0xF010]SC_MINIMIZE0xF020^SC_MAXIMIZE0xF030_SC_NEXTWINDOW0xF040`SC_PREVWINDOW0xF050aSC_CLOSE0xF060bSC_VSCROLL0xF070cSC_HSCROLL0xF080dSC_MOUSEMENU0xF090eSC_KEYMENU0xF100fSC_ARRANGE0xF110gSC_RESTORE0xF120hSC_TASKLIST0xF130iSC_SCREENSAVE0xF140jSC_HOTKEY0xF150kSC_DEFAULT0xF160mSC_MONITORPOWER0xF170nSC_CONTEXTHELP0xF180oSC_SEPARATOR0xF00FpSC_ICONSC_MINIMIZEuSC_ZOOMSC_MAXIMIZEvOBM_CLOSE32754|OBM_UPARROW32753}OBM_DNARROW32752~OBM_RGARROW32751OBM_LFARROW32750€OBM_REDUCE32749OBM_ZOOM32748‚OBM_RESTORE32747ƒOBM_REDUCED32746„OBM_ZOOMD32745…OBM_RESTORED32744†OBM_UPARROWD32743‡OBM_DNARROWD32742ˆOBM_RGARROWD32741‰OBM_LFARROWD32740ŠOBM_MNARROW32739‹OBM_COMBO32738ŒOBM_UPARROWI32737OBM_DNARROWI32736ŽOBM_RGARROWI32735OBM_LFARROWI32734OBM_OLD_CLOSE32767’OBM_SIZE32766“OBM_OLD_UPARROW32765”OBM_OLD_DNARROW32764•OBM_OLD_RGARROW32763–OBM_OLD_LFARROW32762—OBM_BTSIZE32761˜OBM_CHECK32760™OBM_CHECKBOXES32759šOBM_BTNCORNERS32758›OBM_OLD_REDUCE32757œOBM_OLD_ZOOM32756OBM_OLD_RESTORE32755žOCR_NORMAL32512¡OCR_IBEAM32513¢OCR_WAIT32514£OCR_CROSS32515¤OCR_UP32516¥OCR_SIZE32640¦OCR_ICON32641§OCR_SIZENWSE32642¨OCR_SIZENESW32643©OCR_SIZEWE32644ªOCR_SIZENS32645«OCR_SIZEALL32646¬OCR_ICOCUR32647­OCR_NO32648®OCR_APPSTARTING32650³OIC_SAMPLE32512¶OIC_HAND32513·OIC_QUES32514¸OIC_BANG32515¹OIC_NOTE32516ºOIC_WINLOGO32517¼OIC_WARNINGOIC_BANG½OIC_ERROROIC_HAND¾OIC_INFORMATIONOIC_NOTE¿IDI_APPLICATION32512ÇIDI_HAND32513ÈIDI_QUESTION32514ÉIDI_EXCLAMATION32515ÊIDI_ASTERISK32516ËIDI_WINLOGO32517ÍIDI_WARNINGIDI_EXCLAMATIONÛIDI_ERRORIDI_HANDÜIDI_INFORMATIONIDI_ASTERISKÝIDOK1äIDCANCEL2åIDABORT3æIDRETRY4çIDIGNORE5èIDYES6éIDNO7êIDCLOSE8ìIDHELP9íES_LEFT0x0000LôES_CENTER0x0001LõES_RIGHT0x0002LöES_MULTILINE0x0004L÷ES_UPPERCASE0x0008LøES_LOWERCASE0x0010LùES_PASSWORD0x0020LúES_AUTOVSCROLL0x0040LûES_AUTOHSCROLL0x0080LüES_NOHIDESEL0x0100LýES_OEMCONVERT0x0400LþES_READONLY0x0800LÿES_WANTRETURN0x1000LES_NUMBER0x2000LEM_GETSEL0x00B0 EM_SETSEL0x00B1 EM_GETRECT0x00B2 EM_SETRECT0x00B3 EM_SETRECTNP0x00B4 EM_SCROLL0x00B5EM_LINESCROLL0x00B6EM_SCROLLCARET0x00B7EM_GETMODIFY0x00B8EM_SETMODIFY0x00B9EM_GETLINECOUNT0x00BAEM_LINEINDEX0x00BBEM_SETHANDLE0x00BCEM_GETHANDLE0x00BDEM_GETTHUMB0x00BEEM_LINELENGTH0x00C1EM_REPLACESEL0x00C2EM_GETLINE0x00C4EM_LIMITTEXT0x00C5EM_CANUNDO0x00C6EM_UNDO0x00C7EM_FMTLINES0x00C8EM_LINEFROMCHAR0x00C9EM_SETTABSTOPS0x00CB EM_SETPASSWORDCHAR0x00CC!EM_EMPTYUNDOBUFFER0x00CD"EM_GETFIRSTVISIBLELINE0x00CE#EM_SETREADONLY0x00CF$EM_SETWORDBREAKPROC0x00D0%EM_GETWORDBREAKPROC0x00D1&EM_GETPASSWORDCHAR0x00D2'EM_SETMARGINS0x00D3)EM_GETMARGINS0x00D4*EM_SETLIMITTEXTEM_LIMITTEXT+EM_GETLIMITTEXT0x00D5,EM_POSFROMCHAR0x00D6-EM_CHARFROMPOS0x00D7.BS_PUSHBUTTON0x00000000L;BS_DEFPUSHBUTTON0x00000001L<BS_CHECKBOX0x00000002L=BS_AUTOCHECKBOX0x00000003L>BS_RADIOBUTTON0x00000004L?BS_3STATE0x00000005L@BS_AUTO3STATE0x00000006LABS_GROUPBOX0x00000007LBBS_USERBUTTON0x00000008LCBS_AUTORADIOBUTTON0x00000009LDBS_OWNERDRAW0x0000000BLEBS_LEFTTEXT0x00000020LFBS_TEXT0x00000000LHBS_ICON0x00000040LIBS_BITMAP0x00000080LJBS_LEFT0x00000100LKBS_RIGHT0x00000200LLBS_CENTER0x00000300LMBS_TOP0x00000400LNBS_BOTTOM0x00000800LOBS_VCENTER0x00000C00LPBS_PUSHLIKE0x00001000LQBS_MULTILINE0x00002000LRBS_NOTIFY0x00004000LSBS_FLAT0x00008000LTBS_RIGHTBUTTONBS_LEFTTEXTUBN_CLICKED0[BN_PAINT1\BN_HILITE2]BN_UNHILITE3^BN_DISABLE4_BN_DOUBLECLICKED5`BN_PUSHEDBN_HILITEbBN_UNPUSHEDBN_UNHILITEcBN_DBLCLKBN_DOUBLECLICKEDdBN_SETFOCUS6eBN_KILLFOCUS7fBM_GETCHECK0x00F0lBM_SETCHECK0x00F1mBM_GETSTATE0x00F2nBM_SETSTATE0x00F3oBM_SETSTYLE0x00F4pBM_CLICK0x00F5rBM_GETIMAGE0x00F6sBM_SETIMAGE0x00F7tBST_UNCHECKED0x0000vBST_CHECKED0x0001wBST_INDETERMINATE0x0002xBST_PUSHED0x0004yBST_FOCUS0x0008zSS_LEFT0x00000000L€SS_CENTER0x00000001LSS_RIGHT0x00000002L‚SS_ICON0x00000003LƒSS_BLACKRECT0x00000004L„SS_GRAYRECT0x00000005L…SS_WHITERECT0x00000006L†SS_BLACKFRAME0x00000007L‡SS_GRAYFRAME0x00000008LˆSS_WHITEFRAME0x00000009L‰SS_USERITEM0x0000000ALŠSS_SIMPLE0x0000000BL‹SS_LEFTNOWORDWRAP0x0000000CLŒSS_OWNERDRAW0x0000000DLŽSS_BITMAP0x0000000ELSS_ENHMETAFILE0x0000000FLSS_ETCHEDHORZ0x00000010L‘SS_ETCHEDVERT0x00000011L’SS_ETCHEDFRAME0x00000012L“SS_TYPEMASK0x0000001FL”SS_NOPREFIX0x00000080L–SS_NOTIFY0x00000100L˜SS_CENTERIMAGE0x00000200L™SS_RIGHTJUST0x00000400LšSS_REALSIZEIMAGE0x00000800L›SS_SUNKEN0x00001000LœSS_ENDELLIPSIS0x00004000LSS_PATHELLIPSIS0x00008000LžSS_WORDELLIPSIS0x0000C000LŸSS_ELLIPSISMASK0x0000C000L DS_ABSALIGN0x01L§DS_SYSMODAL0x02L¨DS_LOCALEDIT0x20L©DS_SETFONT0x40LªDS_MODALFRAME0x80L«DS_NOIDLEMSG0x100L¬DS_SETFOREGROUND0x200L­DS_3DLOOK0x0004L±DS_FIXEDSYS0x0008L²DS_NOFAILCREATE0x0010L³DS_CONTROL0x0400L´DS_CENTER0x0800LµDS_CENTERMOUSE0x1000L¶DS_CONTEXTHELP0x2000L·LBS_NOTIFY0x0001L¿LBS_SORT0x0002LÀLBS_NOREDRAW0x0004LÁLBS_MULTIPLESEL0x0008LÂLBS_OWNERDRAWFIXED0x0010LÃLBS_OWNERDRAWVARIABLE0x0020LÄLBS_HASSTRINGS0x0040LÅLBS_USETABSTOPS0x0080LÆLBS_NOINTEGRALHEIGHT0x0100LÇLBS_MULTICOLUMN0x0200LÈLBS_WANTKEYBOARDINPUT0x0400LÉLBS_EXTENDEDSEL0x0800LÊLBS_DISABLENOSCROLL0x1000LËLBS_NODATA0x2000LÌLBS_NOSEL0x4000LÎLBS_STANDARD(LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)ÐCBS_SIMPLE0x0001LÖCBS_DROPDOWN0x0002L×CBS_DROPDOWNLIST0x0003LØCBS_OWNERDRAWFIXED0x0010LÙCBS_OWNERDRAWVARIABLE0x0020LÚCBS_AUTOHSCROLL0x0040LÛCBS_OEMCONVERT0x0080LÜCBS_SORT0x0100LÝCBS_HASSTRINGS0x0200LÞCBS_NOINTEGRALHEIGHT0x0400LßCBS_DISABLENOSCROLL0x0800LàCBS_UPPERCASE0x2000LâCBS_LOWERCASE0x4000LãSBS_HORZ0x0000LêSBS_VERT0x0001LëSBS_TOPALIGN0x0002LìSBS_LEFTALIGN0x0002LíSBS_BOTTOMALIGN0x0004LîSBS_RIGHTALIGN0x0004LïSBS_SIZEBOXTOPLEFTALIGN0x0002LðSBS_SIZEBOXBOTTOMRIGHTALIGN0x0004LñSBS_SIZEBOX0x0008LòSBS_SIZEGRIP0x0010LôHELP_CONTEXT0x0001LûHELP_QUIT0x0002LüHELP_INDEX0x0003LýHELP_CONTENTS0x0003LþHELP_HELPONHELP0x0004LÿHELP_SETINDEX0x0005LHELP_SETCONTENTS0x0005LHELP_CONTEXTPOPUP0x0008LHELP_FORCEFILE0x0009LHELP_KEY0x0101LHELP_COMMAND0x0102LHELP_PARTIALKEY0x0105LHELP_MULTIKEY0x0201LHELP_SETWINPOS0x0203LHELP_CONTEXTMENU0x000a HELP_FINDER0x000b HELP_WM_HELP0x000c HELP_SETPOPUP_POS0x000d HELP_TCARD0x8000HELP_TCARD_DATA0x0010HELP_TCARD_OTHER_CALLER0x0011IDH_NO_HELP28440IDH_MISSING_CONTEXT28441IDH_GENERIC_HELP_BUTTON28442IDH_OK28443IDH_CANCEL28444IDH_HELP28445!!commctrl.rhHDS_HORZ0x0000HDS_BUTTONS0x0002HDS_HOTTRACK0x0004HDS_HIDDEN0x0008HDS_DRAGDROP0x0040"HDS_FULLDRAG0x0080#RBS_TOOLTIPS0x0100(RBS_VARHEIGHT0x0200)RBS_BANDBORDERS0x0400*RBS_FIXEDORDER0x0800+RBS_REGISTERDROP0x1000,RBS_AUTOSIZE0x2000-RBS_VERTICALGRIPPER0x4000.RBS_DBLCLKTOGGLE0x8000/TTS_ALWAYSTIP0x019TTS_NOPREFIX0x02:SBARS_SIZEGRIP0x0100=TBS_AUTOTICKS0x0001@TBS_VERT0x0002ATBS_HORZ0x0000BTBS_TOP0x0004CTBS_BOTTOM0x0000DTBS_LEFT0x0004ETBS_RIGHT0x0000FTBS_BOTH0x0008GTBS_NOTICKS0x0010HTBS_ENABLESELRANGE0x0020ITBS_FIXEDLENGTH0x0040JTBS_NOTHUMB0x0080KTBS_TOOLTIPS0x0100MUDS_WRAP0x0001QUDS_SETBUDDYINT0x0002RUDS_ALIGNRIGHT0x0004SUDS_ALIGNLEFT0x0008TUDS_AUTOBUDDY0x0010UUDS_ARROWKEYS0x0020VUDS_HORZ0x0040WUDS_NOTHOUSANDS0x0080XUDS_HOTTRACK0x0100ZPBS_SMOOTH0x01_PBS_VERTICAL0x04`CCS_TOP0x00000001LfCCS_NOMOVEY0x00000002LgCCS_BOTTOM0x00000003LhCCS_NORESIZE0x00000004LiCCS_NOPARENTALIGN0x00000008LjCCS_ADJUSTABLE0x00000020LkCCS_NODIVIDER0x00000040LlCCS_VERT0x00000080LnCCS_LEFT(CCS_VERT | CCS_TOP)oCCS_RIGHT(CCS_VERT | CCS_BOTTOM)pCCS_NOMOVEX(CCS_VERT | CCS_NOMOVEY)qLVS_ICON0x0000uLVS_REPORT0x0001vLVS_SMALLICON0x0002wLVS_LIST0x0003xLVS_TYPEMASK0x0003yLVS_SINGLESEL0x0004zLVS_SHOWSELALWAYS0x0008{LVS_SORTASCENDING0x0010|LVS_SORTDESCENDING0x0020}LVS_SHAREIMAGELISTS0x0040~LVS_NOLABELWRAP0x0080LVS_AUTOARRANGE0x0100€LVS_EDITLABELS0x0200LVS_OWNERDATA0x1000ƒLVS_NOSCROLL0x2000…LVS_TYPESTYLEMASK0xfc00‡LVS_ALIGNTOP0x0000‰LVS_ALIGNLEFT0x0800ŠLVS_ALIGNMASK0x0c00‹LVS_OWNERDRAWFIXED0x0400LVS_NOCOLUMNHEADER0x4000ŽLVS_NOSORTHEADER0x8000TVS_HASBUTTONS0x0001’TVS_HASLINES0x0002“TVS_LINESATROOT0x0004”TVS_EDITLABELS0x0008•TVS_DISABLEDRAGDROP0x0010–TVS_SHOWSELALWAYS0x0020—TVS_RTLREADING0x0040™TVS_NOTOOLTIPS0x0080›TVS_CHECKBOXES0x0100œTVS_TRACKSELECT0x0200TVS_SINGLEEXPAND0x0400ŸTVS_INFOTIP0x0800 TVS_FULLROWSELECT0x1000¡TVS_NOSCROLL0x2000¢TVS_NONEVENHEIGHT0x4000£TCS_SCROLLOPPOSITE0x0001ªTCS_BOTTOM0x0002«TCS_RIGHT0x0002¬TCS_MULTISELECT0x0004­TCS_FLATBUTTONS0x0008°TCS_FORCEICONLEFT0x0010²TCS_FORCELABELLEFT0x0020³TCS_HOTTRACK0x0040µTCS_VERTICAL0x0080¶TCS_TABS0x0000¸TCS_BUTTONS0x0100¹TCS_SINGLELINE0x0000ºTCS_MULTILINE0x0200»TCS_RIGHTJUSTIFY0x0000¼TCS_FIXEDWIDTH0x0400½TCS_RAGGEDRIGHT0x0800¾TCS_FOCUSONBUTTONDOWN0x1000¿TCS_OWNERDRAWFIXED0x2000ÀTCS_TOOLTIPS0x4000ÁTCS_FOCUSNEVER0x8000ÂACS_CENTER0x0001ÅACS_TRANSPARENT0x0002ÆACS_AUTOPLAY0x0004ÇACS_TIMER0x0008ÉMCS_DAYSTATE0x0001ÍMCS_MULTISELECT0x0002ÎMCS_WEEKNUMBERS0x0004ÏMCS_NOTODAYCIRCLE0x0008ÑMCS_NOTODAY0x0010ÒDTS_UPDOWN0x0001ÙDTS_SHOWNONE0x0002ÚDTS_SHORTDATEFORMAT0x0000ÛDTS_LONGDATEFORMAT0x0004ÜDTS_TIMEFORMAT0x0009ÝDTS_APPCANPARSE0x0010ÞDTS_RIGHTALIGN0x0020ßPGS_VERT0x00000000âPGS_HORZ0x00000001ãPGS_AUTOSCROLL0x00000002äPGS_DRAGNDROP0x00000004åNFS_EDIT0x0001éNFS_STATIC0x0002êNFS_LISTCOMBO0x0004ëNFS_BUTTON0x0008ìNFS_ALL0x0010í!!dde.rhWM_DDE_FIRST0x03E0WM_DDE_INITIATE(WM_DDE_FIRST)WM_DDE_TERMINATE(WM_DDE_FIRST+1)WM_DDE_ADVISE(WM_DDE_FIRST+2)WM_DDE_UNADVISE(WM_DDE_FIRST+3)WM_DDE_ACK(WM_DDE_FIRST+4)WM_DDE_DATA(WM_DDE_FIRST+5)WM_DDE_REQUEST(WM_DDE_FIRST+6)WM_DDE_POKE(WM_DDE_FIRST+7)WM_DDE_EXECUTE(WM_DDE_FIRST+8)WM_DDE_LAST(WM_DDE_FIRST+8)!!winnt.rhLANG_NEUTRAL0x00(LANG_AFRIKAANS0x36*LANG_ALBANIAN0x1c+LANG_ARABIC0x01,LANG_BASQUE0x2d-LANG_BELARUSIAN0x23.LANG_BULGARIAN0x02/LANG_CATALAN0x030LANG_CHINESE0x041LANG_CROATIAN0x1a2LANG_CZECH0x053LANG_DANISH0x064LANG_DUTCH0x135LANG_ENGLISH0x096LANG_ESTONIAN0x257LANG_FAEROESE0x388LANG_FARSI0x299LANG_FINNISH0x0b:LANG_FRENCH0x0c;LANG_GERMAN0x07<LANG_GREEK0x08=LANG_HEBREW0x0d>LANG_HINDI0x39?LANG_HUNGARIAN0x0e@LANG_ICELANDIC0x0fALANG_INDONESIAN0x21BLANG_ITALIAN0x10CLANG_JAPANESE0x11DLANG_KOREAN0x12ELANG_LATVIAN0x26FLANG_LITHUANIAN0x27GLANG_MACEDONIAN0x2fHLANG_MALAY0x3eILANG_NORWEGIAN0x14JLANG_POLISH0x15KLANG_PORTUGUESE0x16LLANG_ROMANIAN0x18MLANG_RUSSIAN0x19NLANG_SERBIAN0x1aOLANG_SLOVAK0x1bPLANG_SLOVENIAN0x24QLANG_SPANISH0x0aRLANG_SWAHILI0x41SLANG_SWEDISH0x1dTLANG_THAI0x1eULANG_TURKISH0x1fVLANG_UKRAINIAN0x22WLANG_VIETNAMESE0x2aXSUBLANG_NEUTRAL0x00bSUBLANG_DEFAULT0x01cSUBLANG_SYS_DEFAULT0x02dSUBLANG_ARABIC_SAUDI_ARABIA0x01fSUBLANG_ARABIC_IRAQ0x02gSUBLANG_ARABIC_EGYPT0x03hSUBLANG_ARABIC_LIBYA0x04iSUBLANG_ARABIC_ALGERIA0x05jSUBLANG_ARABIC_MOROCCO0x06kSUBLANG_ARABIC_TUNISIA0x07lSUBLANG_ARABIC_OMAN0x08mSUBLANG_ARABIC_YEMEN0x09nSUBLANG_ARABIC_SYRIA0x0aoSUBLANG_ARABIC_JORDAN0x0bpSUBLANG_ARABIC_LEBANON0x0cqSUBLANG_ARABIC_KUWAIT0x0drSUBLANG_ARABIC_UAE0x0esSUBLANG_ARABIC_BAHRAIN0x0ftSUBLANG_ARABIC_QATAR0x10uSUBLANG_CHINESE_TRADITIONAL0x01vSUBLANG_CHINESE_SIMPLIFIED0x02wSUBLANG_CHINESE_HONGKONG0x03xSUBLANG_CHINESE_SINGAPORE0x04ySUBLANG_CHINESE_MACAU0x05zSUBLANG_DUTCH0x01{SUBLANG_DUTCH_BELGIAN0x02|SUBLANG_ENGLISH_US0x01}SUBLANG_ENGLISH_UK0x02~SUBLANG_ENGLISH_AUS0x03SUBLANG_ENGLISH_CAN0x04€SUBLANG_ENGLISH_NZ0x05SUBLANG_ENGLISH_EIRE0x06‚SUBLANG_ENGLISH_SOUTH_AFRICA0x07ƒSUBLANG_ENGLISH_JAMAICA0x08„SUBLANG_ENGLISH_CARIBBEAN0x09…SUBLANG_ENGLISH_BELIZE0x0a†SUBLANG_ENGLISH_TRINIDAD0x0b‡SUBLANG_ENGLISH_ZIMBABWE0x0cˆSUBLANG_ENGLISH_PHILIPPINES0x0d‰SUBLANG_FRENCH0x01ŠSUBLANG_FRENCH_BELGIAN0x02‹SUBLANG_FRENCH_CANADIAN0x03ŒSUBLANG_FRENCH_SWISS0x04SUBLANG_FRENCH_LUXEMBOURG0x05ŽSUBLANG_FRENCH_MONACO0x06SUBLANG_GERMAN0x01SUBLANG_GERMAN_SWISS0x02‘SUBLANG_GERMAN_AUSTRIAN0x03’SUBLANG_GERMAN_LUXEMBOURG0x04“SUBLANG_GERMAN_LIECHTENSTEIN0x05”SUBLANG_ITALIAN0x01•SUBLANG_ITALIAN_SWISS0x02–SUBLANG_KOREAN0x01—SUBLANG_KOREAN_JOHAB0x02˜SUBLANG_LITHUANIAN0x01™SUBLANG_LITHUANIAN_CLASSIC0x02šSUBLANG_MALAY_MALAYSIA0x01›SUBLANG_MALAY_BRUNEI_DARUSSALAM0x02œSUBLANG_NORWEGIAN_BOKMAL0x01SUBLANG_NORWEGIAN_NYNORSK0x02žSUBLANG_PORTUGUESE0x02ŸSUBLANG_PORTUGUESE_BRAZILIAN0x01 SUBLANG_SERBIAN_LATIN0x02¡SUBLANG_SERBIAN_CYRILLIC0x03¢SUBLANG_SPANISH0x01£SUBLANG_SPANISH_MEXICAN0x02¤SUBLANG_SPANISH_MODERN0x03¥SUBLANG_SPANISH_GUATEMALA0x04¦SUBLANG_SPANISH_COSTA_RICA0x05§SUBLANG_SPANISH_PANAMA0x06¨SUBLANG_SPANISH_DOMINICAN_REPUBLIC0x07©SUBLANG_SPANISH_VENEZUELA0x08ªSUBLANG_SPANISH_COLOMBIA0x09«SUBLANG_SPANISH_PERU0x0a¬SUBLANG_SPANISH_ARGENTINA0x0b­SUBLANG_SPANISH_ECUADOR0x0c®SUBLANG_SPANISH_CHILE0x0d¯SUBLANG_SPANISH_URUGUAY0x0e°SUBLANG_SPANISH_PARAGUAY0x0f±SUBLANG_SPANISH_BOLIVIA0x10²SUBLANG_SPANISH_EL_SALVADOR0x11³SUBLANG_SPANISH_HONDURAS0x12´SUBLANG_SPANISH_NICARAGUA0x13µSUBLANG_SPANISH_PUERTO_RICO0x14¶SUBLANG_SWEDISH0x01·SUBLANG_SWEDISH_FINLAND0x02¸SORT_DEFAULT0x0¾SORT_JAPANESE_XJIS0x0ÀSORT_JAPANESE_UNICODE0x1ÁSORT_CHINESE_BIG50x0ÃSORT_CHINESE_PRCP0x0ÄSORT_CHINESE_UNICODE0x1ÅSORT_CHINESE_PRC0x2ÆSORT_KOREAN_KSC0x0ÈSORT_KOREAN_UNICODE0x1ÉSORT_GERMAN_PHONE_BOOK0x1Ë!!dlgs.hctlFirst0x0400ctlLast0x04ffpsh10x0400psh20x0401psh30x0402 psh40x0403!psh50x0404"psh60x0405#psh70x0406$psh80x0407%psh90x0408&psh100x0409'psh110x040a(psh120x040b)psh130x040c*psh140x040d+psh150x040e,pshHelppsh15-psh160x040f.chx10x04103chx20x04114chx30x04125chx40x04136chx50x04147chx60x04158chx70x04169chx80x0417:chx90x0418;chx100x0419<chx110x041a=chx120x041b>chx130x041c?chx140x041d@chx150x041eAchx160x041fBrad10x0420Grad20x0421Hrad30x0422Irad40x0423Jrad50x0424Krad60x0425Lrad70x0426Mrad80x0427Nrad90x0428Orad100x0429Prad110x042aQrad120x042bRrad130x042cSrad140x042dTrad150x042eUrad160x042fVgrp10x0430[grp20x0431\grp30x0432]grp40x0433^frm10x0434_frm20x0435`frm30x0436afrm40x0437brct10x0438crct20x0439drct30x043aerct40x043bfico10x043cgico20x043dhico30x043eiico40x043fjstc10x0440ostc20x0441pstc30x0442qstc40x0443rstc50x0444sstc60x0445tstc70x0446ustc80x0447vstc90x0448wstc100x0449xstc110x044aystc120x044bzstc130x044c{stc140x044d|stc150x044e}stc160x044f~stc170x0450stc180x0451€stc190x0452stc200x0453‚stc210x0454ƒstc220x0455„stc230x0456…stc240x0457†stc250x0458‡stc260x0459ˆstc270x045a‰stc280x045bŠstc290x045c‹stc300x045dŒstc310x045estc320x045fŽlst10x0460“lst20x0461”lst30x0462•lst40x0463–lst50x0464—lst60x0465˜lst70x0466™lst80x0467šlst90x0468›lst100x0469œlst110x046alst120x046bžlst130x046cŸlst140x046d lst150x046e¡lst160x046f¢cmb10x0470§cmb20x0471¨cmb30x0472©cmb40x0473ªcmb50x0474«cmb60x0475¬cmb70x0476­cmb80x0477®cmb90x0478¯cmb100x0479°cmb110x047a±cmb120x047b²cmb130x047c³cmb140x047d´cmb150x047eµcmb160x047f¶edt10x0480»edt20x0481¼edt30x0482½edt40x0483¾edt50x0484¿edt60x0485Àedt70x0486Áedt80x0487Âedt90x0488Ãedt100x0489Äedt110x048aÅedt120x048bÆedt130x048cÇedt140x048dÈedt150x048eÉedt160x048fÊscr10x0490Ïscr20x0491Ðscr30x0492Ñscr40x0493Òscr50x0494Óscr60x0495Ôscr70x0496Õscr80x0497ÖFILEOPENORD1536ÜMULTIFILEOPENORD1537ÝPRINTDLGORD1538ÞPRNSETUPDLGORD1539ßFINDDLGORD1540àREPLACEDLGORD1541áFONTDLGORD1542âFORMATDLGORD311543ãFORMATDLGORD301544äRUNDLGORD1545åPAGESETUPDLGORD1546èNEWFILEOPENORD1547éNEWOBJECTOPENORD1548ê!!winver.hVS_FILE_INFORT_VERSIONVS_VERSION_INFO1VS_USER_DEFINED100VS_FFI_SIGNATURE0xFEEF04BDLVS_FFI_STRUCVERSION0x00010000LVS_FFI_FILEFLAGSMASK0x0000003FL VS_FF_DEBUG0x00000001L#VS_FF_PRERELEASE0x00000002L$VS_FF_PATCHED0x00000004L%VS_FF_PRIVATEBUILD0x00000008L&VS_FF_INFOINFERRED0x00000010L'VS_FF_SPECIALBUILD0x00000020L(VOS_UNKNOWN0x00000000L+VOS_DOS0x00010000L,VOS_OS2160x00020000L-VOS_OS2320x00030000L.VOS_NT0x00040000L/VOS__BASE0x00000000L1VOS__WINDOWS160x00000001L2VOS__PM160x00000002L3VOS__PM320x00000003L4VOS__WINDOWS320x00000004L5VOS_DOS_WINDOWS160x00010001L7VOS_DOS_WINDOWS320x00010004L8VOS_OS216_PM160x00020002L9VOS_OS232_PM320x00030003L:VOS_NT_WINDOWS320x00040004L;VFT_UNKNOWN0x00000000L>VFT_APP0x00000001L?VFT_DLL0x00000002L@VFT_DRV0x00000003LAVFT_FONT0x00000004LBVFT_VXD0x00000005LCVFT_STATIC_LIB0x00000007LDVFT2_UNKNOWN0x00000000LGVFT2_DRV_PRINTER0x00000001LHVFT2_DRV_KEYBOARD0x00000002LIVFT2_DRV_LANGUAGE0x00000003LJVFT2_DRV_DISPLAY0x00000004LKVFT2_DRV_MOUSE0x00000005LLVFT2_DRV_NETWORK0x00000006LMVFT2_DRV_SYSTEM0x00000007LNVFT2_DRV_INSTALLABLE0x00000008LOVFT2_DRV_SOUND0x00000009LPVFT2_DRV_COMM0x0000000ALQVFT2_DRV_INPUTMETHOD0x0000000BLRVFT2_FONT_RASTER0x00000001LUVFT2_FONT_VECTOR0x00000002LVVFT2_FONT_TRUETYPE0x00000003LWVFFF_ISSHAREDFILE0x0001ZVFF_CURNEDEST0x0001\VFF_FILEINUSE0x0002]VFF_BUFFTOOSMALL0x0004^VIFF_FORCEINSTALL0x0001aVIFF_DONTDELETEOLD0x0002bVIF_TEMPFILE0x00000001LdVIF_MISMATCH0x00000002LeVIF_SRCOLD0x00000004LfVIF_DIFFLANG0x00000008LhVIF_DIFFCODEPG0x00000010LiVIF_DIFFTYPE0x00000020LjVIF_WRITEPROT0x00000040LlVIF_FILEINUSE0x00000080LmVIF_OUTOFSPACE0x00000100LnVIF_ACCESSVIOLATION0x00000200LoVIF_SHARINGVIOLATION0x00000400LpVIF_CANNOTCREATE0x00000800LqVIF_CANNOTDELETE0x00001000LrVIF_CANNOTRENAME0x00002000LsVIF_CANNOTDELETECUR0x00004000LtVIF_OUTOFMEMORY0x00008000LuVIF_CANNOTREADSRC0x00010000LwVIF_CANNOTREADDST0x00020000LxVIF_BUFFTOOSMALL0x00040000Lz!!!!ãÿ$HWBÿÿÉ0 ÿÿÿÿÈ MNG.icoê$HWBÿÿÊ0 4102THEMENUF:\Nikgames\Libmng\contrib\MNGView\Main.rcFILE_OPENBœFILE_EXITCœHELP_ABOUTDœ$ÿÿ14200APPICONF:\Nikgames\Libmng\contrib\MNGView\Main.rc?$ÿÿTEXTINCLUDE1$ÿÿTEXTINCLUDE2$ÿÿTEXTINCLUDE3$ÿÿ$ÿÿ»$HWBÿÿ/0 F:\Nikgames\Libmng\contrib\MNGView\resource.hE:\Microsoft Visual Studio\VC98\INCLUDE/Windows.hE:\Microsoft Visual Studio\VC98\INCLUDE/winresrc.hE:\Microsoft Visual Studio\VC98\INCLUDE/winuser.rhE:\Microsoft Visual Studio\VC98\INCLUDE/commctrl.rhE:\Microsoft Visual Studio\VC98\INCLUDE/dde.rhE:\Microsoft Visual Studio\VC98\INCLUDE/winnt.rhE:\Microsoft Visual Studio\VC98\INCLUDE/dlgs.hE:\Microsoft Visual Studio\VC98\INCLUDE/winver.hJ$HWBÿÿ-0 4102THEMENU14200APPICONTEXTINCLUDE1TEXTINCLUDE2TEXTINCLUDE3—$HWBÿÿ.0 IDOK1VS_VERSION_INFO1IDCANCEL2IDABORT3IDRETRY4IDIGNORE5IDYES6IDNO7IDCLOSE8IDHELP9_APS_NEXT_SYMED_VALUE101THEMENU102_APS_NEXT_RESOURCE_VALUE104APPICON200_APS_NEXT_CONTROL_VALUE1001FILE_OPEN40002FILE_EXIT40003HELP_ABOUT40004FILE_SAVE40005_APS_NEXT_COMMAND_VALUE40006IDC_STATIC-1\ ÿÿÿÿf0 FileBœOpenEœSave€CœExitHelp€DœAbout¨ ÿÿÿÿ0 ( @€  ´¶´ôúüÜÚÜüþü ­véùa¿l'i0dör BMP fZiöle(i‚n õd¿o|Éw‚Csgg iBcoþn¨O æƒâº ‚šg£K@gÌ‘±r -«/ø¿¯`[gÖ1€xc €üè|€§pZüv€¿â‚ 8#S'o€/ô·Ç¯rÖ1g7Ývú\¿ügì²evr€?“ ²·ù¿@/œÈÉKO@ ô‘·ür¿/œ7/øþrúƒ¿\¨´²røù¿¿ä ìd±Pør¿\NoPsnepåF³{:÷P\¿NIKPGA­M³RE÷BS¿\S{LPPOWVIEWè\dIPCOè*NdXSPõ\¿PpðNåNGõ.¿IäCdOP`€þ´r„¼S ¹÷¿ Ph¹÷׿\ œ‚sd g<|ƒ‚èêgdPP pZÌåögLvPN¨ƒ P;×/Œv¨-ößv×ÙD/÷ׯ¿,VÖ´1rôT´r`Zƒöœ–vø-rg×vþûD¿0§’-÷é¿ÿÿÿ¿ÿxn´ƒrp0Ro\Ÿøn¿ vø¿/¿\ȪOsŒgƒȬ öo×¢¯{PÖ1´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ ÿÿÿÿÈ0  ¨ 4TEXTINCLUDEÿÿ0 resource.h4TEXTINCLUDEÿÿ0 #include "Windows.h" 4TEXTINCLUDEÿÿ0 ø$HWBÿÿ/DHWBÿÿ i~˜HWBÿÿÈ0 (HWBÿÿÉ0 êhHWBÿÿÊ0 »x€HWBÿÿ/0 JX‚HWBÿÿ-0 —È‚HWBÿÿ.0 \€„ÿÿÿÿf0 ¨ü„ÿÿÿÿ0 ÄÿÿÿÿÈ0 ŽTEXTINCLUDEÿÿ0 LŽTEXTINCLUDEÿÿ0 ˜ŽTEXTINCLUDEÿÿ0 libmng-2.0.2/contrib/msvc/mngview/Main.rc0000644000000000000000000000467412005307152016765 0ustar rootroot//Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "Windows.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // Englisch (USA) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Menu // THEMENU MENU DISCARDABLE BEGIN POPUP "File" BEGIN MENUITEM "Open", FILE_OPEN MENUITEM "Save", FILE_SAVE MENUITEM SEPARATOR MENUITEM "Exit", FILE_EXIT END POPUP "Help" BEGIN MENUITEM "About", HELP_ABOUT END END #endif // Englisch (USA) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // Deutsch (Österreich) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEA) #ifdef _WIN32 LANGUAGE LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. APPICON ICON DISCARDABLE "MNG.ico" #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""Windows.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // Deutsch (Österreich) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED libmng-2.0.2/contrib/msvc/mngview/MNGView.dsp0000644000000000000000000001021712005307152017525 0ustar rootroot# Microsoft Developer Studio Project File - Name="MNGView" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** NICHT BEARBEITEN ** # TARGTYPE "Win32 (x86) Application" 0x0101 CFG=MNGView - Win32 Debug !MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE !MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl !MESSAGE !MESSAGE NMAKE /f "MNGView.mak". !MESSAGE !MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben !MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: !MESSAGE !MESSAGE NMAKE /f "MNGView.mak" CFG="MNGView - Win32 Debug" !MESSAGE !MESSAGE Für die Konfiguration stehen zur Auswahl: !MESSAGE !MESSAGE "MNGView - Win32 Release" (basierend auf "Win32 (x86) Application") !MESSAGE "MNGView - Win32 Debug" (basierend auf "Win32 (x86) Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "MNGView - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc07 /d "NDEBUG" # ADD RSC /l 0xc07 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /out:"MNGView.exe" !ELSEIF "$(CFG)" == "MNGView - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc07 /d "_DEBUG" # ADD RSC /l 0xc07 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept !ENDIF # Begin Target # Name "MNGView - Win32 Release" # Name "MNGView - Win32 Debug" # Begin Group "Quellcodedateien" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\Main.cpp # End Source File # Begin Source File SOURCE=.\Main.rc # End Source File # Begin Source File SOURCE=.\mng.cpp # End Source File # End Group # Begin Group "Header-Dateien" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\Main.h # End Source File # Begin Source File SOURCE=.\resource.h # End Source File # End Group # Begin Group "Ressourcendateien" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=.\Mng.ico # End Source File # End Group # End Target # End Project libmng-2.0.2/contrib/msvc/mngview/MNGView.dsw0000644000000000000000000000103012005307152017525 0ustar rootrootMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN! ############################################################################### Project: "MNGView"=.\MNGView.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### libmng-2.0.2/contrib/msvc/mngview/MNGView.ncb0000644000000000000000000000004612005307152017500 0ustar rootrootMicrosoft C/C++ program database 2.00 libmng-2.0.2/contrib/msvc/mngview/sRGB.icm0000644000000000000000000000611012005307152017025 0ustar rootroot HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿlibmng-2.0.2/contrib/msvc/win32dll/0000755000000000000000000000000012005307152015522 5ustar rootrootlibmng-2.0.2/contrib/msvc/win32dll/README.txt0000644000000000000000000000143212005307152017220 0ustar rootrootMSVC project files for libmng.dll --------------------------------- Contribution by Chad Austin (This README by Gerard Juyn) These project files were kindly donated by Chad. Please note that it requires jpeglib, zlib and lcms to be in a directory which is at the same level as the libmng directory. I'm not sure how things work, since I don't have access to MSVC, so it could be this needs a little tweaking, considering the location where I put contributions. As to the DLL itself. If you want to distribute libmng.dll with your Application and store it in the standard Windows system-directory, you *must* use the libmng.dll provided in this distribution. *Not* a dll you have compiled yourself, unless you place this dll in the same directory as your own Application!!! Thanks, Gerard libmng-2.0.2/contrib/msvc/win32dll/libmng.dsp0000644000000000000000000002500312005307152017502 0ustar rootroot# Microsoft Developer Studio Project File - Name="libmng" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=libmng - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "libmng.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 "libmng.mak" CFG="libmng - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "libmng - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "libmng - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "libmng - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMNG_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W2 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMNG_EXPORTS" /D "MNG_BUILD_DLL" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 !ELSEIF "$(CFG)" == "libmng - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMNG_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W2 /Gm /GX /ZI /Od /I "zlib" /I "jpeg" /I "lcms/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMNG_EXPORTS" /D "MNG_BUILD_DLL" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept !ENDIF # Begin Target # Name "libmng - Win32 Release" # Name "libmng - Win32 Debug" # Begin Group "mng" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=..\..\..\libmng_callback_xs.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_chunk_io.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_chunk_prc.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_chunk_xs.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_cms.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_display.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_dither.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_error.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_filter.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_hlapi.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_jpeg.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_object_prc.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_pixels.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_prop_xs.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_read.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_trace.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_write.c # End Source File # Begin Source File SOURCE=..\..\..\libmng_zlib.c # End Source File # End Group # Begin Group "jpeg" # PROP Default_Filter "" # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcapimin.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcapistd.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jccoefct.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jccolor.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcdctmgr.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jchuff.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcinit.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcmainct.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcmarker.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcmaster.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcomapi.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcparam.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcphuff.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcprepct.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jcsample.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jctrans.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdapimin.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdapistd.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdatadst.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdatasrc.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdcoefct.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdcolor.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jddctmgr.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdhuff.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdinput.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdmainct.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdmarker.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdmaster.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdmerge.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdphuff.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdpostct.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdsample.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jdtrans.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jerror.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jfdctflt.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jfdctfst.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jfdctint.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jidctflt.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jidctfst.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jidctint.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jidctred.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jmemmgr.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jmemnobs.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jquant1.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jquant2.c # End Source File # Begin Source File SOURCE=..\..\..\..\jpgsrc6b\jutils.c # End Source File # End Group # Begin Group "lcms" # PROP Default_Filter "" # Begin Source File SOURCE=..\..\..\..\lcms\source\CMSCNVRT.C # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\CMSERR.C # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\CMSGAMMA.C # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\CMSGMT.C # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\cmsintrp.c # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\cmsio1.c # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\CMSLUT.C # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\CMSMATSH.C # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\cmsmtrx.c # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\CMSPACK.C # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\cmspcs.c # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\CMSWTPNT.C # End Source File # Begin Source File SOURCE=..\..\..\..\lcms\source\cmsxform.c # End Source File # End Group # Begin Group "zlib" # PROP Default_Filter "" # Begin Source File SOURCE=..\..\..\..\zlib\adler32.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\compress.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\crc32.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\deflate.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\infblock.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\infcodes.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\inffast.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\inflate.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\inftrees.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\infutil.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\trees.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\uncompr.c # End Source File # Begin Source File SOURCE=..\..\..\..\zlib\zutil.c # End Source File # End Group # End Target # End Project libmng-2.0.2/contrib/msvc/win32dll/libmng.dsw0000644000000000000000000000077412005307152017521 0ustar rootrootMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "libmng"=".\libmng.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### libmng-2.0.2/contrib/msvc/makemng/0000755000000000000000000000000012005307152015503 5ustar rootrootlibmng-2.0.2/contrib/msvc/makemng/makemng.c0000644000000000000000000010343512005307152017274 0ustar rootroot/* * 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 #include #include #include #include #include #include #ifdef WIN32 # include #else # include #endif struct options { char *inmask; char *inpath; char *outfile; int framerate; char verbose; char backimage; char deltamask; int sectorsize; int fullrects; } opts; // externals char** make_file_list (const char* pattern, int* pnum_entries); void free_file_list (char** list); // internals int error (int errn, const char* fmt, const char* s); void verbose (const char* fmt, const char* s); void verbose_d (const char* fmt, int val); void parse_arguments (int argc, char *argv[], struct options *opts); int read_file_list (void); void calc_mng_dims (void); void select_back_image (void); void delta_images (void); int write_mng_file (void); typedef union { struct { unsigned char r, g, b, a; } bchan; unsigned char channels[4]; unsigned int value; } RGBA; typedef struct _file_info { FILE* f; char* fname; char* fmode; int w, h; int x, y; RGBA* image; unsigned char* indimg; int delay; int identical; unsigned short objid; unsigned short cloneid; int clone; unsigned short precloneid; int preclone; struct _file_info* next; } file_info; void file_info_free (); // MNG callbacks mng_ptr MNG_DECL mng_alloc (mng_size_t iLen); void MNG_DECL mng_free (mng_ptr pPtr, mng_size_t iLen); mng_bool MNG_DECL mng_open_stream(mng_handle mng); mng_bool MNG_DECL mng_close_stream(mng_handle mng); mng_bool MNG_DECL mng_read_stream(mng_handle mng, mng_ptr buffer, mng_uint32 size, mng_uint32p bytes); mng_bool MNG_DECL mng_write_stream (mng_handle mng, mng_ptr buffer, mng_uint32 size, mng_uint32p bytes); mng_bool MNG_DECL mng_process_header(mng_handle mng, mng_uint32 width, mng_uint32 height); mng_ptr MNG_DECL mng_get_canvasline_read(mng_handle mng, mng_uint32 line); mng_ptr MNG_DECL mng_get_canvasline_write(mng_handle mng, mng_uint32 line); mng_bool MNG_DECL mng_refresh_display(mng_handle mng, mng_uint32 x, mng_uint32 y, mng_uint32 w, mng_uint32 h); mng_uint32 MNG_DECL mng_get_tickcount(mng_handle mng); mng_bool MNG_DECL mng_set_timer(mng_handle mng, mng_uint32 msecs); #define MAX_COLORS 0x100 // global png/mng data char** Files = 0; int cFiles = 0; file_info* Infos = 0; mng_palette8 Pal; int cPalClr = 0; int mngw = 0, mngh = 0; int iback = 0; int timerate = 100; // default 100 ticks per second int framedelay = 20; // default 5 fps int _curframe = -1; int _curdeltaframe = -1; int main(int argc, char* argv[]) { int ret = 0; parse_arguments (argc, argv, &opts); if (opts.framerate) // update delay framedelay = timerate / opts.framerate; if (!opts.inpath && (strchr (opts.inmask, '/') || strchr (opts.inmask, '\\'))) { char *pch1, *pch2; opts.inpath = (char*) calloc (strlen (opts.inmask), 1); if (!opts.inpath) return error (EXIT_FAILURE, "No memory", 0); strcpy (opts.inpath, opts.inmask); pch1 = strrchr (opts.inpath, '/'); pch2 = strrchr (opts.inpath, '\\'); if (pch2 > pch1) pch1 = pch2; pch1[1] = 0; // term the path verbose ("Frame files in dir: %s\n", opts.inpath); } if (!opts.outfile) { char* pch; opts.outfile = (char*) calloc (strlen(opts.inmask) + 6, 1); if (!opts.outfile) return error (EXIT_FAILURE, "No memory", 0); strcpy (opts.outfile, opts.inmask); while ((pch = strchr (opts.outfile, '*')) != 0) strcpy (pch, pch + 1); pch = strstr (opts.outfile, ".png"); if (!pch) pch = opts.outfile + strlen (opts.outfile); strcpy (pch, ".mng"); if (pch == opts.outfile || pch[-1] == '/' || pch[-1] == '\\') { // have to fix blank name memmove (pch + 1, pch, strlen(pch) + 1); *pch = '1'; } verbose ("Output file: %s\n", opts.outfile); } fprintf (stderr, "using timerate of %d and framedelay of %d\n", timerate, framedelay); ret = read_file_list (); if (!ret) { calc_mng_dims (); if (opts.backimage) select_back_image (); delta_images (); ret = write_mng_file (); } file_info_free (); free_file_list (Files); return ret; } int error(int errn, const char* fmt, const char* s) { fprintf(stderr, fmt, s); return errn; } void verbose(const char* fmt, const char* s) { if (!opts.verbose) return; fprintf(stderr, fmt, s); } void verbose_d (const char* fmt, int val) { if (!opts.verbose) return; fprintf(stderr, fmt, val); } void usage() { fprintf(stderr, "usage: makemng [-v] [-f rate] [-r] [-s size] [-o outputfile] \n"); fprintf(stderr, "produces an MNG animation from a bunch of frame images\n"); fprintf(stderr, "options:\n"); fprintf(stderr, " -v\t\t : be verbose, explains things no human should know\n"); fprintf(stderr, " -f rate\t : sets the framerate; rate is 1..100 per second (default 5)\n"); fprintf(stderr, " -b\t\t : auto-select background frame (instead of frame0)\n"); fprintf(stderr, " -r\t\t : split delta frames into full rectangles only\n"); fprintf(stderr, " -s size\t : enable sector cleanup and set sector size (8..64)\n"); fprintf(stderr, "diagnostical options:\n"); fprintf(stderr, " -d\t\t : generate delta-mask PNGs (form: mask_FRM1_FRM2.png)\n"); } void parse_arguments(int argc, char *argv[], struct options *opts) { char ch; memset(opts, '\0', sizeof (struct options)); while ((ch = getopt(argc, argv, "?hvbdrf:s:o:")) != -1) { switch(ch) { case 'o': opts->outfile = optarg; break; case 'f': opts->framerate = atoi(optarg); if (opts->framerate < 1 || opts->framerate > 100) { fprintf(stderr, "invalid -f option value\n"); usage(); exit(EXIT_FAILURE); } break; case 'd': opts->deltamask = 1; break; case 'b': opts->backimage = 1; break; case 'r': opts->fullrects = 1; break; case 's': opts->sectorsize = atoi(optarg); if (opts->sectorsize < 8 || opts->sectorsize > 64) { fprintf(stderr, "invalid -r option value\n"); usage(); exit(EXIT_FAILURE); } break; case 'v': opts->verbose = 1; break; case '?': case 'h': default: usage(); exit(EXIT_FAILURE); } } argc -= optind; argv += optind; if (argc != 1) { usage(); exit(EXIT_FAILURE); } opts->inmask = argv[0]; } void make_file_name(int index, char* buf) { if (opts.inpath) strcpy(buf, opts.inpath); else *buf = 0; strcat(buf, Files[index]); } void file_info_init (file_info* ms) { memset(ms, 0, sizeof(*ms)); ms->identical = -1; ms->clone = -1; ms->preclone = -1; } void file_info_cleanup (file_info* ms) { file_info* fi = ms; while (fi) { file_info* tempi = fi; if (fi->image) { free(fi->image); fi->image = 0; } if (fi->indimg) { free(fi->indimg); fi->indimg = 0; } if (fi->f) { fclose(fi->f); fi->f = 0; } fi = fi->next; if (tempi != ms) free (tempi); } } void file_info_free () { int i; if (Infos) { for (i = 0; i < cFiles; i++) file_info_cleanup (Infos + i); free (Infos); Infos = 0; } } int equal_colors (RGBA rgba, mng_palette8e mng_clr) { return rgba.bchan.r == mng_clr.iRed && rgba.bchan.g == mng_clr.iGreen && rgba.bchan.b == mng_clr.iBlue; } int lookup_palette (RGBA rgba) { int i; for (i = 0; i < cPalClr && !equal_colors(rgba, Pal[i]); i++) ; return i < cPalClr ? i : -1; } int update_palette (file_info* ms) { int i; for (i = 0; i < ms->w * ms->h; i++) { RGBA rgba = ms->image[i]; int ipal = lookup_palette (rgba); if (ipal == -1) { // add color if (cPalClr >= MAX_COLORS) return 1; Pal[cPalClr].iRed = rgba.bchan.r; Pal[cPalClr].iGreen = rgba.bchan.g; Pal[cPalClr].iBlue = rgba.bchan.b; cPalClr++; } } return 0; } int convert_image_indexed (file_info* ms) { int i; ms->indimg = (unsigned char*) malloc (ms->w * ms->h); if (!ms->indimg) return 230; for (i = 0; i < ms->w * ms->h; i++) { int ipal = lookup_palette (ms->image[i]); if (ipal == -1) return 1; // something is screwed ms->indimg[i] = ipal; } free (ms->image); ms->image = 0; return 0; } int read_file_list (void) { int ret = 0; mng_handle mng; char namebuf[260]; int i; cFiles = 0; Files = make_file_list(opts.inmask, &cFiles); if (!Files || cFiles == 0) { fprintf (stderr, "No frame files found\n"); return 1; } Infos = (file_info*) malloc (sizeof(file_info) * cFiles); if (!Infos) return 251; memset(Infos, 0, sizeof(file_info) * cFiles); mng = mng_initialize (MNG_NULL, mng_alloc, mng_free, MNG_NULL); if (mng == MNG_NULL) return 250; // set the callbacks mng_setcb_openstream(mng, mng_open_stream); mng_setcb_closestream(mng, mng_close_stream); mng_setcb_readdata(mng, mng_read_stream); mng_setcb_processheader(mng, mng_process_header); mng_setcb_getcanvasline(mng, mng_get_canvasline_read); mng_setcb_gettickcount(mng, mng_get_tickcount); mng_setcb_settimer(mng, mng_set_timer); mng_setcb_refresh(mng, mng_refresh_display); for (i = 0; i < cFiles && !ret; i++) { file_info* rf = Infos + i; file_info_init (rf); make_file_name (i, namebuf); rf->fname = namebuf; rf->fmode = "rb"; verbose_d ("%03d ", i); verbose ("reading '%s'...", rf->fname); mng_reset (mng); mng_set_userdata (mng, rf); for (ret = mng_readdisplay (mng); ret == MNG_NEEDMOREDATA || ret == MNG_NEEDTIMERWAIT; ret = mng_display_resume (mng)) { if (ret == MNG_NEEDTIMERWAIT) rf->delay = 0; } if (ret) { fprintf (stderr, "Could not read '%s'\n", rf->fname); ret = 2; } ret = update_palette (rf); if (ret) { fprintf (stderr, "Too many unique colors (%d processed), giving up\n", i); ret = 3; } ret = convert_image_indexed (rf); if (ret) { fprintf (stderr, "Image conversion failed on '%s'\n", rf->fname); ret = 4; } verbose (" done\n", 0); } mng_cleanup (&mng); if (ret == MNG_NOERROR) fprintf (stderr, "%d animation frames\n", cFiles); return ret; } void calc_mng_dims (void) { int i; mngw = mngh = -1; // get max dims for (i = 0; i < cFiles; i++) { if (Infos[i].w > mngw) mngw = Infos[i].w; if (Infos[i].h > mngh) mngh = Infos[i].h; } // adjust images - center for (i = 0; i < cFiles; i++) { if (Infos[i].w < mngw) Infos[i].x = (mngw - Infos[i].w) >> 1; if (Infos[i].h < mngh) Infos[i].y = (mngh - Infos[i].h) >> 1; } } int compare_images (file_info* i1, file_info* i2) { int cnt = 0; int w, h, x, y; int dx1, dx2, dy1, dy2; if (i1->w > i2->w) { w = i2->w; dx1 = i2->x; dx2 = 0; } else if (i1->w < i2->w) { w = i1->w; dx1 = 0; dx2 = i1->x; } else { w = i1->w; dx1 = dx2 = 0; } if (i1->h > i2->h) { h = i2->h; dy1 = i2->y; dy2 = 0; } else if (i1->h < i2->h) { h = i1->h; dy1 = 0; dy2 = i1->y; } else { h = i1->h; dy1 = dy2 = 0; } for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (i1->indimg[(y + dy1) * i1->w + x + dx1] != i2->indimg[(y + dy2) * i2->w + x + dx2]) cnt++; } } return cnt; } void select_back_image (void) { int i; int* cdiff; int max; cdiff = (int*) calloc (cFiles, sizeof(int)); if (!cdiff) return; verbose ("selecting optimal background image...", 0); for (i = 2; i < cFiles; i++) { if (Infos[i].w == mngw && Infos[i].h == mngh) { cdiff[i] = compare_images (Infos + i, Infos + i - 1) - compare_images (Infos + i, Infos + 0); } else { // image is smaller than animation and cannot be background cdiff[i] = 0x7fffffff; } } // the difference has to be big enough // or it will be useless iback = 0; max = mngw * mngh / 32; for (i = 2; i < cFiles; i++) { if (cdiff[i] > max) { iback = i; max = cdiff[i]; } } verbose (" done\n", 0); fprintf(stderr, "frame %03d selected as background\n", iback); } int equal_images (int i1, int i2) { // deference identical chain while (Infos[i1].identical != -1) i1 = Infos[i1].identical; while (Infos[i2].identical != -1) i2 = Infos[i2].identical; if (i1 == i2) return 1; if (Infos[i1].x != Infos[i2].x || Infos[i1].y != Infos[i2].y || Infos[i1].w != Infos[i2].w || Infos[i1].h != Infos[i2].h) return 0; return compare_images (Infos + i1, Infos + i2) == 0; } int delta_adjust_positions (int* pos1, int* pos2) { if (*pos1 <= *pos2) return 1; else { (*pos1)--; (*pos2)--; return -1; } } void clean_expansion_horz (unsigned char* mask, int w, int x1, int y1, int x2, int y2, int threshold) { int x, y, dx, dy; // assume anything out of bounds is cleared int prevclear = threshold + 1; dy = delta_adjust_positions (&y1, &y2); dx = delta_adjust_positions (&x1, &x2); for (y = y1; y != y2; y += dy) { int dcnt, ecnt; dcnt = ecnt = 0; for (x = x1; x != x2; x += dx) { if (mask[y * w + x] == 1) dcnt++; else if (mask[y * w + x] == 2 || mask[y * w + x] == 3) ecnt++; } if (dcnt == 0 && ecnt == 0) { // line is clear prevclear++; } else if (dcnt == 0) { if (prevclear >= threshold) { // it's not clear yet, but it will be in a moment ;) int lx, ly = y; if (prevclear == threshold) { // need to clean everything we just checked ly = y - prevclear * dy; } for (ly = ly; ly != y + dy; ly += dy) for (lx = x1; lx != x2; lx += dx) mask[ly * w + lx] = 0; } prevclear++; } else { // line is dirty prevclear = 0; } } } void clean_expansion_vert (unsigned char* mask, int w, int x1, int y1, int x2, int y2, int threshold) { int x, y, dx, dy; // assume anything out of bounds is cleared int prevclear = threshold + 1; dy = delta_adjust_positions (&y1, &y2); dx = delta_adjust_positions (&x1, &x2); for (x = x1; x != x2; x += dx) { int dcnt, ecnt; dcnt = ecnt = 0; for (y = y1; y != y2; y += dy) { if (mask[y * w + x] == 1) dcnt++; else if (mask[y * w + x] == 2 || mask[y * w + x] == 3) ecnt++; } if (dcnt == 0 && ecnt == 0) { // line is clear prevclear++; } else if (dcnt == 0) { if (prevclear >= threshold) { // it's not clear yet, but it will be in a moment ;) int ly, lx = x; if (prevclear == threshold) { // need to clean everything we just checked lx = x - prevclear * dx; } for (lx = lx; lx != x + dx; lx += dx) for (ly = y1; ly != y2; ly += dy) mask[ly * w + lx] = 0; } prevclear++; } else { // line is dirty prevclear = 0; } } } struct _expand_corner { int x, y; int tx1, ty1; int tx2, ty2; } const expand_corner [] = { {0, 0, 1, 0, 0, 1}, // top-left {1, 0, 0, 0, 0, 1}, // top-mid, from left {1, 0, 2, 0, 2, 1}, // top-mid, from right {2, 0, 1, 0, 2, 1}, // top-right {0, 1, 0, 0, 1, 0}, // mid-left, from top {0, 1, 0, 2, 1, 2}, // mid-left, from bottom {2, 1, 1, 0, 2, 0}, // mid-right, from top {2, 1, 1, 2, 2, 2}, // mid-right, from bottom {0, 2, 1, 2, 0, 1}, // bot-left {1, 2, 0, 1, 0, 2}, // bot-mid, from left {1, 2, 2, 1, 2, 2}, // bot-mid, from right {2, 2, 1, 2, 2, 1}, // bot-right {-1,-1, -1,-1, -1,-1} // term }; // this will recursively expand the missing corner pixels // recursion is limited so we dont overflow the stack int expand_rect (char* mask, int x, int y, int w, int h) { static int level = 0; int x1, y1, x2, y2, i, lx, ly; const struct _expand_corner* pc; signed char matrix[3][3]; int cnt = 0; if (level > 99) return 1; // make sure parent knows it failed level++; if (x > 0) x1 = x - 1; else { for (i = 0; i < 3; i++) matrix[0][i] = -1; x1 = x; } if (y > 0) y1 = y - 1; else { for (i = 0; i < 3; i++) matrix[i][0] = -1; y1 = y; } if (x + 1 < w) x2 = x + 2; else { for (i = 0; i < 3; i++) matrix[2][i] = -1; x2 = x + 1; } if (y + 1 < h) y2 = y + 2; else { for (i = 0; i < 3; i++) matrix[i][2] = -1; y2 = y + 1; } for (ly = y1; ly < y2; ly++) for (lx = x1; lx < x2; lx++) matrix[lx - x + 1][ly - y + 1] = mask[ly * w + lx]; // check corner pixels for (pc = expand_corner; pc->x != -1; pc++) { if (matrix[pc->x][pc->y] == 0 && matrix[pc->tx1][pc->ty1] > 0 && matrix[pc->tx2][pc->ty2] > 0) { // corner pixel missing int ofs = (y - 1 + pc->y) * w + (x - 1 + pc->x); matrix[pc->x][pc->y] = 3; // but it may already be present in the mask (recursive) if (mask[ofs] == 0) { mask[ofs] = 3; cnt += 1 + expand_rect (mask, x - 1 + pc->x, y - 1 + pc->y, w, h); } } } level--; return cnt; } file_info* file_info_add_image (file_info* fi) { file_info* ni; ni = (file_info*) malloc (sizeof(file_info)); if (!ni) return 0; file_info_init (ni); while (fi->next) fi = fi->next; return fi->next = ni; } int is_multi_delta_image (file_info* fi) { return fi && fi->next; } #define MASK_COLORS 4 mng_palette8e mask_pal[MASK_COLORS] = { {0x00, 0x00, 0x00}, {0xff, 0xff, 0xff}, {0x00, 0xff, 0x00}, {0x00, 0x00, 0xff} }; void create_mask_png (char* mask, int w, int h) { int ret = 0; mng_handle mng; file_info wf; char fname[260]; mng_ptr imgdata; unsigned char* tempdata; unsigned char* p; uLong srcLen; uLong dstLen; int i; file_info_init (&wf); sprintf(fname, "mask_%03d_%03d.png", _curframe, _curdeltaframe); wf.fname = fname; wf.fmode = "wb"; // extra byte in front of each line for filter type srcLen = w * h + h; tempdata = (mng_ptr) malloc(srcLen); if (!tempdata) return; // maximum necessary space // deflated data can be 100.1% + 12 bytes in worst case dstLen = srcLen + srcLen / 100 + 20; // extra 8 for safety imgdata = (mng_ptr) malloc(dstLen); if (!imgdata) return; for (i = 0, p = tempdata; i < w * h; i++, p++) { if (i % w == 0) { // write filter byte *p++ = 0; } *p = mask[i]; } if (Z_OK != compress2(imgdata, &dstLen, tempdata, srcLen, 9)) return; free(tempdata); mng = mng_initialize (&wf, mng_alloc, mng_free, MNG_NULL); if (mng == MNG_NULL) return; // set the callbacks mng_setcb_openstream(mng, mng_open_stream); mng_setcb_closestream(mng, mng_close_stream); mng_setcb_writedata(mng, mng_write_stream); ret = mng_create (mng); ret = mng_putchunk_ihdr (mng, w, h, MNG_BITDEPTH_8, MNG_COLORTYPE_INDEXED, MNG_COMPRESSION_DEFLATE, MNG_FILTER_ADAPTIVE, MNG_INTERLACE_NONE); if (ret == MNG_NOERROR) ret = mng_putchunk_plte (mng, 4, mask_pal); if (ret == MNG_NOERROR) ret = mng_putchunk_idat (mng, dstLen, imgdata); if (ret == MNG_NOERROR) ret = mng_putchunk_iend (mng); free (imgdata); if (ret == MNG_NOERROR) ret = mng_write (mng); mng_cleanup (&mng); file_info_cleanup (&wf); } int build_delta (file_info* i1, file_info* i2) { int w, h, x, y; int dx1, dx2, dy1, dy2; int cnt; char* mask = 0; if (i1->w > i2->w) { w = i2->w; dx1 = i2->x; dx2 = 0; } else if (i1->w < i2->w) { w = i1->w; dx1 = 0; dx2 = i1->x; } else { w = i1->w; dx1 = dx2 = 0; } if (i1->h > i2->h) { h = i2->h; dy1 = i2->y; dy2 = 0; } else if (i1->h < i2->h) { h = i1->h; dy1 = 0; dy2 = i1->y; } else { h = i1->h; dy1 = dy2 = 0; } mask = (char*) malloc (w * h); if (!mask) return 220; memset(mask, 0, w * h); // build diff mask first for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (i1->indimg[(y + dy1) * i1->w + x + dx1] != i2->indimg[(y + dy2) * i2->w + x + dx2]) // diff pixel mask[y * w + x] = 1; } } // coarse expand the diff pixels for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (mask[y * w + x] == 1) { int x1 = x - 2; int x2 = x + 3; int y1 = y - 2; int y2 = y + 3; int lx; if (x1 < 0) x1 = 0; if (x2 > w) x2 = w; if (y1 < 0) y1 = 0; if (y2 > h) y2 = h; for (y1 = y1; y1 < y2; y1++) for (lx = x1; lx < x2; lx++) if (mask[y1 * w + lx] == 0) mask[y1 * w + lx] = 2; } } } // scan and remove extra expansion horizontally and vertically clean_expansion_vert (mask, w, 0, 0, w, h, 1); clean_expansion_vert (mask, w, w, 0, 0, h, 1); clean_expansion_horz (mask, w, 0, 0, w, h, 1); clean_expansion_horz (mask, w, 0, h, w, 0, 1); do // coarse expand the diff pixels { // merge would-be diff rectangles in the process cnt = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (mask[y * w + x] != 0) cnt += expand_rect (mask, x, y, w, h); } } // repeat is something was expanded } while (cnt != 0); // at this point we should have guaranteed non-overlapping // rectangles that cover all of the delta areas if (opts.sectorsize) { // final expansion cleanup for (y = 0; y < h; y += opts.sectorsize) { for (x = 0; x < w; x += opts.sectorsize) { int x2, y2; cnt = 0; for (y2 = y; y2 < y + opts.sectorsize && y2 < h; y2++) for (x2 = x; x2 < x + opts.sectorsize && x2 < w; x2++) if (mask[y2 * w + x2] == 1) cnt++; if (cnt > 0) continue; // dirty sector // clean up sector for (y2 = y; y2 < y + opts.sectorsize && y2 < h; y2++) for (x2 = x; x2 < x + opts.sectorsize && x2 < w; x2++) mask[y2 * w + x2] = 0; } } } // check how muany pixels have to be replaced for (x = 0, cnt = 0; x < w * h; x++) if (mask[x]) cnt++; if (opts.deltamask) create_mask_png (mask, w, h); // generate delta images if (cnt != w * h) { int ofs; for (y = 0, ofs = 0; y < h; y++) { for (x = 0; x < w; x++, ofs++) { if (mask[ofs] != 0) { // copy masked rectangle into a new image // and clear the mask int i; int rw, rh; int x2, y2; unsigned char* src; unsigned char* dst; file_info* ni; ni = file_info_add_image (i1); if (!ni) { x = w; y = h; break; } // lookup delta rectangle for (i = x, src = mask + ofs; i < w && *src != 0; i++, src++) ; ni->w = rw = i - x; if (opts.fullrects) { // locate only complete rectangles y2 = y + 1; for (i = y + 1, src = mask + ofs; i < h && *src != 0; i++, src += w) { unsigned char* src2; y2 = i; for (x2 = x, src2 = src; x2 < x + rw && *src2 != 0; x2++, src2++) ; if (x2 < x + rw) break; } } else { // any rectangles for (y2 = y + 1, src = mask + ofs; y2 < h && *src != 0; y2++, src += w) ; } ni->h = rh = y2 - y; ni->indimg = (unsigned char*) malloc (rw * rh); if (!ni->indimg) { x = w; y = h; break; } // copy the pixels for (i = 0, src = i1->indimg + (dy1 + y) * i1->w + dx1 + x, dst = ni->indimg; i < rh; i++, src += i1->w, dst += rw ) { memcpy (dst, src, rw); memset (mask + ofs + i * w, 0, rw); } ni->x = i1->x + dx1 + x; ni->y = i1->y + dy1 + y; } } } if (i1->next) { // dispose of the original file_info* ni = i1->next; free (i1->indimg); i1->indimg = ni->indimg; i1->x = ni->x; i1->y = ni->y; i1->w = ni->w; i1->h = ni->h; i1->next = ni->next; free (ni); } } else { // break here cnt = 1; } if (mask) free (mask); return 0; } void delta_images (void) { int i; unsigned short nextid = 0x101; verbose ("calculating frame image deltas", 0); Infos[iback].objid = nextid++; if (iback != 0) { // set the first frame objid different // from back id Infos[0].objid = nextid++; } // remove dupes for (i = 1; i < cFiles; i++) { int i2; if (i == iback) continue; Infos[i].objid = Infos[i - 1].objid; for (i2 = i - 1; i2 >= 0 && Infos[i].identical == -1; i2--) { int orgi2 = i2; // deference identical chain while (Infos[i2].identical != -1) i2 = Infos[i2].identical; if (equal_images (i, i2)) { Infos[i].identical = i2; // dont need image data anymore if (Infos[i].indimg) { free (Infos[i].indimg); Infos[i].indimg = 0; } if (orgi2 != i - 1) { // detached descendant // clone the object for it if (Infos[i2].clone == -1) { // no clones yet Infos[i2].cloneid = nextid++; Infos[i2].clone = i; Infos[i].objid = Infos[i2].cloneid; } else { // already cloned for another frame // tell the frame to preclone it for // this frame too // dereference preclone chain first for (i2 = Infos[i2].clone; Infos[i2].preclone != -1; i2 = Infos[i2].preclone) ; Infos[i2].preclone = i; Infos[i2].precloneid = nextid++; Infos[i].objid = Infos[i2].precloneid; } } } } verbose (".", 0); } verbose ("|", 0); // compute deltas for (i = cFiles - 1; i >= 0; i--) { int i2; if (i == iback || Infos[i].identical != -1) // no delta needed continue; else { if (i == 0 && i != iback) { // delta against original background i2 = iback; } else { // deref indentical chain for (i2 = i - 1; i2 >= 0 && Infos[i2].identical != -1; i2 = Infos[i2].identical) ; // sanity check if (Infos[i2].objid != Infos[i].objid) { fprintf (stderr, "delta_images: logical error 1\n"); exit(EXIT_FAILURE); } } // debug info _curframe = i; _curdeltaframe = i2; build_delta (Infos + i, Infos + i2); } verbose (".", 0); } verbose ("\n", 0); } int get_png_image_data (file_info* ms, unsigned char* imgdata) { int i; for (i = 0; i < ms->w * ms->h; i++, imgdata++) { if (i % ms->w == 0) { // write filter byte *imgdata++ = 0; } *imgdata = ms->indimg[i]; } return 0; } int compress_png (file_info* ms, mng_ptr imgdata, mng_uint32 imglen, mng_uint32p bytes) { int ret = 0; unsigned char* tempdata; uLong srcLen; *bytes = 0; // extra byte in front of each line for filter type srcLen = ms->w * ms->h + ms->h; tempdata = (mng_ptr) malloc(srcLen); if (!tempdata) return 241; ret = get_png_image_data (ms, tempdata); if (!ret) { uLong dstLen = imglen; if (Z_OK == compress2(imgdata, &dstLen, tempdata, srcLen, 9)) *bytes = dstLen; else ret = 253; } free(tempdata); return ret; } int output_png (mng_handle mng, file_info* rf, int delta) { int ret = 0; mng_ptr imgdata; mng_uint32 imglen; mng_uint32 cbcomp; unsigned short objid = rf->objid; // maximum necessary space // deflated data can be 100.1% + 12 bytes in worst case imglen = mngw * mngh + mngh; imglen += imglen / 100 + 20; // extra 8 for safety imgdata = (mng_ptr) malloc(imglen); if (!imgdata) return 252; do { if (delta) { // output delta ret = mng_putchunk_dhdr (mng, objid, MNG_IMAGETYPE_PNG, MNG_DELTATYPE_BLOCKPIXELREPLACE, rf->w, rf->h, rf->x, rf->y); } else { // output image verbatim ret = mng_putchunk_ihdr (mng, rf->w, rf->h, MNG_BITDEPTH_8, MNG_COLORTYPE_INDEXED, MNG_COMPRESSION_DEFLATE, MNG_FILTER_ADAPTIVE, MNG_INTERLACE_NONE); if (ret == MNG_NOERROR) { // write empty PLTE to use the global PLTE ret = mng_putchunk_plte (mng, 0, Pal); //ret = mng_putchunk_plte (mng, cPalClr, Pal); // enable to write plain PNG } } if (ret == MNG_NOERROR) ret = compress_png (rf, imgdata, imglen, &cbcomp); if (ret == MNG_NOERROR) ret = mng_putchunk_idat (mng, cbcomp, imgdata); if (ret == MNG_NOERROR) ret = mng_putchunk_iend (mng); } while ((rf = rf->next) != 0 && ret == MNG_NOERROR); free (imgdata); return ret; } int write_mng_file (void) { int ret = 0; mng_handle mng; file_info wf; file_info rf; file_info backf; int i; unsigned short lastobjid; char curframemode, newframemode; mng = mng_initialize (MNG_NULL, mng_alloc, mng_free, MNG_NULL); if (mng == MNG_NULL) { fprintf (stderr, "libmng did not init properly\n"); return 250; } // set the callbacks mng_setcb_openstream(mng, mng_open_stream); mng_setcb_closestream(mng, mng_close_stream); mng_setcb_writedata(mng, mng_write_stream); file_info_init (&wf); wf.fname = opts.outfile; wf.fmode = "wb"; mng_set_userdata (mng, &wf); ret = mng_create (mng); if (ret != MNG_NOERROR) fprintf (stderr, "Could not create '%s'\n", wf.fname); else verbose ("writing MNG file '%s'", wf.fname); ret = mng_putchunk_mhdr (mng, mngw, mngh, timerate, 0, 0, 0, MNG_SIMPLICITY_VALID | MNG_SIMPLICITY_SIMPLEFEATURES | MNG_SIMPLICITY_COMPLEXFEATURES | MNG_SIMPLICITY_DELTAPNG | 0x240); //ret = mng_putchunk_term (mng, MNG_TERMACTION_LASTFRAME, MNG_ITERACTION_LASTFRAME, 0, 0); ret = mng_putchunk_plte (mng, cPalClr, Pal); ret = mng_putchunk_back (mng, 0,0,0, 0, 0, MNG_BACKGROUNDIMAGE_NOTILE); curframemode = MNG_FRAMINGMODE_1; ret = mng_putchunk_fram (mng, MNG_FALSE, curframemode, 0,MNG_NULL, MNG_CHANGEDELAY_DEFAULT, MNG_CHANGETIMOUT_NO, MNG_CHANGECLIPPING_NO, MNG_CHANGESYNCID_NO, framedelay, 0,0,0,0,0,0, MNG_NULL,0); // define the staring image/object backf = Infos[iback]; ret = mng_putchunk_defi (mng, backf.objid, MNG_DONOTSHOW_NOTVISIBLE, MNG_CONCRETE, MNG_FALSE, 0,0, MNG_FALSE, 0,0,0,0); ret = output_png (mng, &backf, 0); //ret = mng_putchunk_save (mng, MNG_TRUE, 0,0); //ret = mng_putchunk_seek (mng, 5, "start"); if (iback != 0) { // clone the starting object for the first frame ret = mng_putchunk_clon (mng, backf.objid, Infos[0].objid, MNG_FULL_CLONE, MNG_DONOTSHOW_NOTVISIBLE, MNG_CONCRETE_ASPARENT, MNG_FALSE, 0,0,0); } lastobjid = 0; for (i = 0; i < cFiles && ret == MNG_NOERROR; i++) { rf = Infos[i]; if (rf.precloneid != 0) { // pre-clone the object for another frame ret = mng_putchunk_clon (mng, rf.objid, rf.precloneid, MNG_FULL_CLONE, MNG_DONOTSHOW_NOTVISIBLE, MNG_CONCRETE_ASPARENT, MNG_FALSE, 0,0,0); } if (is_multi_delta_image (&rf)) // multi-delta png; frame mode: 0-delay for subframe newframemode = MNG_FRAMINGMODE_2; else // frame mode: 1 image per frame newframemode = MNG_FRAMINGMODE_1; if (newframemode != curframemode) { // change framing mode only ret = mng_putchunk_fram (mng, MNG_FALSE, newframemode, 0,MNG_NULL, MNG_CHANGEDELAY_NO, MNG_CHANGETIMOUT_NO, MNG_CHANGECLIPPING_NO, MNG_CHANGESYNCID_NO, 0,0,0,0,0,0,0, MNG_NULL,0); curframemode = newframemode; } else if (curframemode == MNG_FRAMINGMODE_2) { // start new subframe ret = mng_putchunk_fram (mng, MNG_TRUE, 0,0,MNG_NULL,0,0,0,0,0,0,0,0,0,0,0,0,0); } if (rf.indimg != 0 && i != iback) { // display a delta png ret = output_png (mng, &rf, 1); } if (rf.cloneid != 0) { // post-clone the object for another frame ret = mng_putchunk_clon (mng, rf.objid, rf.cloneid, MNG_FULL_CLONE, MNG_DONOTSHOW_NOTVISIBLE, MNG_CONCRETE_ASPARENT, MNG_FALSE, 0,0,0); } if (rf.objid != lastobjid || rf.identical != -1) { // show the object for this frame ret = mng_putchunk_show (mng, MNG_FALSE, rf.objid, rf.objid, MNG_SHOWMODE_0); lastobjid = rf.objid; } verbose (".", 0); } //ret = mng_putchunk_seek (mng, 3, "end"); ret = mng_putchunk_mend (mng); ret = mng_write (mng); file_info_cleanup (&wf); mng_cleanup (&mng); if (ret == MNG_NOERROR) verbose ("finished.\n", 0); else fprintf (stderr, "Could not create MNG file\n"); return ret; } mng_ptr MNG_DECL mng_alloc (mng_size_t iLen) { mng_ptr ptr; if (iLen & 0x80000000) return 0; // MNG error! ptr = malloc (iLen); if (ptr) memset(ptr, 0, iLen); return ptr; } void MNG_DECL mng_free (mng_ptr pPtr, mng_size_t iLen) { if (iLen) free (pPtr); } mng_bool MNG_DECL mng_open_stream (mng_handle mng) { file_info* ms; ms = (file_info*) mng_get_userdata (mng); ms->f = fopen (ms->fname, ms->fmode); if (!ms->f) { fprintf(stderr, "unable to open '%s'\n", ms->fname); return MNG_FALSE; } return MNG_TRUE; } mng_bool MNG_DECL mng_close_stream (mng_handle mng) { file_info* ms; ms = (file_info*) mng_get_userdata (mng); fclose(ms->f); ms->f = NULL; return MNG_TRUE; } mng_bool MNG_DECL mng_read_stream (mng_handle mng, mng_ptr buffer, mng_uint32 size, mng_uint32p bytes) { file_info* ms; ms = (file_info*) mng_get_userdata (mng); *bytes = fread(buffer, 1, size, ms->f); return MNG_TRUE; } mng_bool MNG_DECL mng_write_stream (mng_handle mng, mng_ptr buffer, mng_uint32 size, mng_uint32p bytes) { file_info* ms; ms = (file_info*) mng_get_userdata (mng); *bytes = fwrite(buffer, 1, size, ms->f); return MNG_TRUE; } mng_bool MNG_DECL mng_process_header (mng_handle mng, mng_uint32 width, mng_uint32 height) { file_info* ms; ms = (file_info*) mng_get_userdata (mng); ms->w = width; ms->h = height; ms->image = (RGBA*) malloc(sizeof(RGBA) * width * height); if (!ms->image) return MNG_FALSE; mng_set_canvasstyle(mng, MNG_CANVAS_RGBA8); return MNG_TRUE; } mng_ptr MNG_DECL mng_get_canvasline_read (mng_handle mng, mng_uint32 line) { file_info* ms; mng_ptr row; ms = (file_info*) mng_get_userdata (mng); row = ms->image + ms->w * line; return row; } mng_ptr MNG_DECL mng_get_canvasline_write (mng_handle mng, mng_uint32 line) { file_info* ms; ms = (file_info*) mng_get_userdata (mng); //if (!ms->rowdata) // ms->rowdata = (unsigned char*) malloc (ms->w); //if (!ms->rowdata) // return MNG_NULL; //make_pal_row (ms, line, ms->rowdata); // satisfying compiler line = 0; return MNG_NULL; } mng_bool MNG_DECL mng_refresh_display (mng_handle mng, mng_uint32 x, mng_uint32 y, mng_uint32 w, mng_uint32 h) { // not implemented file_info* ms; ms = (file_info*) mng_get_userdata (mng); // satisfying compiler x = y = w = h = 0; return MNG_TRUE; } mng_uint32 MNG_DECL mng_get_tickcount (mng_handle mng) { // not implemented file_info* ms; static int tick = 0; ms = (file_info*) mng_get_userdata (mng); return tick += 50; } mng_bool MNG_DECL mng_set_timer (mng_handle mng, mng_uint32 msecs) { // not implemented file_info* ms; ms = (file_info*) mng_get_userdata (mng); ms->delay = msecs; return MNG_TRUE; } libmng-2.0.2/contrib/msvc/makemng/filelist.c0000644000000000000000000001307412005307152017467 0ustar rootroot/* * 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. */ /* This file contains two versions of make_file_list(); one for Windows, and * one for other systems (POSIX). */ #ifdef WIN32 #include #include #include #include char** make_file_list (const char* pattern, int* pnum_entries) { int num_entries, length; char** StringTable; char** lpLastOffs; num_entries = 0; StringTable = 0; do { int slen; long handle; struct _finddata_t f; if (num_entries == 0) length = 0; else { slen = (num_entries + 1) * sizeof (char*); StringTable = (char**) malloc (slen + length); if (StringTable == 0) break; lpLastOffs = StringTable; *lpLastOffs = (char*)StringTable + slen; num_entries = 0; length = slen; } handle = _findfirst (pattern, &f); if (handle != -1) { do { if (f.attrib & (_A_HIDDEN | _A_SUBDIR | _A_SYSTEM)) continue; slen = strlen (f.name) + 1; length += slen; if (StringTable) { char *lpStr; char **lpLo, **lpHi; lpLo = StringTable; lpHi = lpLastOffs - 1; while (lpLo <= lpHi) { char c1, c2; char *pStr; int LocLen; char **lpMid; lpMid = lpLo + ((lpHi - lpLo) >> 1); LocLen = lpMid[1] - lpMid[0]; if (LocLen > slen) LocLen = slen; lpStr = lpMid[0]; pStr = f.name; while (LocLen-- && (c1 = toupper (*lpStr++)) == (c2 = toupper (*pStr++))) ; if (c1 <= c2) lpLo = lpMid + 1; else lpHi = lpMid - 1; } lpStr = lpLo[0]; memmove (lpStr + slen, lpStr, lpLastOffs[0] - lpLo[0]); strcpy (lpStr, f.name); for (lpHi = lpLastOffs++; lpHi >= lpLo; --lpHi) lpHi[1] = lpHi[0] + slen; } ++num_entries; } while (_findnext (handle, &f) == 0); _findclose (handle); } } while (num_entries && StringTable == 0); if (StringTable == 0) *pnum_entries = 0; else *pnum_entries = num_entries; return StringTable; } #else /* ! defined(WIN32) */ #include #include #include #include #include #include #include #include #include char** make_file_list (const char* pattern, int* pnum_entries) { size_t num_entries, length; char** StringTable; char** lpLastOffs; char* slash; // Pointer inside pattern to the last / char path[PATH_MAX]; // buffer for a filename with path char* file; // Pointer inside path to the filename size_t pathlen; // length of path, excluding last / and filename slash = (char*) strrchr ((const char *) pattern, '/'); if (slash == NULL) { pathlen = 1; path[0] = '.'; } else { pathlen = slash - pattern; memcpy (path, pattern, pathlen); pattern = slash + 1; } file = path + pathlen + 1; num_entries = 0; StringTable = 0; do { int slen; DIR *handle; if (num_entries == 0) length = 0; else { slen = (num_entries + 1) * sizeof (char*); StringTable = (char**) malloc (slen + length); if (StringTable == 0) break; lpLastOffs = StringTable; *lpLastOffs = (char*)StringTable + slen; num_entries = 0; length = slen; } path[pathlen] = '\0'; // strip any file part handle = opendir((const char *) path); if (handle != NULL) { path[pathlen] = '/'; // change the 0 char to a slash; a filename will be // attached here. while (1) { struct dirent *de; struct stat sb; de = readdir(handle); if (de == NULL) break; if (de->d_name[0] == '.') continue; strcpy (file, de->d_name); // attach the filename to path if (stat(path, &sb) == -1) continue; if (!S_ISREG(sb.st_mode)) continue; if (fnmatch(pattern, de->d_name, 0) != 0) continue; slen = strlen (de->d_name) + 1; length += slen; if (StringTable) { char *lpStr; char **lpLo, **lpHi; lpLo = StringTable; lpHi = lpLastOffs - 1; while (lpLo <= lpHi) { char c1, c2; char *pStr; int LocLen; char **lpMid; lpMid = lpLo + ((lpHi - lpLo) >> 1); LocLen = lpMid[1] - lpMid[0]; if (LocLen > slen) LocLen = slen; lpStr = lpMid[0]; pStr = de->d_name; while (LocLen-- && (c1 = toupper (*lpStr++)) == (c2 = toupper (*pStr++))) ; if (c1 <= c2) lpLo = lpMid + 1; else lpHi = lpMid - 1; } lpStr = lpLo[0]; memmove (lpStr + slen, lpStr, lpLastOffs[0] - lpLo[0]); strcpy (lpStr, de->d_name); for (lpHi = lpLastOffs++; lpHi >= lpLo; --lpHi) lpHi[1] = lpHi[0] + slen; } ++num_entries; } closedir(handle); } } while (num_entries && StringTable == 0); if (StringTable == 0) *pnum_entries = 0; else *pnum_entries = num_entries; return StringTable; } #endif void free_file_list (char** list) { if (list) free(list); } libmng-2.0.2/contrib/msvc/makemng/makemng.dsw0000644000000000000000000000077412005307152017651 0ustar rootrootMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "makemng"=.\makemng.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### libmng-2.0.2/contrib/msvc/makemng/Makefile0000644000000000000000000000161612005307152017147 0ustar rootroot######################################################################## # This is a GNU makefile - tested on CYGWIN and Linux # # You may need to compile or install libmng before compiling this. # Libmng also requires zlib, jpeg and lcms # TARGET = makemng # These flags are needed to get it to compile with libmng.dll on CYGWIN # CYGWINFLAGS = -DMNG_USE_DLL CYGWINFLAGS = MNGFLAGS = -I. -DMNG_SKIP_LCMS -DMNG_SKIP_IJG6B \ -DMNG_SUPPORT_READ -DMNG_SUPPORT_WRITE -DMNG_SUPPORT_DISPLAY \ -DMNG_ACCESS_CHUNKS CC = gcc CFLAGS = -W -Wall -O0 # -g LIBS = -L/usr/local/lib -lmng -lm -lz -ljpeg -llcms LDFLAGS= BINS = $(TARGET) $(TARGET).exe SRCS = makemng.c filelist.c OBJS = makemng.o filelist.o .SUFFIXES: .c .o .c.o: $(CC) -c $(CFLAGS) -o $@ $*.c $(MNGFLAGS) $(CYGWINFLAGS) all: $(TARGET) $(TARGET): $(OBJS) $(CC) -o $(TARGET) $(OBJS) $(LIBS) $(LDFLAGS) clean: rm -f $(BINS) *.o libmng-2.0.2/contrib/msvc/makemng/makemng.dsp0000644000000000000000000001002712005307152017632 0ustar rootroot# Microsoft Developer Studio Project File - Name="makemng" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=makemng - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "makemng.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 "makemng.mak" CFG="makemng - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "makemng - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "makemng - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=xicl6.exe RSC=rc.exe !IF "$(CFG)" == "makemng - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /W3 /GX /O2 /I "." /I "..\..\src" /I "..\..\src\msvc++" /I "..\..\src\getopt" /D "NDEBUG" /D "WINDOWS" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "MNG_USE_DLL" /D "MNG_SKIP_LCMS" /D "MNG_SKIP_IJG6B" /D "ZLIB_DLL" /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=xilink6.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib zlib.lib libmng.lib /nologo /subsystem:console /machine:I386 /libpath:"." !ELSEIF "$(CFG)" == "makemng - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "..\..\src" /I "..\..\src\msvc++" /I "..\..\src\getopt" /D "_DEBUG" /D "ZLIB_DLL" /D "WINDOWS" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "MNG_USE_DLL" /D "MNG_SKIP_LCMS" /D "MNG_SKIP_IJG6B" /YX /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=xilink6.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib zlib.lib libmng.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"." !ENDIF # Begin Target # Name "makemng - Win32 Release" # Name "makemng - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\filelist.c # End Source File # Begin Source File SOURCE=..\..\src\getopt\getopt.c # End Source File # Begin Source File SOURCE=.\makemng.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\getopt.h # End Source File # 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 libmng-2.0.2/contrib/msvc/makemng/getopt/0000755000000000000000000000000012005307152017005 5ustar rootrootlibmng-2.0.2/contrib/msvc/makemng/getopt/getopt.c0000644000000000000000000007301212005307152020456 0ustar rootroot/* Getopt for GNU. NOTE: getopt is now part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to drepper@gnu.org before changing it! Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ /* This tells Alpha OSF/1 not to define a getopt prototype in . Ditto for AIX 3.2 and . */ #ifndef _NO_PROTO # define _NO_PROTO #endif #include #ifndef HAVE_GETOPT_H #if !defined __STDC__ || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ # ifndef const # define const # endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 # include # if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION # define ELIDE_CODE # endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ /* Don't include stdlib.h for non-GNU C libraries because some of them contain conflicting prototypes for getopt. */ # include # include #endif /* GNU C library. */ #ifdef VMS # include # if HAVE_STRING_H - 0 # include # endif #endif #ifndef _ /* This is for other GNU distributions with internationalized messages. */ # if defined HAVE_LIBINTL_H || defined _LIBC # include # ifndef _ # define _(msgid) gettext (msgid) # endif # else # define _(msgid) (msgid) # endif #endif /* This version of `getopt' appears to the caller like standard Unix `getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #include "getopt.h" /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Formerly, initialization of getopt depended on optind==0, which causes problems with re-calling getopt as programs generally don't know that. */ int __getopt_initialized; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ static char *nextchar; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Describe how to deal with options that follow non-option ARGV-elements. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters. PERMUTE is the default. We permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. Using `-' as the first character of the list of option characters selects this mode of operation. The special argument `--' forces an end of option-scanning regardless of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return -1 with `optind' != ARGC. */ static enum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; /* Value of POSIXLY_CORRECT environment variable. */ static char *posixly_correct; #ifdef __GNU_LIBRARY__ /* We want to avoid inclusion of string.h with non-GNU libraries because there are many ways it can cause trouble. On some systems, it contains special magic macros that don't work in GCC. */ # include # define my_index strchr #else #ifndef WIN32 # if HAVE_STRING_H # include # else # include # endif #else # include #endif /* Avoid depending on library functions or files whose names are inconsistent. */ #ifndef getenv extern char *getenv (); #endif static char * my_index (str, chr) const char *str; int chr; { while (*str) { if (*str == chr) return (char *) str; str++; } return 0; } /* If using GCC, we can safely declare strlen this way. If not using GCC, it is ok not to declare it. */ #ifdef __GNUC__ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. That was relevant to code that was here before. */ # if (!defined __STDC__ || !__STDC__) && !defined strlen /* gcc with -traditional declares the built-in strlen to return int, and has done so at least since version 2.4.5. -- rms. */ extern int strlen (const char *); # endif /* not __STDC__ */ #endif /* __GNUC__ */ #endif /* not __GNU_LIBRARY__ */ /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is the index after the last of them. */ static int first_nonopt; static int last_nonopt; #ifdef _LIBC /* Stored original parameters. XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ extern int __libc_argc; extern char **__libc_argv; /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ # ifdef USE_NONOPTION_FLAGS /* Defined in getopt_init.c */ extern char *__getopt_nonoption_flags; static int nonoption_flags_max_len; static int nonoption_flags_len; # endif # ifdef USE_NONOPTION_FLAGS # define SWAP_FLAGS(ch1, ch2) \ if (nonoption_flags_len > 0) \ { \ char __tmp = __getopt_nonoption_flags[ch1]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch2] = __tmp; \ } # else # define SWAP_FLAGS(ch1, ch2) # endif #else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) #endif /* _LIBC */ /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. `first_nonopt' and `last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ #if defined __STDC__ && __STDC__ static void exchange (char **); #endif static void exchange (argv) char **argv; { int bottom = first_nonopt; int middle = last_nonopt; int top = optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS /* First make sure the handling of the `__getopt_nonoption_flags' string can work normally. Our top argument must be in the range of the string. */ if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ char *new_str = HMalloc (top + 1); if (new_str == NULL) nonoption_flags_len = nonoption_flags_max_len = 0; else { memset (__mempcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len), '\0', top + 1 - nonoption_flags_max_len); nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } } #endif while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; SWAP_FLAGS (bottom + i, middle + i); } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ first_nonopt += (optind - last_nonopt); last_nonopt = optind; } /* Initialize the internal data when the first call is made. */ #if defined __STDC__ && __STDC__ static const char *_getopt_initialize (int, char *const *, const char *); #endif static const char * _getopt_initialize (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ first_nonopt = last_nonopt = optind; nextchar = NULL; posixly_correct = getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; #if defined _LIBC && defined USE_NONOPTION_FLAGS if (posixly_correct == NULL && argc == __libc_argc && argv == __libc_argv) { if (nonoption_flags_max_len == 0) { if (__getopt_nonoption_flags == NULL || __getopt_nonoption_flags[0] == '\0') nonoption_flags_max_len = -1; else { const char *orig_str = __getopt_nonoption_flags; int len = nonoption_flags_max_len = strlen (orig_str); if (nonoption_flags_max_len < argc) nonoption_flags_max_len = argc; __getopt_nonoption_flags = (char *) HMalloc (nonoption_flags_max_len); if (__getopt_nonoption_flags == NULL) nonoption_flags_max_len = -1; else memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), '\0', nonoption_flags_max_len - len); } } nonoption_flags_len = nonoption_flags_max_len; } else nonoption_flags_len = 0; #endif return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If `getopt' finds another option character, it returns that character, updating `optind' and `nextchar' so that the next call to `getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, `getopt' returns -1. Then `optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set `opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in `optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in `optarg', otherwise `optarg' is set to zero. If OPTSTRING starts with `-' or `+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with `--' instead of `-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a `=', or else the in next ARGV-element. When `getopt' finds a long-named option, it returns 0 if that option's `flag' field is nonzero, the value of the option's `val' field if the `flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of `struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal (argc, argv, optstring, longopts, longind, long_only) int argc; char *const *argv; const char *optstring; const struct option *longopts; int *longind; int long_only; { int print_errors = opterr; if (optstring[0] == ':') print_errors = 0; if (argc < 1) return -1; optarg = NULL; if (optind == 0 || !__getopt_initialized) { if (optind == 0) optind = 1; /* Don't scan ARGV[0], the program name. */ optstring = _getopt_initialize (argc, argv, optstring); __getopt_initialized = 1; } /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag from the shell indicating it is not an option. The later information is only used when the used in the GNU libc. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ || (optind < nonoption_flags_len \ && __getopt_nonoption_flags[optind] == '1')) #else # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') #endif if (nextchar == NULL || *nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (last_nonopt > optind) last_nonopt = optind; if (first_nonopt > optind) first_nonopt = optind; if (ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (last_nonopt != optind) first_nonopt = optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (optind < argc && NONOPTION_P) optind++; last_nonopt = optind; } /* The special ARGV-element `--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (optind != argc && !strcmp (argv[optind], "--")) { optind++; if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (first_nonopt == last_nonopt) first_nonopt = optind; last_nonopt = argc; optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (first_nonopt != last_nonopt) optind = first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (ordering == REQUIRE_ORDER) return -1; optarg = argv[optind++]; return 1; } /* We have found another option-ARGV-element. Skip the initial punctuation. */ nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (longopts != NULL && (argv[optind][1] == '-' || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = -1; int option_index; for (nameend = nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == (unsigned int) strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (print_errors) fprintf (stderr, _("%s: option `%s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; optopt = 0; return '?'; } if (pfound != NULL) { option_index = indfound; optind++; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (print_errors) { if (argv[optind - 1][1] == '-') /* --option */ fprintf (stderr, _("%s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name); else /* +option or -option */ fprintf (stderr, _("%s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); } nextchar += strlen (nextchar); optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (print_errors) fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. Otherwise interpret it as a short option. */ if (!long_only || argv[optind][1] == '-' || my_index (optstring, *nextchar) == NULL) { if (print_errors) { if (argv[optind][1] == '-') /* --option */ fprintf (stderr, _("%s: unrecognized option `--%s'\n"), argv[0], nextchar); else /* +option or -option */ fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), argv[0], argv[optind][0], nextchar); } nextchar = (char *) ""; optind++; optopt = 0; return '?'; } } /* Look at and handle the next short option-character. */ { char c = *nextchar++; char *temp = my_index (optstring, c); /* Increment `optind' when we start to process its last character. */ if (*nextchar == '\0') ++optind; if (temp == NULL || c == ':') { if (print_errors) { if (posixly_correct) /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); else fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); } optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (print_errors) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; /* optarg is now the argument, see if it's in the table of longopts. */ for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (print_errors) fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; return '?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (print_errors) fprintf (stderr, _("\ %s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name); nextchar += strlen (nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (print_errors) fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } nextchar = NULL; return 'W'; /* Let the application handle it. */ } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*nextchar != '\0') { optarg = nextchar; optind++; } else optarg = NULL; nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (print_errors) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; nextchar = NULL; } } return c; } } int getopt (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0); } #endif /* Not ELIDE_CODE. */ #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of `getopt'. */ int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ #endif /* HAVE_GETOPT_H */ libmng-2.0.2/contrib/msvc/makemng/getopt/getopt1.c0000644000000000000000000001067612005307152020546 0ustar rootroot/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include #ifndef HAVE_GETOPT_H #include "getopt.h" #if !defined __STDC__ || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 #include #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ #include #endif #ifndef NULL #define NULL 0 #endif int getopt_long (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } #endif /* Not ELIDE_CODE. */ #ifdef TEST #include int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case 'd': printf ("option d with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ #endif /* HAVE_GETOPT_H */ libmng-2.0.2/contrib/msvc/makemng/getopt/getopt.h0000644000000000000000000001445712005307152020473 0ustar rootroot/* Declarations for getopt. Copyright (C) 1989-1994, 1996-1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #ifndef _GETOPT_H #ifndef __need_getopt # define _GETOPT_H 1 #endif /* If __GNU_LIBRARY__ is not already defined, either we are being used standalone, or this is the first header included in the source file. If we are being used with glibc, we need to include , but that does not exist if we are standalone. So: if __GNU_LIBRARY__ is not defined, include , which will pull in for us if it's from glibc. (Why ctype.h? It's guaranteed to exist and it doesn't flood the namespace with stuff the way some other headers do.) */ #if !defined __GNU_LIBRARY__ # include #endif #ifdef __cplusplus extern "C" { #endif /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message `getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; #ifndef __need_getopt /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is zero. The field `has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field `flag' is not NULL, it points to a variable that is set to the value given in the field `val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an `int' to a compiled-in constant, such as set a value from `optarg', set the option's `flag' field to zero and its `val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ struct option { # if (defined __STDC__ && __STDC__) || defined __cplusplus const char *name; # else char *name; # endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the `has_arg' field of `struct option'. */ # define no_argument 0 # define required_argument 1 # define optional_argument 2 #endif /* need getopt */ /* Get definitions and prototypes for functions to process the arguments in ARGV (ARGC of them, minus the program name) for options given in OPTS. Return the option character from OPTS just read. Return -1 when there are no more options. For unrecognized options, or options missing arguments, `optopt' is set to the option letter, and '?' is returned. The OPTS string is a list of characters which are recognized option letters, optionally followed by colons, specifying that that letter takes an argument, to be placed in `optarg'. If a letter in OPTS is followed by two colons, its argument is optional. This behavior is specific to the GNU `getopt'. The argument `--' causes premature termination of argument scanning, explicitly telling `getopt' that there are no more options. If OPTS begins with `--', then non-option arguments are treated as arguments to the option '\0'. This behavior is specific to the GNU `getopt'. */ #if (defined __STDC__ && __STDC__) || defined __cplusplus # ifdef __GNU_LIBRARY__ /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ extern int getopt (int __argc, char *const *__argv, const char *__shortopts); # else /* not __GNU_LIBRARY__ */ extern int getopt (); # endif /* __GNU_LIBRARY__ */ # ifndef __need_getopt extern int getopt_long (int __argc, char *const *__argv, const char *__shortopts, const struct option *__longopts, int *__longind); extern int getopt_long_only (int __argc, char *const *__argv, const char *__shortopts, const struct option *__longopts, int *__longind); /* Internal only. Users should not call this directly. */ extern int _getopt_internal (int __argc, char *const *__argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only); # endif #else /* not __STDC__ */ extern int getopt (); # ifndef __need_getopt extern int getopt_long (); extern int getopt_long_only (); extern int _getopt_internal (); # endif #endif /* __STDC__ */ #ifdef __cplusplus } #endif /* Make sure we later can get all the definitions and declarations. */ #undef __need_getopt #endif /* getopt.h */ libmng-2.0.2/contrib/msvc/makemng/README0000644000000000000000000000173112005307152016365 0ustar rootrootMAKEMNG - Jan 10, 2003 A simple MNG encoder. MAKEMNG takes a bunch of still frames (PNGs) as input, computes delta images and stuffs it all into an MNG, thus creating an animation. You will need zlib to compile and run this app. The included Makefile should work on Linux and CYGWIN. The MSVC project will most likely need modifications for your environment. usage: makemng [-v] [-f rate] [-r] [-s size] [-o outputfile] produces an MNG animation from a bunch of frame images options: -v : be verbose, explains things no human should know -f rate : sets the framerate; rate is 1..100 per second (default 5) -b : auto-select background frame (instead of frame0) -r : split delta frames into full rectangles only -s size : enable sector cleanup and set sector size (8..64) diagnostical options: -d : generate delta-mask PNGs (form: mask_FRM1_FRM2.png) ------------- Alex Volkov libmng-2.0.2/contrib/README0000644000000000000000000000010312005307152013766 0ustar rootrootFor details check the README.contrib file in the parent directory! libmng-2.0.2/contrib/bcb/0000755000000000000000000000000012005307152013642 5ustar rootrootlibmng-2.0.2/contrib/bcb/mngdump/0000755000000000000000000000000012005307152015311 5ustar rootrootlibmng-2.0.2/contrib/bcb/mngdump/MNGDUMP.cpp0000644000000000000000000000140712005307152017126 0ustar rootroot//--------------------------------------------------------------------------- #include #pragma hdrstop USERES("MngDump.res"); USEFORM("Main.cpp", MainForm); USEUNIT("Chunks.cpp"); USEUNIT("About.cpp"); USEUNIT("Callback.cpp"); USEUNIT("Help.cpp"); USELIB("..\..\..\bcb\win32dll\libmng.lib"); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->Title = "MngDump"; Application->CreateForm(__classid(TMainForm), &MainForm); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } //--------------------------------------------------------------------------- libmng-2.0.2/contrib/bcb/mngdump/Main.dfm0000644000000000000000000006671512005307152016704 0ustar rootrootÿ TMAINFORM0ºmTPF0 TMainFormMainFormLeftaTopuWidthÖHeightšCaptionMainForm Font.Charset ANSI_CHARSET Font.Color clWindowText Font.Heightò Font.Name MS Sans Serif Font.Style Menu MainMenu1PositionpoScreenCenterShowHint OnCreate FormCreate OnDestroy FormDestroy PixelsPerInchx TextHeightTPanelPanel1LeftTopWidthÎHeight)AlignalTopTabOrder TSpeedButtonsbtnOpenLeft TopWidthHeightHint Opens a file Glyph.Data zvBMvv( €€€€€€€€€¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU_ÿÿÿÿõUUUUUwwwww_UP ‹‹‹‹UWuõUUUuõP𸸸¸°UW÷_UUUW_P¿ ‹‹‹‹WõuÿÿÿÿPûðWõWwwwwuP¿¿¿¿°UUWõUUUWõUPûûûûðUUWõUU_÷UUP¿¿¿UUW_UUwuUUU ûðUUUUUuÿ÷UUUUUpUUUUUWwuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU NumGlyphsOnClickmnuFileOpenClick TSpeedButton sbtnReloadLeft)TopWidthHeightHintReloads current file Glyph.Data zvBMvv( €€€€€€€€€¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿ33333333333ÿÿó33339™™33333÷wwÿó339™™™™3337w37wÿ33™“ps™“33w37ówó9™39™37s3w3wó9“3ps3™37s37337ÿ™333339“wó33ó37™330339“wó37ÿ33s™33ps333wó3w333™33333wó3w?ÿÿ™33™™“wÿ3www9“39™“7?ów7w9™33™“7sÿw?w3™“ps™™“3w?7?ww39™™™™3“37w37w3s339™™333337ww333 NumGlyphsOnClickmnuReloadClick TSpeedButton sbtnPasteLeft'TopWidthHeightHintPaste text from clipboardEnabled Glyph.Data º ¶ BM¶ 6(( € €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÀÀÀÿÿÿÿÀÀÀÿÿÿÿÀÀÀÿÿÿÿÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€ÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€ÿÿÿÀÀÀÀÿÿÿÀÀÀÀÿÿÿÀÀÀÀÿÿÿÀÀÀÀÿÿÿÿÀÀÀÀÀÀÀ€€€€€€€€€€ÿÿÿÿ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€ÿÿÿÿ€€ÀÀÀÿÿÿÿÀÀÀÿÿÿÿÀÀÀÿÿÿÿÀÀÀ€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€ÿÿÿÀÀÀÀÿÿÿÀÀÀÀÿÿÿÀÀÀÀÿÿÿÀÀÀÀÿ€€€ÀÀÀÀ€€€€€€€€€€ÿÿÿÿ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€ÿÿÿÿ€€ÀÀÀÿÿÿÿÀÀÀÿÿÿÿÀÀÀÿÿÿÿÀÀÀ€€€ÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€ÿÿÿÿ€€€ÿÿÿÿ€€ÿÿÿÀÀÀÀÿÿÿÀÀÀÀÿÿÿÀÀÀÀ€€€€ÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€ÀÀÀÿÿÿÿÀÀÀÿÿÿÿÀÀÀ€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€ÿÿÿÀÀÀÀÿÿÿÀÀÀÀ€€€€ÀÀÀÀ€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÀÀÀÿÿÿÿÀÀÀÿÿÿÿÀÀÀ€€ÀÀÀÿÿÿÿÀÀÀÿÿÿÿ€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€ÿÿÿÀÀÀÀÿÿÿÀÀÀÀÿÿÿÀÀÀÀÿÿÿÀÀÀÀÿÿÿÀÀÀÀ€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€ÀÀÀÿÿÿÿÀÀÀÿÿÿÿÀÀÀÿÿÿÿÀÀÀÿÿÿÿÀÀÀÿÿÿÿ€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€ÿÿÿÿ€€€€€€€€€€€€€€ÿÿÿÀÀÀÀ€€€€€€€€€ÿÿÿÀÀÀÀ€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ NumGlyphsParentShowHintShowHint OnClick mnuPasteClick TSpeedButtonsbtnCopyLeft TopWidthHeightHintCopy text to clipboardEnabled Glyph.Data º ¶ BM¶ 6(( € €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€ÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€ÿÿÿÿÀÀÀÀÀÀÀÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€ÿÿÿÿ€€€ÿÿÿÿ€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÀÀÀÀÀÀÀÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€ÿÿÿ€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ NumGlyphsParentShowHintShowHint OnClick mnuCopyClick TSpeedButtonsbtnCutLeftâTopWidth$HeightHintCut text to clipboardEnabled Glyph.Data º ¶ BM¶ 6(( € €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€ÿÿÿ€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€ÿÿÿÿÿÿÿ€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€ÿÿÿ€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿ€€€€ÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿ€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€ÿÿÿ€€€€€€ÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€ÿÿÿ€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€ÿÿÿ€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ NumGlyphsParentShowHintShowHint OnClick mnuCutClick TSpeedButtonsbtnUndoLeftÅTopWidthHeightHintUndoEnabled Glyph.Data zvBMvv( €€€€€€€€€¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌÌÌÌÌÌÌÌÌÿÿüÌÌÌÌÄDDÌÌÌÌÌ÷wwÿüÌÌÄDDDDÌÌÌÇwÌÇwÿÌÌDÌÌÌDLÌÌwüÌÌÇüÄLÌÌÌÄDÌÇÌÌÌÌwüÄÌÌÌÌÌDÌÇüÌÌÌÌÇÿÌÌÌÌÌÌÄLÌÌÌÌÌÌÇÌÌÌÌÌÌÄLÌÌÌÌÌÌÇÌÌÌÌÌÌÄLÌÌÌÌÌÌÇÌÌÌÌÌÌÄLÌÿÿÌÌÌÇDDÌÌÌÌÄLwÿüÌÌÌÏüDLÌÌÌÌÄÌwÿüÌÌÇ÷|DDÌÌÌÄDÌwüÿÌÌwÌLDLÌÌÄLÌ|wÏÿÿ÷|ÌÌÄDDDDÌÌÌÇwÌÇwÌÌÌÌÄDDÌÌÌÌÌÇwwÌÌÌ NumGlyphsParentShowHintShowHint OnClick mnuUndoClick TSpeedButtonsbtnPrintSetupLeftžTopWidthHeightHint Printer Setup Glyph.Data º ¶ BM¶ 6(( € €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÿÿÀÀÀÀÀÀÀ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿ€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€ÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€ÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€ÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿ€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ NumGlyphsParentShowHintShowHint OnClickmnuPrintSetupClick TSpeedButton sbtnPrintLeft€TopWidthHeightHint Print text - from current editor Glyph.Data º ¶ BM¶ 6(( € €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÿÿÀÀÀÀÀÀÀ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€ÿÿÿ€€€€€€€€€€€€€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€ÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ NumGlyphsParentShowHintShowHint OnClick mnuPrintClick TSpeedButtonsbtnSaveLeftYTopWidthHeightHintSave text - from current editor Glyph.Data BMv((€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿ338ƒ338ˆøÿˆˆ330ÌÌ÷pÌ338ˆøÿˆˆ330ÌÌ÷pÌ338ˆøˆˆˆ330̈wpÌ338ˆÿÿøˆ330Ì`Ì338ˆˆˆˆˆˆ330ÌÌÌÌÌÌ338ˆˆˆˆˆˆ330Æl338ˆˆˆˆˆˆ330Àÿÿÿÿ 338ˆÿÿÿÿˆ330Àÿÿÿÿ 338ˆÿÿÿÿˆ330Àÿÿÿÿ 338ˆÿÿÿÿˆ330Àÿÿÿÿ 338ˆÿÿÿÿˆ330ÿÿÿÿ338ˆÿÿÿÿˆ330Àÿÿÿÿ 338ˆÿÿÿÿˆ338ƒ338ˆˆˆˆˆˆƒ3333333333333333333333333333333333333333333333333333333333333 NumGlyphsParentShowHintShowHint OnClick mnuSaveClick TPageControl PageControl1TagLeftTop)WidthÎHeight, ActivePagetsHelpAlignalClientTabOrder TTabSheettsChunksTagCaptionChunksOnShow EventShowPage TRichEditRichEditChunksLeftUTop)WidthHeightAlignalClient Font.Charset ANSI_CHARSET Font.Color clWindowText Font.Heightï Font.NameCourier Font.Style HideScrollBars Lines.Strings Data for individual chunks here. ParentFont PlainText ReadOnly ScrollBars ssVerticalTabOrderTListBox ListBoxChunksLeftTop)WidthUHeightAlignalLeft ItemHeightTabOrderOnClickListBoxChunksClickTPanel pnlChunksLeftTopWidthjHeight)AlignalTop BevelOuterbvNone BorderStylebsSingleCaption pnlChunksTabOrder TSpeedButton sbtnCopyChunkLeftTopWidthHeightHintCopy chunk text to clipboard Glyph.Data º ¶ BM¶ 6(( € €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€ÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿ€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€ÿÿÿÿÀÀÀÀÀÀÀÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€ÿÿÿÿ€€€ÿÿÿÿ€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÀÀÀÀÀÀÀÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€ÿÿÿ€€€€ÿÿÿ€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ NumGlyphsParentShowHintShowHint OnClicksbtnCopyChunkClick TTabSheettsReportTagCaptionReportOnShow EventShowPage TRichEditRichEditReportLeftTopWidth¾HeightçAlignalClient Font.Charset ANSI_CHARSET Font.Color clWindowText Font.Heightï Font.NameCourier Font.Style HideSelectionHideScrollBars Lines.Strings) The list of all chunks will appear here. ParentFont PlainText ScrollBars ssVerticalTabOrderWordWrap TTabSheet tsOptionsTagCaptionOptionsOnShow EventShowPage TCheckBoxcbBoolLeftŠTop»Width÷HeightCaptionShow &Boolean as true/falseTabOrder TCheckBoxcbMacroIdentifierLeftŠTopžWidth÷HeightHintShow Macro IdentifiersCaptionLibMng's &Macro IdentifiersTabOrder TCheckBox cbRawDataLeftŠTop€Width÷HeightHintShow some raw data IDAT/JDATCaption&RawData (first 16 bytes)TabOrder TCheckBox cbRGBOrderLeftŠTopbWidth(HeightCaption"Palette &entries as RGB - not BGRTabOrder TCheckBoxcbPaletteEntriesLeftŠTopEWidth÷HeightCaption&Palette EntriesTabOrder TCheckBox cbCommentsLeftŠTop'Width÷HeightCaption &CommentsTabOrder TRadioGroupRadioGroupTabSizeLeft Top WidthmHeightÆCaption Tab &Size ItemIndex Items.Strings&1&2&3&4&5&6TabOrderOnClickRadioGroupTabSizeClick TStaticText StaticText1LeftŠTop Width(HeightAutoSizeCaption3Enabled these options to include them in the reportTabOrder TTabSheettsAboutTagCaptionAboutOnShow EventShowPageTLabel LabelAboutLeftTopWidth¾HeightçAlignalClient AlignmenttaCenterAutoSizeCaption LabelAbout ShowAccelCharWordWrap TTabSheettsHelpTagCaptionHelpOnShow EventShowPageTLabel LabelHelpLeftTopWidthÆHeight AlignalClient AlignmenttaCenterCaption LabelHelp ShowAccelCharWordWrap TPanelPanelStatusBarLeftTopUWidthÎHeightAlignalBottomTabOrder TProgressBar ProgressBar1LeftîTopWidthßHeightAlignalClientMinMaxdTabOrder TStaticTextStaticTextStatusLeftTopWidthíHeightAlignalLeft AlignmenttaCenterAutoSize BorderStyle sbsSunkenCaptionShow hints hereTabOrder TOpenDialog OpenDialog1FilterNetwork Files|*.jng;*.png;*.mng InitialDir.Left Top` TMainMenu MainMenu1LeftHTopÀ TMenuItemmnuFileCaption&File TMenuItemmnuOpenCaption&Open...OnClickmnuFileOpenClick TMenuItem mnuReloadCaption&ReloadOnClickmnuReloadClick TMenuItemmnuSaveCaption &Save ...OnClick mnuSaveClick TMenuItemN1Caption- TMenuItemmnuPrintCaption&PrintEnabledOnClick mnuPrintClick TMenuItem mnuPrintSetupCaptionPrinter &Setup ...OnClickmnuPrintSetupClick TMenuItemN2Caption- TMenuItemmnuExitCaptionE&xitOnClick mnuExitClick TMenuItemmnuEditCaption&Edit TMenuItemmnuUndoCaption&UndoShortCutZ@OnClick mnuUndoClick TMenuItemN3Caption- TMenuItemmnuCutCaptionCu&tShortCutX@OnClick mnuCutClick TMenuItemmnuCopyCaption&CopyShortCutC@OnClick mnuCopyClick TMenuItemmnuPasteCaption&PasteShortCutV@OnClick mnuPasteClick TMenuItemN4Caption- TMenuItem mnuSelectAllCaption Select &AllOnClickmnuSelectAllClick TMenuItemN5Caption- TMenuItem mnuSetFontCaption Set &Font ...OnClickmnuSetFontClick TMenuItem mnuWordWrapCaption &Word WrapOnClickmnuWordWrapClick TMenuItem mnuSearchCaption&Search TMenuItemmnuFindCaption &Find ...ShortCutF@OnClick mnuFindClick TMenuItem mnuFindNextCaption Find &NextShortCutrOnClickmnuFindNextClick TFontDialog FontDialog1 Font.CharsetDEFAULT_CHARSET Font.Color clWindowText Font.Heightõ Font.Name MS Sans Serif Font.Style MinFontSize MaxFontSizeOptions fdAnsiOnly fdEffectsfdForceFontExistOnApplyFontDialog1ApplyLeftHTop` TPrintDialog PrintDialogLeft TopÀTPrinterSetupDialogPrinterSetupDialogLeftHTop˜ TSaveDialog SaveDialog1 DefaultExttxtFilterText (*.txt)|*.txt|Any |*.*Options ofOverwritePromptofHideReadOnlyofPathMustExistLeft Top˜ TFindDialog FindDialogOnFindFindDialogFindLeftpTop`libmng-2.0.2/contrib/bcb/mngdump/Main.cpp0000644000000000000000000006756212005307152016721 0ustar rootroot//--------------------------------------------------------------------------- #include #include #include #pragma hdrstop //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #include "Main.h" TMainForm *MainForm; //--------------------------------------------------------------------------- #include "About.h" #include "Help.h" # define PAGE_CHUNKS 1 # define PAGE_REPORT 2 # define PAGE_OPTIONS 3 # define PAGE_ABOUT 4 # define PAGE_HELP 5 /* ************************************************************************** */ /* * * */ /* * MngDump is based on Gerard Juyn's MngTree * */ /* * * */ /* * COPYRIGHT NOTICE: * */ /* * * */ /* * Copyright (c) 2000 Andy Protano * */ /* * Gerard Juyn (gerard@libmng.com) * */ /* * [You may insert additional notices after this sentence if you modify * */ /* * this source] * */ /* * * */ /* * For the purposes of this copyright and license, "Contributing Authors" * */ /* * is defined as the following set of individuals: * */ /* * * */ /* * Gerard Juyn (gerard@libmng.com) * */ /* * Andy Protano (a.a.protano@care4free.net) * */ /* * * */ /* * This program is supplied "AS IS". The Contributing Authors * */ /* * disclaim all warranties, expressed or implied, including, without * */ /* * limitation, the warranties of merchantability and of fitness for any * */ /* * purpose. The Contributing Authors assume no liability for direct, * */ /* * indirect, incidental, special, exemplary, or consequential damages, * */ /* * which may result from the use of the MNG Library, even if advised of * */ /* * the possibility of such damage. * */ /* * * */ /* * Permission is hereby granted to use, copy, modify, and distribute this * */ /* * source code, or portions hereof, for any purpose, without fee, subject * */ /* * to the following restrictions: * */ /* * * */ /* * 1. The origin of this source code must not be misrepresented; * */ /* * you must not claim that you wrote the original software. * */ /* * * */ /* * 2. Altered versions must be plainly marked as such and must not be * */ /* * misrepresented as being the original source. * */ /* * * */ /* * 3. This Copyright notice may not be removed or altered from any source * */ /* * or altered source distribution. * */ /* * * */ /* * The Contributing Authors specifically permit, without fee, and * */ /* * encourage the use of this source code as a component to supporting * */ /* * the MNG and JNG file format in commercial products. If you use this * */ /* * source code in a product, acknowledgment would be highly appreciated. * */ /* * * */ /* ************************************************************************** */ //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- __fastcall TMainForm::~TMainForm( void ) { } //--------------------------------------------------------------------------- void __fastcall TMainForm::OnMinMax(TMessage& Msg) { ((POINT far *)Msg.LParam)[3].x = 500; ((POINT far *)Msg.LParam)[3].y = 450; TForm::Dispatch(&Msg); } //--------------------------------------------------------------------------- // MessageBox Methods // ---------------------------------------------------------------------- int __fastcall TMainForm::MessageBox( String &as, UINT flags ) { return ::MessageBox( Handle, as.c_str(), Application->Title.c_str(), flags ); } // ---------------------------------------------------------------------- void __fastcall TMainForm::MsgBoxOk( String as ) { (void)MessageBox( as, MB_ICONINFORMATION ); } //------------------------------------------------------------------------- int __fastcall TMainForm::MsgBoxYN( String as ) { return MessageBox( as, MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON1 ); } //------------------------------------------------------------------------- int __fastcall TMainForm::MsgBoxYNC( String as ) { return MessageBox( as, MB_YESNOCANCEL | MB_ICONQUESTION ); } //------------------------------------------------------------------------- void __fastcall TMainForm::MsgBoxStop( String as ) { (void)MessageBox( as, MB_ICONSTOP ); } //------------------------------------------------------------------------- void __fastcall TMainForm::MsgBoxInfo( String as ) { (void)MessageBox( as, MB_OK | MB_ICONINFORMATION ); } //------------------------------------------------------------------------- void __fastcall TMainForm::MsgBoxWarn( String as ) { (void)MessageBox( as, MB_OK | MB_ICONWARNING ); } //------------------------------------------------------------------------- void __fastcall TMainForm::FormCreate(TObject *Sender) { // For when the application name changes - coz i'll forget ! asAppName = Application->Title; // And while we've got it set the caption Caption = Application->Title; // Load About Screen LabelAbout->Caption = _szAbout; // Load Help Screen LabelHelp->Caption = _szHelp; fd = NULL; strList = new TStringList(); asTab = " ";// default tab size 2 RadioGroupTabSize->ItemIndex = 1; // range is zero based // Start with the help pane PageControl1->ActivePage = tsHelp; mnuWordWrap->Checked = false; // This call will TOGGLE and set word wrap for all the applicables // editors and enable/disable the Horz scroll bar. mnuWordWrapClick( this ); // So start with false to get to true; // Clear things from design time settings StaticTextStatus->Caption = ""; //strList->Clear(); constructor dodid that pnlChunks->Caption = ""; ListBoxChunks->Clear(); RichEditChunks->Clear(); RichEditReport->Clear(); ProgressBar1->Min = 0; ProgressBar1->Position = 0; SetChunkCount( 0 ); // Set default states for switches cbPaletteEntries->Checked = false; cbRGBOrder->Checked = true; cbRawData->Checked = true; cbComments->Checked = true; cbMacroIdentifier->Checked = true; cbBool->Checked = true; } //--------------------------------------------------------------------------- void __fastcall TMainForm::FormDestroy(TObject *Sender) { delete strList; } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuExitClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuFileOpenClick(TObject *Sender) { if( !OpenDialog1->Execute() ) return; Application->ProcessMessages(); // Refresh the screen LoadFile(); } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuReloadClick(TObject *Sender) { // Only reload - if we have something to reload if( OpenDialog1->FileName.Length() ) LoadFile(); else MsgBoxStop( "Nothing to reload yet !" ); } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuUndoClick(TObject *Sender) { if( RichEditReport->Lines->Count ) // Do we have something in there ? RichEditReport->Undo(); } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuCutClick(TObject *Sender) { if( RichEditReport->Lines->Count ) // Do we have something in there ? RichEditReport->CutToClipboard(); } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuCopyClick(TObject *Sender) { if( RichEditReport->Lines->Count ) // Do we have something in there ? RichEditReport->CopyToClipboard(); } //------------------------------------------------------------------------- void __fastcall TMainForm::sbtnCopyChunkClick(TObject *Sender) { if( RichEditChunks->Lines->Count ) // Do we have something in there ? { // Copy chunk data from Chunks pane to clipboard RichEditChunks->SelectAll(); RichEditChunks->CopyToClipboard(); RichEditChunks->SelLength = 0; } } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuPasteClick(TObject *Sender) { if( RichEditReport->Lines->Count ) // Do we have something in there ? RichEditReport->PasteFromClipboard(); } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuSelectAllClick(TObject *Sender) { if( RichEditReport->Lines->Count ) // Do we have something in there ? RichEditReport->SelectAll(); } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuWordWrapClick(TObject *Sender) { bool bWrap; mnuWordWrap->Checked = !mnuWordWrap->Checked; bWrap = mnuWordWrap->Checked; RichEditChunks->WordWrap = bWrap; RichEditReport->WordWrap = bWrap; if( bWrap ) { // if Word wrap on then no need for horizontal scrollbar RichEditChunks->ScrollBars = ssVertical; RichEditReport->ScrollBars = ssVertical; } else { // Horizontal scrollbar required (auto) RichEditChunks->ScrollBars = ssBoth; RichEditReport->ScrollBars = ssBoth; } } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuSetFontClick(TObject *Sender) { if( FontDialog1->Execute() ) { RichEditChunks->Font = FontDialog1->Font; RichEditReport->Font = FontDialog1->Font; } } //--------------------------------------------------------------------------- void __fastcall TMainForm::FontDialog1Apply(TObject *Sender, HWND Wnd) { RichEditChunks->Font = FontDialog1->Font; RichEditReport->Font = FontDialog1->Font; } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuFindClick(TObject *Sender) { if( RichEditReport->Lines->Count == 0 ) { MsgBoxStop( "Find what ?."); return; } FindDialog->Execute(); } //--------------------------------------------------------------------------- void __fastcall TMainForm::FindDialogFind(TObject *Sender) { TSearchTypes st; TFindDialog *fd; int newpos; if( RichEditReport->Lines->Count == 0 ) { MsgBoxStop( "Find what ?."); return; } fd = dynamic_cast( Sender ); if( fd->Options.Contains( frMatchCase ) ) st << stMatchCase; if( fd->Options.Contains( frWholeWord ) ) st << stWholeWord; if( RichEditReport->SelLength ) RichEditReport->SelStart += 1; newpos = RichEditReport->FindText( fd->FindText, RichEditReport->SelStart, RichEditReport->Text.Length(), st ); if( newpos != -1 ) { RichEditReport->SelStart = newpos; RichEditReport->SelLength = fd->FindText.Length(); } else { MsgBoxInfo( "End of document reached." ); RichEditReport->SelStart = 0; } } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuFindNextClick(TObject *Sender) { if( RichEditReport->Lines->Count == 0 ) { MsgBoxStop( "Find what ?."); return; } FindDialogFind( FindDialog ); } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuPrintClick(TObject *Sender) { if( RichEditReport->Lines->Count == 0 ) { MsgBoxStop( "I can't find anything to print !."); return; } RichEditReport->Print( ExtractFileName( OpenDialog1->FileName ) ); } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuPrintSetupClick(TObject *Sender) { PrinterSetupDialog->Execute(); } //--------------------------------------------------------------------------- void __fastcall TMainForm::mnuSaveClick(TObject *Sender) { if( RichEditReport->Lines->Count == 0 ) { MsgBoxStop( "I can't find anything to save !."); return; } // Grab the graphic's filename and change to "txt" extension { char szFile[ MAXFILE ]; char szExt[ MAXEXT ]; char szDest[ MAXPATH ]; String as; fnsplit( OpenDialog1->FileName.c_str(), NULL, NULL, szFile, szExt ); memset( szDest, 0, MAXPATH ); strcat( szDest, szFile ); strcat( szDest, "\." ); strcat( szDest, "txt" ); as = szDest; // Initially create a text file of the same name as the graphic // but with "txt" extension SaveDialog1->FileName = as; } if( !SaveDialog1->Execute() ) return; // Given up hey ? RichEditReport->Lines->SaveToFile( SaveDialog1->FileName ); } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void __fastcall TMainForm::LoadFile( void ) { int bStatus; // Can we open the file ? if( (fd = fopen( OpenDialog1->FileName.c_str(), "rb") ) == NULL ) { MsgBoxStop( "Cannot open input file\n\n" + OpenDialog1->FileName ); return; } pnlChunks->Caption = ""; strList->Clear(); ListBoxChunks->Clear(); RichEditChunks->Clear(); RichEditReport->Clear(); ProgressBar1->Min = 0; ProgressBar1->Position = 0; SetChunkCount( 0 ); RichEditReport->Lines->Add( "" ); RichEditReport->Lines->Add( "Chunk contents of file :" ); RichEditReport->Lines->Add( OpenDialog1->FileName ); RichEditReport->Lines->Add( "" ); // Make report pane visible - prove we are working and not locked up PageControl1->ActivePage = tsReport; try { StaticTextStatus->Caption = "Working ... please wait"; StaticTextStatus->Update(); bStatus = DumpTree(); // true indicates success } __finally { ProgressBar1->Position = 0; StaticTextStatus->Caption = "Ok"; fclose( fd ); fd = NULL; } if( !bStatus ) // We have an error { pnlChunks->Caption = ""; strList->Clear(); ListBoxChunks->Clear(); RichEditChunks->Clear(); RichEditReport->Lines->Add(""); RichEditReport->Lines->Add("An error occurred while reading the file."); } else { // Read file and chunks without any problems // Set Report Panels caption pnlChunks->Caption = "Chunk 1 of " + String( ListBoxChunks->Items->Count ); // Set Listbox to first item ListBoxChunks->ItemIndex = 0; // Put gleeful message in report pane RichEditChunks->Lines->Add( "" ); RichEditChunks->Lines->Add( "No error's found when reading file ... " ); RichEditChunks->Lines->Add( "Click the list box to display the data for each chunk."); // Place cursor at top of editor RichEditChunks->SelStart = 0; RichEditChunks->SelLength = 0; // Place cursor at top of editor RichEditReport->SelStart = 0; RichEditReport->SelLength = 0; // Lock richedits - so an immediate undo does not make data vanish ! RichEditReport->Modified = false; // @ap@ Borland should fix this ! (it don't work) } } //--------------------------------------------------------------------------- bool __fastcall TMainForm::DumpTree( void ) { mng_handle hMNG; // let's initialize the library hMNG = mng_initialize( (mng_ptr)this, Alloc, Free, NULL ); if( !hMNG ) // did that work out ? { MNGError( hMNG, "Cannot initialize libmng." ); mng_cleanup( &hMNG ); // Always cleanup the library MsgBoxStop( "Bye!" ); Application->Terminate(); // Exit now } // setup callbacks if( (mng_setcb_openstream ( hMNG, OpenStream ) != 0) || (mng_setcb_closestream ( hMNG, CloseStream ) != 0) || (mng_setcb_processheader( hMNG,ProcessHeader ) != 0) || (mng_setcb_readdata ( hMNG, FileReadData ) != 0) ) { MNGError( hMNG, "Cannot set callbacks for libmng."); mng_cleanup( &hMNG ); // Always cleanup the library MsgBoxStop( "Bye!" ); Application->Terminate(); // Exit now } else { // read the file into memory if( mng_read( hMNG ) != 0 ) { // Because we read the whole file in first, // here is where bad input files first choke ! MNGError( hMNG, "Cannot read the file." ); mng_cleanup( &hMNG ); // Always cleanup the library return false; } else { // run through the chunk list if( mng_iterate_chunks( hMNG, 0, IterateChunks ) != 0 ) { MNGError( hMNG, "Error Getting Chunk info!" ); mng_cleanup( &hMNG ); // Always cleanup the library return false; // Errors may occur with bad chunk data } } } mng_cleanup( &hMNG ); // Always cleanup the library return true; } //--------------------------------------------------------------------------- void __fastcall TMainForm::MNGError( mng_handle hMNG, String SHMsg ) { // get extended info mng_uint32 iErrorcode; mng_uint8 iSeverity; mng_chunkid iChunkname; mng_uint32 iChunkseq; mng_int32 iExtra1; mng_int32 iExtra2; mng_pchar zErrortext; char szFormatStr[ 256 ]; iErrorcode = mng_getlasterror( hMNG, &iSeverity, &iChunkname, &iChunkseq, &iExtra1, &iExtra2, &zErrortext); wsprintf( szFormatStr, "Error = %d; Severity = %d; Chunknr = %d; Extra1 = %d", (int)iErrorcode, (int)iSeverity, (int)iChunkseq, (int)iExtra1 ); MsgBoxStop( SHMsg + "\n\n" + String( zErrortext ) + "\n\n" + String( szFormatStr ) ); } //--------------------------------------------------------------------------- void __fastcall TMainForm::ListBoxChunksClick(TObject *Sender) { // When the Chunks listbox is clicked ... // display strings from strlist in the RichEditChunks window. int iIndex = ListBoxChunks->ItemIndex; if( !ListBoxChunks->Items->Count ) return; // Update panel to reflect the selection : "Chunk N of NChunks" pnlChunks->Caption = "Chunk " + String( iIndex + 1) + " of " + String( ListBoxChunks->Items->Count ); // Reset Chunks windows ... RichEditChunks->Clear(); RichEditChunks->Lines->Add( "" ); // ... Chunks header string : "Chunk N : XXXX" (XXXX == Chunk name) RichEditChunks->Lines->Add( "Chunk " + String( iIndex + 1 ) + " : " + ListBoxChunks->Items->Strings[ iIndex ] ); // ... Seperator line //RichEditChunks->Lines->Add(""); // ... add the data from the stringlist { String as = strList->Strings[ iIndex ] + 1; String z; int n =1; do{ if( as[n] == '\n' ) { RichEditChunks->Lines->Add( z ); z = ""; } else z = z + as[n]; n+=1; } while( n < as.Length() ); RichEditChunks->Lines->Add( z ); } // ... Seperator line RichEditChunks->Lines->Add(""); // Place cursor at top of editor RichEditChunks->SelStart = 0; RichEditChunks->SelLength = 0; } //--------------------------------------------------------------------------- void __fastcall TMainForm::EventShowPage(TObject *Sender) { switch( ((TTabSheet *)Sender)->Tag ) { case PAGE_REPORT : mnuPrint->Enabled = true; mnuEdit->Enabled = true; mnuUndo->Enabled = true; mnuSave->Enabled = true; sbtnSave->Enabled = true; sbtnUndo->Enabled = true; mnuCut->Enabled = true; sbtnCut->Enabled = true; mnuCopy->Enabled = true; sbtnCopy->Enabled = true; mnuPaste->Enabled = true; sbtnPaste->Enabled = true; mnuSearch->Enabled = true; sbtnPrint->Enabled = true; break; //case PAGE_CHUNKS : //case PAGE_OPTIONS : ///case PAGE_ABOUT : //case PAGE_HELP : default : mnuPrint->Enabled = false; mnuEdit->Enabled = false; // no need to enable/disable menu commands as none will be available mnuSave->Enabled = false; sbtnSave->Enabled = false; sbtnUndo->Enabled = false; sbtnCut->Enabled = false; sbtnCopy->Enabled = false; sbtnPaste->Enabled = false; mnuSearch->Enabled = false; sbtnPrint->Enabled = false; } } //--------------------------------------------------------------------------- void __fastcall TMainForm::RadioGroupTabSizeClick(TObject *Sender) { switch( RadioGroupTabSize->ItemIndex ) { case 0 : asTab = " "; break; case 1 : asTab = " "; break; case 2 : asTab = " "; break; case 3 : asTab = " "; break; case 4 : asTab = " "; break; case 5 : asTab = " "; break; } } //--------------------------------------------------------------------------- String __fastcall TMainForm::PadInt( int iInt, int iWidth ) { char szFmtStr[ 24 ]; char szInt[ 24 ]; // Should be wide enough ! String as; wsprintf( szFmtStr,"%%%d\d\0",iWidth ); //"%[iWidth]d" as = szFmtStr; wsprintf( szInt, szFmtStr, iInt ); return String( szInt ); } //--------------------------------------------------------------------------- mng_bool __fastcall TMainForm::ShowChunk( mng_handle hMNG, mng_handle hChunk, mng_chunkid iChunktype ) { String asDataText; // Fill asDataText with string data including newline's ... // this is added to string list for each chunk // and also added to the tail end of "Report" // NOTE : // Return True to continue processing. // If mng_getchunk_xxxx fails just return false to the // caller "(bool) myiterchunk" which inturn will then return false // to "(mng_retcode) mng_iterate_chunks(...)" which will then // give us the correct error code. // In other words DON'T check for errors in "(bool) myiterchunk" ! switch( iChunktype ) { case MNG_UINT_BACK : if( !Info_BACK( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_BASI : if( !Info_BASI( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_CLIP : if( !Info_CLIP( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_CLON : if( !Info_CLON( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_DBYK : // untested @ap@ if( !Info_DBYK( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_DEFI : if( !Info_DEFI( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_DHDR : if( !Info_DHDR( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_DISC : // untested @ap@ if( !Info_DISC( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_DROP : // untested @ap@ if( !Info_DROP( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_ENDL : if( !Info_ENDL( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_FRAM : if( !Info_FRAM( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_IDAT : if( !Info_IDAT( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_IEND : if( !Info_IEND( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_IHDR : if( !Info_IHDR( hMNG, hChunk, asDataText ) ) return false; break; #define MNG_UINT_IJNG 0x494a4e47L // Function AWOL @ap@ #define MNG_UINT_IPNG 0x49504e47L // Function AWOL @ap@ case MNG_UINT_JDAT : if( !Info_JDAT( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_JHDR : if( !Info_JHDR( hMNG, hChunk, asDataText ) ) return false; break; #define MNG_UINT_JSEP 0x4a534550L // Function AWOL @ap@ case MNG_UINT_LOOP : if( !Info_LOOP( hMNG, hChunk, asDataText ) ) return false; break; #define MNG_UINT_MaGN 0x4d61474eL // which one "mng_getchunk_magn" ? case MNG_UINT_MEND : if( !Info_MEND( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_MHDR : if( !Info_MHDR( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_MOVE : if( !Info_MOVE( hMNG, hChunk, asDataText ) ) return false; break; #define MNG_UINT_MaGN 0x4d61474eL // which one "mng_getchunk_magn" ? case MNG_UINT_ORDR : if( !Info_ORDR( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_PAST : if( !Info_PAST( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_PLTE : if( !Info_PLTE( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_PPLT : if( !Info_PPLT( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_PROM : if( !Info_PROM( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_SAVE : if( !Info_SAVE( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_SEEK : if( !Info_SEEK( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_SHOW : if( !Info_SHOW( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_TERM : if( !Info_TERM( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_bKGD : if( !Info_bKGD( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_cHRM : if( !Info_cHRM( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_eXPI : if( !Info_eXPI( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_fPRI : if( !Info_fPRI( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_gAMA : if( !Info_gAMA( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_hIST : if( !Info_hIST( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_iCCP : if( !Info_iCCP( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_iTXt : // untested @ap@ if( !Info_iTXt( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_nEED : if( !Info_nEED( hMNG, hChunk, asDataText ) ) return false; break; #define MNG_UINT_oFFs 0x6f464673L // Function AWOL @ap@ #define MNG_UINT_pCAL 0x7043414cL // Function AWOL @ap@ case MNG_UINT_pHYg : // untested @ap@ if( !Info_pHYg( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_pHYs : if( !Info_pHYs( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_sBIT : if( !Info_sBIT( hMNG, hChunk, asDataText ) ) return false; break; #define MNG_UINT_sCAL 0x7343414cL // Function AWOL @ap@ case MNG_UINT_sPLT : // untested @ap@ if( !Info_sPLT( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_sRGB : if( !Info_sRGB( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_tEXt : if( !Info_tEXt( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_tIME : if( !Info_tIME( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_tRNS : if( !Info_tRNS( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_zTXt : if( !Info_zTXt( hMNG, hChunk, asDataText ) ) return false; break; case MNG_UINT_HUH : default : // this will catch unknown chunks - Huh ! if( !Info_Unknown( hMNG, hChunk, asDataText ) ) return false; break; } // end of switch //------------------------------------------------- // Add this chunk's string to our string list strList->Insert( GetChunkCount(), asDataText ); // Now's the time to bump chunk count IncChunkCount(); // Add this chunk's string to the Report MainForm->RichEditReport->Lines->Add( asDataText ); return true; } //--------------------------------------------------------------------------- libmng-2.0.2/contrib/bcb/mngdump/Help.cpp0000644000000000000000000000162012005307152016704 0ustar rootroot//--------------------------------------------------------------------------- // Help.cpp : Help pane text //--------------------------------------------------------------------------- #include "Help.h" // NB : If more text is to go in here don't forget to enlarge min/max extern char *_szHelp = { "\nA MNG developers tool to display the chunk data of MNG/JNG/PNG files."\ "\n" "\nMngDump - Version 1.0 - September 2000"\ "\n"\ "\n NOTE - This program comes with NO warranties whatsoever."\ "\n"\ "\nInstruction for use ... press the folder button and load a file !"\ "\n"\ "\nThe following chunks are (currently) unsupported :"\ "\nIJNG, IPNG, JSEP, MaGN, MAGN, oFFs, pCAL, sCAL"\ "\n"\ "\nThe program will be periodically updated, inline with libmng's growth."\ "\nPlease report any bugs, suggestions, etc to the maintainer." }; //--------------------------------------------------------------------------- libmng-2.0.2/contrib/bcb/mngdump/Help.h0000644000000000000000000000032612005307152016353 0ustar rootroot//--------------------------------------------------------------------------- #ifndef HelpH #define HelpH //--------------------------------------------------------------------------- extern char *_szHelp; #endif libmng-2.0.2/contrib/bcb/mngdump/CALLBACK.CPP0000644000000000000000000000631512005307152017016 0ustar rootroot//--------------------------------------------------------------------------- #include #pragma hdrstop # include #include "Main.h" //--------------------------------------------------------------------------- mng_ptr __stdcall TMainForm::Alloc( mng_size_t iSize ) { return (mng_ptr)calloc( 1, (size_t)iSize ); } //--------------------------------------------------------------------------- void __stdcall TMainForm::Free( mng_ptr pPtr, mng_size_t iSize ) { free( pPtr ); return; } //--------------------------------------------------------------------------- mng_bool __stdcall TMainForm::FileReadData( mng_handle hMNG, mng_ptr pBuf, mng_uint32 iSize, mng_uint32 *iRead ) { TMainForm *MainForm = (TMainForm *)mng_get_userdata( hMNG ); *iRead = fread( pBuf, 1, iSize, MainForm->GetFd() ); // iRead will indicate EOF MainForm->ProgressBar1->Position += (int)iRead; return MNG_TRUE; } //--------------------------------------------------------------------------- mng_bool __stdcall TMainForm::ProcessHeader( mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight ) { TMainForm *MainForm = (TMainForm *)mng_get_userdata( hHandle ); MainForm->Caption = ExtractFileName( MainForm->OpenDialog1->FileName ) + " [" + String( iWidth ) + "x" + String( iHeight ) + "]"; Application->Title = MainForm->asAppName + " " + MainForm->Caption; MainForm->ProgressBar1->Max = iWidth * iHeight; return MNG_TRUE; } //--------------------------------------------------------------------------- mng_bool __stdcall TMainForm::OpenStream( mng_handle hMNG ) { // nothing to do ! return MNG_TRUE; } //--------------------------------------------------------------------------- mng_bool __stdcall TMainForm::CloseStream( mng_handle hMNG ) { MainForm->ProgressBar1->Position = 0; return MNG_TRUE; } //--------------------------------------------------------------------------- mng_bool __stdcall TMainForm::IterateChunks( mng_handle hMNG, mng_handle hChunk, mng_chunkid iChunktype, mng_uint32 iChunkseq ) { TMainForm *MainForm = (TMainForm *)mng_get_userdata( hMNG ); char aCh[5]; // decode the chunkname aCh[0] = (char)((iChunktype >> 24) & 0xFF); aCh[1] = (char)((iChunktype >> 16) & 0xFF); aCh[2] = (char)((iChunktype >> 8) & 0xFF); aCh[3] = (char)((iChunktype ) & 0xFF); aCh[4] = (char)0; // zero terminate - used as a "C" string below MainForm->RichEditReport->Lines->Add( "" ); MainForm->RichEditReport->Lines->Add( "Chunk " + String( iChunkseq + 1 ) + " : " + String( aCh ) ); // Add Chunk text to listbox MainForm->ListBoxChunks->Items->Add( aCh ); // keep'm coming ... unless we encounter an error return MainForm->ShowChunk( hMNG, hChunk, iChunktype ); } //--------------------------------------------------------------------------- libmng-2.0.2/contrib/bcb/mngdump/CHUNKS.CPP0000644000000000000000000015374212005307152016664 0ustar rootroot// // Chunks.cpp // // The following functions are to assemble a string for each chunk // The function name "Info_????" denote which chunk it handles // // Comments marked @todo@ may, or maynot, be filled in at a later date ! // //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Main.h" # define xUSE_UNKNOWN // remove "x" to report of "UNKNOWN" - else "" # define FFACTOR ((float)100000.0) // NB We must use Octal for RichEdit's newlines - MicroSoft love Octal ! # define nl "\015\012" # define TAB asTab // Ps : If anyone reading this knows how to do this using token // pasting please let me know ! (AP) // ConCat newline to string # define NL as = as + nl // Integer ARGuement # define IARG( _str_, _int_ )\ as = as + TAB + (_str_) + " " + String( _int_ ) // Bool ARGuement # define BARG( _str_, _bool_ )\ if( WantsBool() )\ as = as + TAB + (_str_) + " " + ((_bool_) ? "true" : "false");\ else\ as = as + TAB + (_str_) + " " + IntToStr( _bool_ ); // Float ARGuement # define FARG( _str_, _float_ )\ as = as + TAB + (_str_) + " " + String( _float_ ) // szText ARGuement # define ZARG( _str_, _sz_ )\ as = as + TAB + (_str_) + " \"" + String( _sz_ ) + "\"" // Concat general strings # define STR( _str_ ) as = as + _str_ // Concat Hex string # define HEXSTR( _str_ ) as = as + IntToHex(_str_,2) // Concat Macro Identifier to ARG #define MI( _str_ ) as = as + TAB + _str_; // Concat "(" Comment ")" to ARG #define PCOM( _str_ )\ if( WantsComments() ) as = as + TAB + "(" + _str_ + ")"; // Concat "float(" Comment ")" to ARG #define FPCOM( _str_ )\ if( WantsComments() ) as = as + TAB + "float(" + _str_ + ")"; //--------------------------------------------------------------------------- // Macro Identifiers - these, below, are used several times // NB those used once have local #define's and #undef's //--------------------------------------------------------------------------- # ifdef USE_UNKNOWN # define UNKNOWN "UNKNOWN" # else # define UNKNOWN "" # endif // Does this need two to be more visible ? # define ILLEGAL_VALUE ">> ILLEGAL VALUE << " // IHDR, BASI, JHDR, PROM, sPLT # define MI_BITDEPTH( _i_ )\ if( WantsMacroIds() )\ switch( (_i_) ) {\ case MNG_BITDEPTH_1 : MI( "MNG_BITDEPTH_1" ); break;\ case MNG_BITDEPTH_2 : MI( "MNG_BITDEPTH_2" ); break;\ case MNG_BITDEPTH_4 : MI( "MNG_BITDEPTH_4" ); break;\ case MNG_BITDEPTH_8 : MI( "MNG_BITDEPTH_8" ); break;\ case MNG_BITDEPTH_16 : MI( "MNG_BITDEPTH_16" ); break;\ default : MI(ILLEGAL_VALUE);\ } // IHDR, BASI, PROM # define MI_COLORTYPE( _i_ )\ if( WantsMacroIds() )\ switch( (_i_) ) {\ case MNG_COLORTYPE_GRAY : MI( "MNG_COLORTYPE_GRAY" ); break;\ case MNG_COLORTYPE_RGB : MI( "MNG_COLORTYPE_RGB" ); break;\ case MNG_COLORTYPE_INDEXED : MI( "MNG_COLORTYPE_INDEXED" ); break;\ case MNG_COLORTYPE_GRAYA : MI( "MNG_COLORTYPE_GRAYA" ); break;\ case MNG_COLORTYPE_RGBA : MI( "MNG_COLORTYPE_RGBA" ); break;\ default : MI(ILLEGAL_VALUE);\ } // IHDR, zTXt, iTXt, iCCP, BASI, JHDR # define MI_COMPRESSION_DEFLATE( _i_ )\ if( WantsMacroIds() ) {\ if( (_i_) == MNG_COMPRESSION_DEFLATE ) {\ MI( "MNG_COMPRESSION_DEFLATE" );\ } else {\ MI( ILLEGAL_VALUE );\ }\ } // IHDR, BASI, JHDR # define MI_FILTER( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_FILTER_ADAPTIVE : MI( "MNG_FILTER_ADAPTIVE" ); break;\ case MNG_FILTER_NO_ADAPTIVE : MI( "MNG_FILTER_NO_ADAPTIVE" ); break;\ case MNG_FILTER_DIFFERING : MI( "MNG_FILTER_DIFFERING" ); break;\ case MNG_FILTER_MASK : MI( "MNG_FILTER_MASK" ); break;\ default : MI(UNKNOWN);\ } //NB MNG_FILTER_NO_DIFFERING == MNG_FILTER_ADAPTIVE // IHDR, BASI, JHDR #define MI_INTERLACE( _i_ )\ if( WantsMacroIds() ) {\ if( (_i_) == MNG_INTERLACE_NONE ) {\ MI( "MNG_INTERLACE_NONE" )\ } else if( (_i_) == MNG_INTERLACE_ADAM7 ) {\ MI( "MNG_INTERLACE_ADAM7" );\ } else { MI(ILLEGAL_VALUE);} \ } // pHYs, pHYg #define MI_UNITS( _i_ )\ if( WantsMacroIds() ) {\ if( (_i_) == MNG_UNIT_UNKNOWN ) {\ MI( "MNG_UNIT_UNKNOWN" )\ } else if( (_i_) == MNG_UNIT_METER ) {\ MI( "MNG_UNIT_METER" );\ } else { MI(UNKNOWN);} \ } // CLON & MOVE #define MI_LOCATION( _i_ )\ if( WantsMacroIds() ) {\ if( (_i_) == MNG_LOCATION_ABSOLUTE ) {\ MI( "MNG_LOCATION_ABSOLUTE" )\ } else if( (_i_) == MNG_LOCATION_RELATIVE ) {\ MI( "MNG_LOCATION_RELATIVE" );\ } else { MI(ILLEGAL_VALUE);} \ } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_BACK( mng_handle hMNG, mng_handle hChunk, String &as ) { // NB for BACKGROUND other values are only advisory #define MI_BACKGROUND( _i_ )\ if( WantsMacroIds() ) {\ if( (_i_) == MNG_BACKGROUNDCOLOR_MANDATORY ) {\ MI( "MNG_BACKGROUNDCOLOR_MANDATORY" )\ } else if( (_i_) == MNG_BACKGROUNDIMAGE_MANDATORY ) {\ MI( "MNG_BACKGROUNDIMAGE_MANDATORY" );\ } \ } # define MI_BACKGROUND_TILE( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_BACKGROUNDIMAGE_NOTILE : MI( "MNG_BACKGROUNDIMAGE_NOTILE" ); break;\ case MNG_BACKGROUNDIMAGE_TILE : MI( "MNG_BACKGROUNDIMAGE_TILE" ); break;\ default : MI(UNKNOWN);\ } mng_uint16 iRed; mng_uint16 iGreen; mng_uint16 iBlue; mng_uint8 iMandatory; mng_uint16 iImageid; mng_uint8 iTile; if( mng_getchunk_back( hMNG, hChunk, &iRed, &iGreen, &iBlue, &iMandatory, &iImageid, &iTile ) != 0 ) return false; IARG( "iRed", iRed ); NL; IARG( "iGreen",iGreen ); NL; IARG( "iBlue", iBlue ); NL; IARG( "iMandatory", iMandatory ); MI_BACKGROUND( iMandatory ); NL; IARG( "iImageid", iImageid ); NL; IARG( "iTile", iTile ); MI_BACKGROUND_TILE( iTile ); return true; # undef MI_BACKGROUND # undef MI_BACKGROUND_TILE } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_BASI( mng_handle hMNG, mng_handle hChunk, String &as ) { #define MI_VIEWABLE( _i_ )\ if( WantsMacroIds() ) {\ if( (_i_) == MNG_NOTVIEWABLE ) {\ MI( "MNG_NOTVIEWABLE" )\ } else if( (_i_) == MNG_VIEWABLE ) {\ MI( "MNG_VIEWABLE" );\ } else { MI(UNKNOWN);} \ } mng_uint32 iWidth; mng_uint32 iHeight; mng_uint8 iBitdepth; mng_uint8 iColortype; mng_uint8 iCompression; mng_uint8 iFilter; mng_uint8 iInterlace; mng_uint16 iRed; mng_uint16 iGreen; mng_uint16 iBlue; mng_uint16 iAlpha; mng_uint8 iViewable; if( mng_getchunk_basi( hMNG, hChunk, &iWidth, &iHeight, &iBitdepth, &iColortype, &iCompression, &iFilter, &iInterlace, &iRed, &iGreen, &iBlue, &iAlpha, &iViewable ) != 0 ) return false; IARG( "iWidth", iWidth ); NL; IARG( "iHeight", iHeight ); NL; IARG( "iBitdepth", iBitdepth ); MI_BITDEPTH( iBitdepth ); NL; IARG( "iColortype", iColortype ); MI_COLORTYPE( iColortype ); NL; IARG( "iCompression", iCompression ); MI_COMPRESSION_DEFLATE( iCompression ); NL; IARG( "iFilter", iFilter ); MI_FILTER( iFilter ); NL; IARG( "iInterlace", iInterlace ); MI_INTERLACE( iInterlace ); NL; IARG( "iRed", iRed ); NL; IARG( "iGreen", iGreen ); NL; IARG( "iBlue", iBlue ); NL; IARG( "iAlpha", iAlpha ); NL; IARG( "iViewable", iViewable ); MI_VIEWABLE( iViewable ); return true; # undef MI_VIEWABLE } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_CLIP( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_CLIPPING( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_CLIPPING_ABSOLUTE : MI( "MNG_CLIPPING_ABSOLUTE" ); break;\ case MNG_CLIPPING_RELATIVE : MI( "MNG_CLIPPING_RELATIVE" ); break;\ default : MI(UNKNOWN);\ } mng_uint16 iFirstid; mng_uint16 iLastid; mng_uint8 iCliptype; mng_int32 iClipl; mng_int32 iClipr; mng_int32 iClipt; mng_int32 iClipb; if( mng_getchunk_clip( hMNG, hChunk, &iFirstid, &iLastid, &iCliptype, &iClipl, &iClipr, &iClipt, &iClipb ) != 0 ) return false; IARG( "iFirstid", iFirstid ); NL; IARG( "iLastid", iLastid ); NL; IARG( "iCliptype", iCliptype ); MI_CLIPPING( iCliptype ); NL; IARG( "iClipl", iClipl ); NL; IARG( "iClipr", iClipr ); NL; IARG( "iClipt", iClipt ); NL; IARG( "iClipb", iClipb ); return true; # undef MI_CLIPPING } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_CLON( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_CLONTYPE( _i_ )\ if( WantsMacroIds() )\ switch( (_i_) ) {\ case MNG_FULL_CLONE : MI( "MNG_FULL_CLONE" ); break;\ case MNG_PARTIAL_CLONE : MI( "MNG_PARTIAL_CLONE" ); break;\ case MNG_RENUMBER : MI( "MNG_RENUMBER" ); break;\ default : MI(UNKNOWN);\ } #define MI_CLON_CONCRETE( _i_ )\ if( WantsMacroIds() ) {\ if( (_i_) == MNG_CONCRETE_ASPARENT ) {\ MI( "MNG_CONCRETE_ASPARENT" )\ } else if( (_i_) == MNG_CONCRETE_MAKEABSTRACT ) {\ MI( "MNG_CONCRETE_MAKEABSTRACT" );\ } else { MI(UNKNOWN);} \ } mng_uint16 iSourceid; mng_uint16 iCloneid; mng_uint8 iClonetype; mng_uint8 iDonotshow; mng_uint8 iConcrete; mng_bool bHasloca; mng_uint8 iLocationtype; mng_int32 iLocationx; mng_int32 iLocationy; if( mng_getchunk_clon( hMNG, hChunk, &iSourceid, &iCloneid, &iClonetype, &iDonotshow, &iConcrete, &bHasloca, &iLocationtype, &iLocationx, &iLocationy ) != 0 ) return false; IARG( "iSourceid", iSourceid ); NL; IARG( "iCloneid", iCloneid ); NL; IARG( "iClonetype", iClonetype ); MI_CLONTYPE( iClonetype ); NL; IARG( "iDonotshow", iDonotshow ); NL; IARG( "iConcrete", iConcrete ); MI_CLON_CONCRETE( iConcrete ); NL; BARG( "bHasloca", bHasloca ); NL; IARG( "iLocationtype", iLocationtype ); MI_LOCATION( iLocationtype ); NL; IARG( "iLocationx", iLocationx ); NL; IARG( "iLocationy", iLocationy ); return true; # undef MI_CLONTYPE # undef MI_CLON_CONCRETE } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_DBYK( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_POLARITY( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_POLARITY_ONLY : MI( "MNG_POLARITY_ONLY" ); break;\ case MNG_POLARITY_ALLBUT : MI( "MNG_POLARITY_ALLBUT" ); break;\ default : MI(UNKNOWN);\ } mng_chunkid iChunkname; mng_uint8 iPolarity; mng_uint32 iKeywordssize; mng_pchar zKeywords; if( mng_getchunk_dbyk( hMNG, hChunk, &iChunkname, &iPolarity, &iKeywordssize, &zKeywords ) != 0 ) return false; IARG( "iChunkname", iChunkname ); // show chunk name ? @todo@ NL; IARG( "iPolarity", iPolarity ); MI_POLARITY( iPolarity ); NL; IARG( "iKeywordssize", iKeywordssize ); NL; ZARG( "zKeywords", zKeywords ); return true; # undef MI_POLARITY } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_DEFI( mng_handle hMNG, mng_handle hChunk, String &as ) { #define MI_DONOTSHOW( _i_ )\ if( WantsMacroIds() ) {\ if( (_i_) == MNG_DONOTSHOW_VISIBLE ) {\ MI( "MNG_DONOTSHOW_VISIBLE" )\ } else if( (_i_) == MNG_DONOTSHOW_NOTVISIBLE ) {\ MI( "MNG_DONOTSHOW_NOTVISIBLE" );\ }\ } #define MI_DEFI_CONCRETE( _i_ )\ if( WantsMacroIds() ) {\ if( (_i_) == MNG_ABSTRACT ) {\ MI( "MNG_ABSTRACT" )\ } else if( (_i_) == MNG_CONCRETE ) {\ MI( "MNG_CONCRETE" );\ }\ } mng_uint16 iObjectid; mng_uint8 iDonotshow; mng_uint8 iConcrete; mng_bool bHasloca; mng_int32 iXlocation; mng_int32 iYlocation; mng_bool bHasclip; mng_int32 iLeftcb; mng_int32 iRightcb; mng_int32 iTopcb; mng_int32 iBottomcb; if( mng_getchunk_defi( hMNG, hChunk, &iObjectid, &iDonotshow, &iConcrete, &bHasloca, &iXlocation, &iYlocation, &bHasclip, &iLeftcb, &iRightcb, &iTopcb, &iBottomcb ) != 0 ) return false; IARG( "iObjectid", iObjectid ); NL; IARG( "iDonotshow", iDonotshow ); MI_DONOTSHOW( iDonotshow ); NL; IARG( "iConcrete", iConcrete ); MI_DEFI_CONCRETE( iConcrete ); NL; BARG( "bHasloca", bHasloca ); NL; IARG( "iXlocation", iXlocation ); NL; IARG( "iYlocation", iYlocation ); NL; BARG( "bHasclip", bHasclip ); NL; IARG( "iLeftcb", iLeftcb ); NL; IARG( "iRightcb", iRightcb ); NL; IARG( "iTopcb", iTopcb ); NL; IARG( "iBottomcb", iBottomcb ); return true; # undef MI_DONOTSHOW # undef MI_DEFI_CONCRETE } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_DHDR( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_IMAGETYPE( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_IMAGETYPE_UNKNOWN : MI( "MNG_IMAGETYPE_UNKNOWN" ); break;\ case MNG_IMAGETYPE_PNG : MI( "MNG_IMAGETYPE_PNG" ); break;\ case MNG_IMAGETYPE_JNG : MI( "MNG_IMAGETYPE_JNG" ); break;\ default : MI(UNKNOWN);\ } # define MI_DELTATYPE( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_DELTATYPE_REPLACE : MI( "MNG_DELTATYPE_REPLACE" ); break;\ case MNG_DELTATYPE_BLOCKPIXELADD : MI( "MNG_DELTATYPE_BLOCKPIXELADD" ); break;\ case MNG_DELTATYPE_BLOCKALPHAADD : MI( "MNG_DELTATYPE_BLOCKALPHAADD" ); break;\ case MNG_DELTATYPE_BLOCKCOLORADD : MI( "MNG_DELTATYPE_BLOCKCOLORADD" ); break;\ case MNG_DELTATYPE_BLOCKPIXELREPLACE : MI( "MNG_DELTATYPE_BLOCKPIXELREPLACE" ); break;\ case MNG_DELTATYPE_BLOCKALPHAREPLACE : MI( "MNG_DELTATYPE_BLOCKALPHAREPLACE" ); break;\ case MNG_DELTATYPE_BLOCKCOLORREPLACE : MI( "MNG_DELTATYPE_BLOCKCOLORREPLACE" ); break;\ case MNG_DELTATYPE_NOCHANGE : MI( "MNG_DELTATYPE_NOCHANGE" ); break;\ default : MI(UNKNOWN);\ } mng_uint16 iObjectid; mng_uint8 iImagetype; mng_uint8 iDeltatype; mng_uint32 iBlockwidth; mng_uint32 iBlockheight; mng_uint32 iBlockx; mng_uint32 iBlocky; if( mng_getchunk_dhdr( hMNG, hChunk, &iObjectid, &iImagetype, &iDeltatype, &iBlockwidth, &iBlockheight, &iBlockx, &iBlocky ) != 0 ) return false; IARG( "iObjectid", iObjectid ); NL; IARG( "iImagetype", iImagetype ); MI_IMAGETYPE( iImagetype ); NL; IARG( "iDeltatype", iDeltatype ); MI_DELTATYPE( iDeltatype ); NL; IARG( "iBlockwidth", iBlockwidth ); NL; IARG( "iBlockheight", iBlockheight ); NL; IARG( "iBlockx", iBlockx ); NL; IARG( "iBlocky", iBlocky ); return true; # undef MI_IMAGETYPE # undef MI_DELTATYPE } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_DISC( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iCount; mng_uint16p pObjectids; if( mng_getchunk_disc( hMNG, hChunk, &iCount, &pObjectids ) != 0 ) return false; IARG( "iCount", iCount ); //pObjectids pObjectids return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_DROP( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iCount; mng_chunkidp pChunknames; if( mng_getchunk_drop( hMNG, hChunk, &iCount, &pChunknames ) != 0 ) return false; IARG( "iCount", iCount ); // pChunknamesp Chunknames // Iterate chunk names ? @todo@ return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_ENDL( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint8 iLevel; if( mng_getchunk_endl( hMNG, hChunk, &iLevel ) != 0 ) return false; IARG( "iLevel", iLevel ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_FRAM( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_BOUNDARY( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_BOUNDARY_ABSOLUTE : MI( "MNG_BOUNDARY_ABSOLUTE" ); break;\ case MNG_BOUNDARY_RELATIVE : MI( "MNG_BOUNDARY_RELATIVE" ); break;\ default : MI(UNKNOWN);\ } # define MI_FRAMINGMODE( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_FRAMINGMODE_NOCHANGE : MI( "MNG_FRAMINGMODE_NOCHANGE" ); break;\ case MNG_FRAMINGMODE_1 : MI( "MNG_FRAMINGMODE_1" ); break;\ case MNG_FRAMINGMODE_2 : MI( "MNG_FRAMINGMODE_2" ); break;\ case MNG_FRAMINGMODE_3 : MI( "MNG_FRAMINGMODE_3" ); break;\ case MNG_FRAMINGMODE_4 : MI( "MNG_FRAMINGMODE_4" ); break;\ default : MI(UNKNOWN);\ } # define MI_CHANGEDELAY( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_CHANGEDELAY_NO : MI( "MNG_CHANGEDELAY_NO" ); break;\ case MNG_CHANGEDELAY_NEXTSUBFRAME : MI( "MNG_CHANGEDELAY_NEXTSUBFRAME" ); break;\ case MNG_CHANGEDELAY_DEFAULT : MI( "MNG_CHANGEDELAY_DEFAULT" ); break;\ default : MI(UNKNOWN);\ } # define MI_CHANGETIMOUT( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_CHANGETIMOUT_NO : MI( "MNG_CHANGETIMOUT_NO" ); break;\ case MNG_CHANGETIMOUT_DETERMINISTIC_1 : MI( "MNG_CHANGETIMOUT_DETERMINISTIC_1" ); break;\ case MNG_CHANGETIMOUT_DETERMINISTIC_2 : MI( "MNG_CHANGETIMOUT_DETERMINISTIC_2" ); break;\ case MNG_CHANGETIMOUT_DECODER_1 : MI( "MNG_CHANGETIMOUT_DECODER_1" ); break;\ case MNG_CHANGETIMOUT_DECODER_2 : MI( "MNG_CHANGETIMOUT_DECODER_2" ); break;\ case MNG_CHANGETIMOUT_USER_1 : MI( "MNG_CHANGETIMOUT_USER_1" ); break;\ case MNG_CHANGETIMOUT_USER_2 : MI( "MNG_CHANGETIMOUT_USER_2" ); break;\ case MNG_CHANGETIMOUT_EXTERNAL_1 : MI( "MNG_CHANGETIMOUT_EXTERNAL_1" ); break;\ case MNG_CHANGETIMOUT_EXTERNAL_2 : MI( " MNG_CHANGETIMOUT_EXTERNAL_2" ); break;\ default : MI(UNKNOWN);\ } # define MI_CHANGECLIPPING( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_CHANGECLIPPING_NO : MI( "MNG_CHANGECLIPPING_NO" ); break;\ case MNG_CHANGECLIPPING_NEXTSUBFRAME : MI( "MNG_CHANGECLIPPING_NEXTSUBFRAME" ); break;\ case MNG_CHANGECLIPPING_DEFAULT : MI( "MNG_CHANGECLIPPING_DEFAULT" ); break;\ default : MI(UNKNOWN);\ } # define MI_CHANGESYNCID( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_CHANGESYNCID_NO : MI( "MNG_CHANGESYNCID_NO" ); break;\ case MNG_CHANGESYNCID_NEXTSUBFRAME : MI( "MNG_CHANGESYNCID_NEXTSUBFRAME" ); break;\ case MNG_CHANGESYNCID_DEFAULT : MI( "MNG_CHANGESYNCID_DEFAULT" ); break;\ default : MI(UNKNOWN);\ } mng_bool bEmpty; mng_uint8 iMode; mng_uint32 iNamesize; mng_pchar zName; mng_uint8 iChangedelay; mng_uint8 iChangetimeout; mng_uint8 iChangeclipping; mng_uint8 iChangesyncid; mng_uint32 iDelay; mng_uint32 iTimeout; mng_uint8 iBoundarytype; mng_int32 iBoundaryl; mng_int32 iBoundaryr; mng_int32 iBoundaryt; mng_int32 iBoundaryb; mng_uint32 iCount; mng_uint32p pSyncids; if( mng_getchunk_fram( hMNG, hChunk, &bEmpty, &iMode, &iNamesize, &zName, &iChangedelay, &iChangetimeout, &iChangeclipping, &iChangesyncid, &iDelay, &iTimeout, &iBoundarytype, &iBoundaryl, &iBoundaryr,&iBoundaryt, &iBoundaryb, &iCount, &pSyncids ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; IARG( "iMode", iMode ); MI_FRAMINGMODE( iMode ); NL; IARG( "iNamesize", iNamesize ); NL; ZARG( "zName", zName ); NL; IARG( "iChangedelay", iChangedelay ); MI_CHANGEDELAY( iChangedelay ); NL; IARG( "iChangetimeout", iChangetimeout ); MI_CHANGETIMOUT( iChangetimeout ); NL; IARG( "iChangeclipping", iChangeclipping ); MI_CHANGECLIPPING( iChangeclipping ); NL; IARG( "iChangesyncid", iChangesyncid ); MI_CHANGESYNCID( iChangesyncid ); NL; IARG( "iDelay", iDelay ); NL; IARG( "iTimeout", iTimeout ); NL; IARG( "iBoundarytype", iBoundarytype ); MI_BOUNDARY( iBoundarytype ); NL; IARG( "iBoundaryl", iBoundaryl ); NL; IARG( "iBoundaryr", iBoundaryr ); NL; IARG( "iBoundaryt", iBoundaryt ); NL; IARG( "iBoundaryb", iBoundaryb ); NL; IARG( "iCount", iCount ); //pSyncids pSyncids @todo@ return true; # undef MI_BOUNDARY # undef MI_FRAMINGMODE # undef MI_CHANGEDELAY # undef MI_CHANGETIMOUT # undef MI_CHANGECLIPPING # undef MI_CHANGESYNCID } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_IDAT( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iRawlen; mng_ptr pRawdata; if( mng_getchunk_idat( hMNG, hChunk, &iRawlen, &pRawdata ) != 0 ) return false; IARG( "iRawlen", iRawlen ); if( WantsRawData() ) { Byte *bp = (Byte*)pRawdata; NL; STR( TAB + "Rawdata : " ); // show the first 16 bytes, as hex for( int n = 0; n < 16; n +=1 ) HEXSTR( (int)bp[n] ) + " "; } return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_IEND( mng_handle hMNG, mng_handle hChunk, String &as ) { NL + TAB; STR( "End of Image." ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_IHDR( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iWidth; mng_uint32 iHeight; mng_uint8 iBitdepth; mng_uint8 iColortype; mng_uint8 iCompression; mng_uint8 iFilter; mng_uint8 iInterlace; if( mng_getchunk_ihdr( hMNG, hChunk, &iWidth, &iHeight, &iBitdepth, &iColortype, &iCompression, &iFilter, &iInterlace ) != 0 ) return false; IARG( "iWidth", iWidth ); NL; IARG( "iHeight", iHeight ); NL; IARG( "iBitdepth", iBitdepth ); MI_BITDEPTH( iBitdepth ); NL; IARG( "iColortype", iColortype ); MI_COLORTYPE( iColortype ); NL; IARG( "iCompression", iCompression ); MI_COMPRESSION_DEFLATE( iCompression ); NL; IARG( "iFilter", iFilter ); MI_FILTER( iFilter ); NL; IARG( "iInterlace", iInterlace ); MI_INTERLACE( iInterlace ); if( WantsComments() ) { NL; NL + TAB; switch( iColortype ) { case MNG_COLORTYPE_GRAY : switch( iBitdepth ) { case 1 : case 2 : case 4 : case 8 : case 16 : STR( "Each pixel value is a greyscale level -" ); } // inner switch break; case MNG_COLORTYPE_RGB : switch( iBitdepth ) { case 8 : case 16 : STR( "Each pixel value is an R,G,B series -" ); } // inner switch break; case MNG_COLORTYPE_INDEXED : switch( iBitdepth ) { case 1 : case 2 : case 4 : case 8 : STR( "Each pixel value is a palette index -" ); } // inner switch break; case MNG_COLORTYPE_GRAYA : switch( iBitdepth ) { case 8 : case 16 : STR( "Each pixel value is a greyscale level, "\ "followed by an Alpha channel level -" ); } // inner switch break; case MNG_COLORTYPE_RGBA : switch( iBitdepth ){ case 8 : case 16: STR( "Each pixel value is an R,G,B "\ "series, followed by an Alpha channel level -" ); } // inner switch break; } STR( " " + String(iBitdepth) + " bits per pixel." ); } return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_JDAT( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iRawlen; mng_ptr pRawdata = NULL; if( mng_getchunk_jdat( hMNG, hChunk, &iRawlen, &pRawdata ) != 0 ) return false; IARG( "iRawlen", iRawlen ); if( WantsRawData() ) { Byte *bp = (Byte*)pRawdata; NL; STR( TAB + "Rawdata : " ); // show the first 16 bytes, as hex for( int n = 0; n < 16; n +=1 ) HEXSTR( (int)bp[n] ) + " "; } return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_JHDR( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_JPEG_COLORTYPE( _i_ )\ if( WantsMacroIds() ) {\ switch( _i_ ){\ case MNG_COLORTYPE_JPEGGRAY : MI( "MNG_COLORTYPE_JPEGGRAY");break;\ case MNG_COLORTYPE_JPEGCOLOR : MI( "MNG_COLORTYPE_JPEGCOLOR");break;\ case MNG_COLORTYPE_JPEGGRAYA : MI( "MNG_COLORTYPE_JPEGGRAYA");break;\ case MNG_COLORTYPE_JPEGCOLORA : MI( "MNG_COLORTYPE_JPEGCOLORA");break;\ default : MI(UNKNOWN);\ }\ } # define MI_JPEG_BITDEPTH( _i_ )\ if( WantsMacroIds() ) {\ switch( _i_ ){\ case MNG_BITDEPTH_JPEG8 : MI("MNG_BITDEPTH_JPEG8");break;\ case MNG_BITDEPTH_JPEG12 : MI("MNG_BITDEPTH_JPEG12");break;\ case MNG_BITDEPTH_JPEG8AND12 : MI("MNG_BITDEPTH_JPEG8AND12");break;\ default : MI(UNKNOWN);\ }\ } # define MI_JPEGCOMPRESSION( _i_ )\ if( WantsMacroIds() ) {\ if( iImagecompression == MNG_COMPRESSION_BASELINEJPEG ) {\ MI( "MNG_COMPRESSION_BASELINEJPEG" );\ } else { MI(ILLEGAL_VALUE); };\ } # define MI_JPEGINTERLACE( _i_ )\ if( WantsMacroIds() ) {\ if( iImageinterlace == MNG_INTERLACE_SEQUENTIAL ) {\ MI( "MNG_INTERLACE_SEQUENTIAL");\ } else {\ MI( "MNG_INTERLACE_PROGRESSIVE" );\ }\ } // NB alpha bitdepth is not png bitdepth because it can be 0 (zero) # define MI_ALPHABITDEPTH( _i_ )\ if( WantsMacroIds() )\ switch( (_i_) ) {\ case MNG_BITDEPTH_1 : MI( "MNG_BITDEPTH_1" ); break;\ case MNG_BITDEPTH_2 : MI( "MNG_BITDEPTH_2" ); break;\ case MNG_BITDEPTH_4 : MI( "MNG_BITDEPTH_4" ); break;\ case MNG_BITDEPTH_8 : MI( "MNG_BITDEPTH_8" ); break;\ case MNG_BITDEPTH_16 : MI( "MNG_BITDEPTH_16" ); break;\ case 0 : break;\ default : MI(ILLEGAL_VALUE);\ } mng_uint32 iWidth; mng_uint32 iHeight; mng_uint8 iColortype; mng_uint8 iImagesampledepth; mng_uint8 iImagecompression; mng_uint8 iImageinterlace; mng_uint8 iAlphasampledepth; mng_uint8 iAlphacompression; mng_uint8 iAlphafilter; mng_uint8 iAlphainterlace; if( mng_getchunk_jhdr( hMNG, hChunk, &iWidth, &iHeight, &iColortype, &iImagesampledepth, &iImagecompression, &iImageinterlace, &iAlphasampledepth, &iAlphacompression, &iAlphafilter, &iAlphainterlace ) != 0 ) return false; IARG( "iWidth", iWidth ); NL; IARG( "iHeight", iHeight ); NL; IARG( "iColortype", iColortype ); MI_JPEG_COLORTYPE( iColortype ); NL; IARG( "iImagesampledepth", iImagesampledepth ); MI_JPEG_BITDEPTH( iImagesampledepth ); NL; IARG( "iImagecompression", iImagecompression ); MI_JPEGCOMPRESSION( iImagecompression ); NL; IARG( "iImageinterlace", iImageinterlace ); MI_JPEGINTERLACE( iImageinterlace ); NL; IARG( "iAlphasampledepth", iAlphasampledepth ); MI_ALPHABITDEPTH( iAlphasampledepth ); NL; IARG( "iAlphacompression", iAlphacompression ); MI_COMPRESSION_DEFLATE( iAlphacompression ); NL; IARG( "iAlphafilter", iAlphafilter ); MI_FILTER( iAlphafilter ); NL; IARG( "iAlphainterlace", iAlphainterlace ); MI_INTERLACE( iAlphainterlace ); return true; # undef MI_JPEG_COLORTYPE # undef MI_JPEG_BITDEPTH # undef MI_JPEGCOMPRESSION # undef MI_JPEGINTERLACE # undef MI_ALPHABITDEPTH } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_LOOP( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_TERMINATION( _i_ )\ if( WantsMacroIds() )\ switch( (_i_) ) {\ case MNG_TERMINATION_DECODER_NC :\ MI( "MNG_TERMINATION_DECODER_NC" ); break;\ case MNG_TERMINATION_USER_NC :\ MI( "MNG_TERMINATION_USER_NC" ); break;\ case MNG_TERMINATION_EXTERNAL_NC :\ MI( "MNG_TERMINATION_EXTERNAL_NC" ); break;\ case MNG_TERMINATION_DETERMINISTIC_NC :\ MI( "MNG_TERMINATION_DETERMINISTIC_NC" ); break;\ case MNG_TERMINATION_DECODER_C :\ MI( "MNG_TERMINATION_DECODER_C" ); break;\ case MNG_TERMINATION_USER_C :\ MI( "MNG_TERMINATION_USER_C" ); break;\ case MNG_TERMINATION_EXTERNAL_C :\ MI( "MNG_TERMINATION_EXTERNAL_C" ); break;\ case MNG_TERMINATION_DETERMINISTIC_C :\ MI( "MNG_TERMINATION_DETERMINISTIC_C" ); break;\ default : MI(UNKNOWN);\ } mng_uint8 iLevel; mng_uint32 iRepeat; mng_uint8 iTermination; mng_uint32 iItermin; mng_uint32 iItermax; mng_uint32 iCount; mng_uint32p pSignals; if( mng_getchunk_loop( hMNG, hChunk, &iLevel, &iRepeat, &iTermination, &iItermin, &iItermax, &iCount, &pSignals ) != 0 ) return false; IARG( "iLevel", iLevel ); NL; IARG( "iRepeat", iRepeat ); NL; IARG( "iTermination", iTermination ); MI_TERMINATION( iTermination ); NL; IARG( "iItermin", iItermin ); NL; IARG( "iItermax", iItermax ); NL; IARG( "iCount", iCount ); //pSignals pSignals //@todo@ return true; # undef MI_TERMINATION } //--------------------------------------------------------------------------- /* bool __fastcall TMainForm::Info_M?GN( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint16 iFirstid; mng_uint16 iLastid; mng_uint16 iMethodX; mng_uint16 iMX; mng_uint16 iMY; mng_uint16 iML; mng_uint16 iMR; mng_uint16 iMT; mng_uint16 iMB; mng_uint16 iMethodY; if( mng_getchunk_magn( hMNG, hChunk, &iFirstid, &iLastid, &iMethodX, &iMX, &iMY, &iML, &iMR, &iMT, &iMB, &iMethodY ) != 0 ) return false; IARG( "iFirstid", iFirstid ); NL; IARG( "iLastid", iLastid ); NL; IARG( "iMethodX", iMethodX ); NL; IARG( "iMX", iMX ); NL; IARG( "iMY", iMY ); NL; IARG( "iML", iML ); NL; IARG( "iMR", iMR ); NL; IARG( "iMT", iMT ); NL; IARG( "iMB", iMB ); NL; IARG( "iMethodY", iMethodY ); return true; } */ //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_MEND( mng_handle hMNG, mng_handle hChunk, String &as ) { NL + TAB; STR( "End of Multiply Network Graphic." ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_MHDR( mng_handle hMNG, mng_handle hChunk, String &as ) { // NB "iSimplicity" is a bit field # define MI_SIMPLICITY( _i_ )\ if( WantsMacroIds() ) {\ if( (_i_) & MNG_SIMPLICITY_VALID )\ MI( "MNG_SIMPLICITY_VALID" );\ if( (_i_) & MNG_SIMPLICITY_SIMPLEFEATURES )\ MI( "MNG_SIMPLICITY_SIMPLEFEATURES" );\ if( (_i_) & MNG_SIMPLICITY_COMPLEXFEATURES )\ MI( "MNG_SIMPLICITY_COMPLEXFEATURES" );\ if( (_i_) & MNG_SIMPLICITY_TRANSPARENCY )\ MI( "MNG_SIMPLICITY_TRANSPARENCY" );\ if( (_i_) & MNG_SIMPLICITY_JNG )\ MI( "MNG_SIMPLICITY_JNG" );\ if( (_i_) & MNG_SIMPLICITY_DELTAPNG )\ MI( "MNG_SIMPLICITY_DELTAPNG" );\ } mng_uint32 iWidth; mng_uint32 iHeight; mng_uint32 iTicks; mng_uint32 iLayercount; mng_uint32 iFramecount; mng_uint32 iPlaytime; mng_uint32 iSimplicity; if( mng_getchunk_mhdr( hMNG, hChunk, &iWidth, &iHeight, &iTicks, &iLayercount, &iFramecount, &iPlaytime, &iSimplicity ) != 0 ) return false; IARG( "iWidth", iWidth ); NL; IARG( "iHeight", iHeight ); NL; IARG( "iTicks", iTicks ); NL; IARG( "iLayercount", iLayercount ); NL; IARG( "iFramecount", iFramecount ); NL; IARG( "iPlaytime", iPlaytime ); NL; IARG( "iSimplicity", iSimplicity ); MI_SIMPLICITY( iSimplicity ); return true; # undef MI_SIMPLICITY } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_MOVE( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint16 iFirstid; mng_uint16 iLastid; mng_uint8 iMovetype; mng_int32 iMovex; mng_int32 iMovey; if( mng_getchunk_move( hMNG, hChunk, &iFirstid, &iLastid, &iMovetype, &iMovex, &iMovey ) != 0 ) return false; IARG( "iFirstid", iFirstid ); NL; IARG( "iLastid", iLastid ); NL; IARG( "iMovetype", iMovetype ); MI_LOCATION( iMovetype ); NL; IARG( "iMovex", iMovex ); NL; IARG( "iMovey", iMovey ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_ORDR( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iCount; if( mng_getchunk_ordr( hMNG, hChunk, &iCount ) != 0 ) return false; IARG( "iCount", iCount ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_PAST( mng_handle hMNG, mng_handle hChunk, String &as ) { // PAST # define MI_TARGET( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_TARGET_ABSOLUTE : MI( "MNG_TARGET_ABSOLUTE" ); break;\ case MNG_TARGET_RELATIVE_SAMEPAST : MI( "MNG_TARGET_RELATIVE_SAMEPAST" ); break;\ case MNG_TARGET_RELATIVE_PREVPAST : MI( "MNG_TARGET_RELATIVE_PREVPAST" ); break;\ default : MI(UNKNOWN);\ } // COMPOSITE, ORIENTATION, OFFSET & BOUNDARY depend upon "iCount" mng_uint16 iDestid; mng_uint8 iTargettype; mng_int32 iTargetx; mng_int32 iTargety; mng_uint32 iCount; if( mng_getchunk_past( hMNG, hChunk, &iDestid, &iTargettype, &iTargetx, &iTargety, &iCount ) != 0 ) return false; IARG( "iDestid", iDestid ); NL; IARG( "iTargettype", iTargettype ); MI_TARGET( iTargettype ); NL; IARG( "iTargetx", iTargetx ); NL; IARG( "iTargety", iTargety ); NL; IARG( "iCount", iCount ); return true; # undef MI_TARGET } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_PLTE( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iCount; mng_palette8 aPalette; mng_uint32 iPalEntry; if( mng_getchunk_plte( hMNG, hChunk, &iCount, &aPalette ) != 0 ) return false; IARG( "iCount", iCount ); if( WantsPaletteEntries() ) { iPalEntry = 0; do{ if( WantsRgbOrder() ) { as = as + nl + TAB + "Palette entry [" + PadInt( iPalEntry ) + "]" + TAB + "R(" + PadInt( aPalette[ iPalEntry ].iRed ) + ") " + TAB + "G(" + PadInt( aPalette[ iPalEntry ].iGreen ) + ") " + TAB + "B(" + PadInt( aPalette[ iPalEntry ].iBlue ) + ")"; } else { as = as + nl + TAB + "Palette entry [" + PadInt( iPalEntry ) + "]" + TAB + "B(" + PadInt( aPalette[ iPalEntry ].iBlue ) + ") " + TAB + "G(" + PadInt( aPalette[ iPalEntry ].iGreen ) + ") " + TAB + "R(" + PadInt( aPalette[ iPalEntry ].iRed ) + ")"; }; iPalEntry += 1; } while( iPalEntry < iCount ); } return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_PPLT( mng_handle hMNG, mng_handle hChunk, String &as ) { /* # define MI_DELTATYPE( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_DELTATYPE_REPLACERGB : MI( "MNG_DELTATYPE_REPLACERGB" ); break;\ case MNG_DELTATYPE_DELTARGB : MI( "MNG_DELTATYPE_DELTARGB" ); break;\ case MNG_DELTATYPE_REPLACEALPHA : MI( "MNG_DELTATYPE_REPLACEALPHA" ); break;\ case MNG_DELTATYPE_DELTAALPHA : MI( "MNG_DELTATYPE_DELTAALPHA" ); break;\ case MNG_DELTATYPE_REPLACERGBA : MI( "MNG_DELTATYPE_REPLACERGBA" ); break;\ case MNG_DELTATYPE_DELTARGBA : MI( "MNG_DELTATYPE_DELTARGBA" ); break;\ default : MI(UNKNOWN);\ } */ mng_uint32 iCount; if( mng_getchunk_pplt( hMNG, hChunk, &iCount ) != 0 ) return false; IARG( "iCount", iCount ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_PROM( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_FILLMETHOD( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_FILLMETHOD_LEFTBITREPLICATE : MI( "MNG_FILLMETHOD_LEFTBITREPLICATE" ); break;\ case MNG_FILLMETHOD_ZEROFILL : MI( "MNG_FILLMETHOD_ZEROFILL" ); break;\ default : MI(UNKNOWN);\ } mng_uint8 iColortype; mng_uint8 iSampledepth; mng_uint8 iFilltype; if( mng_getchunk_prom( hMNG, hChunk, &iColortype, &iSampledepth, &iFilltype ) != 0 ) return false; IARG( "iColortype", iColortype ); MI_COLORTYPE( iColortype ); NL; IARG( "iSampledepth", iSampledepth ); MI_BITDEPTH( iSampledepth ); NL; IARG( "iFilltype", iFilltype ); MI_FILLMETHOD( iFilltype ); return true; # undef MI_FILLMETHOD } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_SAVE( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_SAVEOFFSET( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_SAVEOFFSET_4BYTE : MI( "MNG_SAVEOFFSET_4BYTE" ); break;\ case MNG_SAVEOFFSET_8BYTE : MI( "MNG_SAVEOFFSET_8BYTE" ); break;\ default : MI(UNKNOWN);\ } /* # define MI_SAVEENTRY( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_SAVEENTRY_SEGMENTFULL : MI( "MNG_SAVEENTRY_SEGMENTFULL" ); break;\ case MNG_SAVEENTRY_SEGMENT : MI( "MNG_SAVEENTRY_SEGMENT" ); break;\ case MNG_SAVEENTRY_SUBFRAME : MI( "MNG_SAVEENTRY_SUBFRAME" ); break;\ case MNG_SAVEENTRY_EXPORTEDIMAGE : MI( "MNG_SAVEENTRY_EXPORTEDIMAGE" ); break;\ default : MI(UNKNOWN);\ } */ mng_bool bEmpty; mng_uint8 iOffsettype; mng_uint32 iCount; if( mng_getchunk_save( hMNG, hChunk, &bEmpty, &iOffsettype, &iCount ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; IARG( "iOffsettype", iOffsettype ); MI_SAVEOFFSET( iOffsettype ); NL; IARG( "iCount", iCount ); return true; # undef MI_SAVEOFFSET } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_SEEK( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iNamesize; mng_pchar zName; if( mng_getchunk_seek( hMNG, hChunk, &iNamesize, &zName ) != 0 ) return false; IARG( "iNamesize", iNamesize ); NL; ZARG( "zName", zName ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_SHOW( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_SHOWMODE( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_SHOWMODE_0 : MI( "MNG_SHOWMODE_0" ); break;\ case MNG_SHOWMODE_1 : MI( "MNG_SHOWMODE_1" ); break;\ case MNG_SHOWMODE_2 : MI( "MNG_SHOWMODE_2" ); break;\ case MNG_SHOWMODE_3 : MI( "MNG_SHOWMODE_3" ); break;\ case MNG_SHOWMODE_4 : MI( "MNG_SHOWMODE_4" ); break;\ case MNG_SHOWMODE_5 : MI( "MNG_SHOWMODE_5" ); break;\ case MNG_SHOWMODE_6 : MI( "MNG_SHOWMODE_6" ); break;\ case MNG_SHOWMODE_7 : MI( "MNG_SHOWMODE_7" ); break;\ default : MI(UNKNOWN);\ } mng_bool bEmpty; mng_uint16 iFirstid; mng_uint16 iLastid; mng_uint8 iMode; if( mng_getchunk_show( hMNG, hChunk, &bEmpty, &iFirstid, &iLastid, &iMode ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; IARG( "iFirstid", iFirstid ); NL; IARG( "iLastid", iLastid ); NL; IARG( "iMode", iMode ); MI_SHOWMODE( iMode ); return true; # undef MI_SHOWMODE } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_TERM( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_TERMACTION( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_TERMACTION_LASTFRAME : MI( "MNG_TERMACTION_LASTFRAME" ); break;\ case MNG_TERMACTION_CLEAR : MI( "MNG_TERMACTION_CLEAR" ); break;\ case MNG_TERMACTION_FIRSTFRAME : MI( "MNG_TERMACTION_FIRSTFRAME" ); break;\ case MNG_TERMACTION_REPEAT : MI( "MNG_TERMACTION_REPEAT" ); break;\ default : MI(UNKNOWN);\ } # define MI_ITERACTION( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_ITERACTION_LASTFRAME : MI( "MNG_ITERACTION_LASTFRAME" ); break;\ case MNG_ITERACTION_CLEAR : MI( "MNG_ITERACTION_CLEAR" ); break;\ case MNG_ITERACTION_FIRSTFRAME : MI( "MNG_ITERACTION_FIRSTFRAME" ); break;\ default : MI(UNKNOWN);\ } mng_uint8 iTermaction; mng_uint8 iIteraction; mng_uint32 iDelay; mng_uint32 iItermax; if( mng_getchunk_term( hMNG, hChunk, &iTermaction, &iIteraction, &iDelay, &iItermax ) != 0 ) return false; IARG( "iTermaction", iTermaction ); MI_TERMACTION( iTermaction ); NL; IARG( "iIteraction", iIteraction ); MI_ITERACTION( iIteraction ); NL; IARG( "iDelay", iDelay ); NL; IARG( "iItermax", iItermax ); return true; # undef MI_TERMACTION # undef MI_ITERACTION } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_bKGD( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_bool bEmpty; mng_uint8 iType; mng_uint8 iIndex; mng_uint16 iGray; mng_uint16 iRed; mng_uint16 iGreen; mng_uint16 iBlue; if( mng_getchunk_bkgd( hMNG, hChunk, &bEmpty, &iType, &iIndex, &iGray, &iRed, &iGreen, &iBlue ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; IARG( "iType", iType ); NL; IARG( "iIndex", iIndex ); NL; IARG( "iGray", iGray ); NL; IARG( "iRed", iRed ); NL; IARG( "iGreen", iGreen ); NL; IARG( "iBlue", iBlue ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_cHRM( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_bool bEmpty; mng_uint32 iWhitepointx; mng_uint32 iWhitepointy; mng_uint32 iRedx; mng_uint32 iRedy; mng_uint32 iGreenx; mng_uint32 iGreeny; mng_uint32 iBluex; mng_uint32 iBluey; if( mng_getchunk_chrm( hMNG, hChunk, &bEmpty, &iWhitepointx, &iWhitepointy, &iRedx, &iRedy, &iGreenx,&iGreeny, &iBluex, &iBluey ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; FARG( "iWhitepointx", iWhitepointx ); FPCOM( String( (float)(iWhitepointx /FFACTOR) ) ); NL; FARG( "iWhitepointy", iWhitepointy ); FPCOM( String( (float)(iWhitepointy /FFACTOR) ) ); NL; FARG( "iRedx", iRedx ); FPCOM( String( (float)(iRedx /FFACTOR) ) ); NL; FARG( "iRedy", iRedy ); FPCOM( String( (float)(iRedy /FFACTOR) ) ); NL; FARG( "iGreenx", iGreenx ); FPCOM( String( (float)(iGreenx /FFACTOR) ) ); NL; FARG( "iGreeny", iGreeny ); FPCOM( String( (float)(iGreeny /FFACTOR) ) ); NL; FARG( "iBluex", iBluex ); FPCOM( String( (float)(iBluex /FFACTOR) ) ); NL; FARG( "iBluey", iBluey ); FPCOM( String( (float)(iBluey /FFACTOR) ) ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_eXPI( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint16 iSnapshotid; mng_uint32 iNamesize; mng_pchar zName; if( mng_getchunk_expi( hMNG, hChunk, &iSnapshotid, &iNamesize, &zName ) != 0 ) return false; IARG( "iSnapshotid", iSnapshotid ); NL; IARG( "iNamesize", iNamesize ); NL; ZARG( "zName", zName ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_fPRI( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_PRIORITY( _i_ )\ if( WantsMacroIds() )\ switch( _i_ ) {\ case MNG_PRIORITY_ABSOLUTE : MI( "MNG_PRIORITY_ABSOLUTE" ); break;\ case MNG_PRIORITY_RELATIVE : MI( "MNG_PRIORITY_RELATIVE" ); break;\ default : MI(UNKNOWN);\ } mng_uint8 iDeltatype; mng_uint8 iPriority; if( mng_getchunk_fpri( hMNG, hChunk, &iDeltatype, &iPriority ) != 0 ) return false; IARG( "iDeltatype", iDeltatype ); MI_PRIORITY( iDeltatype ); NL; IARG( "iPriority", iPriority ); return true; # undef MI_PRIORITY } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_gAMA( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_bool bEmpty; mng_uint32 iGamma; if( mng_getchunk_gama( hMNG, hChunk, &bEmpty, &iGamma ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; FARG( "iGamma", iGamma ); FPCOM( String( (float)(iGamma /FFACTOR) ) ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_hIST( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iEntrycount; mng_uint16arr aEntries; if( mng_getchunk_hist( hMNG, hChunk, &iEntrycount, &aEntries ) != 0 ) return false; IARG( "iEntrycount", iEntrycount ); //aEntries aEntries @todo@ return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_iCCP( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_bool bEmpty; mng_uint32 iNamesize; mng_pchar zName; mng_uint8 iCompression; mng_uint32 iProfilesize; mng_ptr pProfile; if( mng_getchunk_iccp( hMNG, hChunk, &bEmpty, &iNamesize, &zName, &iCompression, &iProfilesize,&pProfile ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; IARG( "iNamesize", iNamesize ); NL; ZARG( "Name", zName ); NL; IARG( "iCompression", iCompression ); MI_COMPRESSION_DEFLATE( iCompression ); NL; IARG( "iProfilesize", iProfilesize ); // "pProfile " + String( pProfile ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_iTXt( mng_handle hMNG, mng_handle hChunk, String &as ) { #define MI_ITXT_FLAG( _i_ )\ if( WantsMacroIds() ) {\ if( (_i_) == MNG_FLAG_UNCOMPRESSED ) {\ MI( "MNG_FLAG_UNCOMPRESSED" )\ } else if( (_i_) == MNG_FLAG_COMPRESSED ) {\ MI( "MNG_FLAG_COMPRESSED" );\ }\ } mng_uint32 iKeywordsize; mng_pchar zKeyword; mng_uint8 iCompressionflag; mng_uint8 iCompressionmethod; mng_uint32 iLanguagesize; mng_pchar zLanguage; mng_uint32 iTranslationsize; mng_pchar zTranslation; mng_uint32 iTextsize; mng_pchar zText; if( mng_getchunk_itxt( hMNG, hChunk, &iKeywordsize, &zKeyword, &iCompressionflag, &iCompressionmethod, &iLanguagesize, &zLanguage, &iTranslationsize, &zTranslation, &iTextsize, &zText ) != 0 ) return false; IARG( "iKeywordsize", iKeywordsize ); NL; ZARG( "zKeyword", zKeyword ); NL; IARG( "iCompressionflag", iCompressionflag ); MI_ITXT_FLAG( iCompressionflag ); NL; IARG( "iCompressionmethod", iCompressionmethod ); MI_COMPRESSION_DEFLATE( iCompressionflag ); NL; IARG( "iLanguagesize", iLanguagesize ); NL; ZARG( "zLanguage", zLanguage ); NL; IARG( "iTranslationsize", iTranslationsize ); NL; ZARG( "zTranslation", zTranslation ); NL; IARG( "iTextsize", iTextsize ); NL; ZARG( "zText", zText ); return true; # undef MI_ITXT_FLAG } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_nEED( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iKeywordssize; mng_pchar zKeywords; if( mng_getchunk_need( hMNG, hChunk, &iKeywordssize, &zKeywords ) != 0) return false; IARG( "iKeywordssize", iKeywordssize ); NL; IARG( "zKeywords", zKeywords ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_pHYg( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_bool bEmpty; mng_uint32 iSizex; mng_uint32 iSizey; mng_uint8 iUnit; if( mng_getchunk_phyg( hMNG, hChunk, &bEmpty, &iSizex, &iSizey, &iUnit ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; IARG( "iSizex", iSizex ); NL; IARG( "iSizey", iSizey ); NL; IARG( "iUnit", iUnit ); MI_UNITS( iUnit ); if( iUnit ) { PCOM("X/Y pixels per unit" ); } else { if( iSizex == iSizey ) { PCOM( "Square pixels" ); } } return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_pHYs( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_bool bEmpty; mng_uint32 iSizex; mng_uint32 iSizey; mng_uint8 iUnit; if( mng_getchunk_phys( hMNG, hChunk, &bEmpty, &iSizex, &iSizey, &iUnit ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; IARG( "iSizex", iSizex ); NL; IARG( "iSizey", iSizey ); NL; IARG( "iUnit", iUnit ); MI_UNITS( iUnit ); if( iUnit ) { PCOM("X/Y pixels per unit" ); } else { if( iSizex == iSizey ) { PCOM( "Square pixels" ); } } return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_sBIT( mng_handle hMNG, mng_handle hChunk, String &as ) { // tested with cs3* cs5* cs8* mng_bool bEmpty; mng_uint8 iType; mng_uint8arr4 aBits; if( mng_getchunk_sbit( hMNG, hChunk, &bEmpty, &iType, &aBits ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; IARG( "iType", iType ); //aBits aBits @todo@ return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_sPLT( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_bool bEmpty; mng_uint32 iNamesize; mng_pchar zName; mng_uint8 iSampledepth; mng_uint32 iEntrycount; mng_ptr pEntries; if( mng_getchunk_splt( hMNG, hChunk, &bEmpty, &iNamesize, &zName, &iSampledepth, &iEntrycount, &pEntries ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; IARG( "iNamesize", iNamesize ); NL; ZARG( "zName", zName ); NL; IARG( "iSampledepth", iSampledepth ); MI_BITDEPTH( iSampledepth ); NL; IARG( "iEntrycount", iEntrycount ); //pEntries pEntries @todo@ return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_sRGB( mng_handle hMNG, mng_handle hChunk, String &as ) { # define MI_RENDERINGINTENT( _i_ )\ if( WantsMacroIds() ) {\ switch( (_i_) ) {\ case MNG_INTENT_PERCEPTUAL :\ MI( "MNG_INTENT_PERCEPTUAL" ); break;\ case MNG_INTENT_RELATIVECOLORIMETRIC :\ MI( "MNG_INTENT_RELATIVECOLORIMETRIC" );break;\ case MNG_INTENT_SATURATION :\ MI( "MNG_INTENT_SATURATION" ); break;\ case MNG_INTENT_ABSOLUTECOLORIMETRIC :\ MI( "MNG_INTENT_ABSOLUTECOLORIMETRIC" );break;\ }\ } mng_bool bEmpty; mng_uint8 iRenderingintent; if( mng_getchunk_srgb( hMNG, hChunk,&bEmpty, &iRenderingintent ) != 0) return false; BARG( "bEmpty", bEmpty ); NL; IARG( "iRenderingintent", iRenderingintent ); MI_RENDERINGINTENT( iRenderingintent ); return true; # undef MI_RENDERINGINTENT } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_tEXt( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iKeywordsize; mng_pchar zKeyword; mng_uint32 iTextsize; mng_pchar zText; if( mng_getchunk_text( hMNG, hChunk, &iKeywordsize, &zKeyword, &iTextsize, &zText ) != 0 ) return false; IARG( "iKeywordsize", iKeywordsize ); NL; ZARG( "zKeyword", zKeyword ); NL; IARG( "iTextsize", iTextsize ); NL; ZARG( "zText", zText ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_tIME( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint16 iYear; mng_uint8 iMonth; mng_uint8 iDay; mng_uint8 iHour; mng_uint8 iMinute; mng_uint8 iSecond; if( mng_getchunk_time( hMNG, hChunk, &iYear, &iMonth, &iDay, &iHour, &iMinute, &iSecond ) != 0 ) return false; IARG( "iYear", iYear ); NL; IARG( "iMonth", iMonth ); NL; IARG( "iDay", iDay ); NL; IARG( "iHour", iHour ); NL; IARG( "iMinute", iMinute ); NL; IARG( "iSecond", iSecond ); // Do not do help line here - may confuse international readers ! return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_tRNS( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_bool bEmpty; mng_bool bGlobal; mng_uint8 iType; mng_uint32 iCount; mng_uint8arr aAlphas; mng_uint16 iGray; mng_uint16 iRed; mng_uint16 iGreen; mng_uint16 iBlue; mng_uint32 iRawlen; mng_uint8arr aRawdata; if( mng_getchunk_trns( hMNG, hChunk, &bEmpty, &bGlobal, &iType, &iCount, &aAlphas, &iGray, &iRed, &iGreen, &iBlue, &iRawlen, &aRawdata ) != 0 ) return false; BARG( "bEmpty", bEmpty ); NL; BARG( "bGlobal", bGlobal ); NL; IARG( "iType", iType ); NL; IARG( "iCount", iCount ); //aAlphas aAlphas @todo@ NL; IARG( "iGray", iGray ); NL; IARG( "iRed", iRed ); NL; IARG( "iGreen", iGreen ); NL; IARG( "iBlue", iBlue ); NL; IARG( "iRawlen", iRawlen ); //aRawdata aRawdata @todo@ return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_zTXt( mng_handle hMNG, mng_handle hChunk, String &as ) { mng_uint32 iKeywordsize; mng_pchar zKeyword; mng_uint8 iCompression; mng_uint32 iTextsize; mng_pchar zText; if( mng_getchunk_ztxt( hMNG, hChunk, &iKeywordsize, &zKeyword, &iCompression, &iTextsize, &zText ) != 0 ) return false; IARG( "iKeywordsize", iKeywordsize ); NL; ZARG( "zKeyword", zKeyword ); NL; IARG( "iCompression", iCompression ); MI_COMPRESSION_DEFLATE( iCompression ); NL; IARG( "iTextsize", iTextsize ); NL; ZARG( "zText", zText ); return true; } //--------------------------------------------------------------------------- bool __fastcall TMainForm::Info_Unknown( mng_handle hMNG, mng_handle hChunk, String &as ) { NL + TAB; STR( "Unknown Chunk" ); NL + TAB; STR( nl + TAB + "(See help tab for a list of unsupported chunks)!" ); return true; } //--------------------------------------------------------------------------- libmng-2.0.2/contrib/bcb/mngdump/Main.h0000644000000000000000000003143712005307152016356 0ustar rootroot//--------------------------------------------------------------------------- #ifndef MainH #define MainH //--------------------------------------------------------------------------- #include #include #include #include #include #include #include #include #include #include //--------------------------------------------------------------------------- // These MUST be defined before we include "Libmng.h //# define MNG_SUPPORT_READ //# define MNG_ACCESS_CHUNKS //# define MNG_STORE_CHUNKS //# define MNG_NO_CMS # define MNG_USE_DLL # define MNG_SKIP_ZLIB # define MNG_SKIP_LCMS # define MNG_SKIP_IJG6B #include "../../../libmng.h" //--------------------------------------------------------------------------- class TMainForm : public TForm { __published: // IDE-managed Components TMainMenu *MainMenu1; TMenuItem *mnuFile; TMenuItem *mnuOpen; TMenuItem *mnuReload; TMenuItem *mnuSave; TMenuItem *N1; TMenuItem *mnuPrint; TMenuItem *mnuPrintSetup; TMenuItem *N2; TMenuItem *mnuExit; TMenuItem *mnuEdit; TMenuItem *mnuUndo; TMenuItem *N3; TMenuItem *mnuCut; TMenuItem *mnuCopy; TMenuItem *mnuPaste; TMenuItem *N4; TMenuItem *mnuSelectAll; TMenuItem *N5; TMenuItem *mnuSetFont; TMenuItem *mnuWordWrap; TMenuItem *mnuSearch; TMenuItem *mnuFind; TMenuItem *mnuFindNext; TPanel *Panel1; TSpeedButton *sbtnOpen; TSpeedButton *sbtnReload; TSpeedButton *sbtnSave; TSpeedButton *sbtnPrint; TSpeedButton *sbtnPrintSetup; TSpeedButton *sbtnUndo; TSpeedButton *sbtnCut; TSpeedButton *sbtnCopy; TSpeedButton *sbtnPaste; TOpenDialog *OpenDialog1; TSaveDialog *SaveDialog1; TPrintDialog *PrintDialog; TPrinterSetupDialog *PrinterSetupDialog; TFontDialog *FontDialog1; TFindDialog *FindDialog; TPageControl *PageControl1; TTabSheet *tsChunks; TTabSheet *tsReport; TPanel *pnlChunks; TListBox *ListBoxChunks; TSpeedButton *sbtnCopyChunk; TRichEdit *RichEditChunks; TRichEdit *RichEditReport; TPanel *PanelStatusBar; TProgressBar *ProgressBar1; TTabSheet *tsOptions; TTabSheet *tsAbout; TLabel *LabelAbout; TTabSheet *tsHelp; TLabel *LabelHelp; TCheckBox *cbBool; TCheckBox *cbMacroIdentifier; TCheckBox *cbRawData; TCheckBox *cbRGBOrder; TCheckBox *cbPaletteEntries; TCheckBox *cbComments; TRadioGroup *RadioGroupTabSize; TStaticText *StaticTextStatus; TStaticText *StaticText1; void __fastcall mnuFileOpenClick(TObject *Sender); void __fastcall FormCreate(TObject *Sender); void __fastcall ListBoxChunksClick(TObject *Sender); void __fastcall mnuReloadClick(TObject *Sender); void __fastcall mnuExitClick(TObject *Sender); void __fastcall FormDestroy(TObject *Sender); void __fastcall mnuUndoClick(TObject *Sender); void __fastcall mnuCutClick(TObject *Sender); void __fastcall mnuCopyClick(TObject *Sender); void __fastcall mnuPasteClick(TObject *Sender); void __fastcall mnuSelectAllClick(TObject *Sender); void __fastcall mnuWordWrapClick(TObject *Sender); void __fastcall mnuSetFontClick(TObject *Sender); void __fastcall FontDialog1Apply(TObject *Sender, HWND Wnd); void __fastcall mnuFindClick(TObject *Sender); void __fastcall FindDialogFind(TObject *Sender); void __fastcall mnuFindNextClick(TObject *Sender); void __fastcall sbtnCopyChunkClick(TObject *Sender); void __fastcall mnuPrintClick(TObject *Sender); void __fastcall mnuPrintSetupClick(TObject *Sender); void __fastcall mnuSaveClick(TObject *Sender); void __fastcall EventShowPage(TObject *Sender); void __fastcall RadioGroupTabSizeClick(TObject *Sender); protected : void virtual __fastcall OnMinMax(TMessage& Msg); BEGIN_MESSAGE_MAP // to limit minimum form size for about/help panes MESSAGE_HANDLER( WM_GETMINMAXINFO, TMessage, OnMinMax ) END_MESSAGE_MAP(TForm) private: // User declarations FILE *fd; int iChunkCount; // To link stringList to listbox String asTab; // Number of spaces to use as tab stop public: // User declarations // Constructor __fastcall TMainForm(TComponent* Owner); // Destructor __fastcall ~TMainForm( void ); // ------------------------------------------------------------------ // Callbacks ... as static member functions // ------------------------------------------------------------------ static mng_ptr __stdcall Alloc( mng_size_t iSize ); static void __stdcall Free( mng_ptr pPtr, mng_size_t iSize ); static mng_bool __stdcall FileReadData( mng_handle hMNG, mng_ptr pBuf, mng_uint32 iSize, mng_uint32 *iRead ); static mng_bool __stdcall ProcessHeader( mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight ); static mng_bool __stdcall OpenStream( mng_handle hMNG ); static mng_bool __stdcall CloseStream( mng_handle hMNG ); static mng_bool __stdcall IterateChunks( mng_handle hMNG, mng_handle hChunk, mng_chunkid iChunktype, mng_uint32 iChunkseq ); // ------------------------------------------------------------------ //public data members // ------------------------------------------------------------------ // Associates a string, strList[n], with a chunk in the listbox[N] TStringList *strList; String asAppName; // pinch Application->Title at startup // ------------------------------------------------------------------ // MessageBox functions // ------------------------------------------------------------------ int __fastcall MessageBox( String &as, UINT flags ); void __fastcall MsgBoxOk( String as ); int __fastcall MsgBoxYN( String as ); int __fastcall MsgBoxYNC( String as ); void __fastcall MsgBoxStop( String as ); void __fastcall MsgBoxInfo( String as ); void __fastcall MsgBoxWarn( String as ); // ------------------------------------------------------------------ // Just to isolate teh "FILE *fd" variable from possible change. inline FILE* __fastcall GetFd( void ) { return fd; }; // ------------------------------------------------------------------ // Options // ------------------------------------------------------------------ inline bool _fastcall WantsComments( void ) { return cbComments->Checked; }; inline bool _fastcall WantsPaletteEntries( void ) { return cbPaletteEntries->Checked; }; inline bool _fastcall WantsRgbOrder( void ) { return cbRGBOrder->Checked; }; inline bool _fastcall WantsRawData( void ) { return cbRawData->Checked; }; inline bool _fastcall WantsMacroIds( void ) { return cbMacroIdentifier->Checked; }; inline bool _fastcall WantsBool( void ) { return cbBool->Checked; }; // ------------------------------------------------------------------ // Chunk count stuff // ------------------------------------------------------------------ inline int __fastcall IncChunkCount( void ) { return iChunkCount += 1; }; inline int __fastcall SetChunkCount( int anInt ) { iChunkCount = anInt; }; inline int __fastcall GetChunkCount( void ) { return iChunkCount; }; // ------------------------------------------------------------------ // Open a file, initialise things, and then calls "Dumptree(...)" void __fastcall LoadFile( void ); // All LibMng calls involving the library handle are made from here : // Initialize the library // Setup callbacks // Read the file into memory // Run through the chunk list (mng_iterate_chunks) // Cleanup the library // Show Report page, all done. (then explode into the starry heavens!) bool __fastcall DumpTree( void ); // Handle library errors gracefully. void __fastcall MNGError( mng_handle hMNG, String SHMsg ); // Uesd with Palette entries - to right align int's to N chars width String __fastcall PadInt( int iInt, int iWidth = 3 ); // default = 3 // A long switch that calls Info_XXXX's to assemble the chunks string mng_bool __fastcall ShowChunk( mng_handle hMNG, mng_handle hChunk, mng_chunkid iChunktype ); // ------------------------------------------------------------------ // The following functions are to assemble a string for each chunk. // The function name "Info_????" denotes which chunk it handles // Definitions can be found in "Chunks.cpp" // ------------------------------------------------------------------ bool __fastcall Info_BACK( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_BASI( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_CLIP( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_CLON( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_DBYK( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_DEFI( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_DHDR( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_DISC( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_DROP( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_ENDL( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_FRAM( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_IDAT( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_IEND( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_IHDR( mng_handle hMNG, mng_handle hChunk, String &as ); // MNG_UINT_IJNG - Function missing @ap@ // MNG_UINT_IPNG - Function missing @ap@ bool __fastcall Info_JDAT( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_JHDR( mng_handle hMNG, mng_handle hChunk, String &as ); // MNG_UINT_JSEP - Function missing @ap@ bool __fastcall Info_LOOP( mng_handle hMNG, mng_handle hChunk, String &as ); // MAGN ? MNG_UINT_MAGN @ap@ bool __fastcall Info_MEND( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_MHDR( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_MOVE( mng_handle hMNG, mng_handle hChunk, String &as ); // MaGN ? MNG_UINT_MaGN @ap@ bool __fastcall Info_ORDR( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_PAST( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_PLTE( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_PPLT( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_PROM( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_SAVE( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_SEEK( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_SHOW( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_TERM( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_bKGD( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_cHRM( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_eXPI( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_fPRI( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_gAMA( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_hIST( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_iCCP( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_iTXt( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_nEED( mng_handle hMNG, mng_handle hChunk, String &as ); // MNG_UINT_oFFs - Function missing @ap@ // MNG_UINT_pCAL - Function missing @ap@ bool __fastcall Info_pHYg( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_pHYs( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_sBIT( mng_handle hMNG, mng_handle hChunk, String &as ); // MNG_UINT_sCAL - Function missing @ap@ bool __fastcall Info_sPLT( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_sRGB( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_tEXt( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_tIME( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_tRNS( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_zTXt( mng_handle hMNG, mng_handle hChunk, String &as ); bool __fastcall Info_Unknown( mng_handle hMNG, mng_handle hChunk, String &as ); }; //--------------------------------------------------------------------------- extern PACKAGE TMainForm *MainForm; //--------------------------------------------------------------------------- #endif libmng-2.0.2/contrib/bcb/mngdump/CALLBACK.H0000644000000000000000000000410712005307152016560 0ustar rootroot//--------------------------------------------------------------------------- #include #include "Main.h" #include "libmng.h" #pragma hdrstop #ifndef CallbackH #define CallbackH //--------------------------------------------------------------------------- extern mng_ptr __stdcall myalloc( mng_size_t iSize ); //--------------------------------------------------------------------------- extern void __stdcall myfree( mng_ptr pPtr, mng_size_t iSize ); //--------------------------------------------------------------------------- extern mng_bool __stdcall myreaddata( mng_handle hMNG, mng_ptr pBuf, mng_uint32 iSize, mng_uint32 *iRead ); //--------------------------------------------------------------------------- extern mng_bool __stdcall ProcessHeader( mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight ); //--------------------------------------------------------------------------- extern mng_bool __stdcall myopenstream( mng_handle hMNG ); //--------------------------------------------------------------------------- extern mng_bool __stdcall myclosestream( mng_handle hMNG ); //--------------------------------------------------------------------------- extern mng_bool __stdcall myiterchunk ( mng_handle hMNG, mng_handle hChunk, mng_chunkid iChunktype, mng_uint32 iChunkseq ); //--------------------------------------------------------------------------- extern mng_bool __stdcall mytraceproc( mng_handle hHandle, mng_int32 iFuncnr, mng_int32 iFuncseq, mng_pchar zFuncname ); //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #endif libmng-2.0.2/contrib/bcb/mngdump/About.cpp0000644000000000000000000000204712005307152017072 0ustar rootroot//--------------------------------------------------------------------------- // About.cpp : About pane text //--------------------------------------------------------------------------- #include "About.h" // NB : If more text is to go in here don't forget to enlarge min/max extern char *_szAbout = { "\nCopyright (c) 2000 Andy Protano (a.a.protano@care4free.net)"\ "\n Gerard Juyn (gerard@libmng.com)"\ "\n"\ "\nLibmng website - www.libmng.com" "\nMNG Homepage - www.libpng.org/pub/mng" "\nPNG Homepage - www.libpng.org/pub/png" "\n" "\nThis program is based upon the orignal \'MngTree\' by Gerard Juyn"\ "\nAuthor & current maintainer : Andy Protano (a.a.protano@care4free.net)"\ "\n"\ "\nThis software is based on libmng which in its turn is based on software by :"\ "\n"\ "\nIndependant JPEG Group - http://www.ijg.org"\ "\nLcms (little CMS) library by Marti Maria Saguar - http://www.lcms.colorid.de"\ "\nZlib - http://www.info-zip.org/pub/infozip/zlib"\ }; //--------------------------------------------------------------------------- libmng-2.0.2/contrib/bcb/mngdump/About.h0000644000000000000000000000033212005307152016532 0ustar rootroot//--------------------------------------------------------------------------- #ifndef AboutH #define AboutH //--------------------------------------------------------------------------- extern char *_szAbout; #endif libmng-2.0.2/contrib/bcb/mngdump/MNGDUMP.RES0000644000000000000000000000322412005307152016774 0ustar rootroot ÿÿÿÿè ÿÿÿÿ ( @€€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ37337w33w03s333s3w0s3337s7s733s33333333s077333373333333337773733s30w3ss737s3w3s37sss307s330s333077330377s730ww3s077w3÷s÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿþüøðàÀ€À?øÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0ÿÿMAINICON  8è ÿÿÿÿ 4VS_VERSION_INFO½ïþ?fStringFileInfoB080904E4(CompanyNameRDS8FileDescriptionMngDump0FileVersion1.0.0.0!InternalNameX4LegalCopyrightCopyright (c) 2000 G.Juyn)LegalTrademarks8OriginalFilenameMngTree!ProductName4ProductVersion1.0.0.0bJCommentsAuthor Andy Protano - September 2000DVarFileInfo$Translation älibmng-2.0.2/contrib/bcb/mngdump/MNGDUMP.BPR0000644000000000000000000001372712005307152016777 0ustar rootroot# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.03 # --------------------------------------------------------------------------- PROJECT = MNGDUMP.exe OBJFILES = MNGDUMP.obj Main.obj Chunks.obj About.obj Callback.obj Help.obj RESFILES = MngDump.res DEFFILE = RESDEPEN = $(RESFILES) Main.dfm LIBFILES = ..\..\..\bcb\win32dll\libmng.lib LIBRARIES = VCL35.lib SPARELIBS = VCL35.lib PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi bcbsmp35.bpi dclocx35.bpi \ QRPT35.bpi # --------------------------------------------------------------------------- PATHCPP = .; PATHASM = .; PATHPAS = .; PATHRC = .; DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release # --------------------------------------------------------------------------- CFLAG1 = -O2 -w -Ve -k- -vi -c -b- -w-par -w-inl -Vx -tW CFLAG2 = -I..\win32dll;$(BCB)\include;$(BCB)\include\vcl;..\..\..\libmng;..\..\..\zlib;..\..\..\jpgsrc6b CFLAG3 = -Tkh30000 -6 PFLAGS = -U..\win32dll;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ -I..\win32dll;$(BCB)\include;$(BCB)\include\vcl;..\..\..\libmng;..\..\..\zlib;..\..\..\jpgsrc6b \ -$L- -$D- -v -JPHN -M RFLAGS = -i..\win32dll;$(BCB)\include;$(BCB)\include\vcl;..\..\..\libmng;..\..\..\zlib;..\..\..\jpgsrc6b AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /i..\..\..\libmng /i..\..\..\zlib \ /i..\..\..\jpgsrc6b /mx /w2 /zd /dMNG_SUPPORT_READ /dMNG_ACCESS_CHUNKS \ /dMNG_STORE_CHUNKS /dMNG_NO_CMS /dMNG_USE_DLL /dHAVE_BOOLEAN LFLAGS = -L..\win32dll;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpe -x -Gn IFLAGS = # --------------------------------------------------------------------------- ALLOBJ = c0w32.obj sysinit.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=1 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=1 Special=0 Private=0 DLL=0 Locale=2057 CodePage=1252 [Version Info Keys] CompanyName=RDS FileDescription=MngDump FileVersion=1.0.0.0 InternalName= LegalCopyright=Copyright (c) 2000 G.Juyn LegalTrademarks= OriginalFilename=MngTree ProductName= ProductVersion=1.0.0.0 Comments=Author Andy Protano - September 2000 [HistoryLists\hlIncludePath] Count=10 Item0=$(BCB)\include;$(BCB)\include\vcl;..\..\..\libmng;..\..\..\zlib;..\..\..\jpgsrc6b Item1=$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\..\zlib;..\..\..\jpgsrc6b Item2=..\mngtree;..\..\delphi\mngview;$(BCB)\include;$(BCB)\include\vcl;..\..\..\libmng;..\..\..\zlib;..\..\..\jpgsrc6b Item3=..\mngtree;..\..\delphi\mngview;$(BCB)\include;$(BCB)\include\vcl;..\..\..\libmng;..\..\..\zlib;..\..\..\libjpeg Item4=..\..\delphi\mngview;$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\..\zlib;..\..\..\libjpeg Item5=$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\..\zlib;..\..\..\libjpeg Item6=$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\zlib;..\..\libjpeg Item7=$(BCB)\include;$(BCB)\include\vcl;..\.. Item8=$(BCB)\include;$(BCB)\include\vcl;.. Item9=$(BCB)\include;$(BCB)\include\vcl [HistoryLists\hlLibraryPath] Count=4 Item0=$(BCB)\lib\obj;$(BCB)\lib Item1=..\mngtree;$(BCB)\lib\obj;$(BCB)\lib Item2=..\mngtree;..\..\delphi\mngview;$(BCB)\lib\obj;$(BCB)\lib Item3=..\..\delphi\mngview;$(BCB)\lib\obj;$(BCB)\lib [HistoryLists\hlDebugSourcePath] Count=1 Item0=$(BCB)\source\vcl [HistoryLists\hlConditionals] Count=6 Item0=MNG_SUPPORT_READ;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL;HAVE_BOOLEAN Item1=_RTLDLL;MNG_SUPPORT_READ;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL;HAVE_BOOLEAN Item2=_RTLDLL;MNG_SUPPORT_READ;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL Item3=_RTLDLL;HAVE_BOOLEAN Item4=_RTLDLL Item5=_RTLDLL;USEPACKAGES [Debugging] DebugSourceDirs=$(BCB)\source\vcl [Parameters] RunParams= HostApplication= !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = ilink32 !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< # --------------------------------------------------------------------------- libmng-2.0.2/delphi/0000755000000000000000000000000012005307152012721 5ustar rootrootlibmng-2.0.2/delphi/mngview/0000755000000000000000000000000012005307152014375 5ustar rootrootlibmng-2.0.2/configure0000755000000000000000000154520712115360516013406 0ustar rootroot#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for libmng 2.0.2. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: png-mng-implement@lists.sourceforge.net about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libmng' PACKAGE_TARNAME='libmng-2.0.2' PACKAGE_VERSION='2.0.2' PACKAGE_STRING='libmng 2.0.2' PACKAGE_BUGREPORT='png-mng-implement@lists.sourceforge.net' PACKAGE_URL='http://www.libmng.com/' ac_unique_file="libmng_hlapi.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS AS CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM MNG_RELEASE_NR MNG_MINOR_NR MNG_MAJOR_NR target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_largefile enable_buildso enable_read enable_write enable_display enable_dynamic enable_chunks enable_storechunks enable_trace with_zlib with_jpeg with_lcms2 with_lcms ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures libmng 2.0.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/libmng-2.0.2] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of libmng 2.0.2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-largefile omit support for large files --disable-buildso disable building standard shared object --disable-read remove read support from library --disable-write remove write support from library --disable-display remove display support from library --disable-dynamic remove dynamic MNG support from library --disable-chunks remove support for chunk access --disable-storechunks remove support for access of previous chunks --enable-trace include support for debug tracing callbacks Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-zlib=DIR use zlib include/library files in DIR --with-jpeg=DIR use jpeg include/library files in DIR --with-lcms2=DIR use lcms2 include/library files in DIR --with-lcms=DIR use lcms include/library files in DIR Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . libmng home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF libmng configure 2.0.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------------------------ ## ## Report this to png-mng-implement@lists.sourceforge.net ## ## ------------------------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by libmng $as_me 2.0.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # ac_config_headers="$ac_config_headers config.h" # MNG_MAJOR_NR=2 MNG_MINOR_NR=0 MNG_RELEASE_NR=2 # # am__api_version='1.13' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='libmng-2.0.2' VERSION='2.0.2' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' $as_echo "#define MNG_VERSION_MAJOR 2" >>confdefs.h $as_echo "#define MNG_VERSION_MINOR 0" >>confdefs.h $as_echo "#define MNG_VERSION_RELEASE 2" >>confdefs.h $as_echo "#define MNG_VERSION_SO 2" >>confdefs.h $as_echo "#define MNG_VERSION_DLL 2" >>confdefs.h ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4' macro_revision='1.3293' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' lt_prog_compiler_pic='-Xcompiler -fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld='-rpath $libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; haiku*) version_type=linux need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump # { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac # # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow" if test "x$ac_cv_func_pow" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 $as_echo_n "checking for pow in -lm... " >&6; } if ${ac_cv_lib_m_pow+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pow (); int main () { return pow (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_pow=yes else ac_cv_lib_m_pow=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 $as_echo "$ac_cv_lib_m_pow" >&6; } if test "x$ac_cv_lib_m_pow" = xyes; then : LIBS="$LIBS -lm" fi fi # Check whether --enable-buildso was given. if test "${enable_buildso+set}" = set; then : enableval=$enable_buildso; fi if test "x$enable_buildso" != "xno"; then $as_echo "#define MNG_BUILD_SO 1" >>confdefs.h fi $as_echo "#define MNG_SUPPORT_FULL 1" >>confdefs.h # Check whether --enable-read was given. if test "${enable_read+set}" = set; then : enableval=$enable_read; fi if test "x$enable_read" != "xno"; then $as_echo "#define MNG_SUPPORT_READ 1" >>confdefs.h fi # Check whether --enable-write was given. if test "${enable_write+set}" = set; then : enableval=$enable_write; fi if test "x$enable_write" != "xno"; then $as_echo "#define MNG_SUPPORT_WRITE 1" >>confdefs.h fi # Check whether --enable-display was given. if test "${enable_display+set}" = set; then : enableval=$enable_display; fi if test "x$enable_display" != "xno"; then $as_echo "#define MNG_SUPPORT_DISPLAY 1" >>confdefs.h fi # Check whether --enable-dynamic was given. if test "${enable_dynamic+set}" = set; then : enableval=$enable_dynamic; fi if test "x$enable_dynamic" != "xno"; then $as_echo "#define MNG_SUPPORT_DYNAMICMNG 1" >>confdefs.h fi # Check whether --enable-chunks was given. if test "${enable_chunks+set}" = set; then : enableval=$enable_chunks; fi if test "x$enable_chunks" != "xno"; then $as_echo "#define MNG_ACCESS_CHUNKS 1" >>confdefs.h fi # Check whether --enable-storechunks was given. if test "${enable_storechunks+set}" = set; then : enableval=$enable_storechunks; fi if test "x$enable_storechunks" != "xno"; then $as_echo "#define MNG_STORE_CHUNKS 1" >>confdefs.h fi # Check whether --enable-trace was given. if test "${enable_trace+set}" = set; then : enableval=$enable_trace; if test "x$enable_trace" = "xyes"; then $as_echo "#define MNG_SUPPORT_TRACE 1" >>confdefs.h $as_echo "#define MNG_TRACE_TELLTALE 1" >>confdefs.h fi fi $as_echo "#define MNG_ERROR_TELLTALE 1" >>confdefs.h # Check whether --with-zlib was given. if test "${with_zlib+set}" = set; then : withval=$with_zlib; if test -d "$withval"; then CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" fi fi ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" if test "x$ac_cv_header_zlib_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzread in -lz" >&5 $as_echo_n "checking for gzread in -lz... " >&6; } if ${ac_cv_lib_z_gzread+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gzread (); int main () { return gzread (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_gzread=yes else ac_cv_lib_z_gzread=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzread" >&5 $as_echo "$ac_cv_lib_z_gzread" >&6; } if test "x$ac_cv_lib_z_gzread" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" else as_fn_error $? "zlib library not found" "$LINENO" 5 fi else as_fn_error $? "zlib header not found" "$LINENO" 5 fi # Check whether --with-jpeg was given. if test "${with_jpeg+set}" = set; then : withval=$with_jpeg; with_jpeg=$withval else with_jpeg=_auto fi if test "x$with_jpeg" != "xno" -a "x$with_jpeg" != "xyes" -a \ "x$with_jpeg" != "x_auto"; then # Save in case test with directory specified fails _cppflags=${CPPFLAGS} _ldflags=${LDFLAGS} _restore=1 CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" else _restore=0 fi if test "x$with_jpeg" != "xno"; then ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" if test "x$ac_cv_header_jpeglib_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_read_header in -ljpeg" >&5 $as_echo_n "checking for jpeg_read_header in -ljpeg... " >&6; } if ${ac_cv_lib_jpeg_jpeg_read_header+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char jpeg_read_header (); int main () { return jpeg_read_header (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_jpeg_jpeg_read_header=yes else ac_cv_lib_jpeg_jpeg_read_header=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_read_header" >&5 $as_echo "$ac_cv_lib_jpeg_jpeg_read_header" >&6; } if test "x$ac_cv_lib_jpeg_jpeg_read_header" = xyes; then : LIBS="$LIBS -ljpeg" $as_echo "#define HAVE_LIBJPEG 1" >>confdefs.h _restore=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: jpeg library not found" >&5 $as_echo "$as_me: WARNING: jpeg library not found" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: jpeg header not found" >&5 $as_echo "$as_me: WARNING: jpeg header not found" >&2;} fi fi test $_restore -eq 1 && CPPFLAGS=$_cppflags LDFLAGS=$_ldflags # Check whether --with-lcms2 was given. if test "${with_lcms2+set}" = set; then : withval=$with_lcms2; with_lcms2=$withval else with_lcms2=_auto fi if test "x$with_lcms2" != "xno" -a "x$with_lcms2" != "xyes" -a \ "x$with_lcms2" != "x_auto"; then # Save in case test with directory specified fails _cppflags=$CPPFLAGS _ldflags=$LDFLAGS _restore=1 CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" else _restore=0 fi if test "x$with_lcms2" != "xno"; then ac_fn_c_check_header_mongrel "$LINENO" "lcms2.h" "ac_cv_header_lcms2_h" "$ac_includes_default" if test "x$ac_cv_header_lcms2_h" = xyes; then : have_lcms2=yes { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmsFreeToneCurve in -llcms2" >&5 $as_echo_n "checking for cmsFreeToneCurve in -llcms2... " >&6; } if ${ac_cv_lib_lcms2_cmsFreeToneCurve+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-llcms2 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cmsFreeToneCurve (); int main () { return cmsFreeToneCurve (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lcms2_cmsFreeToneCurve=yes else ac_cv_lib_lcms2_cmsFreeToneCurve=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lcms2_cmsFreeToneCurve" >&5 $as_echo "$ac_cv_lib_lcms2_cmsFreeToneCurve" >&6; } if test "x$ac_cv_lib_lcms2_cmsFreeToneCurve" = xyes; then : LIBS="$LIBS -llcms2" $as_echo "#define HAVE_LIBLCMS2 1" >>confdefs.h $as_echo "#define MNG_FULL_CMS 1" >>confdefs.h _restore=0 have_lcms2=yes else have_lcms2=no fi fi if test "x$with_lcms2" != "x_auto" -a "x$have_lcms2" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: lcms2 not found... disabling LCMS v2 support" >&5 $as_echo "$as_me: WARNING: lcms2 not found... disabling LCMS v2 support" >&2;} fi fi if test "x$with_lcms2" != "x_auto" -a "x$have_lcms2" != "xyes"; then # Check whether --with-lcms was given. if test "${with_lcms+set}" = set; then : withval=$with_lcms; with_lcms=$withval else with_lcms=_auto fi if test "x$with_lcms" != "xno" -a "x$with_lcms" != "xyes" -a \ "x$with_lcms" != "x_auto"; then # Save in case test with directory specified fails _cppflags=$CPPFLAGS _ldflags=$LDFLAGS _restore=1 CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" else _restore=0 fi if test "x$with_lcms" != "xno"; then ac_fn_c_check_header_mongrel "$LINENO" "lcms.h" "ac_cv_header_lcms_h" "$ac_includes_default" if test "x$ac_cv_header_lcms_h" = xyes; then : have_lcms=yes { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmsCreateRGBProfile in -llcms" >&5 $as_echo_n "checking for cmsCreateRGBProfile in -llcms... " >&6; } if ${ac_cv_lib_lcms_cmsCreateRGBProfile+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-llcms $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cmsCreateRGBProfile (); int main () { return cmsCreateRGBProfile (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lcms_cmsCreateRGBProfile=yes else ac_cv_lib_lcms_cmsCreateRGBProfile=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lcms_cmsCreateRGBProfile" >&5 $as_echo "$ac_cv_lib_lcms_cmsCreateRGBProfile" >&6; } if test "x$ac_cv_lib_lcms_cmsCreateRGBProfile" = xyes; then : LIBS="$LIBS -llcms" $as_echo "#define HAVE_LIBLCMS1 1" >>confdefs.h $as_echo "#define MNG_FULL_CMS 1" >>confdefs.h _restore=0 have_lcms=yes else have_lcms=no fi fi if test "x$with_lcms" != "x_auto" -a "x$have_lcms" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: lcms not found... disabling LCMS v1 support" >&5 $as_echo "$as_me: WARNING: lcms not found... disabling LCMS v1 support" >&2;} fi fi fi test $_restore -eq 1 && CPPFLAGS=$_cppflags LDFLAGS=$_ldflags ac_config_files="$ac_config_files Makefile libmng.pc:libmng.pc.in" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by libmng $as_me 2.0.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . libmng home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ libmng config.status 2.0.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ AS; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libmng.pc") CONFIG_FILES="$CONFIG_FILES libmng.pc:libmng.pc.in" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010 Free Software Foundation, # Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Assembler program. AS=$lt_AS # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi libmng-2.0.2/libmng_cms.h0000644000000000000000000001214012005307152013735 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_cms.h copyright (c) 2000-2003 G.Juyn * */ /* * version : 1.0.6 * */ /* * * */ /* * purpose : color management routines (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of color management routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - added creatememprofile * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 1.0.1 - 04/25/2001 - G.Juyn * */ /* * - moved mng_clear_cms to libmng_cms * */ /* * 1.0.1 - 05/02/2001 - G.Juyn * */ /* * - added "default" sRGB generation (Thanks Marti!) * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/19/2002 - G.Juyn * */ /* * - optimized color-correction routines * */ /* * * */ /* * 1.0.6 - 04/11/2003 - G.Juyn * */ /* * - B719420 - fixed several MNG_APP_CMS problems * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_cms_h_ #define _libmng_cms_h_ /* ************************************************************************** */ #ifdef MNG_INCLUDE_LCMS void mnglcms_initlibrary (void); mng_cmsprof mnglcms_createfileprofile (mng_pchar zFilename); mng_cmsprof mnglcms_creatememprofile (mng_uint32 iProfilesize, mng_ptr pProfile ); mng_cmsprof mnglcms_createsrgbprofile (void); void mnglcms_freeprofile (mng_cmsprof hProf ); void mnglcms_freetransform (mng_cmstrans hTrans ); mng_retcode mng_clear_cms (mng_datap pData ); #endif /* ************************************************************************** */ #ifdef MNG_FULL_CMS mng_retcode mng_init_full_cms (mng_datap pData, mng_bool bGlobal, mng_bool bObject, mng_bool bRetrobj); mng_retcode mng_correct_full_cms (mng_datap pData); #endif #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) mng_retcode mng_init_gamma_only (mng_datap pData, mng_bool bGlobal, mng_bool bObject, mng_bool bRetrobj); mng_retcode mng_correct_gamma_only (mng_datap pData); #endif #ifdef MNG_APP_CMS mng_retcode mng_init_app_cms (mng_datap pData, mng_bool bGlobal, mng_bool bObject, mng_bool bRetrobj); mng_retcode mng_correct_app_cms (mng_datap pData); #endif /* ************************************************************************** */ #endif /* _libmng_cms_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/config.guess0000755000000000000000000012746312115360516014016 0ustar rootroot#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012, 2013 Free Software Foundation, Inc. timestamp='2012-12-29' # This file 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 3 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, see . # # 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libmng-2.0.2/libmng_object_prc.h0000644000000000000000000010320512005307152015270 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_object_prc.h copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Object processing routines (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the internal object processing routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - added support for global color-chunks in animation * */ /* * - added support for global PLTE,tRNS,bKGD in animation * */ /* * - added SAVE & SEEK animation objects * */ /* * 0.5.2 - 05/29/2000 - G.Juyn * */ /* * - changed ani_object create routines not to return the * */ /* * created object (wasn't necessary) * */ /* * - added compression/filter/interlace fields to * */ /* * object-buffer for delta-image processing * */ /* * * */ /* * 0.5.3 - 06/22/2000 - G.Juyn * */ /* * - added support for PPLT chunk * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - added routine to discard "invalid" objects * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/13/2002 - G.Juyn * */ /* * - fixed read/write of MAGN chunk * */ /* * 1.0.5 - 09/15/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - added support for PAST * */ /* * 1.0.5 - 09/23/2002 - G.Juyn * */ /* * - added in-memory color-correction of abstract images * */ /* * 1.0.5 - 10/07/2002 - G.Juyn * */ /* * - fixed DISC support * */ /* * * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - added conditionals around Delta-PNG code * */ /* * - added SKIPCHUNK feature * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditionals around PAST chunk support * */ /* * * */ /* * 1.0.7 - 03/24/2004 - G.R-P * */ /* * - added more SKIPCHUNK conditionals * */ /* * * */ /* * 1.0.9 - 12/05/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_OBJCLEANUP * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_object_prc_h_ #define _libmng_object_prc_h_ /* ************************************************************************** */ #ifdef MNG_INCLUDE_DISPLAY_PROCS /* ************************************************************************** */ mng_retcode mng_drop_invalid_objects (mng_datap pData); /* ************************************************************************** */ mng_retcode mng_create_imagedataobject (mng_datap pData, mng_bool bConcrete, mng_bool bViewable, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace, mng_imagedatap *ppObject); mng_retcode mng_free_imagedataobject (mng_datap pData, mng_imagedatap pImagedata); mng_retcode mng_clone_imagedataobject (mng_datap pData, mng_bool bConcrete, mng_imagedatap pSource, mng_imagedatap *ppClone); /* ************************************************************************** */ mng_retcode mng_create_imageobject (mng_datap pData, mng_uint16 iId, mng_bool bConcrete, mng_bool bVisible, mng_bool bViewable, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace, mng_int32 iPosx, mng_int32 iPosy, mng_bool bClipped, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb, mng_imagep *ppObject); mng_retcode mng_free_imageobject (mng_datap pData, mng_imagep pImage); mng_imagep mng_find_imageobject (mng_datap pData, mng_uint16 iId); mng_retcode mng_clone_imageobject (mng_datap pData, mng_uint16 iId, mng_bool bPartial, mng_bool bVisible, mng_bool bAbstract, mng_bool bHasloca, mng_uint8 iLocationtype, mng_int32 iLocationx, mng_int32 iLocationy, mng_imagep pSource, mng_imagep *ppClone); mng_retcode mng_renum_imageobject (mng_datap pData, mng_imagep pSource, mng_uint16 iId, mng_bool bVisible, mng_bool bAbstract, mng_bool bHasloca, mng_uint8 iLocationtype, mng_int32 iLocationx, mng_int32 iLocationy); mng_retcode mng_reset_object_details (mng_datap pData, mng_imagep pImage, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace, mng_bool bResetall); mng_retcode mng_promote_imageobject (mng_datap pData, mng_imagep pImage, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iFilltype); mng_retcode mng_magnify_imageobject (mng_datap pData, mng_imagep pImage); mng_retcode mng_colorcorrect_object (mng_datap pData, mng_imagep pImage); /* ************************************************************************** */ mng_retcode mng_create_ani_image (mng_datap pData); #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_plte (mng_datap pData, mng_uint32 iEntrycount, mng_palette8ep paEntries); mng_retcode mng_create_ani_trns (mng_datap pData, mng_uint32 iRawlen, mng_uint8p pRawdata); mng_retcode mng_create_ani_gama (mng_datap pData, mng_bool bEmpty, mng_uint32 iGamma); mng_retcode mng_create_ani_chrm (mng_datap pData, mng_bool bEmpty, mng_uint32 iWhitepointx, mng_uint32 iWhitepointy, mng_uint32 iRedx, mng_uint32 iRedy, mng_uint32 iGreenx, mng_uint32 iGreeny, mng_uint32 iBluex, mng_uint32 iBluey); mng_retcode mng_create_ani_srgb (mng_datap pData, mng_bool bEmpty, mng_uint8 iRenderinginent); mng_retcode mng_create_ani_iccp (mng_datap pData, mng_bool bEmpty, mng_uint32 iProfilesize, mng_ptr pProfile); mng_retcode mng_create_ani_bkgd (mng_datap pData, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue); mng_retcode mng_create_ani_loop (mng_datap pData, mng_uint8 iLevel, mng_uint32 iRepeatcount, mng_uint8 iTermcond, mng_uint32 iItermin, mng_uint32 iItermax, mng_uint32 iCount, mng_uint32p pSignals); mng_retcode mng_create_ani_endl (mng_datap pData, mng_uint8 iLevel); mng_retcode mng_create_ani_defi (mng_datap pData); mng_retcode mng_create_ani_basi (mng_datap pData, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_bool bHasalpha, mng_uint16 iAlpha, mng_uint8 iViewable); mng_retcode mng_create_ani_clon (mng_datap pData, mng_uint16 iSourceid, mng_uint16 iCloneid, mng_uint8 iClonetype, mng_bool bHasdonotshow, mng_uint8 iDonotshow, mng_uint8 iConcrete, mng_bool bHasloca, mng_uint8 iLocatype, mng_int32 iLocax, mng_int32 iLocay); mng_retcode mng_create_ani_back (mng_datap pData, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_uint8 iMandatory, mng_uint16 iImageid, mng_uint8 iTile); mng_retcode mng_create_ani_fram (mng_datap pData, mng_uint8 iFramemode, mng_uint8 iChangedelay, mng_uint32 iDelay, mng_uint8 iChangetimeout, mng_uint32 iTimeout, mng_uint8 iChangeclipping, mng_uint8 iCliptype, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb); mng_retcode mng_create_ani_move (mng_datap pData, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iType, mng_int32 iLocax, mng_int32 iLocay); mng_retcode mng_create_ani_clip (mng_datap pData, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iType, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb); mng_retcode mng_create_ani_show (mng_datap pData, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iMode); mng_retcode mng_create_ani_term (mng_datap pData, mng_uint8 iTermaction, mng_uint8 iIteraction, mng_uint32 iDelay, mng_uint32 iItermax); #ifndef MNG_SKIPCHUNK_SAVE mng_retcode mng_create_ani_save (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_SEEK mng_retcode mng_create_ani_seek (mng_datap pData, mng_uint32 iSegmentnamesize, mng_pchar zSegmentname); #endif #ifndef MNG_NO_DELTA_PNG mng_retcode mng_create_ani_dhdr (mng_datap pData, mng_uint16 iObjectid, mng_uint8 iImagetype, mng_uint8 iDeltatype, mng_uint32 iBlockwidth, mng_uint32 iBlockheight, mng_uint32 iBlockx, mng_uint32 iBlocky); mng_retcode mng_create_ani_prom (mng_datap pData, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iFilltype); mng_retcode mng_create_ani_ipng (mng_datap pData); mng_retcode mng_create_ani_ijng (mng_datap pData); mng_retcode mng_create_ani_pplt (mng_datap pData, mng_uint8 iType, mng_uint32 iCount, mng_palette8ep paIndexentries, mng_uint8p paAlphaentries, mng_uint8p paUsedentries); #endif #ifndef MNG_SKIPCHUNK_MAGN mng_retcode mng_create_ani_magn (mng_datap pData, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iMethodX, mng_uint16 iMX, mng_uint16 iMY, mng_uint16 iML, mng_uint16 iMR, mng_uint16 iMT, mng_uint16 iMB, mng_uint8 iMethodY); #endif #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_create_ani_past (mng_datap pData, mng_uint16 iTargetid, mng_uint8 iTargettype, mng_int32 iTargetx, mng_int32 iTargety, mng_uint32 iCount, mng_ptr pSources); #endif #ifndef MNG_SKIPCHUNK_DISC mng_retcode mng_create_ani_disc (mng_datap pData, mng_uint32 iCount, mng_uint16p pIds); #endif #else /* MNG_OPTIMIZE_CHUNKREADER */ mng_retcode mng_create_ani_plte (mng_datap pData); mng_retcode mng_create_ani_trns (mng_datap pData); mng_retcode mng_create_ani_gama (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_chrm (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_srgb (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_iccp (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_bkgd (mng_datap pData); mng_retcode mng_create_ani_loop (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_endl (mng_datap pData, mng_uint8 iLevel); mng_retcode mng_create_ani_defi (mng_datap pData); mng_retcode mng_create_ani_basi (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_clon (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_back (mng_datap pData); mng_retcode mng_create_ani_fram (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_move (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_clip (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_show (mng_datap pData); mng_retcode mng_create_ani_term (mng_datap pData, mng_chunkp pChunk); #ifndef MNG_SKIPCHUNK_SAVE mng_retcode mng_create_ani_save (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_SEEK mng_retcode mng_create_ani_seek (mng_datap pData, mng_chunkp pChunk); #endif #ifndef MNG_NO_DELTA_PNG mng_retcode mng_create_ani_dhdr (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_prom (mng_datap pData, mng_chunkp pChunk); mng_retcode mng_create_ani_ipng (mng_datap pData); mng_retcode mng_create_ani_ijng (mng_datap pData); mng_retcode mng_create_ani_pplt (mng_datap pData, mng_uint8 iType, mng_uint32 iCount, mng_palette8ep paIndexentries, mng_uint8p paAlphaentries, mng_uint8p paUsedentries); #endif #ifndef MNG_SKIPCHUNK_MAGN mng_retcode mng_create_ani_magn (mng_datap pData, mng_chunkp pChunk); #endif #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_create_ani_past (mng_datap pData, mng_chunkp pChunk); #endif #ifndef MNG_SKIPCHUNK_DISC mng_retcode mng_create_ani_disc (mng_datap pData, mng_chunkp pChunk); #endif #endif /* MNG_OPTIMIZE_CHUNKREADER */ /* ************************************************************************** */ mng_retcode mng_free_ani_image (mng_datap pData, mng_objectp pObject); #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_plte (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_trns (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_gama (mng_datap pData, mng_objectp pObject); #ifndef MNG_SKIPCHUNK_cHRM mng_retcode mng_free_ani_chrm (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_sRGB mng_retcode mng_free_ani_srgb (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_bKGD mng_retcode mng_free_ani_bkgd (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_LOOP mng_retcode mng_free_ani_endl (mng_datap pData, mng_objectp pObject); #endif mng_retcode mng_free_ani_defi (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_basi (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_clon (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_back (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_fram (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_move (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_clip (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_show (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_term (mng_datap pData, mng_objectp pObject); #ifndef MNG_SKIPCHUNK_SAVE mng_retcode mng_free_ani_save (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_NO_DELTA_PNG mng_retcode mng_free_ani_dhdr (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_prom (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_ipng (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_ijng (mng_datap pData, mng_objectp pObject); mng_retcode mng_free_ani_pplt (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_MAGN mng_retcode mng_free_ani_magn (mng_datap pData, mng_objectp pObject); #endif #endif /* MNG_OPTIMIZE_OBJCLEANUP */ #ifndef MNG_SKIPCHUNK_iCCP mng_retcode mng_free_ani_iccp (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_LOOP mng_retcode mng_free_ani_loop (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_SAVE mng_retcode mng_free_ani_seek (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_free_ani_past (mng_datap pData, mng_objectp pObject); #endif mng_retcode mng_free_ani_disc (mng_datap pData, mng_objectp pObject); /* ************************************************************************** */ mng_retcode mng_process_ani_image (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_plte (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_trns (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_gama (mng_datap pData, mng_objectp pObject); #ifndef MNG_SKIPCHUNK_cHRM mng_retcode mng_process_ani_chrm (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_sRGB mng_retcode mng_process_ani_srgb (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_iCCP mng_retcode mng_process_ani_iccp (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_bKGD mng_retcode mng_process_ani_bkgd (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_LOOP mng_retcode mng_process_ani_loop (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_endl (mng_datap pData, mng_objectp pObject); #endif mng_retcode mng_process_ani_defi (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_basi (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_clon (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_back (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_fram (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_move (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_clip (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_show (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_term (mng_datap pData, mng_objectp pObject); #ifndef MNG_SKIPCHUNK_SAVE mng_retcode mng_process_ani_save (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_SKIPCHUNK_SEEK mng_retcode mng_process_ani_seek (mng_datap pData, mng_objectp pObject); #endif #ifndef MNG_NO_DELTA_PNG mng_retcode mng_process_ani_dhdr (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_prom (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_ipng (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_ijng (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ani_pplt (mng_datap pData, mng_objectp pObject); #endif mng_retcode mng_process_ani_magn (mng_datap pData, mng_objectp pObject); #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_process_ani_past (mng_datap pData, mng_objectp pObject); #endif mng_retcode mng_process_ani_disc (mng_datap pData, mng_objectp pObject); /* ************************************************************************** */ #ifdef MNG_SUPPORT_DYNAMICMNG #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_event (mng_datap pData, mng_uint8 iEventtype, mng_uint8 iMasktype, mng_int32 iLeft, mng_int32 iRight, mng_int32 iTop, mng_int32 iBottom, mng_uint16 iObjectid, mng_uint8 iIndex, mng_uint32 iSegmentnamesize, mng_pchar zSegmentname); #else mng_retcode mng_create_event (mng_datap pData, mng_ptr pEntry); #endif mng_retcode mng_free_event (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_event (mng_datap pData, mng_objectp pObject); #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_mpng_obj (mng_datap pData, mng_uint32 iFramewidth, mng_uint32 iFrameheight, mng_uint16 iNumplays, mng_uint16 iTickspersec, mng_uint32 iFramessize, mng_ptr pFrames); #else mng_retcode mng_create_mpng_obj (mng_datap pData, mng_ptr pEntry); #endif mng_retcode mng_free_mpng_obj (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_mpng_obj (mng_datap pData, mng_objectp pObject); #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ang_obj (mng_datap pData, mng_uint32 iNumframes, mng_uint32 iTickspersec, mng_uint32 iNumplays, mng_uint32 iTilewidth, mng_uint32 iTileheight, mng_uint8 iInterlace, mng_uint8 iStillused); #else mng_retcode mng_create_ang_obj (mng_datap pData, mng_ptr pEntry); #endif mng_retcode mng_free_ang_obj (mng_datap pData, mng_objectp pObject); mng_retcode mng_process_ang_obj (mng_datap pData, mng_objectp pObject); #endif /* ************************************************************************** */ #endif /* MNG_INCLUDE_DISPLAY_PROCS */ /* ************************************************************************** */ #endif /* _libmng_object_prc_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_objects.h0000644000000000000000000007157312005307152014623 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_objects.h copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Internal object structures (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the internal object structures * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.5.2 - 05/23/2000 - G.Juyn * */ /* * - changed inclusion to DISPLAY_PROCS * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - added global color-chunks for animations * */ /* * - added global PLTE,tRNS,bKGD chunks for animation * */ /* * - added SAVE & SEEK animation objects * */ /* * 0.5.2 - 05/29/2000 - G.Juyn * */ /* * - added framenr/layernr/playtime to object header * */ /* * 0.5.2 - 05/30/2000 - G.Juyn * */ /* * - added ani-objects for delta-image processing * */ /* * - added compression/filter/interlace fields to * */ /* * object-buffer for delta-image processing * */ /* * * */ /* * 0.5.3 - 06/17/2000 - G.Juyn * */ /* * - changed definition of aTRNSentries * */ /* * 0.5.3 - 06/22/2000 - G.Juyn * */ /* * - added definition for PPLT animation-processing * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 09/10/2000 - G.Juyn * */ /* * - fixed DEFI behavior * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added support for delta-JNG * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - added valid-flag to stored objects for read() / display()* */ /* * 0.9.3 - 10/19/2000 - G.Juyn * */ /* * - added storage for pixel-/alpha-sampledepth for delta's * */ /* * * */ /* * 1.0.5 - 09/13/2002 - G.Juyn * */ /* * - fixed read/write of MAGN chunk * */ /* * 1.0.5 - 09/15/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - added support for PAST * */ /* * 1.0.5 - 09/23/2002 - G.Juyn * */ /* * - added in-memory color-correction of abstract images * */ /* * 1.0.5 - 10/07/2002 - G.Juyn * */ /* * - fixed DISC support * */ /* * * */ /* * 1.0.6 - 10/07/2003 - G.R-P * */ /* * - added SKIPCHUNK conditionals * */ /* * * */ /* * 1.0.7 - 03/24/2004 - G.R-P * */ /* * - added more SKIPCHUNK conditionals * */ /* * * */ /* * 1.0.9 - 12/05/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_OBJCLEANUP * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_objects_h_ #define _libmng_objects_h_ /* ************************************************************************** */ #ifdef MNG_INCLUDE_DISPLAY_PROCS /* ************************************************************************** */ typedef mng_retcode (*mng_cleanupobject) (mng_datap pData, mng_objectp pHeader); typedef mng_retcode (*mng_processobject) (mng_datap pData, mng_objectp pHeader); /* ************************************************************************** */ typedef struct { mng_cleanupobject fCleanup; mng_processobject fProcess; mng_objectp pNext; /* for double-linked list */ mng_objectp pPrev; mng_uint32 iFramenr; mng_uint32 iLayernr; mng_uint32 iPlaytime; #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_size_t iObjsize; #endif } mng_object_header; typedef mng_object_header * mng_object_headerp; /* ************************************************************************** */ typedef struct { /* MNG specification "object-buffer" */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint32 iRefcount; /* reference counter */ mng_bool bFrozen; /* frozen flag */ mng_bool bConcrete; /* concrete flag */ mng_bool bViewable; /* viewable flag */ mng_uint32 iWidth; /* image specifics */ mng_uint32 iHeight; mng_uint8 iBitdepth; mng_uint8 iColortype; mng_uint8 iCompression; mng_uint8 iFilter; mng_uint8 iInterlace; mng_bool bCorrected; /* indicates if an abstract image has already been color-corrected */ mng_uint8 iAlphabitdepth; /* used only for JNG images */ mng_uint8 iJHDRcompression; mng_uint8 iJHDRinterlace; mng_uint8 iPixelsampledepth; /* used with delta-images */ mng_uint8 iAlphasampledepth; mng_bool bHasPLTE; /* PLTE chunk present */ mng_bool bHasTRNS; /* tRNS chunk present */ mng_bool bHasGAMA; /* gAMA chunk present */ mng_bool bHasCHRM; /* cHRM chunk present */ mng_bool bHasSRGB; /* sRGB chunk present */ mng_bool bHasICCP; /* iCCP chunk present */ mng_bool bHasBKGD; /* bKGD chunk present */ mng_uint32 iPLTEcount; /* PLTE fields */ mng_rgbpaltab aPLTEentries; mng_uint16 iTRNSgray; /* tRNS fields */ mng_uint16 iTRNSred; mng_uint16 iTRNSgreen; mng_uint16 iTRNSblue; mng_uint32 iTRNScount; mng_uint8arr aTRNSentries; mng_uint32 iGamma; /* gAMA fields */ mng_uint32 iWhitepointx; /* cHRM fields */ mng_uint32 iWhitepointy; mng_uint32 iPrimaryredx; mng_uint32 iPrimaryredy; mng_uint32 iPrimarygreenx; mng_uint32 iPrimarygreeny; mng_uint32 iPrimarybluex; mng_uint32 iPrimarybluey; mng_uint8 iRenderingintent; /* sRGB fields */ mng_uint32 iProfilesize; /* iCCP fields */ mng_ptr pProfile; mng_uint8 iBKGDindex; /* bKGD fields */ mng_uint16 iBKGDgray; mng_uint16 iBKGDred; mng_uint16 iBKGDgreen; mng_uint16 iBKGDblue; mng_uint32 iSamplesize; /* size of a sample */ mng_uint32 iRowsize; /* size of a row of samples */ mng_uint32 iImgdatasize; /* size of the sample data buffer */ mng_uint8p pImgdata; /* actual sample data buffer */ } mng_imagedata; typedef mng_imagedata * mng_imagedatap; /* ************************************************************************** */ typedef struct { /* MNG specification "object" */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iId; /* object-id */ mng_bool bFrozen; /* frozen flag */ mng_bool bVisible; /* potential visibility flag */ mng_bool bViewable; /* viewable flag */ mng_bool bValid; /* marks invalid when only reading */ mng_int32 iPosx; /* location fields */ mng_int32 iPosy; mng_bool bClipped; /* clipping fields */ mng_int32 iClipl; mng_int32 iClipr; mng_int32 iClipt; mng_int32 iClipb; #ifndef MNG_SKIPCHUNK_MAGN mng_uint8 iMAGN_MethodX; /* magnification (MAGN) */ mng_uint8 iMAGN_MethodY; mng_uint16 iMAGN_MX; mng_uint16 iMAGN_MY; mng_uint16 iMAGN_ML; mng_uint16 iMAGN_MR; mng_uint16 iMAGN_MT; mng_uint16 iMAGN_MB; #endif #ifndef MNG_SKIPCHUNK_PAST mng_int32 iPastx; /* target x/y from previous PAST */ mng_int32 iPasty; #endif mng_imagedatap pImgbuf; /* the image-data buffer */ } mng_image; typedef mng_image * mng_imagep; /* ************************************************************************** */ /* "on-the-fly" image (= object 0) */ typedef mng_image mng_ani_image; /* let's (ab)use the general "object" */ typedef mng_ani_image * mng_ani_imagep; /* that's actualy crucial, so don't change it! */ /* ************************************************************************** */ typedef struct { /* global PLTE object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint32 iEntrycount; mng_rgbpaltab aEntries; } mng_ani_plte; typedef mng_ani_plte * mng_ani_pltep; /* ************************************************************************** */ typedef struct { /* global tRNS object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint32 iRawlen; mng_uint8arr aRawdata; } mng_ani_trns; typedef mng_ani_trns * mng_ani_trnsp; /* ************************************************************************** */ typedef struct { /* global gAMA object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_bool bEmpty; mng_uint32 iGamma; } mng_ani_gama; typedef mng_ani_gama * mng_ani_gamap; /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_cHRM typedef struct { /* global cHRM object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_bool bEmpty; mng_uint32 iWhitepointx; mng_uint32 iWhitepointy; mng_uint32 iRedx; mng_uint32 iRedy; mng_uint32 iGreenx; mng_uint32 iGreeny; mng_uint32 iBluex; mng_uint32 iBluey; } mng_ani_chrm; typedef mng_ani_chrm * mng_ani_chrmp; #endif /* ************************************************************************** */ typedef struct { /* global sRGB object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_bool bEmpty; mng_uint8 iRenderingintent; } mng_ani_srgb; typedef mng_ani_srgb * mng_ani_srgbp; /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iCCP typedef struct { /* global iCCP object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_bool bEmpty; mng_uint32 iProfilesize; mng_ptr pProfile; } mng_ani_iccp; typedef mng_ani_iccp * mng_ani_iccpp; #endif /* ************************************************************************** */ typedef struct { /* global bKGD object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iRed; mng_uint16 iGreen; mng_uint16 iBlue; } mng_ani_bkgd; typedef mng_ani_bkgd * mng_ani_bkgdp; /* ************************************************************************** */ typedef struct { /* LOOP object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint8 iLevel; mng_uint32 iRepeatcount; mng_uint8 iTermcond; mng_uint32 iItermin; mng_uint32 iItermax; mng_uint32 iCount; mng_uint32p pSignals; mng_uint32 iRunningcount; /* running counter */ } mng_ani_loop; typedef mng_ani_loop * mng_ani_loopp; /* ************************************************************************** */ typedef struct { /* ENDL object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint8 iLevel; mng_ani_loopp pLOOP; /* matching LOOP */ } mng_ani_endl; typedef mng_ani_endl * mng_ani_endlp; /* ************************************************************************** */ typedef struct { /* DEFI object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iId; mng_bool bHasdonotshow; mng_uint8 iDonotshow; mng_bool bHasconcrete; mng_uint8 iConcrete; mng_bool bHasloca; mng_int32 iLocax; mng_int32 iLocay; mng_bool bHasclip; mng_int32 iClipl; mng_int32 iClipr; mng_int32 iClipt; mng_int32 iClipb; } mng_ani_defi; typedef mng_ani_defi * mng_ani_defip; /* ************************************************************************** */ typedef struct { /* BASI object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iRed; mng_uint16 iGreen; mng_uint16 iBlue; mng_bool bHasalpha; mng_uint16 iAlpha; mng_uint8 iViewable; } mng_ani_basi; typedef mng_ani_basi * mng_ani_basip; /* ************************************************************************** */ typedef struct { /* CLON object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iCloneid; mng_uint16 iSourceid; mng_uint8 iClonetype; mng_bool bHasdonotshow; mng_uint8 iDonotshow; mng_uint8 iConcrete; mng_bool bHasloca; mng_uint8 iLocatype; mng_int32 iLocax; mng_int32 iLocay; } mng_ani_clon; typedef mng_ani_clon * mng_ani_clonp; /* ************************************************************************** */ typedef struct { /* BACK object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iRed; mng_uint16 iGreen; mng_uint16 iBlue; mng_uint8 iMandatory; mng_uint16 iImageid; mng_uint8 iTile; } mng_ani_back; typedef mng_ani_back * mng_ani_backp; /* ************************************************************************** */ typedef struct { /* FRAM object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint8 iFramemode; mng_uint8 iChangedelay; mng_uint32 iDelay; mng_uint8 iChangetimeout; mng_uint32 iTimeout; mng_uint8 iChangeclipping; mng_uint8 iCliptype; mng_int32 iClipl; mng_int32 iClipr; mng_int32 iClipt; mng_int32 iClipb; } mng_ani_fram; typedef mng_ani_fram * mng_ani_framp; /* ************************************************************************** */ typedef struct { /* MOVE object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iFirstid; mng_uint16 iLastid; mng_uint8 iType; mng_int32 iLocax; mng_int32 iLocay; } mng_ani_move; typedef mng_ani_move * mng_ani_movep; /* ************************************************************************** */ typedef struct { /* CLIP object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iFirstid; mng_uint16 iLastid; mng_uint8 iType; mng_int32 iClipl; mng_int32 iClipr; mng_int32 iClipt; mng_int32 iClipb; } mng_ani_clip; typedef mng_ani_clip * mng_ani_clipp; /* ************************************************************************** */ typedef struct { /* SHOW object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iFirstid; mng_uint16 iLastid; mng_uint8 iMode; } mng_ani_show; typedef mng_ani_show * mng_ani_showp; /* ************************************************************************** */ typedef struct { /* TERM object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint8 iTermaction; mng_uint8 iIteraction; mng_uint32 iDelay; mng_uint32 iItermax; } mng_ani_term; typedef mng_ani_term * mng_ani_termp; /* ************************************************************************** */ typedef struct { /* SAVE object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ } mng_ani_save; typedef mng_ani_save * mng_ani_savep; /* ************************************************************************** */ typedef struct { /* SEEK object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint32 iSegmentnamesize; mng_pchar zSegmentname; } mng_ani_seek; typedef mng_ani_seek * mng_ani_seekp; /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG typedef struct { /* DHDR object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iObjectid; mng_uint8 iImagetype; mng_uint8 iDeltatype; mng_uint32 iBlockwidth; mng_uint32 iBlockheight; mng_uint32 iBlockx; mng_uint32 iBlocky; } mng_ani_dhdr; typedef mng_ani_dhdr * mng_ani_dhdrp; /* ************************************************************************** */ typedef struct { /* PROM object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint8 iBitdepth; mng_uint8 iColortype; mng_uint8 iFilltype; } mng_ani_prom; typedef mng_ani_prom * mng_ani_promp; /* ************************************************************************** */ typedef struct { /* IPNG object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ } mng_ani_ipng; typedef mng_ani_ipng * mng_ani_ipngp; /* ************************************************************************** */ typedef struct { /* IJNG object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ } mng_ani_ijng; typedef mng_ani_ijng * mng_ani_ijngp; /* ************************************************************************** */ typedef struct { /* PPLT object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint8 iType; mng_uint32 iCount; mng_rgbpaltab aIndexentries; mng_uint8arr aAlphaentries; mng_uint8arr aUsedentries; } mng_ani_pplt; typedef mng_ani_pplt * mng_ani_ppltp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MAGN typedef struct { /* MAGN object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iFirstid; mng_uint16 iLastid; mng_uint8 iMethodX; mng_uint16 iMX; mng_uint16 iMY; mng_uint16 iML; mng_uint16 iMR; mng_uint16 iMT; mng_uint16 iMB; mng_uint8 iMethodY; } mng_ani_magn; typedef mng_ani_magn * mng_ani_magnp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST typedef struct { /* PAST object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint16 iTargetid; mng_uint8 iTargettype; mng_int32 iTargetx; mng_int32 iTargety; mng_uint32 iCount; mng_ptr pSources; } mng_ani_past; typedef mng_ani_past * mng_ani_pastp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DISC typedef struct { /* DISC object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint32 iCount; mng_uint16p pIds; } mng_ani_disc; typedef mng_ani_disc * mng_ani_discp; #endif /* ************************************************************************** */ #ifdef MNG_SUPPORT_DYNAMICMNG typedef struct { /* event object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint8 iEventtype; mng_uint8 iMasktype; mng_int32 iLeft; mng_int32 iRight; mng_int32 iTop; mng_int32 iBottom; mng_uint16 iObjectid; mng_uint8 iIndex; mng_uint32 iSegmentnamesize; mng_pchar zSegmentname; mng_ani_seekp pSEEK; /* SEEK ani object */ mng_int32 iLastx; /* last X/Y coordinates */ mng_int32 iLasty; } mng_event; typedef mng_event * mng_eventp; #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL typedef struct { /* mPNG object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint32 iFramewidth; mng_uint32 iFrameheight; mng_uint32 iNumplays; mng_uint16 iTickspersec; mng_uint32 iFramessize; mng_ptr pFrames; } mng_mpng_obj; typedef mng_mpng_obj * mng_mpng_objp; #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL typedef struct { /* ANG object */ mng_object_header sHeader; /* default header (DO NOT REMOVE) */ mng_uint32 iNumframes; mng_uint32 iTickspersec; mng_uint32 iNumplays; mng_uint32 iTilewidth; mng_uint32 iTileheight; mng_uint8 iInterlace; mng_uint8 iStillused; mng_uint32 iTilessize; mng_ptr pTiles; } mng_ang_obj; typedef mng_ang_obj * mng_ang_objp; #endif /* ************************************************************************** */ #endif /* MNG_INCLUDE_DISPLAY_PROCS */ /* ************************************************************************** */ #endif /* _libmng_objects_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/Configure.libmng0000644000000000000000000000012312076666316014605 0ustar rootrootdo_configure: ./configure \ --prefix=/usr \ --libdir=/usr/lib64 \ --with-lcms2 libmng-2.0.2/libmng_write.c0000644000000000000000000002053712005307152014311 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_write.c copyright (c) 2000-2004 G.Juyn * */ /* * version : 1.0.9 * */ /* * * */ /* * purpose : Write management (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the write management routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * 0.5.1 - 05/16/2000 - G.Juyn * */ /* * - moved the actual write_graphic functionality from * */ /* * mng_hlapi to its appropriate function here * */ /* * * */ /* * 0.9.1 - 07/19/2000 - G.Juyn * */ /* * - fixed writing of signature * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * * */ /* * 1.0.8 - 07/06/2004 - G.R-P * */ /* * - added conditionals around openstream/closestream * */ /* * - defend against using undefined Open/Closestream function * */ /* * 1.0.8 - 08/02/2004 - G.Juyn * */ /* * - added conditional to allow easier writing of large MNG's * */ /* * * */ /* * 1.0.9 - 09/25/2004 - G.Juyn * */ /* * - replaced MNG_TWEAK_LARGE_FILES with permanent solution * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_memory.h" #include "libmng_chunks.h" #include "libmng_chunk_io.h" #include "libmng_write.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) mng_retcode mng_drop_chunks (mng_datap pData) { mng_chunkp pChunk; mng_chunkp pNext; mng_cleanupchunk fCleanup; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DROP_CHUNKS, MNG_LC_START); #endif pChunk = pData->pFirstchunk; /* and get first stored chunk (if any) */ while (pChunk) /* more chunks to discard ? */ { pNext = ((mng_chunk_headerp)pChunk)->pNext; /* call appropriate cleanup */ fCleanup = ((mng_chunk_headerp)pChunk)->fCleanup; fCleanup (pData, pChunk); pChunk = pNext; /* neeeext */ } pData->pFirstchunk = MNG_NULL; pData->pLastchunk = MNG_NULL; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DROP_CHUNKS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_WRITE_PROCS /* ************************************************************************** */ mng_retcode mng_write_graphic (mng_datap pData) { mng_chunkp pChunk; mng_retcode iRetcode; mng_uint32 iWritten; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_GRAPHIC, MNG_LC_START); #endif pChunk = pData->pFirstchunk; /* we'll start with the first, thank you */ if (pChunk) /* is there anything to write ? */ { /* open the file */ if (!pData->bWriting) { #ifndef MNG_NO_OPEN_CLOSE_STREAM if (pData->fOpenstream && !pData->fOpenstream ((mng_handle)pData)) MNG_ERROR (pData, MNG_APPIOERROR); #endif { pData->bWriting = MNG_TRUE; /* indicate writing */ pData->iWritebufsize = 32768; /* get a temporary write buffer */ /* reserve 12 bytes for length, chunkname & crc */ MNG_ALLOC (pData, pData->pWritebuf, pData->iWritebufsize+12); /* write the signature */ if (((mng_chunk_headerp)pChunk)->iChunkname == MNG_UINT_IHDR) mng_put_uint32 (pData->pWritebuf, PNG_SIG); else if (((mng_chunk_headerp)pChunk)->iChunkname == MNG_UINT_JHDR) mng_put_uint32 (pData->pWritebuf, JNG_SIG); else mng_put_uint32 (pData->pWritebuf, MNG_SIG); mng_put_uint32 (pData->pWritebuf+4, POST_SIG); if (!pData->fWritedata ((mng_handle)pData, pData->pWritebuf, 8, &iWritten)) { MNG_FREE (pData, pData->pWritebuf, pData->iWritebufsize+12); MNG_ERROR (pData, MNG_APPIOERROR); } if (iWritten != 8) /* disk full ? */ { MNG_FREE (pData, pData->pWritebuf, pData->iWritebufsize+12); MNG_ERROR (pData, MNG_OUTPUTERROR); } } } while (pChunk) /* so long as there's something to write */ { /* let's call its output routine */ iRetcode = ((mng_chunk_headerp)pChunk)->fWrite (pData, pChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* neeeext */ pChunk = ((mng_chunk_headerp)pChunk)->pNext; } if (!pData->bCreating) { /* free the temporary buffer */ MNG_FREE (pData, pData->pWritebuf, pData->iWritebufsize+12); pData->bWriting = MNG_FALSE; /* done writing */ /* close the stream now */ #ifndef MNG_NO_OPEN_CLOSE_STREAM if (pData->fClosestream && !pData->fClosestream ((mng_handle)pData)) MNG_ERROR (pData, MNG_APPIOERROR); #endif } else { /* cleanup the written chunks */ iRetcode = mng_drop_chunks (pData); if (iRetcode) /* on error bail out */ return iRetcode; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_GRAPHIC, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_INCLUDE_WRITE_PROCS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_object_prc.c0000644000000000000000000070451712005307152015300 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_object_prc.c copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Object processing routines (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the internal object processing routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * * */ /* * 0.5.2 - 05/20/2000 - G.Juyn * */ /* * - fixed to support JNG objects * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - added support for global color-chunks in animation * */ /* * - added support for global PLTE,tRNS,bKGD in animation * */ /* * - added SAVE & SEEK animation objects * */ /* * 0.5.2 - 05/29/2000 - G.Juyn * */ /* * - added initialization of framenr/layernr/playtime * */ /* * - changed ani_object create routines not to return the * */ /* * created object (wasn't necessary) * */ /* * 0.5.2 - 05/30/2000 - G.Juyn * */ /* * - added object promotion routine (PROM handling) * */ /* * - added ani-object routines for delta-image processing * */ /* * - added compression/filter/interlace fields to * */ /* * object-buffer for delta-image processing * */ /* * * */ /* * 0.5.3 - 06/17/2000 - G.Juyn * */ /* * - changed support for delta-image processing * */ /* * 0.5.3 - 06/20/2000 - G.Juyn * */ /* * - fixed some small things (as precaution) * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - added processing of PLTE/tRNS & color-info for * */ /* * delta-images in the ani_objects chain * */ /* * 0.5.3 - 06/22/2000 - G.Juyn * */ /* * - added support for PPLT chunk * */ /* * * */ /* * 0.9.1 - 07/07/2000 - G.Juyn * */ /* * - added support for freeze/restart/resume & go_xxxx * */ /* * 0.9.1 - 07/16/2000 - G.Juyn * */ /* * - fixed support for mng_display() after mng_read() * */ /* * * */ /* * 0.9.2 - 07/29/2000 - G.Juyn * */ /* * - fixed small bugs in display processing * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/07/2000 - G.Juyn * */ /* * - B111300 - fixup for improved portability * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 09/10/2000 - G.Juyn * */ /* * - fixed DEFI behavior * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - added valid-flag to stored objects for read() / display()* */ /* * - added routine to discard "invalid" objects * */ /* * 0.9.3 - 10/18/2000 - G.Juyn * */ /* * - fixed delta-processing behavior * */ /* * 0.9.3 - 10/19/2000 - G.Juyn * */ /* * - added storage for pixel-/alpha-sampledepth for delta's * */ /* * * */ /* * 0.9.4 - 1/18/2001 - G.Juyn * */ /* * - removed "old" MAGN methods 3 & 4 * */ /* * - added "new" MAGN methods 3, 4 & 5 * */ /* * * */ /* * 0.9.5 - 1/22/2001 - G.Juyn * */ /* * - B129681 - fixed compiler warnings SGI/Irix * */ /* * * */ /* * 1.0.2 - 06/23/2001 - G.Juyn * */ /* * - added optimization option for MNG-video playback * */ /* * * */ /* * 1.0.5 - 08/15/2002 - G.Juyn * */ /* * - completed PROM support * */ /* * 1.0.5 - 08/16/2002 - G.Juyn * */ /* * - completed MAGN support (16-bit functions) * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/13/2002 - G.Juyn * */ /* * - fixed read/write of MAGN chunk * */ /* * 1.0.5 - 09/15/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - added support for PAST * */ /* * 1.0.5 - 09/23/2002 - G.Juyn * */ /* * - fixed reset_object_detail to clear old buffer * */ /* * - added in-memory color-correction of abstract images * */ /* * 1.0.5 - 10/05/2002 - G.Juyn * */ /* * - fixed problem with cloned objects marked as invalid * */ /* * - fixed problem cloning frozen object_buffers * */ /* * 1.0.5 - 10/07/2002 - G.Juyn * */ /* * - fixed DISC support * */ /* * 1.0.5 - 11/04/2002 - G.Juyn * */ /* * - fixed goframe/golayer/gotime processing * */ /* * 1.0.5 - 11/07/2002 - G.Juyn * */ /* * - fixed magnification bug with object 0 * */ /* * 1.0.5 - 01/19/2003 - G.Juyn * */ /* * - B664911 - fixed buffer overflow during init * */ /* * * */ /* * 1.0.6 - 04/19/2003 - G.Juyn * */ /* * - fixed problem with infinite loops during readdisplay() * */ /* * 1.0.6 - 05/25/2003 - G.R-P * */ /* * - added MNG_SKIPCHUNK_cHNK footprint optimizations * */ /* * 1.0.6 - 06/09/2003 - G. R-P * */ /* * - added conditionals around 8-bit magn routines * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - added conditionals around some JNG-supporting code * */ /* * - removed conditionals around 8-bit magn routines * */ /* * - added conditionals around delta-png and 16-bit code * */ /* * 1.0.6 - 07/14/2003 - G.R-P * */ /* * - added MNG_NO_LOOP_SIGNALS_SUPPORTED conditional * */ /* * 1.0.6 - 07/29/2003 - G.Juyn * */ /* * - fixed invalid test in promote_imageobject * */ /* * 1.0.6 - 07/29/2003 - G.R-P. * */ /* * - added conditionals around PAST chunk support * */ /* * 1.0.6 - 08/17/2003 - G.R-P. * */ /* * - added conditionals around MAGN chunk support * */ /* * * */ /* * 1.0.7 - 03/21/2004 - G.Juyn * */ /* * - fixed some 64-bit platform compiler warnings * */ /* * * */ /* * 1.0.9 - 10/10/2004 - G.R-P. * */ /* * - added MNG_NO_1_2_4BIT_SUPPORT support * */ /* * 1.0.9 - 12/05/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_OBJCLEANUP * */ /* * 1.0.9 - 12/11/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_DISPLAYCALLS * */ /* * 1.0.9 - 12/31/2004 - G.R-P. * */ /* * - fixed warnings about possible uninitialized pointers * */ /* * 1.0.9 - 01/02/2005 - G.Juyn * */ /* * - fixing some compiler-warnings * */ /* * * */ /* * 1.0.10 - 02/07/2005 - G.Juyn * */ /* * - fixed some compiler-warnings * */ /* * 1.0.10 - 07/30/2005 - G.Juyn * */ /* * - fixed problem with CLON object during readdisplay() * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_memory.h" #include "libmng_chunks.h" #include "libmng_objects.h" #include "libmng_display.h" #include "libmng_pixels.h" #include "libmng_object_prc.h" #include "libmng_cms.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_DISPLAY_PROCS /* ************************************************************************** */ /* * * */ /* * Generic object routines * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_drop_invalid_objects (mng_datap pData) { mng_objectp pObject; mng_objectp pNext; mng_cleanupobject fCleanup; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DROP_INVALID_OBJECTS, MNG_LC_START); #endif pObject = pData->pFirstimgobj; /* get first stored image-object (if any) */ while (pObject) /* more objects to check ? */ { pNext = ((mng_object_headerp)pObject)->pNext; /* invalid ? */ if (!((mng_imagep)pObject)->bValid) { /* call appropriate cleanup */ fCleanup = ((mng_object_headerp)pObject)->fCleanup; fCleanup (pData, pObject); } pObject = pNext; /* neeeext */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DROP_INVALID_OBJECTS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifdef MNG_OPTIMIZE_OBJCLEANUP MNG_LOCAL mng_retcode create_obj_general (mng_datap pData, mng_size_t iObjsize, mng_cleanupobject fCleanup, mng_processobject fProcess, mng_ptr *ppObject) { mng_object_headerp pWork; MNG_ALLOC (pData, pWork, iObjsize); pWork->fCleanup = fCleanup; pWork->fProcess = fProcess; pWork->iObjsize = iObjsize; *ppObject = (mng_ptr)pWork; return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode mng_free_obj_general (mng_datap pData, mng_objectp pObject) { MNG_FREEX (pData, pObject, ((mng_object_headerp)pObject)->iObjsize); return MNG_NOERROR; } #endif /* ************************************************************************** */ /* * * */ /* * Image-data-object routines * */ /* * * */ /* * these handle the "object buffer" as defined by the MNG specification * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_create_imagedataobject (mng_datap pData, mng_bool bConcrete, mng_bool bViewable, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace, mng_imagedatap *ppObject) { mng_imagedatap pImagedata; mng_uint32 iSamplesize = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_IMGDATAOBJECT, MNG_LC_START); #endif /* get a buffer */ #ifdef MNG_OPTIMIZE_OBJCLEANUP { mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_imagedata), (mng_cleanupobject)mng_free_imagedataobject, MNG_NULL, &pTemp); if (iRetcode) return iRetcode; pImagedata = (mng_imagedatap)pTemp; } #else MNG_ALLOC (pData, pImagedata, sizeof (mng_imagedata)); /* fill the appropriate fields */ pImagedata->sHeader.fCleanup = (mng_cleanupobject)mng_free_imagedataobject; pImagedata->sHeader.fProcess = MNG_NULL; #endif pImagedata->iRefcount = 1; pImagedata->bFrozen = MNG_FALSE; pImagedata->bConcrete = bConcrete; pImagedata->bViewable = bViewable; pImagedata->iWidth = iWidth; pImagedata->iHeight = iHeight; pImagedata->iBitdepth = iBitdepth; pImagedata->iColortype = iColortype; pImagedata->iCompression = iCompression; pImagedata->iFilter = iFilter; pImagedata->iInterlace = iInterlace; pImagedata->bCorrected = MNG_FALSE; pImagedata->iAlphabitdepth = 0; pImagedata->iJHDRcompression = 0; pImagedata->iJHDRinterlace = 0; pImagedata->iPixelsampledepth = iBitdepth; pImagedata->iAlphasampledepth = iBitdepth; /* determine samplesize from color_type/bit_depth */ switch (iColortype) /* for < 8-bit samples we just reserve 8 bits */ { case 0 : ; /* gray */ case 8 : { /* JPEG gray */ #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth > 8) iSamplesize = 2; else #endif iSamplesize = 1; break; } case 2 : ; /* rgb */ case 10 : { /* JPEG rgb */ #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth > 8) iSamplesize = 6; else #endif iSamplesize = 3; break; } case 3 : { /* indexed */ iSamplesize = 1; break; } case 4 : ; /* gray+alpha */ case 12 : { /* JPEG gray+alpha */ #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth > 8) iSamplesize = 4; else #endif iSamplesize = 2; break; } case 6 : ; /* rgb+alpha */ case 14 : { /* JPEG rgb+alpha */ #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth > 8) iSamplesize = 8; else #endif iSamplesize = 4; break; } } /* make sure we remember all this */ pImagedata->iSamplesize = iSamplesize; pImagedata->iRowsize = iSamplesize * iWidth; pImagedata->iImgdatasize = pImagedata->iRowsize * iHeight; if (pImagedata->iImgdatasize) /* need a buffer ? */ { /* so allocate it */ MNG_ALLOCX (pData, pImagedata->pImgdata, pImagedata->iImgdatasize); if (!pImagedata->pImgdata) /* enough memory ? */ { MNG_FREEX (pData, pImagedata, sizeof (mng_imagedata)); MNG_ERROR (pData, MNG_OUTOFMEMORY); } } /* check global stuff */ pImagedata->bHasGAMA = pData->bHasglobalGAMA; #ifndef MNG_SKIPCHUNK_cHRM pImagedata->bHasCHRM = pData->bHasglobalCHRM; #endif pImagedata->bHasSRGB = pData->bHasglobalSRGB; #ifndef MNG_SKIPCHUNK_iCCP pImagedata->bHasICCP = pData->bHasglobalICCP; #endif #ifndef MNG_SKIPCHUNK_bKGD pImagedata->bHasBKGD = pData->bHasglobalBKGD; #endif if (pData->bHasglobalGAMA) /* global gAMA present ? */ pImagedata->iGamma = pData->iGlobalGamma; #ifndef MNG_SKIPCHUNK_cHRM if (pData->bHasglobalCHRM) /* global cHRM present ? */ { pImagedata->iWhitepointx = pData->iGlobalWhitepointx; pImagedata->iWhitepointy = pData->iGlobalWhitepointy; pImagedata->iPrimaryredx = pData->iGlobalPrimaryredx; pImagedata->iPrimaryredy = pData->iGlobalPrimaryredy; pImagedata->iPrimarygreenx = pData->iGlobalPrimarygreenx; pImagedata->iPrimarygreeny = pData->iGlobalPrimarygreeny; pImagedata->iPrimarybluex = pData->iGlobalPrimarybluex; pImagedata->iPrimarybluey = pData->iGlobalPrimarybluey; } #endif if (pData->bHasglobalSRGB) /* glbal sRGB present ? */ pImagedata->iRenderingintent = pData->iGlobalRendintent; #ifndef MNG_SKIPCHUNK_iCCP if (pData->bHasglobalICCP) /* glbal iCCP present ? */ { pImagedata->iProfilesize = pData->iGlobalProfilesize; if (pImagedata->iProfilesize) { MNG_ALLOCX (pData, pImagedata->pProfile, pImagedata->iProfilesize); if (!pImagedata->pProfile) /* enough memory ? */ { MNG_FREEX (pData, pImagedata->pImgdata, pImagedata->iImgdatasize); MNG_FREEX (pData, pImagedata, sizeof (mng_imagedata)); MNG_ERROR (pData, MNG_OUTOFMEMORY); } MNG_COPY (pImagedata->pProfile, pData->pGlobalProfile, pImagedata->iProfilesize); } } #endif #ifndef MNG_SKIPCHUNK_bKGD if (pData->bHasglobalBKGD) /* global bKGD present ? */ { pImagedata->iBKGDred = pData->iGlobalBKGDred; pImagedata->iBKGDgreen = pData->iGlobalBKGDgreen; pImagedata->iBKGDblue = pData->iGlobalBKGDblue; } #endif *ppObject = pImagedata; /* return it */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_IMGDATAOBJECT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_free_imagedataobject (mng_datap pData, mng_imagedatap pImagedata) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IMGDATAOBJECT, MNG_LC_START); #endif if (pImagedata->iRefcount) /* decrease reference count */ pImagedata->iRefcount--; if (!pImagedata->iRefcount) /* reached zero ? */ { #ifndef MNG_SKIPCHUNK_iCCP if (pImagedata->iProfilesize) /* stored an iCCP profile ? */ MNG_FREEX (pData, pImagedata->pProfile, pImagedata->iProfilesize); #endif if (pImagedata->iImgdatasize) /* sample-buffer present ? */ MNG_FREEX (pData, pImagedata->pImgdata, pImagedata->iImgdatasize); /* drop the buffer */ MNG_FREEX (pData, pImagedata, sizeof (mng_imagedata)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IMGDATAOBJECT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_clone_imagedataobject (mng_datap pData, mng_bool bConcrete, mng_imagedatap pSource, mng_imagedatap *ppClone) { mng_imagedatap pNewdata; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CLONE_IMGDATAOBJECT, MNG_LC_START); #endif /* get a buffer */ MNG_ALLOC (pData, pNewdata, sizeof (mng_imagedata)); /* blatently copy the original buffer */ MNG_COPY (pNewdata, pSource, sizeof (mng_imagedata)); pNewdata->iRefcount = 1; /* only the reference count */ pNewdata->bConcrete = bConcrete; /* and concrete-flag are different */ pNewdata->bFrozen = MNG_FALSE; if (pNewdata->iImgdatasize) /* sample buffer present ? */ { MNG_ALLOCX (pData, pNewdata->pImgdata, pNewdata->iImgdatasize); if (!pNewdata->pImgdata) /* not enough memory ? */ { MNG_FREEX (pData, pNewdata, sizeof (mng_imagedata)); MNG_ERROR (pData, MNG_OUTOFMEMORY); } /* make a copy */ MNG_COPY (pNewdata->pImgdata, pSource->pImgdata, pNewdata->iImgdatasize); } #ifndef MNG_SKIPCHUNK_iCCP if (pNewdata->iProfilesize) /* iCCP profile present ? */ { MNG_ALLOCX (pData, pNewdata->pProfile, pNewdata->iProfilesize); if (!pNewdata->pProfile) /* enough memory ? */ { MNG_FREEX (pData, pNewdata, sizeof (mng_imagedata)); MNG_ERROR (pData, MNG_OUTOFMEMORY); } /* make a copy */ MNG_COPY (pNewdata->pProfile, pSource->pProfile, pNewdata->iProfilesize); } #endif *ppClone = pNewdata; /* return the clone */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CLONE_IMGDATAOBJECT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ /* * * */ /* * Image-object routines * */ /* * * */ /* * these handle the "object" as defined by the MNG specification * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_create_imageobject (mng_datap pData, mng_uint16 iId, mng_bool bConcrete, mng_bool bVisible, mng_bool bViewable, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace, mng_int32 iPosx, mng_int32 iPosy, mng_bool bClipped, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb, mng_imagep *ppObject) { mng_imagep pImage; mng_imagep pPrev, pNext; mng_retcode iRetcode; mng_imagedatap pImgbuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_IMGOBJECT, MNG_LC_START); #endif /* get a buffer */ MNG_ALLOC (pData, pImage, sizeof (mng_image)); /* now get a new "object buffer" */ iRetcode = mng_create_imagedataobject (pData, bConcrete, bViewable, iWidth, iHeight, iBitdepth, iColortype, iCompression, iFilter, iInterlace, &pImgbuf); if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pImage, sizeof (mng_image)); return iRetcode; } /* fill the appropriate fields */ pImage->sHeader.fCleanup = (mng_cleanupobject)mng_free_imageobject; pImage->sHeader.fProcess = MNG_NULL; #ifdef MNG_OPTIMIZE_OBJCLEANUP pImage->sHeader.iObjsize = sizeof (mng_image); #endif pImage->iId = iId; pImage->bFrozen = MNG_FALSE; pImage->bVisible = bVisible; pImage->bViewable = bViewable; pImage->bValid = (mng_bool)((pData->bDisplaying) && ((pData->bRunning) || (pData->bSearching)) && (!pData->bFreezing)); pImage->iPosx = iPosx; pImage->iPosy = iPosy; pImage->bClipped = bClipped; pImage->iClipl = iClipl; pImage->iClipr = iClipr; pImage->iClipt = iClipt; pImage->iClipb = iClipb; #ifndef MNG_SKIPCHUNK_MAGN pImage->iMAGN_MethodX = 0; pImage->iMAGN_MethodY = 0; pImage->iMAGN_MX = 0; pImage->iMAGN_MY = 0; pImage->iMAGN_ML = 0; pImage->iMAGN_MR = 0; pImage->iMAGN_MT = 0; pImage->iMAGN_MB = 0; #endif #ifndef MNG_SKIPCHUNK_PAST pImage->iPastx = 0; pImage->iPasty = 0; #endif pImage->pImgbuf = pImgbuf; if (iId) /* only if not object 0 ! */ { /* find previous lower object-id */ pPrev = (mng_imagep)pData->pLastimgobj; while ((pPrev) && (pPrev->iId > iId)) pPrev = (mng_imagep)pPrev->sHeader.pPrev; if (pPrev) /* found it ? */ { pImage->sHeader.pPrev = pPrev; /* than link it in place */ pImage->sHeader.pNext = pPrev->sHeader.pNext; pPrev->sHeader.pNext = pImage; } else /* if not found, it becomes the first ! */ { pImage->sHeader.pNext = pData->pFirstimgobj; pData->pFirstimgobj = pImage; } pNext = (mng_imagep)pImage->sHeader.pNext; if (pNext) pNext->sHeader.pPrev = pImage; else pData->pLastimgobj = pImage; } *ppObject = pImage; /* and return the new buffer */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_IMGOBJECT, MNG_LC_END); #endif return MNG_NOERROR; /* okido */ } /* ************************************************************************** */ mng_retcode mng_free_imageobject (mng_datap pData, mng_imagep pImage) { mng_retcode iRetcode; mng_imagep pPrev = pImage->sHeader.pPrev; mng_imagep pNext = pImage->sHeader.pNext; mng_imagedatap pImgbuf = pImage->pImgbuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IMGOBJECT, MNG_LC_START); #endif if (pImage->iId) /* not for object 0 */ { if (pPrev) /* unlink from the list first ! */ pPrev->sHeader.pNext = pImage->sHeader.pNext; else pData->pFirstimgobj = pImage->sHeader.pNext; if (pNext) pNext->sHeader.pPrev = pImage->sHeader.pPrev; else pData->pLastimgobj = pImage->sHeader.pPrev; } /* unlink the image-data buffer */ iRetcode = mng_free_imagedataobject (pData, pImgbuf); /* drop its own buffer */ MNG_FREEX (pData, pImage, sizeof (mng_image)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IMGOBJECT, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ mng_imagep mng_find_imageobject (mng_datap pData, mng_uint16 iId) { mng_imagep pImage = (mng_imagep)pData->pFirstimgobj; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (pData, MNG_FN_FIND_IMGOBJECT, MNG_LC_START); #endif /* look up the right id */ while ((pImage) && (pImage->iId != iId)) pImage = (mng_imagep)pImage->sHeader.pNext; #ifdef MNG_INCLUDE_MPNG_PROPOSAL if ((!pImage) && (pData->eImagetype == mng_it_mpng)) pImage = pData->pObjzero; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (pData, MNG_FN_FIND_IMGOBJECT, MNG_LC_END); #endif return pImage; } /* ************************************************************************** */ mng_retcode mng_clone_imageobject (mng_datap pData, mng_uint16 iId, mng_bool bPartial, mng_bool bVisible, mng_bool bAbstract, mng_bool bHasloca, mng_uint8 iLocationtype, mng_int32 iLocationx, mng_int32 iLocationy, mng_imagep pSource, mng_imagep *ppClone) { mng_imagep pNew; mng_imagep pPrev, pNext; mng_retcode iRetcode; mng_imagedatap pImgbuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CLONE_IMGOBJECT, MNG_LC_START); #endif #ifndef MNG_SKIPCHUNK_MAGN if ((pSource->iId) && /* needs magnification ? */ ((pSource->iMAGN_MethodX) || (pSource->iMAGN_MethodY))) { iRetcode = mng_magnify_imageobject (pData, pSource); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* get a buffer */ #ifdef MNG_OPTIMIZE_OBJCLEANUP { mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_image), (mng_cleanupobject)mng_free_imageobject, MNG_NULL, &pTemp); if (iRetcode) return iRetcode; pNew = (mng_imagep)pTemp; } #else MNG_ALLOC (pData, pNew, sizeof (mng_image)); /* fill or copy the appropriate fields */ pNew->sHeader.fCleanup = (mng_cleanupobject)mng_free_imageobject; pNew->sHeader.fProcess = MNG_NULL; #endif pNew->iId = iId; pNew->bFrozen = MNG_FALSE; pNew->bVisible = bVisible; pNew->bViewable = pSource->bViewable; pNew->bValid = MNG_TRUE; if (bHasloca) /* location info available ? */ { if (iLocationtype == 0) /* absolute position ? */ { pNew->iPosx = iLocationx; pNew->iPosy = iLocationy; } else /* relative */ { pNew->iPosx = pSource->iPosx + iLocationx; pNew->iPosy = pSource->iPosy + iLocationy; } } else /* copy from source */ { pNew->iPosx = pSource->iPosx; pNew->iPosy = pSource->iPosy; } /* copy clipping info */ pNew->bClipped = pSource->bClipped; pNew->iClipl = pSource->iClipl; pNew->iClipr = pSource->iClipr; pNew->iClipt = pSource->iClipt; pNew->iClipb = pSource->iClipb; #ifndef MNG_SKIPCHUNK_MAGN /* copy magnification info */ /* pNew->iMAGN_MethodX = pSource->iMAGN_MethodX; LET'S NOT !!!!!! pNew->iMAGN_MethodY = pSource->iMAGN_MethodY; pNew->iMAGN_MX = pSource->iMAGN_MX; pNew->iMAGN_MY = pSource->iMAGN_MY; pNew->iMAGN_ML = pSource->iMAGN_ML; pNew->iMAGN_MR = pSource->iMAGN_MR; pNew->iMAGN_MT = pSource->iMAGN_MT; pNew->iMAGN_MB = pSource->iMAGN_MB; */ #endif #ifndef MNG_SKIPCHUNK_PAST pNew->iPastx = 0; /* initialize PAST info */ pNew->iPasty = 0; #endif if (iId) /* not for object 0 */ { /* find previous lower object-id */ pPrev = (mng_imagep)pData->pLastimgobj; while ((pPrev) && (pPrev->iId > iId)) pPrev = (mng_imagep)pPrev->sHeader.pPrev; if (pPrev) /* found it ? */ { pNew->sHeader.pPrev = pPrev; /* than link it in place */ pNew->sHeader.pNext = pPrev->sHeader.pNext; pPrev->sHeader.pNext = pNew; } else /* if not found, it becomes the first ! */ { pNew->sHeader.pNext = pData->pFirstimgobj; pData->pFirstimgobj = pNew; } pNext = (mng_imagep)pNew->sHeader.pNext; if (pNext) pNext->sHeader.pPrev = pNew; else pData->pLastimgobj = pNew; } if (bPartial) /* partial clone ? */ { pNew->pImgbuf = pSource->pImgbuf; /* use the same object buffer */ pNew->pImgbuf->iRefcount++; /* and increase the reference count */ } else /* create a full clone ! */ { mng_bool bConcrete = MNG_FALSE; /* it's abstract by default (?) */ if (!bAbstract) /* determine concreteness from source ? */ bConcrete = pSource->pImgbuf->bConcrete; /* create a full clone ! */ iRetcode = mng_clone_imagedataobject (pData, bConcrete, pSource->pImgbuf, &pImgbuf); if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pNew, sizeof (mng_image)); return iRetcode; } pNew->pImgbuf = pImgbuf; /* and remember it */ } *ppClone = pNew; /* return it */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CLONE_IMGOBJECT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_renum_imageobject (mng_datap pData, mng_imagep pSource, mng_uint16 iId, mng_bool bVisible, mng_bool bAbstract, mng_bool bHasloca, mng_uint8 iLocationtype, mng_int32 iLocationx, mng_int32 iLocationy) { mng_imagep pPrev, pNext; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RENUM_IMGOBJECT, MNG_LC_START); #endif pSource->bVisible = bVisible; /* store the new visibility */ if (bHasloca) /* location info available ? */ { if (iLocationtype == 0) /* absolute position ? */ { pSource->iPosx = iLocationx; pSource->iPosy = iLocationy; } else /* relative */ { pSource->iPosx = pSource->iPosx + iLocationx; pSource->iPosy = pSource->iPosy + iLocationy; } } if (iId) /* not for object 0 */ { /* find previous lower object-id */ pPrev = (mng_imagep)pData->pLastimgobj; while ((pPrev) && (pPrev->iId > iId)) pPrev = (mng_imagep)pPrev->sHeader.pPrev; /* different from current ? */ if (pPrev != (mng_imagep)pSource->sHeader.pPrev) { if (pSource->sHeader.pPrev) /* unlink from current position !! */ ((mng_imagep)pSource->sHeader.pPrev)->sHeader.pNext = pSource->sHeader.pNext; else pData->pFirstimgobj = pSource->sHeader.pNext; if (pSource->sHeader.pNext) ((mng_imagep)pSource->sHeader.pNext)->sHeader.pPrev = pSource->sHeader.pPrev; else pData->pLastimgobj = pSource->sHeader.pPrev; if (pPrev) /* found the previous ? */ { /* than link it in place */ pSource->sHeader.pPrev = pPrev; pSource->sHeader.pNext = pPrev->sHeader.pNext; pPrev->sHeader.pNext = pSource; } else /* if not found, it becomes the first ! */ { pSource->sHeader.pNext = pData->pFirstimgobj; pData->pFirstimgobj = pSource; } pNext = (mng_imagep)pSource->sHeader.pNext; if (pNext) pNext->sHeader.pPrev = pSource; else pData->pLastimgobj = pSource; } } pSource->iId = iId; /* now set the new id! */ if (bAbstract) /* force it to abstract ? */ pSource->pImgbuf->bConcrete = MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RENUM_IMGOBJECT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_reset_object_details (mng_datap pData, mng_imagep pImage, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace, mng_bool bResetall) { mng_imagedatap pBuf = pImage->pImgbuf; mng_uint32 iSamplesize = 0; mng_uint32 iRowsize; mng_uint32 iImgdatasize; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESET_OBJECTDETAILS, MNG_LC_START); #endif pBuf->iWidth = iWidth; /* set buffer characteristics */ pBuf->iHeight = iHeight; pBuf->iBitdepth = iBitdepth; pBuf->iColortype = iColortype; pBuf->iCompression = iCompression; pBuf->iFilter = iFilter; pBuf->iInterlace = iInterlace; pBuf->bCorrected = MNG_FALSE; pBuf->iAlphabitdepth = 0; /* determine samplesize from color_type/bit_depth */ switch (iColortype) /* for < 8-bit samples we just reserve 8 bits */ { case 0 : ; /* gray */ case 8 : { /* JPEG gray */ #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth > 8) iSamplesize = 2; else #endif iSamplesize = 1; break; } case 2 : ; /* rgb */ case 10 : { /* JPEG rgb */ #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth > 8) iSamplesize = 6; else #endif iSamplesize = 3; break; } case 3 : { /* indexed */ iSamplesize = 1; break; } case 4 : ; /* gray+alpha */ case 12 : { /* JPEG gray+alpha */ #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth > 8) iSamplesize = 4; else #endif iSamplesize = 2; break; } case 6 : ; /* rgb+alpha */ case 14 : { /* JPEG rgb+alpha */ #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth > 8) iSamplesize = 8; else #endif iSamplesize = 4; break; } } iRowsize = iSamplesize * iWidth; iImgdatasize = iRowsize * iHeight; /* buffer size changed ? */ if (iImgdatasize != pBuf->iImgdatasize) { /* drop the old one */ MNG_FREE (pData, pBuf->pImgdata, pBuf->iImgdatasize); if (iImgdatasize) /* allocate new sample-buffer ? */ MNG_ALLOC (pData, pBuf->pImgdata, iImgdatasize); } else { if (iImgdatasize) /* clear old buffer */ { mng_uint8p pTemp = pBuf->pImgdata; mng_uint32 iX; for (iX = 0; iX < (iImgdatasize & (mng_uint32)(~3L)); iX += 4) { *((mng_uint32p)pTemp) = 0x00000000l; pTemp += 4; } while (pTemp < (pBuf->pImgdata + iImgdatasize)) { *pTemp = 0; pTemp++; } } } pBuf->iSamplesize = iSamplesize; /* remember new sizes */ pBuf->iRowsize = iRowsize; pBuf->iImgdatasize = iImgdatasize; if (!pBuf->iPixelsampledepth) /* set delta sampledepths if empty */ pBuf->iPixelsampledepth = iBitdepth; if (!pBuf->iAlphasampledepth) pBuf->iAlphasampledepth = iBitdepth; /* dimension set and clipping not ? */ if ((iWidth) && (iHeight) && (!pImage->bClipped)) { pImage->iClipl = 0; /* set clipping to dimension by default */ pImage->iClipr = iWidth; pImage->iClipt = 0; pImage->iClipb = iHeight; } #ifndef MNG_SKIPCHUNK_MAGN if (pImage->iId) /* reset magnification info ? */ { pImage->iMAGN_MethodX = 0; pImage->iMAGN_MethodY = 0; pImage->iMAGN_MX = 0; pImage->iMAGN_MY = 0; pImage->iMAGN_ML = 0; pImage->iMAGN_MR = 0; pImage->iMAGN_MT = 0; pImage->iMAGN_MB = 0; } #endif if (bResetall) /* reset the other characteristics ? */ { #ifndef MNG_SKIPCHUNK_PAST pImage->iPastx = 0; pImage->iPasty = 0; #endif pBuf->bHasPLTE = MNG_FALSE; pBuf->bHasTRNS = MNG_FALSE; pBuf->bHasGAMA = pData->bHasglobalGAMA; #ifndef MNG_SKIPCHUNK_cHRM pBuf->bHasCHRM = pData->bHasglobalCHRM; #endif pBuf->bHasSRGB = pData->bHasglobalSRGB; #ifndef MNG_SKIPCHUNK_iCCP pBuf->bHasICCP = pData->bHasglobalICCP; #endif #ifndef MNG_SKIPCHUNK_bKGD pBuf->bHasBKGD = pData->bHasglobalBKGD; #endif #ifndef MNG_SKIPCHUNK_iCCP if (pBuf->iProfilesize) /* drop possibly old ICC profile */ { MNG_FREE (pData, pBuf->pProfile, pBuf->iProfilesize); pBuf->iProfilesize = 0; } #endif if (pData->bHasglobalGAMA) /* global gAMA present ? */ pBuf->iGamma = pData->iGlobalGamma; #ifndef MNG_SKIPCHUNK_cHRM if (pData->bHasglobalCHRM) /* global cHRM present ? */ { pBuf->iWhitepointx = pData->iGlobalWhitepointx; pBuf->iWhitepointy = pData->iGlobalWhitepointy; pBuf->iPrimaryredx = pData->iGlobalPrimaryredx; pBuf->iPrimaryredy = pData->iGlobalPrimaryredy; pBuf->iPrimarygreenx = pData->iGlobalPrimarygreenx; pBuf->iPrimarygreeny = pData->iGlobalPrimarygreeny; pBuf->iPrimarybluex = pData->iGlobalPrimarybluex; pBuf->iPrimarybluey = pData->iGlobalPrimarybluey; } #endif if (pData->bHasglobalSRGB) /* global sRGB present ? */ pBuf->iRenderingintent = pData->iGlobalRendintent; #ifndef MNG_SKIPCHUNK_iCCP if (pData->bHasglobalICCP) /* global iCCP present ? */ { if (pData->iGlobalProfilesize) { MNG_ALLOC (pData, pBuf->pProfile, pData->iGlobalProfilesize); MNG_COPY (pBuf->pProfile, pData->pGlobalProfile, pData->iGlobalProfilesize); } pBuf->iProfilesize = pData->iGlobalProfilesize; } #endif #ifndef MNG_SKIPCHUNK_bKGD if (pData->bHasglobalBKGD) /* global bKGD present ? */ { pBuf->iBKGDred = pData->iGlobalBKGDred; pBuf->iBKGDgreen = pData->iGlobalBKGDgreen; pBuf->iBKGDblue = pData->iGlobalBKGDblue; } #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESET_OBJECTDETAILS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #if !defined(MNG_NO_DELTA_PNG) || !defined(MNG_SKIPCHUNK_PAST) || !defined(MNG_SKIPCHUNK_MAGN) mng_retcode mng_promote_imageobject (mng_datap pData, mng_imagep pImage, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iFilltype) { mng_retcode iRetcode = MNG_NOERROR; mng_imagedatap pBuf = pImage->pImgbuf; mng_uint32 iW = pBuf->iWidth; mng_uint32 iH = pBuf->iHeight; mng_uint8p pNewbuf; mng_uint32 iNewbufsize; mng_uint32 iNewrowsize; mng_uint32 iNewsamplesize = pBuf->iSamplesize; mng_uint32 iY; mng_uint8 iTempdepth; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IMGOBJECT, MNG_LC_START); #endif #ifdef MNG_NO_1_2_4BIT_SUPPORT if (iBitdepth < 8) iBitdepth=8; if (pBuf->iBitdepth < 8) pBuf->iBitdepth=8; #endif #ifdef MNG_NO_16BIT_SUPPORT if (iBitdepth > 8) iBitdepth=8; if (pBuf->iBitdepth > 8) pBuf->iBitdepth=8; #endif pData->fPromoterow = MNG_NULL; /* init promotion fields */ pData->fPromBitdepth = MNG_NULL; pData->iPromColortype = iColortype; pData->iPromBitdepth = iBitdepth; pData->iPromFilltype = iFilltype; if (iBitdepth != pBuf->iBitdepth) /* determine bitdepth promotion */ { if (pBuf->iColortype == MNG_COLORTYPE_INDEXED) iTempdepth = 8; else iTempdepth = pBuf->iBitdepth; #ifndef MNG_NO_DELTA_PNG if (iFilltype == MNG_FILLMETHOD_ZEROFILL) { switch (iTempdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { switch (iBitdepth) { case 2 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_1_2; break; } case 4 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_1_4; break; } case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_1_8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_1_16; break; } #endif } break; } case 2 : { switch (iBitdepth) { case 4 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_2_4; break; } case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_2_8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_2_16; break; } #endif } break; } case 4 : { switch (iBitdepth) { case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_4_8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_4_16; break; } #endif } break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_8_16; #endif break; } } } else #endif { switch (iTempdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { switch (iBitdepth) { case 2 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_1_2; break; } case 4 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_1_4; break; } case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_1_8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_1_16; break; } #endif } break; } case 2 : { switch (iBitdepth) { case 4 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_2_4; break; } case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_2_8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_2_16; break; } #endif } break; } case 4 : { switch (iBitdepth) { case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_4_8; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_4_16; break; } #endif } break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_8_16; #endif break; } } } } /* g -> g */ if ((pBuf->iColortype == MNG_COLORTYPE_GRAY) && (iColortype == MNG_COLORTYPE_GRAY)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_g8_g16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_g8_g8; } iNewsamplesize = 1; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 2; #endif } else /* g -> ga */ if ((pBuf->iColortype == MNG_COLORTYPE_GRAY) && (iColortype == MNG_COLORTYPE_GRAYA)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_g8_ga16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_g8_ga8; } #ifndef MNG_NO_16BIT_SUPPORT else /* source = 16 bits */ pData->fPromoterow = (mng_fptr)mng_promote_g16_ga16; #endif iNewsamplesize = 2; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 4; #endif } else /* g -> rgb */ if ((pBuf->iColortype == MNG_COLORTYPE_GRAY) && (iColortype == MNG_COLORTYPE_RGB)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_g8_rgb16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_g8_rgb8; } #ifndef MNG_NO_16BIT_SUPPORT else /* source = 16 bits */ pData->fPromoterow = (mng_fptr)mng_promote_g16_rgb16; #endif iNewsamplesize = 3; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 6; #endif } else /* g -> rgba */ if ((pBuf->iColortype == MNG_COLORTYPE_GRAY) && (iColortype == MNG_COLORTYPE_RGBA)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_g8_rgba16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_g8_rgba8; } #ifndef MNG_NO_16BIT_SUPPORT else /* source = 16 bits */ pData->fPromoterow = (mng_fptr)mng_promote_g16_rgba16; #endif iNewsamplesize = 4; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 8; #endif } else /* ga -> ga */ if ((pBuf->iColortype == MNG_COLORTYPE_GRAYA) && (iColortype == MNG_COLORTYPE_GRAYA)) { iNewsamplesize = 2; #ifndef MNG_NO_16BIT_SUPPORT if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_ga8_ga16; if (iBitdepth == 16) iNewsamplesize = 4; #endif } else /* ga -> rgba */ if ((pBuf->iColortype == MNG_COLORTYPE_GRAYA) && (iColortype == MNG_COLORTYPE_RGBA)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_ga8_rgba16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_ga8_rgba8; } #ifndef MNG_NO_16BIT_SUPPORT else /* source = 16 bits */ pData->fPromoterow = (mng_fptr)mng_promote_ga16_rgba16; #endif iNewsamplesize = 4; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 8; #endif } else /* rgb -> rgb */ if ((pBuf->iColortype == MNG_COLORTYPE_RGB) && (iColortype == MNG_COLORTYPE_RGB)) { iNewsamplesize = 3; #ifndef MNG_NO_16BIT_SUPPORT if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgb16; if (iBitdepth == 16) iNewsamplesize = 6; #endif } else /* rgb -> rgba */ if ((pBuf->iColortype == MNG_COLORTYPE_RGB) && (iColortype == MNG_COLORTYPE_RGBA)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgba16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgba8; } #ifndef MNG_NO_16BIT_SUPPORT else /* source = 16 bits */ pData->fPromoterow = (mng_fptr)mng_promote_rgb16_rgba16; #endif iNewsamplesize = 4; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 8; #endif } else /* indexed -> rgb */ if ((pBuf->iColortype == MNG_COLORTYPE_INDEXED) && (iColortype == MNG_COLORTYPE_RGB)) { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_idx8_rgb16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_idx8_rgb8; iNewsamplesize = 3; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 6; #endif } else /* indexed -> rgba */ if ((pBuf->iColortype == MNG_COLORTYPE_INDEXED) && (iColortype == MNG_COLORTYPE_RGBA)) { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_idx8_rgba16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_idx8_rgba8; iNewsamplesize = 4; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 8; #endif } else /* rgba -> rgba */ if ((pBuf->iColortype == MNG_COLORTYPE_RGBA) && (iColortype == MNG_COLORTYPE_RGBA)) { iNewsamplesize = 4; #ifndef MNG_NO_16BIT_SUPPORT if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_rgba8_rgba16; } if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 8; #endif } #ifdef MNG_INCLUDE_JNG else /* JPEG g -> g */ if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAY) && (iColortype == MNG_COLORTYPE_JPEGGRAY)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_g8_g16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_g8_g8; } iNewsamplesize = 1; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 2; #endif } else /* JPEG g -> ga */ if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAY) && (iColortype == MNG_COLORTYPE_JPEGGRAYA)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_g8_ga16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_g8_ga8; } #ifndef MNG_NO_16BIT_SUPPORT else /* source = 16 bits */ pData->fPromoterow = (mng_fptr)mng_promote_g16_ga16; #endif iNewsamplesize = 2; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 4; #endif } else /* JPEG g -> rgb */ if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAY) && (iColortype == MNG_COLORTYPE_JPEGCOLOR)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_g8_rgb16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_g8_rgb8; } #ifndef MNG_NO_16BIT_SUPPORT else /* source = 16 bits */ pData->fPromoterow = (mng_fptr)mng_promote_g16_rgb16; #endif iNewsamplesize = 3; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 6; #endif } else /* JPEG g -> rgba */ if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAY) && (iColortype == MNG_COLORTYPE_JPEGCOLORA)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_g8_rgba16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_g8_rgba8; } #ifndef MNG_NO_16BIT_SUPPORT else /* source = 16 bits */ pData->fPromoterow = (mng_fptr)mng_promote_g16_rgba16; #endif iNewsamplesize = 4; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 8; #endif } else /* JPEG ga -> ga */ if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAYA) && (iColortype == MNG_COLORTYPE_JPEGGRAYA)) { iNewsamplesize = 2; #ifndef MNG_NO_16BIT_SUPPORT if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_ga8_ga16; if (iBitdepth == 16) iNewsamplesize = 4; #endif } else /* JPEG ga -> rgba */ if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAYA) && (iColortype == MNG_COLORTYPE_JPEGCOLORA)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_ga8_rgba16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_ga8_rgba8; } #ifndef MNG_NO_16BIT_SUPPORT else /* source = 16 bits */ pData->fPromoterow = (mng_fptr)mng_promote_ga16_rgba16; #endif iNewsamplesize = 4; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 8; #endif } else /* JPEG rgb -> rgb */ if ((pBuf->iColortype == MNG_COLORTYPE_JPEGCOLOR) && (iColortype == MNG_COLORTYPE_JPEGCOLOR)) { iNewsamplesize = 3; #ifndef MNG_NO_16BIT_SUPPORT if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgb16; if (iBitdepth == 16) iNewsamplesize = 6; #endif } else /* JPEG rgb -> rgba */ if ((pBuf->iColortype == MNG_COLORTYPE_JPEGCOLOR) && (iColortype == MNG_COLORTYPE_JPEGCOLORA)) { if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ { #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgba16; else #endif pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgba8; } #ifndef MNG_NO_16BIT_SUPPORT else /* source = 16 bits */ pData->fPromoterow = (mng_fptr)mng_promote_rgb16_rgba16; #endif iNewsamplesize = 4; #ifndef MNG_NO_16BIT_SUPPORT if (iBitdepth == 16) /* 16-bit wide ? */ iNewsamplesize = 8; #endif } else /* JPEG rgba -> rgba */ if ((pBuf->iColortype == MNG_COLORTYPE_JPEGCOLORA) && (iColortype == MNG_COLORTYPE_JPEGCOLORA)) { iNewsamplesize = 4; #ifndef MNG_NO_16BIT_SUPPORT if (pBuf->iBitdepth <= 8) /* source <= 8 bits */ if (iBitdepth == 16) pData->fPromoterow = (mng_fptr)mng_promote_rgba8_rgba16; if (iBitdepth == 16) iNewsamplesize = 8; #endif } #endif /* JNG */ /* found a proper promotion ? */ if (pData->fPromoterow) { pData->pPromBuf = (mng_ptr)pBuf; pData->iPromWidth = pBuf->iWidth; iNewrowsize = iW * iNewsamplesize; iNewbufsize = iH * iNewrowsize; MNG_ALLOC (pData, pNewbuf, iNewbufsize); pData->pPromSrc = (mng_ptr)pBuf->pImgdata; pData->pPromDst = (mng_ptr)pNewbuf; iY = 0; while ((!iRetcode) && (iY < iH)) { iRetcode = ((mng_promoterow)pData->fPromoterow) (pData); pData->pPromSrc = (mng_uint8p)pData->pPromSrc + pBuf->iRowsize; pData->pPromDst = (mng_uint8p)pData->pPromDst + iNewrowsize; /* pData->pPromSrc = (mng_ptr)((mng_uint32)pData->pPromSrc + pBuf->iRowsize); */ /* pData->pPromDst = (mng_ptr)((mng_uint32)pData->pPromDst + iNewrowsize); */ iY++; } MNG_FREEX (pData, pBuf->pImgdata, pBuf->iImgdatasize); pBuf->iBitdepth = iBitdepth; pBuf->iColortype = iColortype; pBuf->iSamplesize = iNewsamplesize; pBuf->iRowsize = iNewrowsize; pBuf->iImgdatasize = iNewbufsize; pBuf->pImgdata = pNewbuf; pBuf->bHasPLTE = MNG_FALSE; pBuf->iPLTEcount = 0; pBuf->bHasTRNS = MNG_FALSE; pBuf->iTRNScount = 0; if (iRetcode) /* on error bail out */ return iRetcode; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IMGOBJECT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MAGN mng_retcode mng_magnify_imageobject (mng_datap pData, mng_imagep pImage) { mng_uint8p pNewdata; mng_uint8p pSrcline1; mng_uint8p pSrcline2; mng_uint8p pTempline; mng_uint8p pDstline; mng_uint32 iNewrowsize; mng_uint32 iNewsize; mng_uint32 iY; mng_int32 iS, iM; mng_retcode iRetcode; mng_imagedatap pBuf = pImage->pImgbuf; mng_uint32 iNewW = pBuf->iWidth; mng_uint32 iNewH = pBuf->iHeight; mng_magnify_x fMagnifyX = MNG_NULL; mng_magnify_y fMagnifyY = MNG_NULL; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_IMGOBJECT, MNG_LC_START); #endif if (pBuf->iColortype == MNG_COLORTYPE_INDEXED) /* indexed color ? */ { /* concrete buffer ? */ if ((pBuf->bConcrete) && (pImage->iId)) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN if (pBuf->iTRNScount) /* with transparency ? */ iRetcode = mng_promote_imageobject (pData, pImage, 8, 6, 0); else iRetcode = mng_promote_imageobject (pData, pImage, 8, 2, 0); if (iRetcode) /* on error bail out */ return iRetcode; #endif } #ifdef MNG_OPTIMIZE_FOOTPRINT_MAGN /* Promote everything to RGBA, using fill method 0 (LBR) */ iRetcode = mng_promote_imageobject (pData, pImage, 8, 6, 0); if (iRetcode) /* on error bail out */ return iRetcode; #endif if (pImage->iMAGN_MethodX) /* determine new width */ { if (pImage->iMAGN_MethodX == 1) { iNewW = pImage->iMAGN_ML; if (pBuf->iWidth > 1) iNewW = iNewW + pImage->iMAGN_MR; if (pBuf->iWidth > 2) iNewW = iNewW + (pBuf->iWidth - 2) * (pImage->iMAGN_MX); } else { iNewW = pBuf->iWidth + pImage->iMAGN_ML - 1; if (pBuf->iWidth > 2) iNewW = iNewW + pImage->iMAGN_MR - 1; if (pBuf->iWidth > 3) iNewW = iNewW + (pBuf->iWidth - 3) * (pImage->iMAGN_MX - 1); } } if (pImage->iMAGN_MethodY) /* determine new height */ { if (pImage->iMAGN_MethodY == 1) { iNewH = pImage->iMAGN_MT; if (pBuf->iHeight > 1) iNewH = iNewH + pImage->iMAGN_ML; if (pBuf->iHeight > 2) iNewH = iNewH + (pBuf->iHeight - 2) * (pImage->iMAGN_MY); } else { iNewH = pBuf->iHeight + pImage->iMAGN_MT - 1; if (pBuf->iHeight > 2) iNewH = iNewH + pImage->iMAGN_MB - 1; if (pBuf->iHeight > 3) iNewH = iNewH + (pBuf->iHeight - 3) * (pImage->iMAGN_MY - 1); } } /* get new buffer */ iNewrowsize = iNewW * pBuf->iSamplesize; iNewsize = iNewH * iNewrowsize; MNG_ALLOC (pData, pNewdata, iNewsize); switch (pBuf->iColortype) /* determine magnification routines */ { #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN case 0 : ; case 8 : { if (pBuf->iBitdepth <= 8) { switch (pImage->iMAGN_MethodX) { case 1 : { fMagnifyX = mng_magnify_g8_x1; break; } case 2 : { fMagnifyX = mng_magnify_g8_x2; break; } case 3 : { fMagnifyX = mng_magnify_g8_x3; break; } case 4 : { fMagnifyX = mng_magnify_g8_x2; break; } case 5 : { fMagnifyX = mng_magnify_g8_x3; break; } } switch (pImage->iMAGN_MethodY) { case 1 : { fMagnifyY = mng_magnify_g8_y1; break; } case 2 : { fMagnifyY = mng_magnify_g8_y2; break; } case 3 : { fMagnifyY = mng_magnify_g8_y3; break; } case 4 : { fMagnifyY = mng_magnify_g8_y2; break; } case 5 : { fMagnifyY = mng_magnify_g8_y3; break; } } } #ifndef MNG_NO_16BIT_SUPPORT else { switch (pImage->iMAGN_MethodX) { case 1 : { fMagnifyX = mng_magnify_g16_x1; break; } case 2 : { fMagnifyX = mng_magnify_g16_x2; break; } case 3 : { fMagnifyX = mng_magnify_g16_x3; break; } case 4 : { fMagnifyX = mng_magnify_g16_x2; break; } case 5 : { fMagnifyX = mng_magnify_g16_x3; break; } } switch (pImage->iMAGN_MethodY) { case 1 : { fMagnifyY = mng_magnify_g16_y1; break; } case 2 : { fMagnifyY = mng_magnify_g16_y2; break; } case 3 : { fMagnifyY = mng_magnify_g16_y3; break; } case 4 : { fMagnifyY = mng_magnify_g16_y2; break; } case 5 : { fMagnifyY = mng_magnify_g16_y3; break; } } } #endif break; } case 2 : ; case 10 : { if (pBuf->iBitdepth <= 8) { switch (pImage->iMAGN_MethodX) { case 1 : { fMagnifyX = mng_magnify_rgb8_x1; break; } case 2 : { fMagnifyX = mng_magnify_rgb8_x2; break; } case 3 : { fMagnifyX = mng_magnify_rgb8_x3; break; } case 4 : { fMagnifyX = mng_magnify_rgb8_x2; break; } case 5 : { fMagnifyX = mng_magnify_rgb8_x3; break; } } switch (pImage->iMAGN_MethodY) { case 1 : { fMagnifyY = mng_magnify_rgb8_y1; break; } case 2 : { fMagnifyY = mng_magnify_rgb8_y2; break; } case 3 : { fMagnifyY = mng_magnify_rgb8_y3; break; } case 4 : { fMagnifyY = mng_magnify_rgb8_y2; break; } case 5 : { fMagnifyY = mng_magnify_rgb8_y3; break; } } } #ifndef MNG_NO_16BIT_SUPPORT else { switch (pImage->iMAGN_MethodX) { case 1 : { fMagnifyX = mng_magnify_rgb16_x1; break; } case 2 : { fMagnifyX = mng_magnify_rgb16_x2; break; } case 3 : { fMagnifyX = mng_magnify_rgb16_x3; break; } case 4 : { fMagnifyX = mng_magnify_rgb16_x2; break; } case 5 : { fMagnifyX = mng_magnify_rgb16_x3; break; } } switch (pImage->iMAGN_MethodY) { case 1 : { fMagnifyY = mng_magnify_rgb16_y1; break; } case 2 : { fMagnifyY = mng_magnify_rgb16_y2; break; } case 3 : { fMagnifyY = mng_magnify_rgb16_y3; break; } case 4 : { fMagnifyY = mng_magnify_rgb16_y2; break; } case 5 : { fMagnifyY = mng_magnify_rgb16_y3; break; } } } #endif break; } case 4 : ; case 12 : { if (pBuf->iBitdepth <= 8) { switch (pImage->iMAGN_MethodX) { case 1 : { fMagnifyX = mng_magnify_ga8_x1; break; } case 2 : { fMagnifyX = mng_magnify_ga8_x2; break; } case 3 : { fMagnifyX = mng_magnify_ga8_x3; break; } case 4 : { fMagnifyX = mng_magnify_ga8_x4; break; } case 5 : { fMagnifyX = mng_magnify_ga8_x5; break; } } switch (pImage->iMAGN_MethodY) { case 1 : { fMagnifyY = mng_magnify_ga8_y1; break; } case 2 : { fMagnifyY = mng_magnify_ga8_y2; break; } case 3 : { fMagnifyY = mng_magnify_ga8_y3; break; } case 4 : { fMagnifyY = mng_magnify_ga8_y4; break; } case 5 : { fMagnifyY = mng_magnify_ga8_y5; break; } } } #ifndef MNG_NO_16BIT_SUPPORT else { switch (pImage->iMAGN_MethodX) { case 1 : { fMagnifyX = mng_magnify_ga16_x1; break; } case 2 : { fMagnifyX = mng_magnify_ga16_x2; break; } case 3 : { fMagnifyX = mng_magnify_ga16_x3; break; } case 4 : { fMagnifyX = mng_magnify_ga16_x4; break; } case 5 : { fMagnifyX = mng_magnify_ga16_x5; break; } } switch (pImage->iMAGN_MethodY) { case 1 : { fMagnifyY = mng_magnify_ga16_y1; break; } case 2 : { fMagnifyY = mng_magnify_ga16_y2; break; } case 3 : { fMagnifyY = mng_magnify_ga16_y3; break; } case 4 : { fMagnifyY = mng_magnify_ga16_y4; break; } case 5 : { fMagnifyY = mng_magnify_ga16_y5; break; } } } #endif break; } #endif case 6 : ; case 14 : { if (pBuf->iBitdepth <= 8) { switch (pImage->iMAGN_MethodX) { case 1 : { fMagnifyX = mng_magnify_rgba8_x1; break; } case 2 : { fMagnifyX = mng_magnify_rgba8_x2; break; } case 3 : { fMagnifyX = mng_magnify_rgba8_x3; break; } case 4 : { fMagnifyX = mng_magnify_rgba8_x4; break; } case 5 : { fMagnifyX = mng_magnify_rgba8_x5; break; } } switch (pImage->iMAGN_MethodY) { case 1 : { fMagnifyY = mng_magnify_rgba8_y1; break; } case 2 : { fMagnifyY = mng_magnify_rgba8_y2; break; } case 3 : { fMagnifyY = mng_magnify_rgba8_y3; break; } case 4 : { fMagnifyY = mng_magnify_rgba8_y4; break; } case 5 : { fMagnifyY = mng_magnify_rgba8_y5; break; } } } #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN else { switch (pImage->iMAGN_MethodX) { case 1 : { fMagnifyX = mng_magnify_rgba16_x1; break; } case 2 : { fMagnifyX = mng_magnify_rgba16_x2; break; } case 3 : { fMagnifyX = mng_magnify_rgba16_x3; break; } case 4 : { fMagnifyX = mng_magnify_rgba16_x4; break; } case 5 : { fMagnifyX = mng_magnify_rgba16_x5; break; } } switch (pImage->iMAGN_MethodY) { case 1 : { fMagnifyY = mng_magnify_rgba16_y1; break; } case 2 : { fMagnifyY = mng_magnify_rgba16_y2; break; } case 3 : { fMagnifyY = mng_magnify_rgba16_y3; break; } case 4 : { fMagnifyY = mng_magnify_rgba16_y4; break; } case 5 : { fMagnifyY = mng_magnify_rgba16_y5; break; } } } #endif #endif break; } } pSrcline1 = pBuf->pImgdata; /* initialize row-loop variables */ pDstline = pNewdata; /* allocate temporary row */ MNG_ALLOC (pData, pTempline, iNewrowsize); for (iY = 0; iY < pBuf->iHeight; iY++) { pSrcline2 = pSrcline1 + pBuf->iRowsize; if (fMagnifyX) /* magnifying in X-direction ? */ { iRetcode = fMagnifyX (pData, pImage->iMAGN_MX, pImage->iMAGN_ML, pImage->iMAGN_MR, pBuf->iWidth, pSrcline1, pDstline); if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pTempline, iNewrowsize); MNG_FREEX (pData, pNewdata, iNewsize); return iRetcode; } } else { MNG_COPY (pDstline, pSrcline1, iNewrowsize); } pDstline += iNewrowsize; /* magnifying in Y-direction ? */ if ((fMagnifyY) && ((iY < pBuf->iHeight - 1) || (pBuf->iHeight == 1) || (pImage->iMAGN_MethodY == 1))) { if (iY == 0) /* first interval ? */ { if (pBuf->iHeight == 1) /* single row ? */ pSrcline2 = MNG_NULL; iM = (mng_int32)pImage->iMAGN_MT; } else /* last interval ? */ if (((pImage->iMAGN_MethodY == 1) && (iY == (pBuf->iHeight - 1))) || ((pImage->iMAGN_MethodY != 1) && (iY == (pBuf->iHeight - 2))) ) iM = (mng_int32)pImage->iMAGN_MB; else /* middle interval */ iM = (mng_int32)pImage->iMAGN_MY; for (iS = 1; iS < iM; iS++) { iRetcode = fMagnifyY (pData, iS, iM, pBuf->iWidth, pSrcline1, pSrcline2, pTempline); if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pTempline, iNewrowsize); MNG_FREEX (pData, pNewdata, iNewsize); return iRetcode; } if (fMagnifyX) /* magnifying in X-direction ? */ { iRetcode = fMagnifyX (pData, pImage->iMAGN_MX, pImage->iMAGN_ML, pImage->iMAGN_MR, pBuf->iWidth, pTempline, pDstline); if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pTempline, iNewrowsize); MNG_FREEX (pData, pNewdata, iNewsize); return iRetcode; } } else { MNG_COPY (pDstline, pTempline, iNewrowsize); } pDstline += iNewrowsize; } } pSrcline1 += pBuf->iRowsize; } /* drop temporary row */ MNG_FREEX (pData, pTempline, iNewrowsize); /* drop old pixel-data */ MNG_FREEX (pData, pBuf->pImgdata, pBuf->iImgdatasize); pBuf->pImgdata = pNewdata; /* save new buffer dimensions */ pBuf->iRowsize = iNewrowsize; pBuf->iImgdatasize = iNewsize; pBuf->iWidth = iNewW; pBuf->iHeight = iNewH; if (pImage->iId) /* real object ? */ { pImage->iMAGN_MethodX = 0; /* it's done; don't do it again !!! */ pImage->iMAGN_MethodY = 0; pImage->iMAGN_MX = 0; pImage->iMAGN_MY = 0; pImage->iMAGN_ML = 0; pImage->iMAGN_MR = 0; pImage->iMAGN_MT = 0; pImage->iMAGN_MB = 0; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_IMGOBJECT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_colorcorrect_object (mng_datap pData, mng_imagep pImage) { mng_imagedatap pBuf = pImage->pImgbuf; mng_retcode iRetcode; mng_uint32 iY; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_COLORCORRECT_OBJECT, MNG_LC_START); #endif #ifdef MNG_INCLUDE_JNG if ((pBuf->iBitdepth < 8) || /* we need 8- or 16-bit RGBA !!! */ ((pBuf->iColortype != MNG_COLORTYPE_RGBA ) && (pBuf->iColortype != MNG_COLORTYPE_JPEGCOLORA) )) #else if (pBuf->iBitdepth < 8) /* we need 8- or 16-bit RGBA !!! */ #endif MNG_ERROR (pData, MNG_OBJNOTABSTRACT); if (!pBuf->bCorrected) /* only if not already done ! */ { /* so the row routines now to find it */ pData->pRetrieveobj = (mng_objectp)pImage; pData->pStoreobj = (mng_objectp)pImage; pData->pStorebuf = (mng_objectp)pImage->pImgbuf; #ifndef MNG_NO_16BIT_SUPPORT if (pBuf->iBitdepth > 8) { pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba16; pData->fStorerow = (mng_fptr)mng_store_rgba16; } else #endif { pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba8; pData->fStorerow = (mng_fptr)mng_store_rgba8; } pData->bIsOpaque = MNG_FALSE; pData->iPass = -1; /* these are the object's dimensions now */ pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pBuf->iWidth; pData->iRowsize = pData->iRowsamples << 2; pData->iPixelofs = 0; pData->bIsRGBA16 = MNG_FALSE; /* adjust for 16-bit object ? */ #ifndef MNG_NO_16BIT_SUPPORT if (pBuf->iBitdepth > 8) { pData->bIsRGBA16 = MNG_TRUE; pData->iRowsize = pData->iRowsamples << 3; } #endif pData->fCorrectrow = MNG_NULL; /* default no color-correction */ #ifdef MNG_NO_CMS iRetcode = MNG_NOERROR; #else #if defined(MNG_FULL_CMS) /* determine color-management routine */ iRetcode = mng_init_full_cms (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #elif defined(MNG_GAMMA_ONLY) iRetcode = mng_init_gamma_only (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #elif defined(MNG_APP_CMS) iRetcode = mng_init_app_cms (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE); #endif if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_NO_CMS */ if (pData->fCorrectrow) /* really correct something ? */ { /* get a temporary row-buffer */ MNG_ALLOC (pData, pData->pRGBArow, pData->iRowsize); pData->pWorkrow = pData->pRGBArow; iY = 0; /* start from the top */ while ((!iRetcode) && (iY < pBuf->iHeight)) { /* get a row */ iRetcode = ((mng_retrieverow)pData->fRetrieverow) (pData); if (!iRetcode) /* color correct it */ iRetcode = ((mng_correctrow)pData->fCorrectrow) (pData); if (!iRetcode) /* store it back ! */ iRetcode = ((mng_storerow)pData->fStorerow) (pData); if (!iRetcode) /* adjust variables for next row */ iRetcode = mng_next_row (pData); iY++; /* and next line */ } /* drop the temporary row-buffer */ MNG_FREEX (pData, pData->pRGBArow, pData->iRowsize); if (iRetcode) /* on error bail out */ return iRetcode; #if defined(MNG_FULL_CMS) /* cleanup cms stuff */ iRetcode = mng_clear_cms (pData); if (iRetcode) /* on error bail out */ return iRetcode; #endif } pBuf->bCorrected = MNG_TRUE; /* let's not go through that again ! */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_COLORCORRECT_OBJECT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ /* * * */ /* * Animation-object routines * */ /* * * */ /* * these handle the animation objects used to re-run parts of a MNG. * */ /* * eg. during LOOP or TERM processing * */ /* * * */ /* ************************************************************************** */ void mng_add_ani_object (mng_datap pData, mng_object_headerp pObject) { mng_object_headerp pLast = (mng_object_headerp)pData->pLastaniobj; if (pLast) /* link it as last in the chain */ { pObject->pPrev = pLast; pLast->pNext = pObject; } else { pObject->pPrev = MNG_NULL; /* be on the safe side */ pData->pFirstaniobj = pObject; } pObject->pNext = MNG_NULL; /* be on the safe side */ pData->pLastaniobj = pObject; /* keep track for jumping */ pObject->iFramenr = pData->iFrameseq; pObject->iLayernr = pData->iLayerseq; pObject->iPlaytime = pData->iFrametime; /* save restart object ? */ if ((pData->bDisplaying) && (!pData->bRunning) && (!pData->pCurraniobj)) pData->pCurraniobj = pObject; return; } /* ************************************************************************** */ /* ************************************************************************** */ mng_retcode mng_create_ani_image (mng_datap pData) { mng_ani_imagep pImage; mng_imagep pCurrent; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_IMAGE, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* processing delta-image ? */ pCurrent = (mng_imagep)pData->pObjzero; else /* get the current object */ #endif pCurrent = (mng_imagep)pData->pCurrentobj; if (!pCurrent) /* otherwise object 0 */ pCurrent = (mng_imagep)pData->pObjzero; /* now just clone the object !!! */ iRetcode = mng_clone_imageobject (pData, 0, MNG_FALSE, pCurrent->bVisible, MNG_FALSE, MNG_FALSE, 0, 0, 0, pCurrent, &pImage); if (iRetcode) /* on error bail out */ return iRetcode; pImage->sHeader.fCleanup = mng_free_ani_image; pImage->sHeader.fProcess = mng_process_ani_image; mng_add_ani_object (pData, (mng_object_headerp)pImage); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_IMAGE, MNG_LC_END); #endif return MNG_NOERROR; /* okido */ } /* ************************************************************************** */ mng_retcode mng_free_ani_image (mng_datap pData, mng_objectp pObject) { mng_ani_imagep pImage = (mng_ani_imagep)pObject; mng_imagedatap pImgbuf = pImage->pImgbuf; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_IMAGE, MNG_LC_START); #endif /* unlink the image-data buffer */ iRetcode = mng_free_imagedataobject (pData, pImgbuf); /* drop its own buffer */ MNG_FREEX (pData, pImage, sizeof (mng_ani_image)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_IMAGE, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ mng_retcode mng_process_ani_image (mng_datap pData, mng_objectp pObject) { mng_retcode iRetcode = MNG_NOERROR; mng_ani_imagep pImage = (mng_imagep)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IMAGE, MNG_LC_START); #endif #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* processing delta-image ? */ { mng_imagep pDelta = (mng_imagep)pData->pDeltaImage; if (!pData->iBreakpoint) /* only execute if not broken before */ { /* make sure to process pixels as well */ pData->bDeltaimmediate = MNG_FALSE; /* execute the delta process */ iRetcode = mng_execute_delta_image (pData, pDelta, (mng_imagep)pObject); if (iRetcode) /* on error bail out */ return iRetcode; } /* now go and shoot it off (if required) */ if ((pDelta->bVisible) && (pDelta->bViewable)) iRetcode = mng_display_image (pData, pDelta, MNG_FALSE); if (!pData->bTimerset) pData->bHasDHDR = MNG_FALSE; /* this image signifies IEND !! */ } else #endif if (pData->pCurrentobj) /* active object ? */ { mng_imagep pCurrent = (mng_imagep)pData->pCurrentobj; mng_imagedatap pBuf = pCurrent->pImgbuf; if (!pData->iBreakpoint) /* don't copy it again ! */ { if (pBuf->iImgdatasize) /* buffer present in active object ? */ /* then drop it */ MNG_FREE (pData, pBuf->pImgdata, pBuf->iImgdatasize); #ifndef MNG_SKIPCHUNK_iCCP if (pBuf->iProfilesize) /* iCCP profile present ? */ /* then drop it */ MNG_FREE (pData, pBuf->pProfile, pBuf->iProfilesize); #endif /* now blatently copy the animation buffer */ MNG_COPY (pBuf, pImage->pImgbuf, sizeof (mng_imagedata)); /* copy viewability */ pCurrent->bViewable = pImage->bViewable; if (pBuf->iImgdatasize) /* sample buffer present ? */ { /* then make a copy */ MNG_ALLOC (pData, pBuf->pImgdata, pBuf->iImgdatasize); MNG_COPY (pBuf->pImgdata, pImage->pImgbuf->pImgdata, pBuf->iImgdatasize); } #ifndef MNG_SKIPCHUNK_iCCP if (pBuf->iProfilesize) /* iCCP profile present ? */ { /* then make a copy */ MNG_ALLOC (pData, pBuf->pProfile, pBuf->iProfilesize); MNG_COPY (pBuf->pProfile, pImage->pImgbuf->pProfile, pBuf->iProfilesize); } #endif } /* now go and shoot it off (if required) */ if ((pCurrent->bVisible) && (pCurrent->bViewable)) iRetcode = mng_display_image (pData, pCurrent, MNG_FALSE); } else { mng_imagep pObjzero = (mng_imagep)pData->pObjzero; mng_imagedatap pBuf = pObjzero->pImgbuf; if (!pData->iBreakpoint) /* don't copy it again ! */ { if (pBuf->iImgdatasize) /* buffer present in active object ? */ /* then drop it */ MNG_FREE (pData, pBuf->pImgdata, pBuf->iImgdatasize); #ifndef MNG_SKIPCHUNK_iCCP if (pBuf->iProfilesize) /* iCCP profile present ? */ /* then drop it */ MNG_FREE (pData, pBuf->pProfile, pBuf->iProfilesize); #endif /* now blatently copy the animation buffer */ MNG_COPY (pBuf, pImage->pImgbuf, sizeof (mng_imagedata)); /* copy viewability */ pObjzero->bViewable = pImage->bViewable; if (pBuf->iImgdatasize) /* sample buffer present ? */ { /* then make a copy */ MNG_ALLOC (pData, pBuf->pImgdata, pBuf->iImgdatasize); MNG_COPY (pBuf->pImgdata, pImage->pImgbuf->pImgdata, pBuf->iImgdatasize); } #ifndef MNG_SKIPCHUNK_iCCP if (pBuf->iProfilesize) /* iCCP profile present ? */ { /* then make a copy */ MNG_ALLOC (pData, pBuf->pProfile, pBuf->iProfilesize); MNG_COPY (pBuf->pProfile, pImage->pImgbuf->pProfile, pBuf->iProfilesize); } #endif } /* now go and show it */ iRetcode = mng_display_image (pData, pObjzero, MNG_FALSE); } if (!iRetcode) /* all's well ? */ { if (pData->bTimerset) /* timer break ? */ pData->iBreakpoint = 99; /* fictive number; no more processing needed! */ else pData->iBreakpoint = 0; /* else clear it */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IMAGE, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_plte (mng_datap pData, mng_uint32 iEntrycount, mng_palette8ep paEntries) #else mng_retcode mng_create_ani_plte (mng_datap pData) #endif { mng_ani_pltep pPLTE; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_PLTE, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_plte), mng_free_obj_general, mng_process_ani_plte, &pTemp); if (iRetcode) return iRetcode; pPLTE = (mng_ani_pltep)pTemp; #else MNG_ALLOC (pData, pPLTE, sizeof (mng_ani_plte)); pPLTE->sHeader.fCleanup = mng_free_ani_plte; pPLTE->sHeader.fProcess = mng_process_ani_plte; #endif mng_add_ani_object (pData, (mng_object_headerp)pPLTE); #ifndef MNG_OPTIMIZE_CHUNKREADER pPLTE->iEntrycount = iEntrycount; MNG_COPY (pPLTE->aEntries, paEntries, sizeof (pPLTE->aEntries)); #else pPLTE->iEntrycount = pData->iGlobalPLTEcount; MNG_COPY (pPLTE->aEntries, pData->aGlobalPLTEentries, sizeof (pPLTE->aEntries)); #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_PLTE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_plte (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_PLTE, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_plte)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_PLTE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_plte (mng_datap pData, mng_objectp pObject) { mng_ani_pltep pPLTE = (mng_ani_pltep)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PLTE, MNG_LC_START); #endif pData->bHasglobalPLTE = MNG_TRUE; pData->iGlobalPLTEcount = pPLTE->iEntrycount; MNG_COPY (pData->aGlobalPLTEentries, pPLTE->aEntries, sizeof (pPLTE->aEntries)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PLTE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_trns (mng_datap pData, mng_uint32 iRawlen, mng_uint8p pRawdata) #else mng_retcode mng_create_ani_trns (mng_datap pData) #endif { mng_ani_trnsp pTRNS; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_TRNS, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_trns), mng_free_obj_general, mng_process_ani_trns, &pTemp); if (iRetcode) return iRetcode; pTRNS = (mng_ani_trnsp)pTemp; #else MNG_ALLOC (pData, pTRNS, sizeof (mng_ani_trns)); pTRNS->sHeader.fCleanup = mng_free_ani_trns; pTRNS->sHeader.fProcess = mng_process_ani_trns; #endif mng_add_ani_object (pData, (mng_object_headerp)pTRNS); #ifndef MNG_OPTIMIZE_CHUNKREADER pTRNS->iRawlen = iRawlen; MNG_COPY (pTRNS->aRawdata, pRawdata, sizeof (pTRNS->aRawdata)); #else pTRNS->iRawlen = pData->iGlobalTRNSrawlen; MNG_COPY (pTRNS->aRawdata, pData->aGlobalTRNSrawdata, sizeof (pTRNS->aRawdata)); #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_TRNS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_trns (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_TRNS, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_trns)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_TRNS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_trns (mng_datap pData, mng_objectp pObject) { mng_ani_trnsp pTRNS = (mng_ani_trnsp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_TRNS, MNG_LC_START); #endif pData->bHasglobalTRNS = MNG_TRUE; pData->iGlobalTRNSrawlen = pTRNS->iRawlen; MNG_COPY (pData->aGlobalTRNSrawdata, pTRNS->aRawdata, sizeof (pTRNS->aRawdata)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_TRNS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_gAMA #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_gama (mng_datap pData, mng_bool bEmpty, mng_uint32 iGamma) #else mng_retcode mng_create_ani_gama (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_gamap pGAMA; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_GAMA, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_gama), mng_free_obj_general, mng_process_ani_gama, &pTemp); if (iRetcode) return iRetcode; pGAMA = (mng_ani_gamap)pTemp; #else MNG_ALLOC (pData, pGAMA, sizeof (mng_ani_gama)); pGAMA->sHeader.fCleanup = mng_free_ani_gama; pGAMA->sHeader.fProcess = mng_process_ani_gama; #endif mng_add_ani_object (pData, (mng_object_headerp)pGAMA); #ifndef MNG_OPTIMIZE_CHUNKREADER pGAMA->bEmpty = bEmpty; pGAMA->iGamma = iGamma; #else pGAMA->bEmpty = ((mng_gamap)pChunk)->bEmpty; pGAMA->iGamma = ((mng_gamap)pChunk)->iGamma; #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_GAMA, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_gama (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_GAMA, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_gama)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_GAMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_gama (mng_datap pData, mng_objectp pObject) { mng_ani_gamap pGAMA = (mng_ani_gamap)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_GAMA, MNG_LC_START); #endif if (pGAMA->bEmpty) /* empty chunk ? */ { /* clear global gAMA */ pData->bHasglobalGAMA = MNG_FALSE; pData->iGlobalGamma = 0; } else { /* set global gAMA */ pData->bHasglobalGAMA = MNG_TRUE; pData->iGlobalGamma = pGAMA->iGamma; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_GAMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_cHRM #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_chrm (mng_datap pData, mng_bool bEmpty, mng_uint32 iWhitepointx, mng_uint32 iWhitepointy, mng_uint32 iRedx, mng_uint32 iRedy, mng_uint32 iGreenx, mng_uint32 iGreeny, mng_uint32 iBluex, mng_uint32 iBluey) #else mng_retcode mng_create_ani_chrm (mng_datap pData, mng_chunkp pChunk) #endif { mng_ptr pTemp; mng_ani_chrmp pCHRM; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_CHRM, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_chrm), mng_free_obj_general, mng_process_ani_chrm, &pTemp); if (iRetcode) return iRetcode; pCHRM = (mng_ani_chrmp)pTemp; #else MNG_ALLOC (pData, pCHRM, sizeof (mng_ani_chrm)); pCHRM->sHeader.fCleanup = mng_free_ani_chrm; pCHRM->sHeader.fProcess = mng_process_ani_chrm; #endif mng_add_ani_object (pData, (mng_object_headerp)pCHRM); #ifndef MNG_OPTIMIZE_CHUNKREADER pCHRM->bEmpty = bEmpty; pCHRM->iWhitepointx = iWhitepointx; pCHRM->iWhitepointy = iWhitepointy; pCHRM->iRedx = iRedx; pCHRM->iRedy = iRedy; pCHRM->iGreenx = iGreenx; pCHRM->iGreeny = iGreeny; pCHRM->iBluex = iBluex; pCHRM->iBluey = iBluey; #else pCHRM->bEmpty = ((mng_chrmp)pChunk)->bEmpty; pCHRM->iWhitepointx = ((mng_chrmp)pChunk)->iWhitepointx; pCHRM->iWhitepointy = ((mng_chrmp)pChunk)->iWhitepointy; pCHRM->iRedx = ((mng_chrmp)pChunk)->iRedx; pCHRM->iRedy = ((mng_chrmp)pChunk)->iRedy; pCHRM->iGreenx = ((mng_chrmp)pChunk)->iGreenx; pCHRM->iGreeny = ((mng_chrmp)pChunk)->iGreeny; pCHRM->iBluex = ((mng_chrmp)pChunk)->iBluex; pCHRM->iBluey = ((mng_chrmp)pChunk)->iBluey; #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_CHRM, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_chrm (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_CHRM, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_chrm)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_CHRM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_chrm (mng_datap pData, mng_objectp pObject) { mng_ani_chrmp pCHRM = (mng_ani_chrmp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CHRM, MNG_LC_START); #endif if (pCHRM->bEmpty) /* empty chunk ? */ { /* clear global cHRM */ pData->bHasglobalCHRM = MNG_FALSE; pData->iGlobalWhitepointx = 0; pData->iGlobalWhitepointy = 0; pData->iGlobalPrimaryredx = 0; pData->iGlobalPrimaryredy = 0; pData->iGlobalPrimarygreenx = 0; pData->iGlobalPrimarygreeny = 0; pData->iGlobalPrimarybluex = 0; pData->iGlobalPrimarybluey = 0; } else { /* set global cHRM */ pData->bHasglobalCHRM = MNG_TRUE; pData->iGlobalWhitepointx = pCHRM->iWhitepointx; pData->iGlobalWhitepointy = pCHRM->iWhitepointy; pData->iGlobalPrimaryredx = pCHRM->iRedx; pData->iGlobalPrimaryredy = pCHRM->iRedy; pData->iGlobalPrimarygreenx = pCHRM->iGreenx; pData->iGlobalPrimarygreeny = pCHRM->iGreeny; pData->iGlobalPrimarybluex = pCHRM->iBluex; pData->iGlobalPrimarybluey = pCHRM->iBluey; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CHRM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sRGB #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_srgb (mng_datap pData, mng_bool bEmpty, mng_uint8 iRenderingintent) #else mng_retcode mng_create_ani_srgb (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_srgbp pSRGB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_SRGB, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_srgb), mng_free_obj_general, mng_process_ani_srgb, &pTemp); if (iRetcode) return iRetcode; pSRGB = (mng_ani_srgbp)pTemp; #else MNG_ALLOC (pData, pSRGB, sizeof (mng_ani_srgb)); pSRGB->sHeader.fCleanup = mng_free_ani_srgb; pSRGB->sHeader.fProcess = mng_process_ani_srgb; #endif mng_add_ani_object (pData, (mng_object_headerp)pSRGB); #ifndef MNG_OPTIMIZE_CHUNKREADER pSRGB->bEmpty = bEmpty; pSRGB->iRenderingintent = iRenderingintent; #else pSRGB->bEmpty = ((mng_srgbp)pChunk)->bEmpty; pSRGB->iRenderingintent = ((mng_srgbp)pChunk)->iRenderingintent; #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_SRGB, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_srgb (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_SRGB, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_srgb)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_SRGB, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_srgb (mng_datap pData, mng_objectp pObject) { mng_ani_srgbp pSRGB = (mng_ani_srgbp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SRGB, MNG_LC_START); #endif if (pSRGB->bEmpty) /* empty chunk ? */ { /* clear global sRGB */ pData->bHasglobalSRGB = MNG_FALSE; pData->iGlobalRendintent = 0; } else { /* set global sRGB */ pData->bHasglobalSRGB = MNG_TRUE; pData->iGlobalRendintent = pSRGB->iRenderingintent; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SRGB, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iCCP #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_iccp (mng_datap pData, mng_bool bEmpty, mng_uint32 iProfilesize, mng_ptr pProfile) #else mng_retcode mng_create_ani_iccp (mng_datap pData, mng_chunkp pChunk) #endif { mng_ptr pTemp; mng_ani_iccpp pICCP; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_ICCP, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_iccp), mng_free_ani_iccp, mng_process_ani_iccp, &pTemp); if (iRetcode) return iRetcode; pICCP = (mng_ani_iccpp)pTemp; #else MNG_ALLOC (pData, pICCP, sizeof (mng_ani_iccp)); pICCP->sHeader.fCleanup = mng_free_ani_iccp; pICCP->sHeader.fProcess = mng_process_ani_iccp; #endif mng_add_ani_object (pData, (mng_object_headerp)pICCP); #ifndef MNG_OPTIMIZE_CHUNKREADER pICCP->bEmpty = bEmpty; pICCP->iProfilesize = iProfilesize; if (iProfilesize) { MNG_ALLOC (pData, pICCP->pProfile, iProfilesize); MNG_COPY (pICCP->pProfile, pProfile, iProfilesize); } #else pICCP->bEmpty = ((mng_iccpp)pChunk)->bEmpty; pICCP->iProfilesize = ((mng_iccpp)pChunk)->iProfilesize; if (pICCP->iProfilesize) { MNG_ALLOC (pData, pICCP->pProfile, pICCP->iProfilesize); MNG_COPY (pICCP->pProfile, ((mng_iccpp)pChunk)->pProfile, pICCP->iProfilesize); } #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_ICCP, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_free_ani_iccp (mng_datap pData, mng_objectp pObject) { mng_ani_iccpp pICCP = (mng_ani_iccpp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_ICCP, MNG_LC_START); #endif if (pICCP->iProfilesize) MNG_FREEX (pData, pICCP->pProfile, pICCP->iProfilesize); #ifndef MNG_OPTIMIZE_OBJCLEANUP MNG_FREEX (pData, pObject, sizeof (mng_ani_iccp)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_ICCP, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_OBJCLEANUP return MNG_NOERROR; #else return mng_free_obj_general(pData, pObject); #endif } /* ************************************************************************** */ mng_retcode mng_process_ani_iccp (mng_datap pData, mng_objectp pObject) { mng_ani_iccpp pICCP = (mng_ani_iccpp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_ICCP, MNG_LC_START); #endif if (pICCP->bEmpty) /* empty chunk ? */ { /* clear global iCCP */ pData->bHasglobalICCP = MNG_FALSE; if (pData->iGlobalProfilesize) MNG_FREEX (pData, pData->pGlobalProfile, pData->iGlobalProfilesize); pData->iGlobalProfilesize = 0; pData->pGlobalProfile = MNG_NULL; } else { /* set global iCCP */ pData->bHasglobalICCP = MNG_TRUE; pData->iGlobalProfilesize = pICCP->iProfilesize; if (pICCP->iProfilesize) { MNG_ALLOC (pData, pData->pGlobalProfile, pICCP->iProfilesize); MNG_COPY (pData->pGlobalProfile, pICCP->pProfile, pICCP->iProfilesize); } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_ICCP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_bKGD #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_bkgd (mng_datap pData, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue) #else mng_retcode mng_create_ani_bkgd (mng_datap pData) #endif { mng_ptr pTemp; mng_ani_bkgdp pBKGD; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_BKGD, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_bkgd), mng_free_obj_general, mng_process_ani_bkgd, &pTemp); if (iRetcode) return iRetcode; pBKGD = (mng_ani_bkgdp)pTemp; #else MNG_ALLOC (pData, pBKGD, sizeof (mng_ani_bkgd)); pBKGD->sHeader.fCleanup = mng_free_ani_bkgd; pBKGD->sHeader.fProcess = mng_process_ani_bkgd; #endif mng_add_ani_object (pData, (mng_object_headerp)pBKGD); #ifndef MNG_OPTIMIZE_CHUNKREADER pBKGD->iRed = iRed; pBKGD->iGreen = iGreen; pBKGD->iBlue = iBlue; #else pBKGD->iRed = pData->iGlobalBKGDred; pBKGD->iGreen = pData->iGlobalBKGDgreen; pBKGD->iBlue = pData->iGlobalBKGDblue; #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_BKGD, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_bkgd (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_BKGD, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_bkgd)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_BKGD, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_bkgd (mng_datap pData, mng_objectp pObject) { mng_ani_bkgdp pBKGD = (mng_ani_bkgdp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BKGD, MNG_LC_START); #endif pData->bHasglobalBKGD = MNG_TRUE; pData->iGlobalBKGDred = pBKGD->iRed; pData->iGlobalBKGDgreen = pBKGD->iGreen; pData->iGlobalBKGDblue = pBKGD->iBlue; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BKGD, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_LOOP #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_loop (mng_datap pData, mng_uint8 iLevel, mng_uint32 iRepeatcount, mng_uint8 iTermcond, mng_uint32 iItermin, mng_uint32 iItermax, mng_uint32 iCount, mng_uint32p pSignals) #else mng_retcode mng_create_ani_loop (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_loopp pLOOP; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_LOOP, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_loop), mng_free_ani_loop, mng_process_ani_loop, &pTemp); if (iRetcode) return iRetcode; pLOOP = (mng_ani_loopp)pTemp; #else MNG_ALLOC (pData, pLOOP, sizeof (mng_ani_loop)); pLOOP->sHeader.fCleanup = mng_free_ani_loop; pLOOP->sHeader.fProcess = mng_process_ani_loop; #endif mng_add_ani_object (pData, (mng_object_headerp)pLOOP); #ifndef MNG_OPTIMIZE_CHUNKREADER pLOOP->iLevel = iLevel; pLOOP->iRepeatcount = iRepeatcount; pLOOP->iTermcond = iTermcond; pLOOP->iItermin = iItermin; pLOOP->iItermax = iItermax; pLOOP->iCount = iCount; #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED if (iCount) { MNG_ALLOC (pData, pLOOP->pSignals, (iCount << 1)); MNG_COPY (pLOOP->pSignals, pSignals, (iCount << 1)); } #endif #else /* MNG_OPTIMIZE_CHUNKREADER */ pLOOP->iLevel = ((mng_loopp)pChunk)->iLevel; pLOOP->iRepeatcount = ((mng_loopp)pChunk)->iRepeat; pLOOP->iTermcond = ((mng_loopp)pChunk)->iTermination; pLOOP->iItermin = ((mng_loopp)pChunk)->iItermin; pLOOP->iItermax = ((mng_loopp)pChunk)->iItermax; pLOOP->iCount = ((mng_loopp)pChunk)->iCount; #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED if (pLOOP->iCount) { MNG_ALLOC (pData, pLOOP->pSignals, (pLOOP->iCount << 1)); MNG_COPY (pLOOP->pSignals, ((mng_loopp)pChunk)->pSignals, (pLOOP->iCount << 1)); } #endif #endif /* MNG_OPTIMIZE_CHUNKREADER */ /* running counter starts with repeat_count */ pLOOP->iRunningcount = pLOOP->iRepeatcount; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_LOOP, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_free_ani_loop (mng_datap pData, mng_objectp pObject) { #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED mng_ani_loopp pLOOP = (mng_ani_loopp)pObject; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_LOOP, MNG_LC_START); #endif #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED if (pLOOP->iCount) /* drop signal buffer ? */ MNG_FREEX (pData, pLOOP->pSignals, (pLOOP->iCount << 1)); #endif #ifndef MNG_OPTIMIZE_OBJCLEANUP MNG_FREEX (pData, pObject, sizeof (mng_ani_loop)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_LOOP, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_OBJCLEANUP return MNG_NOERROR; #else return mng_free_obj_general(pData, pObject); #endif } /* ************************************************************************** */ mng_retcode mng_process_ani_loop (mng_datap pData, mng_objectp pObject) { mng_ani_loopp pLOOP = (mng_ani_loopp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_LOOP, MNG_LC_START); #endif /* just reset the running counter */ pLOOP->iRunningcount = pLOOP->iRepeatcount; /* iteration=0 means we're skipping ! */ if ((!pData->bSkipping) && (pLOOP->iRepeatcount == 0)) pData->bSkipping = MNG_TRUE; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_LOOP, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ /* ************************************************************************** */ mng_retcode mng_create_ani_endl (mng_datap pData, mng_uint8 iLevel) { mng_ani_endlp pENDL; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_ENDL, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { mng_retcode iRetcode; #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_endl), mng_free_obj_general, mng_process_ani_endl, &pTemp); if (iRetcode) return iRetcode; pENDL = (mng_ani_endlp)pTemp; #else MNG_ALLOC (pData, pENDL, sizeof (mng_ani_endl)); pENDL->sHeader.fCleanup = mng_free_ani_endl; pENDL->sHeader.fProcess = mng_process_ani_endl; #endif mng_add_ani_object (pData, (mng_object_headerp)pENDL); pENDL->iLevel = iLevel; iRetcode = mng_process_ani_endl (pData, (mng_objectp)pENDL); if (iRetcode) return iRetcode; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_ENDL, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_endl (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_ENDL, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_endl)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_ENDL, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_endl (mng_datap pData, mng_objectp pObject) { mng_ani_endlp pENDL = (mng_ani_endlp)pObject; mng_ani_loopp pLOOP; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_ENDL, MNG_LC_START); #endif if (((pData->bDisplaying) && ((pData->bRunning) || (pData->bSearching))) || (pData->bReading) ) { pLOOP = pENDL->pLOOP; /* determine matching LOOP */ if (!pLOOP) /* haven't got it yet ? */ { /* go and look back in the list */ pLOOP = (mng_ani_loopp)pENDL->sHeader.pPrev; while ((pLOOP) && ((pLOOP->sHeader.fCleanup != mng_free_ani_loop) || (pLOOP->iLevel != pENDL->iLevel) )) pLOOP = pLOOP->sHeader.pPrev; } /* got it now ? */ if ((pLOOP) && (pLOOP->iLevel == pENDL->iLevel)) { pENDL->pLOOP = pLOOP; /* save for next time ! */ /* decrease running counter ? */ if ((pLOOP->iRunningcount) && (pLOOP->iRunningcount < 0x7fffffffL)) pLOOP->iRunningcount--; if ((!pData->bDisplaying) && (pData->bReading) && (pLOOP->iRunningcount >= 0x7fffffffL)) { pData->iTotalframes = 0x7fffffffL; pData->iTotallayers = 0x7fffffffL; pData->iTotalplaytime = 0x7fffffffL; } else { /* TODO: we're cheating out on the termination_condition, iteration_min, iteration_max and possible signals; the code is just not ready for that can of worms.... */ if (!pLOOP->iRunningcount) /* reached zero ? */ { /* was this the outer LOOP ? */ if (pData->pFirstaniobj == (mng_objectp)pLOOP) /* TODO: THIS IS WRONG!! */ pData->bHasLOOP = MNG_FALSE; } else { if (pData->pCurraniobj) /* was we processing objects ? */ pData->pCurraniobj = pLOOP;/* then restart with LOOP */ else /* else restart behind LOOP !!! */ pData->pCurraniobj = pLOOP->sHeader.pNext; } } /* does this match a 'skipping' LOOP? */ if ((pData->bSkipping) && (pLOOP->iRepeatcount == 0)) pData->bSkipping = MNG_FALSE; } else MNG_ERROR (pData, MNG_NOMATCHINGLOOP); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_ENDL, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DEFI mng_retcode mng_create_ani_defi (mng_datap pData) { mng_ani_defip pDEFI; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_DEFI, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_defi), mng_free_obj_general, mng_process_ani_defi, &pTemp); if (iRetcode) return iRetcode; pDEFI = (mng_ani_defip)pTemp; #else MNG_ALLOC (pData, pDEFI, sizeof (mng_ani_defi)); pDEFI->sHeader.fCleanup = mng_free_ani_defi; pDEFI->sHeader.fProcess = mng_process_ani_defi; #endif mng_add_ani_object (pData, (mng_object_headerp)pDEFI); pDEFI->iId = pData->iDEFIobjectid; pDEFI->bHasdonotshow = pData->bDEFIhasdonotshow; pDEFI->iDonotshow = pData->iDEFIdonotshow; pDEFI->bHasconcrete = pData->bDEFIhasconcrete; pDEFI->iConcrete = pData->iDEFIconcrete; pDEFI->bHasloca = pData->bDEFIhasloca; pDEFI->iLocax = pData->iDEFIlocax; pDEFI->iLocay = pData->iDEFIlocay; pDEFI->bHasclip = pData->bDEFIhasclip; pDEFI->iClipl = pData->iDEFIclipl; pDEFI->iClipr = pData->iDEFIclipr; pDEFI->iClipt = pData->iDEFIclipt; pDEFI->iClipb = pData->iDEFIclipb; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_DEFI, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_defi (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_DEFI, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_defi)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_DEFI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_defi (mng_datap pData, mng_objectp pObject) { mng_ani_defip pDEFI = (mng_ani_defip)pObject; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DEFI, MNG_LC_START); #endif pData->iDEFIobjectid = pDEFI->iId; pData->bDEFIhasdonotshow = pDEFI->bHasdonotshow; pData->iDEFIdonotshow = pDEFI->iDonotshow; pData->bDEFIhasconcrete = pDEFI->bHasconcrete; pData->iDEFIconcrete = pDEFI->iConcrete; pData->bDEFIhasloca = pDEFI->bHasloca; pData->iDEFIlocax = pDEFI->iLocax; pData->iDEFIlocay = pDEFI->iLocay; pData->bDEFIhasclip = pDEFI->bHasclip; pData->iDEFIclipl = pDEFI->iClipl; pData->iDEFIclipr = pDEFI->iClipr; pData->iDEFIclipt = pDEFI->iClipt; pData->iDEFIclipb = pDEFI->iClipb; iRetcode = mng_process_display_defi (pData); if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DEFI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BASI #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_basi (mng_datap pData, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_bool bHasalpha, mng_uint16 iAlpha, mng_uint8 iViewable) #else mng_retcode mng_create_ani_basi (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_basip pBASI; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_BASI, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_basi), mng_free_obj_general, mng_process_ani_basi, &pTemp); if (iRetcode) return iRetcode; pBASI = (mng_ani_basip)pTemp; #else MNG_ALLOC (pData, pBASI, sizeof (mng_ani_basi)); pBASI->sHeader.fCleanup = mng_free_ani_basi; pBASI->sHeader.fProcess = mng_process_ani_basi; #endif mng_add_ani_object (pData, (mng_object_headerp)pBASI); #ifndef MNG_OPTIMIZE_CHUNKREADER pBASI->iRed = iRed; pBASI->iGreen = iGreen; pBASI->iBlue = iBlue; pBASI->bHasalpha = bHasalpha; pBASI->iAlpha = iAlpha; pBASI->iViewable = iViewable; #else pBASI->iRed = ((mng_basip)pChunk)->iRed; pBASI->iGreen = ((mng_basip)pChunk)->iGreen; pBASI->iBlue = ((mng_basip)pChunk)->iBlue; pBASI->bHasalpha = ((mng_basip)pChunk)->bHasalpha; pBASI->iAlpha = ((mng_basip)pChunk)->iAlpha; pBASI->iViewable = ((mng_basip)pChunk)->iViewable; #endif } #ifndef MNG_OPTIMIZE_DISPLAYCALLS #ifndef MNG_OPTIMIZE_CHUNKREADER iRetcode = mng_process_display_basi (pData, iRed, iGreen, iBlue, bHasalpha, iAlpha, iViewable); #else iRetcode = mng_process_display_basi (pData, ((mng_basip)pChunk)->iRed, ((mng_basip)pChunk)->iGreen, ((mng_basip)pChunk)->iBlue, ((mng_basip)pChunk)->bHasalpha, ((mng_basip)pChunk)->iAlpha, ((mng_basip)pChunk)->iViewable); #endif #else #ifndef MNG_OPTIMIZE_CHUNKREADER pData->iBASIred = iRed; pData->iBASIgreen = iGreen; pData->iBASIblue = iBlue; pData->bBASIhasalpha = bHasalpha; pData->iBASIalpha = iAlpha; pData->iBASIviewable = iViewable; #else pData->iBASIred = ((mng_basip)pChunk)->iRed; pData->iBASIgreen = ((mng_basip)pChunk)->iGreen; pData->iBASIblue = ((mng_basip)pChunk)->iBlue; pData->bBASIhasalpha = ((mng_basip)pChunk)->bHasalpha; pData->iBASIalpha = ((mng_basip)pChunk)->iAlpha; pData->iBASIviewable = ((mng_basip)pChunk)->iViewable; #endif iRetcode = mng_process_display_basi (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_BASI, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_basi (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_BASI, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_basi)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_BASI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_basi (mng_datap pData, mng_objectp pObject) { mng_ani_basip pBASI = (mng_ani_basip)pObject; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BASI, MNG_LC_START); #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_basi (pData, pBASI->iRed, pBASI->iGreen, pBASI->iBlue, pBASI->bHasalpha, pBASI->iAlpha, pBASI->iViewable); #else pData->iBASIred = pBASI->iRed; pData->iBASIgreen = pBASI->iGreen; pData->iBASIblue = pBASI->iBlue; pData->bBASIhasalpha = pBASI->bHasalpha; pData->iBASIalpha = pBASI->iAlpha; pData->iBASIviewable = pBASI->iViewable; iRetcode = mng_process_display_basi (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BASI, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLON #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_clon (mng_datap pData, mng_uint16 iSourceid, mng_uint16 iCloneid, mng_uint8 iClonetype, mng_bool bHasdonotshow, mng_uint8 iDonotshow, mng_uint8 iConcrete, mng_bool bHasloca, mng_uint8 iLocatype, mng_int32 iLocax, mng_int32 iLocay) #else mng_retcode mng_create_ani_clon (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_clonp pCLON; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_CLON, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_clon), mng_free_obj_general, mng_process_ani_clon, &pTemp); if (iRetcode) return iRetcode; pCLON = (mng_ani_clonp)pTemp; #else MNG_ALLOC (pData, pCLON, sizeof (mng_ani_clon)); pCLON->sHeader.fCleanup = mng_free_ani_clon; pCLON->sHeader.fProcess = mng_process_ani_clon; #endif mng_add_ani_object (pData, (mng_object_headerp)pCLON); #ifndef MNG_OPTIMIZE_CHUNKREADER pCLON->iSourceid = iSourceid; pCLON->iCloneid = iCloneid; pCLON->iClonetype = iClonetype; pCLON->bHasdonotshow = bHasdonotshow; pCLON->iDonotshow = iDonotshow; pCLON->iConcrete = iConcrete; pCLON->bHasloca = bHasloca; pCLON->iLocatype = iLocatype; pCLON->iLocax = iLocax; pCLON->iLocay = iLocay; #else pCLON->iSourceid = ((mng_clonp)pChunk)->iSourceid; pCLON->iCloneid = ((mng_clonp)pChunk)->iCloneid; pCLON->iClonetype = ((mng_clonp)pChunk)->iClonetype; pCLON->bHasdonotshow = ((mng_clonp)pChunk)->bHasdonotshow; pCLON->iDonotshow = ((mng_clonp)pChunk)->iDonotshow; pCLON->iConcrete = ((mng_clonp)pChunk)->iConcrete; pCLON->bHasloca = ((mng_clonp)pChunk)->bHasloca; pCLON->iLocatype = ((mng_clonp)pChunk)->iLocationtype; pCLON->iLocax = ((mng_clonp)pChunk)->iLocationx; pCLON->iLocay = ((mng_clonp)pChunk)->iLocationy; #endif } #ifndef MNG_OPTIMIZE_DISPLAYCALLS #ifndef MNG_OPTIMIZE_CHUNKREADER iRetcode = mng_process_display_clon (pData, iSourceid, iCloneid, iClonetype, bHasdonotshow, iDonotshow, iConcrete, bHasloca, iLocatype, iLocax, iLocay); #else iRetcode = mng_process_display_clon (pData, ((mng_clonp)pChunk)->iSourceid, ((mng_clonp)pChunk)->iCloneid, ((mng_clonp)pChunk)->iClonetype, ((mng_clonp)pChunk)->bHasdonotshow, ((mng_clonp)pChunk)->iDonotshow, ((mng_clonp)pChunk)->iConcrete, ((mng_clonp)pChunk)->bHasloca, ((mng_clonp)pChunk)->iLocationtype, ((mng_clonp)pChunk)->iLocationx, ((mng_clonp)pChunk)->iLocationy); #endif #else #ifndef MNG_OPTIMIZE_CHUNKREADER pData->iCLONsourceid = iSourceid; pData->iCLONcloneid = iCloneid; pData->iCLONclonetype = iClonetype; pData->bCLONhasdonotshow = bHasdonotshow; pData->iCLONdonotshow = iDonotshow; pData->iCLONconcrete = iConcrete; pData->bCLONhasloca = bHasloca; pData->iCLONlocationtype = iLocatype; pData->iCLONlocationx = iLocax; pData->iCLONlocationy = iLocay; #else pData->iCLONsourceid = ((mng_clonp)pChunk)->iSourceid; pData->iCLONcloneid = ((mng_clonp)pChunk)->iCloneid; pData->iCLONclonetype = ((mng_clonp)pChunk)->iClonetype; pData->bCLONhasdonotshow = ((mng_clonp)pChunk)->bHasdonotshow; pData->iCLONdonotshow = ((mng_clonp)pChunk)->iDonotshow; pData->iCLONconcrete = ((mng_clonp)pChunk)->iConcrete; pData->bCLONhasloca = ((mng_clonp)pChunk)->bHasloca; pData->iCLONlocationtype = ((mng_clonp)pChunk)->iLocationtype; pData->iCLONlocationx = ((mng_clonp)pChunk)->iLocationx; pData->iCLONlocationy = ((mng_clonp)pChunk)->iLocationy; #endif iRetcode = mng_process_display_clon (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_CLON, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_clon (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_CLON, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_clon)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_CLON, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_clon (mng_datap pData, mng_objectp pObject) { mng_ani_clonp pCLON = (mng_ani_clonp)pObject; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CLON, MNG_LC_START); #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_clon (pData, pCLON->iSourceid, pCLON->iCloneid, pCLON->iClonetype, pCLON->bHasdonotshow, pCLON->iDonotshow, pCLON->iConcrete, pCLON->bHasloca, pCLON->iLocatype, pCLON->iLocax, pCLON->iLocay); #else pData->iCLONcloneid = pCLON->iCloneid; pData->iCLONsourceid = pCLON->iSourceid; pData->iCLONclonetype = pCLON->iClonetype; pData->bCLONhasdonotshow = pCLON->bHasdonotshow; pData->iCLONdonotshow = pCLON->iDonotshow; pData->iCLONconcrete = pCLON->iConcrete; pData->bCLONhasloca = pCLON->bHasloca; pData->iCLONlocationtype = pCLON->iLocatype; pData->iCLONlocationx = pCLON->iLocax; pData->iCLONlocationy = pCLON->iLocay; iRetcode = mng_process_display_clon (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CLON, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BACK #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_back (mng_datap pData, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_uint8 iMandatory, mng_uint16 iImageid, mng_uint8 iTile) #else mng_retcode mng_create_ani_back (mng_datap pData) #endif { mng_ani_backp pBACK; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_BACK, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_back), mng_free_obj_general, mng_process_ani_back, &pTemp); if (iRetcode) return iRetcode; pBACK = (mng_ani_backp)pTemp; #else MNG_ALLOC (pData, pBACK, sizeof (mng_ani_back)); pBACK->sHeader.fCleanup = mng_free_ani_back; pBACK->sHeader.fProcess = mng_process_ani_back; #endif mng_add_ani_object (pData, (mng_object_headerp)pBACK); #ifndef MNG_OPTIMIZE_CHUNKREADER pBACK->iRed = iRed; pBACK->iGreen = iGreen; pBACK->iBlue = iBlue; pBACK->iMandatory = iMandatory; pBACK->iImageid = iImageid; pBACK->iTile = iTile; #else pBACK->iRed = pData->iBACKred; pBACK->iGreen = pData->iBACKgreen; pBACK->iBlue = pData->iBACKblue; pBACK->iMandatory = pData->iBACKmandatory; pBACK->iImageid = pData->iBACKimageid; pBACK->iTile = pData->iBACKtile; #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_BACK, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_back (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_BACK, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_back)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_BACK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_back (mng_datap pData, mng_objectp pObject) { mng_ani_backp pBACK = (mng_ani_backp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BACK, MNG_LC_START); #endif pData->iBACKred = pBACK->iRed; pData->iBACKgreen = pBACK->iGreen; pData->iBACKblue = pBACK->iBlue; pData->iBACKmandatory = pBACK->iMandatory; pData->iBACKimageid = pBACK->iImageid; pData->iBACKtile = pBACK->iTile; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BACK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_FRAM #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_fram (mng_datap pData, mng_uint8 iFramemode, mng_uint8 iChangedelay, mng_uint32 iDelay, mng_uint8 iChangetimeout, mng_uint32 iTimeout, mng_uint8 iChangeclipping, mng_uint8 iCliptype, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb) #else mng_retcode mng_create_ani_fram (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_framp pFRAM; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_FRAM, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_fram), mng_free_obj_general, mng_process_ani_fram, &pTemp); if (iRetcode) return iRetcode; pFRAM = (mng_ani_framp)pTemp; #else MNG_ALLOC (pData, pFRAM, sizeof (mng_ani_fram)); pFRAM->sHeader.fCleanup = mng_free_ani_fram; pFRAM->sHeader.fProcess = mng_process_ani_fram; #endif mng_add_ani_object (pData, (mng_object_headerp)pFRAM); #ifndef MNG_OPTIMIZE_CHUNKREADER pFRAM->iFramemode = iFramemode; pFRAM->iChangedelay = iChangedelay; pFRAM->iDelay = iDelay; pFRAM->iChangetimeout = iChangetimeout; pFRAM->iTimeout = iTimeout; pFRAM->iChangeclipping = iChangeclipping; pFRAM->iCliptype = iCliptype; pFRAM->iClipl = iClipl; pFRAM->iClipr = iClipr; pFRAM->iClipt = iClipt; pFRAM->iClipb = iClipb; #else pFRAM->iFramemode = ((mng_framp)pChunk)->iMode; pFRAM->iChangedelay = ((mng_framp)pChunk)->iChangedelay; pFRAM->iDelay = ((mng_framp)pChunk)->iDelay; pFRAM->iChangetimeout = ((mng_framp)pChunk)->iChangetimeout; pFRAM->iTimeout = ((mng_framp)pChunk)->iTimeout; pFRAM->iChangeclipping = ((mng_framp)pChunk)->iChangeclipping; pFRAM->iCliptype = ((mng_framp)pChunk)->iBoundarytype; pFRAM->iClipl = ((mng_framp)pChunk)->iBoundaryl; pFRAM->iClipr = ((mng_framp)pChunk)->iBoundaryr; pFRAM->iClipt = ((mng_framp)pChunk)->iBoundaryt; pFRAM->iClipb = ((mng_framp)pChunk)->iBoundaryb; #endif } #ifndef MNG_OPTIMIZE_DISPLAYCALLS #ifndef MNG_OPTIMIZE_CHUNKREADER iRetcode = mng_process_display_fram (pData, iFramemode, iChangedelay, iDelay, iChangetimeout, iTimeout, iChangeclipping, iCliptype, iClipl, iClipr, iClipt, iClipb); #else iRetcode = mng_process_display_fram (pData, ((mng_framp)pChunk)->iMode, ((mng_framp)pChunk)->iChangedelay, ((mng_framp)pChunk)->iDelay, ((mng_framp)pChunk)->iChangetimeout, ((mng_framp)pChunk)->iTimeout, ((mng_framp)pChunk)->iChangeclipping, ((mng_framp)pChunk)->iBoundarytype, ((mng_framp)pChunk)->iBoundaryl, ((mng_framp)pChunk)->iBoundaryr, ((mng_framp)pChunk)->iBoundaryt, ((mng_framp)pChunk)->iBoundaryb); #endif #else #ifndef MNG_OPTIMIZE_CHUNKREADER pData->iTempFramemode = iFramemode; pData->iTempChangedelay = iChangedelay; pData->iTempDelay = iDelay; pData->iTempChangetimeout = iChangetimeout; pData->iTempTimeout = iTimeout; pData->iTempChangeclipping = iChangeclipping; pData->iTempCliptype = iCliptype; pData->iTempClipl = iClipl; pData->iTempClipr = iClipr; pData->iTempClipt = iClipt; pData->iTempClipb = iClipb; #else pData->iTempFramemode = ((mng_framp)pChunk)->iMode; pData->iTempChangedelay = ((mng_framp)pChunk)->iChangedelay; pData->iTempDelay = ((mng_framp)pChunk)->iDelay; pData->iTempChangetimeout = ((mng_framp)pChunk)->iChangetimeout; pData->iTempTimeout = ((mng_framp)pChunk)->iTimeout; pData->iTempChangeclipping = ((mng_framp)pChunk)->iChangeclipping; pData->iTempCliptype = ((mng_framp)pChunk)->iBoundarytype; pData->iTempClipl = ((mng_framp)pChunk)->iBoundaryl; pData->iTempClipr = ((mng_framp)pChunk)->iBoundaryr; pData->iTempClipt = ((mng_framp)pChunk)->iBoundaryt; pData->iTempClipb = ((mng_framp)pChunk)->iBoundaryb; #endif iRetcode = mng_process_display_fram (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_FRAM, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_fram (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_FRAM, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_fram)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_FRAM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_fram (mng_datap pData, mng_objectp pObject) { mng_ani_framp pFRAM = (mng_ani_framp)pObject; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_FRAM, MNG_LC_START); #endif if (pData->iBreakpoint) /* previously broken ? */ { iRetcode = mng_process_display_fram2 (pData); pData->iBreakpoint = 0; /* not again */ } else { #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_fram (pData, pFRAM->iFramemode, pFRAM->iChangedelay, pFRAM->iDelay, pFRAM->iChangetimeout, pFRAM->iTimeout, pFRAM->iChangeclipping, pFRAM->iCliptype, pFRAM->iClipl, pFRAM->iClipr, pFRAM->iClipt, pFRAM->iClipb); #else pData->iTempFramemode = pFRAM->iFramemode; pData->iTempChangedelay = pFRAM->iChangedelay; pData->iTempDelay = pFRAM->iDelay; pData->iTempChangetimeout = pFRAM->iChangetimeout; pData->iTempTimeout = pFRAM->iTimeout; pData->iTempChangeclipping = pFRAM->iChangeclipping; pData->iTempCliptype = pFRAM->iCliptype; pData->iTempClipl = pFRAM->iClipl; pData->iTempClipr = pFRAM->iClipr; pData->iTempClipt = pFRAM->iClipt; pData->iTempClipb = pFRAM->iClipb; iRetcode = mng_process_display_fram (pData); #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_FRAM, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MOVE #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_move (mng_datap pData, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iType, mng_int32 iLocax, mng_int32 iLocay) #else mng_retcode mng_create_ani_move (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_movep pMOVE; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_MOVE, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_move), mng_free_obj_general, mng_process_ani_move, &pTemp); if (iRetcode) return iRetcode; pMOVE = (mng_ani_movep)pTemp; #else MNG_ALLOC (pData, pMOVE, sizeof (mng_ani_move)); pMOVE->sHeader.fCleanup = mng_free_ani_move; pMOVE->sHeader.fProcess = mng_process_ani_move; #endif mng_add_ani_object (pData, (mng_object_headerp)pMOVE); #ifndef MNG_OPTIMIZE_CHUNKREADER pMOVE->iFirstid = iFirstid; pMOVE->iLastid = iLastid; pMOVE->iType = iType; pMOVE->iLocax = iLocax; pMOVE->iLocay = iLocay; #else pMOVE->iFirstid = ((mng_movep)pChunk)->iFirstid; pMOVE->iLastid = ((mng_movep)pChunk)->iLastid; pMOVE->iType = ((mng_movep)pChunk)->iMovetype; pMOVE->iLocax = ((mng_movep)pChunk)->iMovex; pMOVE->iLocay = ((mng_movep)pChunk)->iMovey; #endif } #ifndef MNG_OPTIMIZE_DISPLAYCALLS #ifndef MNG_OPTIMIZE_CHUNKREADER iRetcode = mng_process_display_move (pData, iFirstid, iLastid, iType, iLocax, iLocay); #else iRetcode = mng_process_display_move (pData, ((mng_movep)pChunk)->iFirstid, ((mng_movep)pChunk)->iLastid, ((mng_movep)pChunk)->iMovetype, ((mng_movep)pChunk)->iMovex, ((mng_movep)pChunk)->iMovey); #endif #else #ifndef MNG_OPTIMIZE_CHUNKREADER pData->iMOVEfromid = iFirstid; pData->iMOVEtoid = iLastid; pData->iMOVEmovetype = iType; pData->iMOVEmovex = iLocax; pData->iMOVEmovey = iLocay; #else pData->iMOVEfromid = ((mng_movep)pChunk)->iFirstid; pData->iMOVEtoid = ((mng_movep)pChunk)->iLastid; pData->iMOVEmovetype = ((mng_movep)pChunk)->iMovetype; pData->iMOVEmovex = ((mng_movep)pChunk)->iMovex; pData->iMOVEmovey = ((mng_movep)pChunk)->iMovey; #endif iRetcode = mng_process_display_move (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_MOVE, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_move (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_MOVE, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_move)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_MOVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_move (mng_datap pData, mng_objectp pObject) { mng_retcode iRetcode; mng_ani_movep pMOVE = (mng_ani_movep)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_MOVE, MNG_LC_START); #endif /* re-process the MOVE chunk */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_move (pData, pMOVE->iFirstid, pMOVE->iLastid, pMOVE->iType, pMOVE->iLocax, pMOVE->iLocay); #else pData->iMOVEfromid = pMOVE->iFirstid; pData->iMOVEtoid = pMOVE->iLastid; pData->iMOVEmovetype = pMOVE->iType; pData->iMOVEmovex = pMOVE->iLocax; pData->iMOVEmovey = pMOVE->iLocay; iRetcode = mng_process_display_move (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_MOVE, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLIP #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_clip (mng_datap pData, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iType, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb) #else mng_retcode mng_create_ani_clip (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_clipp pCLIP; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_CLIP, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_clip), mng_free_obj_general, mng_process_ani_clip, &pTemp); if (iRetcode) return iRetcode; pCLIP = (mng_ani_clipp)pTemp; #else MNG_ALLOC (pData, pCLIP, sizeof (mng_ani_clip)); pCLIP->sHeader.fCleanup = mng_free_ani_clip; pCLIP->sHeader.fProcess = mng_process_ani_clip; #endif mng_add_ani_object (pData, (mng_object_headerp)pCLIP); #ifndef MNG_OPTIMIZE_CHUNKREADER pCLIP->iFirstid = iFirstid; pCLIP->iLastid = iLastid; pCLIP->iType = iType; pCLIP->iClipl = iClipl; pCLIP->iClipr = iClipr; pCLIP->iClipt = iClipt; pCLIP->iClipb = iClipb; #else pCLIP->iFirstid = ((mng_clipp)pChunk)->iFirstid; pCLIP->iLastid = ((mng_clipp)pChunk)->iLastid; pCLIP->iType = ((mng_clipp)pChunk)->iCliptype; pCLIP->iClipl = ((mng_clipp)pChunk)->iClipl; pCLIP->iClipr = ((mng_clipp)pChunk)->iClipr; pCLIP->iClipt = ((mng_clipp)pChunk)->iClipt; pCLIP->iClipb = ((mng_clipp)pChunk)->iClipb; #endif } #ifndef MNG_OPTIMIZE_DISPLAYCALLS #ifndef MNG_OPTIMIZE_CHUNKREADER iRetcode = mng_process_display_clip (pData, iFirstid, iLastid, iType, iClipl, iClipr, iClipt, iClipb); #else iRetcode = mng_process_display_clip (pData, ((mng_clipp)pChunk)->iFirstid, ((mng_clipp)pChunk)->iLastid, ((mng_clipp)pChunk)->iCliptype, ((mng_clipp)pChunk)->iClipl, ((mng_clipp)pChunk)->iClipr, ((mng_clipp)pChunk)->iClipt, ((mng_clipp)pChunk)->iClipb); #endif #else #ifndef MNG_OPTIMIZE_CHUNKREADER pData->iCLIPfromid = iFirstid; pData->iCLIPtoid = iLastid; pData->iCLIPcliptype = iType; pData->iCLIPclipl = iClipl; pData->iCLIPclipr = iClipr; pData->iCLIPclipt = iClipt; pData->iCLIPclipb = iClipb; #else pData->iCLIPfromid = ((mng_clipp)pChunk)->iFirstid; pData->iCLIPtoid = ((mng_clipp)pChunk)->iLastid; pData->iCLIPcliptype = ((mng_clipp)pChunk)->iCliptype; pData->iCLIPclipl = ((mng_clipp)pChunk)->iClipl; pData->iCLIPclipr = ((mng_clipp)pChunk)->iClipr; pData->iCLIPclipt = ((mng_clipp)pChunk)->iClipt; pData->iCLIPclipb = ((mng_clipp)pChunk)->iClipb; #endif iRetcode = mng_process_display_clip (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_CLIP, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_clip (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_CLIP, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_clip)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_CLIP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_clip (mng_datap pData, mng_objectp pObject) { mng_retcode iRetcode; mng_ani_clipp pCLIP = (mng_ani_clipp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CLIP, MNG_LC_START); #endif /* re-process the CLIP chunk */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_clip (pData, pCLIP->iFirstid, pCLIP->iLastid, pCLIP->iType, pCLIP->iClipl, pCLIP->iClipr, pCLIP->iClipt, pCLIP->iClipb); #else pData->iCLIPfromid = pCLIP->iFirstid; pData->iCLIPtoid = pCLIP->iLastid; pData->iCLIPcliptype = pCLIP->iType; pData->iCLIPclipl = pCLIP->iClipl; pData->iCLIPclipr = pCLIP->iClipr; pData->iCLIPclipt = pCLIP->iClipt; pData->iCLIPclipb = pCLIP->iClipb; iRetcode = mng_process_display_clip (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CLIP, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SHOW #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_show (mng_datap pData, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iMode) #else mng_retcode mng_create_ani_show (mng_datap pData) #endif { mng_ani_showp pSHOW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_SHOW, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_show), mng_free_obj_general, mng_process_ani_show, &pTemp); if (iRetcode) return iRetcode; pSHOW = (mng_ani_showp)pTemp; #else MNG_ALLOC (pData, pSHOW, sizeof (mng_ani_show)); pSHOW->sHeader.fCleanup = mng_free_ani_show; pSHOW->sHeader.fProcess = mng_process_ani_show; #endif mng_add_ani_object (pData, (mng_object_headerp)pSHOW); #ifndef MNG_OPTIMIZE_CHUNKREADER pSHOW->iFirstid = iFirstid; pSHOW->iLastid = iLastid; pSHOW->iMode = iMode; #else pSHOW->iFirstid = pData->iSHOWfromid; pSHOW->iLastid = pData->iSHOWtoid; pSHOW->iMode = pData->iSHOWmode; #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_SHOW, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_show (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_SHOW, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_show)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_SHOW, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_show (mng_datap pData, mng_objectp pObject) { mng_retcode iRetcode; mng_ani_showp pSHOW = (mng_ani_showp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SHOW, MNG_LC_START); #endif if (pData->iBreakpoint) /* returning from breakpoint ? */ { iRetcode = mng_process_display_show (pData); } else { /* "re-run" SHOW chunk */ pData->iSHOWmode = pSHOW->iMode; pData->iSHOWfromid = pSHOW->iFirstid; pData->iSHOWtoid = pSHOW->iLastid; iRetcode = mng_process_display_show (pData); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SHOW, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_TERM #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_term (mng_datap pData, mng_uint8 iTermaction, mng_uint8 iIteraction, mng_uint32 iDelay, mng_uint32 iItermax) #else mng_retcode mng_create_ani_term (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_termp pTERM; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_TERM, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_term), mng_free_obj_general, mng_process_ani_term, &pTemp); if (iRetcode) return iRetcode; pTERM = (mng_ani_termp)pTemp; #else MNG_ALLOC (pData, pTERM, sizeof (mng_ani_term)); pTERM->sHeader.fCleanup = mng_free_ani_term; pTERM->sHeader.fProcess = mng_process_ani_term; #endif mng_add_ani_object (pData, (mng_object_headerp)pTERM); #ifndef MNG_OPTIMIZE_CHUNKREADER pTERM->iTermaction = iTermaction; pTERM->iIteraction = iIteraction; pTERM->iDelay = iDelay; pTERM->iItermax = iItermax; #else pTERM->iTermaction = ((mng_termp)pChunk)->iTermaction; pTERM->iIteraction = ((mng_termp)pChunk)->iIteraction; pTERM->iDelay = ((mng_termp)pChunk)->iDelay; pTERM->iItermax = ((mng_termp)pChunk)->iItermax; #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_TERM, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_term (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_TERM, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_term)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_TERM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_term (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_TERM, MNG_LC_START); #endif /* dummy: no action required! */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_TERM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE mng_retcode mng_create_ani_save (mng_datap pData) { mng_ptr pTemp; mng_ani_savep pSAVE; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_SAVE, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_save), mng_free_obj_general, mng_process_ani_save, &pTemp); if (iRetcode) return iRetcode; pSAVE = (mng_ani_savep)pTemp; #else MNG_ALLOC (pData, pSAVE, sizeof (mng_ani_save)); pSAVE->sHeader.fCleanup = mng_free_ani_save; pSAVE->sHeader.fProcess = mng_process_ani_save; #endif mng_add_ani_object (pData, (mng_object_headerp)pSAVE); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_SAVE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_save (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_SAVE, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_save)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_SAVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_save (mng_datap pData, mng_objectp pObject) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SAVE, MNG_LC_START); #endif iRetcode = mng_process_display_save (pData); if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SAVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SEEK #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_seek (mng_datap pData, mng_uint32 iSegmentnamesize, mng_pchar zSegmentname) #else mng_retcode mng_create_ani_seek (mng_datap pData, mng_chunkp pChunk) #endif { mng_ptr pTemp; mng_ani_seekp pSEEK; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_SEEK, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_seek), mng_free_ani_seek, mng_process_ani_seek, &pTemp); if (iRetcode) return iRetcode; pSEEK = (mng_ani_seekp)pTemp; #else MNG_ALLOC (pData, pSEEK, sizeof (mng_ani_seek)); pSEEK->sHeader.fCleanup = mng_free_ani_seek; pSEEK->sHeader.fProcess = mng_process_ani_seek; #endif mng_add_ani_object (pData, (mng_object_headerp)pSEEK); pData->pLastseek = (mng_objectp)pSEEK; #ifndef MNG_OPTIMIZE_CHUNKREADER pSEEK->iSegmentnamesize = iSegmentnamesize; if (iSegmentnamesize) { MNG_ALLOC (pData, pSEEK->zSegmentname, iSegmentnamesize + 1); MNG_COPY (pSEEK->zSegmentname, zSegmentname, iSegmentnamesize); } #else pSEEK->iSegmentnamesize = ((mng_seekp)pChunk)->iNamesize; if (pSEEK->iSegmentnamesize) { MNG_ALLOC (pData, pSEEK->zSegmentname, pSEEK->iSegmentnamesize + 1); MNG_COPY (pSEEK->zSegmentname, ((mng_seekp)pChunk)->zName, pSEEK->iSegmentnamesize); } #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_SEEK, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_free_ani_seek (mng_datap pData, mng_objectp pObject) { mng_ani_seekp pSEEK = (mng_ani_seekp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_SEEK, MNG_LC_START); #endif if (pSEEK->iSegmentnamesize) MNG_FREEX (pData, pSEEK->zSegmentname, pSEEK->iSegmentnamesize + 1); #ifndef MNG_OPTIMIZE_OBJCLEANUP MNG_FREEX (pData, pObject, sizeof (mng_ani_seek)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_SEEK, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_OBJCLEANUP return MNG_NOERROR; #else return mng_free_obj_general(pData, pObject); #endif } /* ************************************************************************** */ mng_retcode mng_process_ani_seek (mng_datap pData, mng_objectp pObject) { mng_ani_seekp pSEEK = (mng_ani_seekp)pObject; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SEEK, MNG_LC_START); #endif #ifdef MNG_SUPPORT_DYNAMICMNG if (!pData->bStopafterseek) /* can we really process this one ? */ #endif { pData->pLastseek = pObject; if (pData->fProcessseek) /* inform the app ? */ { mng_bool bOke; mng_pchar zName; MNG_ALLOC (pData, zName, pSEEK->iSegmentnamesize + 1); if (pSEEK->iSegmentnamesize) MNG_COPY (zName, pSEEK->zSegmentname, pSEEK->iSegmentnamesize); bOke = pData->fProcessseek ((mng_handle)pData, zName); MNG_FREEX (pData, zName, pSEEK->iSegmentnamesize + 1); if (!bOke) MNG_ERROR (pData, MNG_APPMISCERROR); } } iRetcode = mng_process_display_seek (pData); if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SEEK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_dhdr (mng_datap pData, mng_uint16 iObjectid, mng_uint8 iImagetype, mng_uint8 iDeltatype, mng_uint32 iBlockwidth, mng_uint32 iBlockheight, mng_uint32 iBlockx, mng_uint32 iBlocky) #else mng_retcode mng_create_ani_dhdr (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_dhdrp pDHDR; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_DHDR, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_dhdr), mng_free_obj_general, mng_process_ani_dhdr, &pTemp); if (iRetcode) return iRetcode; pDHDR = (mng_ani_dhdrp)pTemp; #else MNG_ALLOC (pData, pDHDR, sizeof (mng_ani_dhdr)); pDHDR->sHeader.fCleanup = mng_free_ani_dhdr; pDHDR->sHeader.fProcess = mng_process_ani_dhdr; #endif mng_add_ani_object (pData, (mng_object_headerp)pDHDR); #ifndef MNG_OPTIMIZE_CHUNKREADER pDHDR->iObjectid = iObjectid; pDHDR->iImagetype = iImagetype; pDHDR->iDeltatype = iDeltatype; pDHDR->iBlockwidth = iBlockwidth; pDHDR->iBlockheight = iBlockheight; pDHDR->iBlockx = iBlockx; pDHDR->iBlocky = iBlocky; #else pDHDR->iObjectid = ((mng_dhdrp)pChunk)->iObjectid; pDHDR->iImagetype = ((mng_dhdrp)pChunk)->iImagetype; pDHDR->iDeltatype = ((mng_dhdrp)pChunk)->iDeltatype; pDHDR->iBlockwidth = ((mng_dhdrp)pChunk)->iBlockwidth; pDHDR->iBlockheight = ((mng_dhdrp)pChunk)->iBlockheight; pDHDR->iBlockx = ((mng_dhdrp)pChunk)->iBlockx; pDHDR->iBlocky = ((mng_dhdrp)pChunk)->iBlocky; #endif } #ifndef MNG_OPTIMIZE_DISPLAYCALLS #ifndef MNG_OPTIMIZE_CHUNKREADER iRetcode = mng_process_display_dhdr (pData, iObjectid, iImagetype, iDeltatype, iBlockwidth, iBlockheight, iBlockx, iBlocky); #else iRetcode = mng_process_display_dhdr (pData, ((mng_dhdrp)pChunk)->iObjectid, ((mng_dhdrp)pChunk)->iImagetype, ((mng_dhdrp)pChunk)->iDeltatype, ((mng_dhdrp)pChunk)->iBlockwidth, ((mng_dhdrp)pChunk)->iBlockheight, ((mng_dhdrp)pChunk)->iBlockx, ((mng_dhdrp)pChunk)->iBlocky); #endif #else #ifndef MNG_OPTIMIZE_CHUNKREADER pData->iDHDRobjectid = iObjectid; pData->iDHDRimagetype = iImagetype; pData->iDHDRdeltatype = iDeltatype; pData->iDHDRblockwidth = iBlockwidth; pData->iDHDRblockheight = iBlockheight; pData->iDHDRblockx = iBlockx; pData->iDHDRblocky = iBlocky; #else pData->iDHDRobjectid = ((mng_dhdrp)pChunk)->iObjectid; pData->iDHDRimagetype = ((mng_dhdrp)pChunk)->iImagetype; pData->iDHDRdeltatype = ((mng_dhdrp)pChunk)->iDeltatype; pData->iDHDRblockwidth = ((mng_dhdrp)pChunk)->iBlockwidth; pData->iDHDRblockheight = ((mng_dhdrp)pChunk)->iBlockheight; pData->iDHDRblockx = ((mng_dhdrp)pChunk)->iBlockx; pData->iDHDRblocky = ((mng_dhdrp)pChunk)->iBlocky; #endif iRetcode = mng_process_display_dhdr (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_DHDR, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_dhdr (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_DHDR, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_dhdr)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_DHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_dhdr (mng_datap pData, mng_objectp pObject) { mng_ani_dhdrp pDHDR = (mng_ani_dhdrp)pObject; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DHDR, MNG_LC_START); #endif pData->bHasDHDR = MNG_TRUE; /* let everyone know we're inside a DHDR */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_dhdr (pData, pDHDR->iObjectid, pDHDR->iImagetype, pDHDR->iDeltatype, pDHDR->iBlockwidth, pDHDR->iBlockheight, pDHDR->iBlockx, pDHDR->iBlocky); #else pData->iDHDRobjectid = pDHDR->iObjectid; pData->iDHDRimagetype = pDHDR->iImagetype; pData->iDHDRdeltatype = pDHDR->iDeltatype; pData->iDHDRblockwidth = pDHDR->iBlockwidth; pData->iDHDRblockheight = pDHDR->iBlockheight; pData->iDHDRblockx = pDHDR->iBlockx; pData->iDHDRblocky = pDHDR->iBlocky; iRetcode = mng_process_display_dhdr (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DHDR, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_prom (mng_datap pData, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iFilltype) #else mng_retcode mng_create_ani_prom (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_promp pPROM=NULL; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_PROM, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_prom), mng_free_obj_general, mng_process_ani_prom, &pTemp); if (iRetcode) return iRetcode; pPROM = (mng_ani_promp)pTemp; #else MNG_ALLOC (pData, pPROM, sizeof (mng_ani_prom)); pPROM->sHeader.fCleanup = mng_free_ani_prom; pPROM->sHeader.fProcess = mng_process_ani_prom; #endif mng_add_ani_object (pData, (mng_object_headerp)pPROM); #ifndef MNG_OPTIMIZE_CHUNKREADER pPROM->iBitdepth = iBitdepth; pPROM->iColortype = iColortype; pPROM->iFilltype = iFilltype; #else pPROM->iBitdepth = ((mng_promp)pChunk)->iSampledepth; pPROM->iColortype = ((mng_promp)pChunk)->iColortype; pPROM->iFilltype = ((mng_promp)pChunk)->iFilltype; #endif } #ifndef MNG_OPTIMIZE_DISPLAYCALLS #ifndef MNG_OPTIMIZE_CHUNKREADER iRetcode = mng_process_display_prom (pData, iBitdepth, iColortype, iFilltype); #else iRetcode = mng_process_display_prom (pData, ((mng_promp)pChunk)->iSampledepth, ((mng_promp)pChunk)->iColortype, ((mng_promp)pChunk)->iFilltype); #endif #else #ifndef MNG_OPTIMIZE_CHUNKREADER pData->iPROMbitdepth = iBitdepth; pData->iPROMcolortype = iColortype; pData->iPROMfilltype = iFilltype; #else pData->iPROMbitdepth = ((mng_promp)pChunk)->iSampledepth; pData->iPROMcolortype = ((mng_promp)pChunk)->iColortype; pData->iPROMfilltype = ((mng_promp)pChunk)->iFilltype; #endif iRetcode = mng_process_display_prom (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_PROM, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_prom (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_PROM, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_prom)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_PROM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_prom (mng_datap pData, mng_objectp pObject) { mng_ani_promp pPROM = (mng_ani_promp)pObject; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PROM, MNG_LC_START); #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_prom (pData, pPROM->iBitdepth, pPROM->iColortype, pPROM->iFilltype); #else pData->iPROMbitdepth = pPROM->iBitdepth; pData->iPROMcolortype = pPROM->iColortype; pData->iPROMfilltype = pPROM->iFilltype; iRetcode = mng_process_display_prom (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PROM, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode mng_create_ani_ipng (mng_datap pData) { mng_ani_ipngp pIPNG; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_IPNG, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_ipng), mng_free_obj_general, mng_process_ani_ipng, &pTemp); if (iRetcode) return iRetcode; pIPNG = (mng_ani_ipngp)pTemp; #else MNG_ALLOC (pData, pIPNG, sizeof (mng_ani_ipng)); pIPNG->sHeader.fCleanup = mng_free_ani_ipng; pIPNG->sHeader.fProcess = mng_process_ani_ipng; #endif mng_add_ani_object (pData, (mng_object_headerp)pIPNG); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_IPNG, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_ipng (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_IPNG, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_ipng)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_IPNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_ipng (mng_datap pData, mng_objectp pObject) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IPNG, MNG_LC_START); #endif iRetcode = mng_process_display_ipng (pData); if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IPNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG mng_retcode mng_create_ani_ijng (mng_datap pData) { mng_ani_ijngp pIJNG; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_IJNG, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_ijng), mng_free_obj_general, mng_process_ani_ijng, &pTemp); if (iRetcode) return iRetcode; pIJNG = (mng_ani_ijngp)pTemp; #else MNG_ALLOC (pData, pIJNG, sizeof (mng_ani_ijng)); pIJNG->sHeader.fCleanup = mng_free_ani_ijng; pIJNG->sHeader.fProcess = mng_process_ani_ijng; #endif mng_add_ani_object (pData, (mng_object_headerp)pIJNG); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_IJNG, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_ijng (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_IJNG, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_ijng)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_IJNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_ijng (mng_datap pData, mng_objectp pObject) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IJNG, MNG_LC_START); #endif iRetcode = mng_process_display_ijng (pData); if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IJNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode mng_create_ani_pplt (mng_datap pData, mng_uint8 iType, mng_uint32 iCount, mng_palette8ep paIndexentries, mng_uint8p paAlphaentries, mng_uint8p paUsedentries) { mng_ani_ppltp pPPLT; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_PPLT, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_pplt), mng_free_obj_general, mng_process_ani_pplt, &pTemp); if (iRetcode) return iRetcode; pPPLT = (mng_ani_ppltp)pTemp; #else MNG_ALLOC (pData, pPPLT, sizeof (mng_ani_pplt)); pPPLT->sHeader.fCleanup = mng_free_ani_pplt; pPPLT->sHeader.fProcess = mng_process_ani_pplt; #endif pPPLT->iType = iType; pPPLT->iCount = iCount; MNG_COPY (pPPLT->aIndexentries, paIndexentries, sizeof (pPPLT->aIndexentries)); MNG_COPY (pPPLT->aAlphaentries, paAlphaentries, sizeof (pPPLT->aAlphaentries)); MNG_COPY (pPPLT->aUsedentries, paUsedentries, sizeof (pPPLT->aUsedentries )); mng_add_ani_object (pData, (mng_object_headerp)pPPLT); } #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_pplt (pData, iType, iCount, paIndexentries, paAlphaentries, paUsedentries); #else pData->iPPLTtype = iType; pData->iPPLTcount = iCount; pData->paPPLTindexentries = paIndexentries; pData->paPPLTalphaentries = paAlphaentries; pData->paPPLTusedentries = paUsedentries; iRetcode = mng_process_display_pplt (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_PPLT, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_pplt (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_PPLT, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_pplt)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_PPLT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_pplt (mng_datap pData, mng_objectp pObject) { mng_ani_ppltp pPPLT = (mng_ani_ppltp)pObject; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PPLT, MNG_LC_START); #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_pplt (pData, pPPLT->iType, pPPLT->iCount, pPPLT->aIndexentries, pPPLT->aAlphaentries, pPPLT->aUsedentries); #else pData->iPPLTtype = pPPLT->iType; pData->iPPLTcount = pPPLT->iCount; pData->paPPLTindexentries = &pPPLT->aIndexentries; pData->paPPLTalphaentries = &pPPLT->aAlphaentries; pData->paPPLTusedentries = &pPPLT->aUsedentries; iRetcode = mng_process_display_pplt (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PPLT, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MAGN #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_magn (mng_datap pData, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iMethodX, mng_uint16 iMX, mng_uint16 iMY, mng_uint16 iML, mng_uint16 iMR, mng_uint16 iMT, mng_uint16 iMB, mng_uint8 iMethodY) #else mng_retcode mng_create_ani_magn (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_magnp pMAGN=NULL; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_MAGN, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_magn), mng_free_obj_general, mng_process_ani_magn, &pTemp); if (iRetcode) return iRetcode; pMAGN = (mng_ani_magnp)pTemp; #else MNG_ALLOC (pData, pMAGN, sizeof (mng_ani_magn)); pMAGN->sHeader.fCleanup = mng_free_ani_magn; pMAGN->sHeader.fProcess = mng_process_ani_magn; #endif mng_add_ani_object (pData, (mng_object_headerp)pMAGN); #ifndef MNG_OPTIMIZE_CHUNKREADER pMAGN->iFirstid = iFirstid; pMAGN->iLastid = iLastid; pMAGN->iMethodX = iMethodX; pMAGN->iMX = iMX; pMAGN->iMY = iMY; pMAGN->iML = iML; pMAGN->iMR = iMR; pMAGN->iMT = iMT; pMAGN->iMB = iMB; pMAGN->iMethodY = iMethodY; #else pMAGN->iFirstid = ((mng_magnp)pChunk)->iFirstid; pMAGN->iLastid = ((mng_magnp)pChunk)->iLastid; pMAGN->iMethodX = ((mng_magnp)pChunk)->iMethodX; pMAGN->iMX = ((mng_magnp)pChunk)->iMX; pMAGN->iMY = ((mng_magnp)pChunk)->iMY; pMAGN->iML = ((mng_magnp)pChunk)->iML; pMAGN->iMR = ((mng_magnp)pChunk)->iMR; pMAGN->iMT = ((mng_magnp)pChunk)->iMT; pMAGN->iMB = ((mng_magnp)pChunk)->iMB; pMAGN->iMethodY = ((mng_magnp)pChunk)->iMethodY; #endif } #ifndef MNG_OPTIMIZE_DISPLAYCALLS #ifndef MNG_OPTIMIZE_CHUNKREADER iRetcode = mng_process_display_magn (pData, pMAGN->iFirstid, pMAGN->iLastid, pMAGN->iMethodX, pMAGN->iMX, pMAGN->iMY, pMAGN->iML, pMAGN->iMR, pMAGN->iMT, pMAGN->iMB, pMAGN->iMethodY); #else iRetcode = mng_process_display_magn (pData, ((mng_magnp)pChunk)->iFirstid, ((mng_magnp)pChunk)->iLastid, ((mng_magnp)pChunk)->iMethodX, ((mng_magnp)pChunk)->iMX, ((mng_magnp)pChunk)->iMY, ((mng_magnp)pChunk)->iML, ((mng_magnp)pChunk)->iMR, ((mng_magnp)pChunk)->iMT, ((mng_magnp)pChunk)->iMB, ((mng_magnp)pChunk)->iMethodY); #endif #else #ifndef MNG_OPTIMIZE_CHUNKREADER pData->iMAGNfirstid = iFirstid; pData->iMAGNlastid = iLastid; pData->iMAGNmethodX = iMethodX; pData->iMAGNmX = iMX; pData->iMAGNmY = iMY; pData->iMAGNmL = iML; pData->iMAGNmR = iMR; pData->iMAGNmT = iMT; pData->iMAGNmB = iMB; pData->iMAGNmethodY = iMethodY; #else pData->iMAGNfirstid = ((mng_magnp)pChunk)->iFirstid; pData->iMAGNlastid = ((mng_magnp)pChunk)->iLastid; pData->iMAGNmethodX = ((mng_magnp)pChunk)->iMethodX; pData->iMAGNmX = ((mng_magnp)pChunk)->iMX; pData->iMAGNmY = ((mng_magnp)pChunk)->iMY; pData->iMAGNmL = ((mng_magnp)pChunk)->iML; pData->iMAGNmR = ((mng_magnp)pChunk)->iMR; pData->iMAGNmT = ((mng_magnp)pChunk)->iMT; pData->iMAGNmB = ((mng_magnp)pChunk)->iMB; pData->iMAGNmethodY = ((mng_magnp)pChunk)->iMethodY; #endif iRetcode = mng_process_display_magn (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_MAGN, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_OBJCLEANUP mng_retcode mng_free_ani_magn (mng_datap pData, mng_objectp pObject) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_MAGN, MNG_LC_START); #endif MNG_FREEX (pData, pObject, sizeof (mng_ani_magn)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_MAGN, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_ani_magn (mng_datap pData, mng_objectp pObject) { mng_ani_magnp pMAGN = (mng_ani_magnp)pObject; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_MAGN, MNG_LC_START); #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_magn (pData, pMAGN->iFirstid, pMAGN->iLastid, pMAGN->iMethodX, pMAGN->iMX, pMAGN->iMY, pMAGN->iML, pMAGN->iMR, pMAGN->iMT, pMAGN->iMB, pMAGN->iMethodY); #else pData->iMAGNfirstid = pMAGN->iFirstid; pData->iMAGNlastid = pMAGN->iLastid; pData->iMAGNmethodX = pMAGN->iMethodX; pData->iMAGNmX = pMAGN->iMX; pData->iMAGNmY = pMAGN->iMY; pData->iMAGNmL = pMAGN->iML; pData->iMAGNmR = pMAGN->iMR; pData->iMAGNmT = pMAGN->iMT; pData->iMAGNmB = pMAGN->iMB; pData->iMAGNmethodY = pMAGN->iMethodY; iRetcode = mng_process_display_magn (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_MAGN, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_past (mng_datap pData, mng_uint16 iTargetid, mng_uint8 iTargettype, mng_int32 iTargetx, mng_int32 iTargety, mng_uint32 iCount, mng_ptr pSources) #else mng_retcode mng_create_ani_past (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_pastp pPAST; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_PAST, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_past), mng_free_ani_past, mng_process_ani_past, &pTemp); if (iRetcode) return iRetcode; pPAST = (mng_ani_pastp)pTemp; #else MNG_ALLOC (pData, pPAST, sizeof (mng_ani_past)); pPAST->sHeader.fCleanup = mng_free_ani_past; pPAST->sHeader.fProcess = mng_process_ani_past; #endif mng_add_ani_object (pData, (mng_object_headerp)pPAST); #ifndef MNG_OPTIMIZE_CHUNKREADER pPAST->iTargetid = iTargetid; pPAST->iTargettype = iTargettype; pPAST->iTargetx = iTargetx; pPAST->iTargety = iTargety; pPAST->iCount = iCount; if (iCount) { MNG_ALLOC (pData, pPAST->pSources, (iCount * sizeof (mng_past_source))); MNG_COPY (pPAST->pSources, pSources, (iCount * sizeof (mng_past_source))); } #else pPAST->iTargetid = ((mng_pastp)pChunk)->iDestid; pPAST->iTargettype = ((mng_pastp)pChunk)->iTargettype; pPAST->iTargetx = ((mng_pastp)pChunk)->iTargetx; pPAST->iTargety = ((mng_pastp)pChunk)->iTargety; pPAST->iCount = ((mng_pastp)pChunk)->iCount; if (pPAST->iCount) { mng_size_t iSize = (mng_size_t)(pPAST->iCount * sizeof (mng_past_source)); MNG_ALLOC (pData, pPAST->pSources, iSize); MNG_COPY (pPAST->pSources, ((mng_pastp)pChunk)->pSources, iSize); } #endif } #ifndef MNG_OPTIMIZE_DISPLAYCALLS #ifndef MNG_OPTIMIZE_CHUNKREADER iRetcode = mng_process_display_past (pData, iTargetid, iTargettype, iTargetx, iTargety, iCount, pSources); #else iRetcode = mng_process_display_past (pData, ((mng_pastp)pChunk)->iDestid, ((mng_pastp)pChunk)->iTargettype, ((mng_pastp)pChunk)->iTargetx, ((mng_pastp)pChunk)->iTargety, ((mng_pastp)pChunk)->iCount, ((mng_pastp)pChunk)->pSources); #endif #else #ifndef MNG_OPTIMIZE_CHUNKREADER pData->iPASTtargetid = iTargetid; pData->iPASTtargettype = iTargettype; pData->iPASTtargetx = iTargetx; pData->iPASTtargety = iTargety; pData->iPASTcount = iCount; pData->pPASTsources = pSources; #else pData->iPASTtargetid = ((mng_pastp)pChunk)->iDestid; pData->iPASTtargettype = ((mng_pastp)pChunk)->iTargettype; pData->iPASTtargetx = ((mng_pastp)pChunk)->iTargetx; pData->iPASTtargety = ((mng_pastp)pChunk)->iTargety; pData->iPASTcount = ((mng_pastp)pChunk)->iCount; pData->pPASTsources = ((mng_pastp)pChunk)->pSources; #endif iRetcode = mng_process_display_past (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_PAST, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_free_ani_past (mng_datap pData, mng_objectp pObject) { mng_ani_pastp pPAST = (mng_ani_pastp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_PAST, MNG_LC_START); #endif if (pPAST->iCount) MNG_FREEX (pData, pPAST->pSources, (pPAST->iCount * sizeof (mng_past_source))); #ifndef MNG_OPTIMIZE_OBJCLEANUP MNG_FREEX (pData, pObject, sizeof (mng_ani_past)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_PAST, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_OBJCLEANUP return MNG_NOERROR; #else return mng_free_obj_general(pData, pObject); #endif } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_process_ani_past (mng_datap pData, mng_objectp pObject) { mng_ani_pastp pPAST = (mng_ani_pastp)pObject; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PAST, MNG_LC_START); #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_past (pData, pPAST->iTargetid, pPAST->iTargettype, pPAST->iTargetx, pPAST->iTargety, pPAST->iCount, pPAST->pSources); #else pData->iPASTtargetid = pPAST->iTargetid; pData->iPASTtargettype = pPAST->iTargettype; pData->iPASTtargetx = pPAST->iTargetx; pData->iPASTtargety = pPAST->iTargety; pData->iPASTcount = pPAST->iCount; pData->pPASTsources = pPAST->pSources; iRetcode = mng_process_display_past (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PAST, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DISC #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ani_disc (mng_datap pData, mng_uint32 iCount, mng_uint16p pIds) #else mng_retcode mng_create_ani_disc (mng_datap pData, mng_chunkp pChunk) #endif { mng_ani_discp pDISC; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_DISC, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; iRetcode = create_obj_general (pData, sizeof (mng_ani_disc), mng_free_ani_disc, mng_process_ani_disc, &pTemp); if (iRetcode) return iRetcode; pDISC = (mng_ani_discp)pTemp; #else MNG_ALLOC (pData, pDISC, sizeof (mng_ani_disc)); pDISC->sHeader.fCleanup = mng_free_ani_disc; pDISC->sHeader.fProcess = mng_process_ani_disc; #endif mng_add_ani_object (pData, (mng_object_headerp)pDISC); #ifndef MNG_OPTIMIZE_CHUNKREADER pDISC->iCount = iCount; if (iCount) { MNG_ALLOC (pData, pDISC->pIds, (iCount << 1)); MNG_COPY (pDISC->pIds, pIds, (iCount << 1)); } #else pDISC->iCount = ((mng_discp)pChunk)->iCount; if (pDISC->iCount) { mng_size_t iSize = (mng_size_t)(pDISC->iCount << 1); MNG_ALLOC (pData, pDISC->pIds, iSize); MNG_COPY (pDISC->pIds, ((mng_discp)pChunk)->pObjectids, iSize); } #endif } #ifndef MNG_OPTIMIZE_DISPLAYCALLS #ifndef MNG_OPTIMIZE_CHUNKREADER iRetcode = mng_process_display_disc (pData, iCount, pIds); #else iRetcode = mng_process_display_disc (pData, ((mng_discp)pChunk)->iCount, ((mng_discp)pChunk)->pObjectids); #endif #else #ifndef MNG_OPTIMIZE_CHUNKREADER pData->iDISCcount = iCount; pData->pDISCids = pIds; #else pData->iDISCcount = ((mng_discp)pChunk)->iCount; pData->pDISCids = ((mng_discp)pChunk)->pObjectids; #endif iRetcode = mng_process_display_disc (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_DISC, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_free_ani_disc (mng_datap pData, mng_objectp pObject) { mng_ani_discp pDISC = (mng_ani_discp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_DISC, MNG_LC_START); #endif if (pDISC->iCount) MNG_FREEX (pData, pDISC->pIds, (pDISC->iCount << 1)); #ifndef MNG_OPTIMIZE_OBJCLEANUP MNG_FREEX (pData, pObject, sizeof (mng_ani_disc)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_DISC, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_OBJCLEANUP return MNG_NOERROR; #else return mng_free_obj_general(pData, pObject); #endif } /* ************************************************************************** */ mng_retcode mng_process_ani_disc (mng_datap pData, mng_objectp pObject) { mng_ani_discp pDISC = (mng_ani_discp)pObject; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DISC, MNG_LC_START); #endif #ifndef MNG_OPTIMIZE_DISPLAYCALLS iRetcode = mng_process_display_disc (pData, pDISC->iCount, pDISC->pIds); #else pData->iDISCcount = pDISC->iCount; pData->pDISCids = pDISC->pIds; iRetcode = mng_process_display_disc (pData); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DISC, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DYNAMICMNG /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_event (mng_datap pData, mng_uint8 iEventtype, mng_uint8 iMasktype, mng_int32 iLeft, mng_int32 iRight, mng_int32 iTop, mng_int32 iBottom, mng_uint16 iObjectid, mng_uint8 iIndex, mng_uint32 iSegmentnamesize, mng_pchar zSegmentname) #else mng_retcode mng_create_event (mng_datap pData, mng_ptr pEntry) #endif { mng_eventp pEvent; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_EVENT, MNG_LC_START); #endif if (pData->bCacheplayback) /* caching playback info ? */ { mng_object_headerp pLast; #ifdef MNG_OPTIMIZE_OBJCLEANUP mng_ptr pTemp; mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_event), mng_free_event, mng_process_event, &pTemp); if (iRetcode) return iRetcode; pEvent = (mng_eventp)pTemp; #else MNG_ALLOC (pData, pEvent, sizeof (mng_event)); pEvent->sHeader.fCleanup = mng_free_event; pEvent->sHeader.fProcess = mng_process_event; #endif #ifndef MNG_OPTIMIZE_CHUNKREADER pEvent->iEventtype = iEventtype; pEvent->iMasktype = iMasktype; pEvent->iLeft = iLeft; pEvent->iRight = iRight; pEvent->iTop = iTop; pEvent->iBottom = iBottom; pEvent->iObjectid = iObjectid; pEvent->iIndex = iIndex; pEvent->iSegmentnamesize = iSegmentnamesize; if (iSegmentnamesize) { MNG_ALLOC (pData, pEvent->zSegmentname, iSegmentnamesize+1); MNG_COPY (pEvent->zSegmentname, zSegmentname, iSegmentnamesize); } #else pEvent->iEventtype = ((mng_evnt_entryp)pEntry)->iEventtype; pEvent->iMasktype = ((mng_evnt_entryp)pEntry)->iMasktype; pEvent->iLeft = ((mng_evnt_entryp)pEntry)->iLeft; pEvent->iRight = ((mng_evnt_entryp)pEntry)->iRight; pEvent->iTop = ((mng_evnt_entryp)pEntry)->iTop; pEvent->iBottom = ((mng_evnt_entryp)pEntry)->iBottom; pEvent->iObjectid = ((mng_evnt_entryp)pEntry)->iObjectid; pEvent->iIndex = ((mng_evnt_entryp)pEntry)->iIndex; pEvent->iSegmentnamesize = ((mng_evnt_entryp)pEntry)->iSegmentnamesize; if (pEvent->iSegmentnamesize) { MNG_ALLOC (pData, pEvent->zSegmentname, pEvent->iSegmentnamesize+1); MNG_COPY (pEvent->zSegmentname, ((mng_evnt_entryp)pEntry)->zSegmentname, pEvent->iSegmentnamesize); } #endif /* fixup the double-linked list */ pLast = (mng_object_headerp)pData->pLastevent; if (pLast) /* link it as last in the chain */ { pEvent->sHeader.pPrev = pLast; pLast->pNext = pEvent; } else { pData->pFirstevent = pEvent; } pData->pLastevent = pEvent; pData->bDynamic = MNG_TRUE; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_EVENT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_free_event (mng_datap pData, mng_objectp pObject) { mng_eventp pEvent = (mng_eventp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_EVENT, MNG_LC_START); #endif if (pEvent->iSegmentnamesize) MNG_FREEX (pData, pEvent->zSegmentname, pEvent->iSegmentnamesize + 1); #ifndef MNG_OPTIMIZE_OBJCLEANUP MNG_FREEX (pData, pEvent, sizeof (mng_event)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_EVENT, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_OBJCLEANUP return MNG_NOERROR; #else return mng_free_obj_general(pData, pObject); #endif } /* ************************************************************************** */ mng_retcode mng_process_event (mng_datap pData, mng_objectp pObject) { #ifndef MNG_SKIPCHUNK_SEEK mng_eventp pEvent = (mng_eventp)pObject; mng_object_headerp pAni; mng_bool bFound = MNG_FALSE; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_EVENT, MNG_LC_START); #endif #ifndef MNG_SKIPCHUNK_SEEK if (!pEvent->pSEEK) /* need to find SEEK first ? */ { pAni = (mng_object_headerp)pData->pFirstaniobj; while ((pAni) && (!bFound)) { if ((pAni->fCleanup == mng_free_ani_seek) && (strcmp(pEvent->zSegmentname, ((mng_ani_seekp)pAni)->zSegmentname) == 0)) bFound = MNG_TRUE; else pAni = (mng_object_headerp)pAni->pNext; } if (pAni) pEvent->pSEEK = (mng_ani_seekp)pAni; } if (pEvent->pSEEK) /* anything to do ? */ { pEvent->iLastx = pData->iEventx; pEvent->iLasty = pData->iEventy; /* let's start from this SEEK then */ pData->pCurraniobj = (mng_objectp)pEvent->pSEEK; pData->bRunningevent = MNG_TRUE; /* wake-up the app ! */ if (!pData->fSettimer ((mng_handle)pData, 5)) MNG_ERROR (pData, MNG_APPTIMERERROR); } else MNG_ERROR (pData, MNG_SEEKNOTFOUND); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_EVENT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_SUPPORT_DYNAMICMNG */ /* ************************************************************************** */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_mpng_obj (mng_datap pData, mng_uint32 iFramewidth, mng_uint32 iFrameheight, mng_uint16 iNumplays, mng_uint16 iTickspersec, mng_uint32 iFramessize, mng_ptr pFrames) #else mng_retcode mng_create_mpng_obj (mng_datap pData, mng_ptr pEntry) #endif { mng_mpng_objp pMPNG; mng_ptr pTemp; mng_retcode iRetcode; mng_uint8p pFrame; mng_int32 iCnt, iMax; mng_uint32 iX, iY, iWidth, iHeight; mng_int32 iXoffset, iYoffset; mng_uint16 iTicks; mng_uint16 iDelay; mng_bool bNewframe; mng_ani_loopp pLOOP; mng_ani_endlp pENDL; mng_ani_framp pFRAM; mng_ani_movep pMOVE; mng_ani_clipp pCLIP; mng_ani_showp pSHOW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_MPNG_OBJ, MNG_LC_START); #endif #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_mpng_obj), mng_free_mpng_obj, mng_process_mpng_obj, &pTemp); if (iRetcode) return iRetcode; pMPNG = (mng_mpng_objp)pTemp; #else MNG_ALLOC (pData, pMPNG, sizeof (mng_mpng_obj)); pMPNG->sHeader.fCleanup = mng_free_mpng_obj; pMPNG->sHeader.fProcess = mng_process_mpng_obj; #endif #ifndef MNG_OPTIMIZE_CHUNKREADER pMPNG->iFramewidth = iFramewidth; pMPNG->iFrameheight = iFrameheight; pMPNG->iNumplays = iNumplays; pMPNG->iTickspersec = iTickspersec; pMPNG->iFramessize = iFramessize; if (iFramessize) { MNG_ALLOC (pData, pMPNG->pFrames, iFramessize); MNG_COPY (pMPNG->pFrames, pFrames, iFramessize); } #else pMPNG->iFramewidth = ((mng_mpngp)pEntry)->iFramewidth; pMPNG->iFrameheight = ((mng_mpngp)pEntry)->iFrameheight; pMPNG->iNumplays = ((mng_mpngp)pEntry)->iNumplays; pMPNG->iTickspersec = ((mng_mpngp)pEntry)->iTickspersec; pMPNG->iFramessize = ((mng_mpngp)pEntry)->iFramessize; if (pMPNG->iFramessize) { MNG_ALLOC (pData, pMPNG->pFrames, pMPNG->iFramessize); MNG_COPY (pMPNG->pFrames, ((mng_mpngp)pEntry)->pFrames, pMPNG->iFramessize); } #endif pData->pMPNG = pMPNG; pData->eImagetype = mng_it_mpng; iRetcode = mng_process_display_mpng (pData); if (iRetcode) return iRetcode; /* now let's create the MNG animation directives from this */ pFrame = (mng_uint8p)pMPNG->pFrames; iMax = pMPNG->iFramessize / 26; /* set up MNG impersonation */ pData->iTicks = pMPNG->iTickspersec; pData->iLayercount = iMax; if (pMPNG->iNumplays != 1) /* create a LOOP/ENDL pair ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ani_loop), mng_free_ani_loop, mng_process_ani_loop, &((mng_ptr)pLOOP)); if (iRetcode) return iRetcode; #else MNG_ALLOC (pData, pLOOP, sizeof (mng_ani_loop)); pLOOP->sHeader.fCleanup = mng_free_ani_loop; pLOOP->sHeader.fProcess = mng_process_ani_loop; #endif pLOOP->iLevel = 1; if (pMPNG->iNumplays) pLOOP->iRepeatcount = pMPNG->iNumplays; else pLOOP->iRepeatcount = 0xFFFFFFFFl; mng_add_ani_object (pData, (mng_object_headerp)pLOOP); } bNewframe = MNG_TRUE; /* create the frame display objects */ for (iCnt = 0; iCnt < iMax; iCnt++) { iX = mng_get_uint32 (pFrame); iY = mng_get_uint32 (pFrame+4); iWidth = mng_get_uint32 (pFrame+8); iHeight = mng_get_uint32 (pFrame+12); iXoffset = mng_get_int32 (pFrame+16); iYoffset = mng_get_int32 (pFrame+20); iTicks = mng_get_uint16 (pFrame+24); iDelay = iTicks; if (!iDelay) { mng_uint8p pTemp = pFrame+26; mng_int32 iTemp = iCnt+1; while ((iTemp < iMax) && (!iDelay)) { iDelay = mng_get_uint16 (pTemp+24); pTemp += 26; iTemp++; } } if (bNewframe) { #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ani_fram), mng_free_obj_general, mng_process_ani_fram, &((mng_ptr)pFRAM)); if (iRetcode) return iRetcode; #else MNG_ALLOC (pData, pFRAM, sizeof (mng_ani_fram)); pFRAM->sHeader.fCleanup = mng_free_ani_fram; pFRAM->sHeader.fProcess = mng_process_ani_fram; #endif pFRAM->iFramemode = 4; pFRAM->iChangedelay = 1; pFRAM->iDelay = iDelay; mng_add_ani_object (pData, (mng_object_headerp)pFRAM); } #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ani_move), mng_free_obj_general, mng_process_ani_move, &((mng_ptr)pMOVE)); if (iRetcode) return iRetcode; #else MNG_ALLOC (pData, pMOVE, sizeof (mng_ani_move)); pMOVE->sHeader.fCleanup = mng_free_ani_move; pMOVE->sHeader.fProcess = mng_process_ani_move; #endif pMOVE->iLocax = iXoffset - (mng_int32)iX; pMOVE->iLocay = iYoffset - (mng_int32)iY; mng_add_ani_object (pData, (mng_object_headerp)pMOVE); #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ani_clip), mng_free_obj_general, mng_process_ani_clip, &((mng_ptr)pCLIP)); if (iRetcode) return iRetcode; #else MNG_ALLOC (pData, pCLIP, sizeof (mng_ani_clip)); pCLIP->sHeader.fCleanup = mng_free_ani_clip; pCLIP->sHeader.fProcess = mng_process_ani_clip; #endif pCLIP->iClipl = iXoffset; pCLIP->iClipr = iXoffset + (mng_int32)iWidth; pCLIP->iClipt = iYoffset; pCLIP->iClipb = iYoffset + (mng_int32)iHeight; mng_add_ani_object (pData, (mng_object_headerp)pCLIP); #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ani_show), mng_free_obj_general, mng_process_ani_show, &((mng_ptr)pSHOW)); if (iRetcode) return iRetcode; #else MNG_ALLOC (pData, pSHOW, sizeof (mng_ani_show)); pSHOW->sHeader.fCleanup = mng_free_ani_show; pSHOW->sHeader.fProcess = mng_process_ani_show; #endif mng_add_ani_object (pData, (mng_object_headerp)pSHOW); bNewframe = (mng_bool)iTicks; pFrame += 26; } if (pMPNG->iNumplays != 1) /* create a LOOP/ENDL pair ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ani_endl), mng_free_obj_general, mng_process_ani_endl, &((mng_ptr)pENDL)); if (iRetcode) return iRetcode; #else MNG_ALLOC (pData, pENDL, sizeof (mng_ani_endl)); pENDL->sHeader.fCleanup = mng_free_ani_endl; pENDL->sHeader.fProcess = mng_process_ani_endl; #endif pENDL->iLevel = 1; mng_add_ani_object (pData, (mng_object_headerp)pENDL); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_MPNG_OBJ, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_free_mpng_obj (mng_datap pData, mng_objectp pObject) { mng_mpng_objp pMPNG = (mng_mpng_objp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MPNG_OBJ, MNG_LC_START); #endif if (pMPNG->iFramessize) MNG_FREEX (pData, pMPNG->pFrames, pMPNG->iFramessize); #ifndef MNG_OPTIMIZE_OBJCLEANUP MNG_FREEX (pData, pMPNG, sizeof (mng_mpng_obj)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MPNG_OBJ, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_OBJCLEANUP return MNG_NOERROR; #else return mng_free_obj_general(pData, pObject); #endif } /* ************************************************************************** */ mng_retcode mng_process_mpng_obj (mng_datap pData, mng_objectp pObject) { return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_INCLUDE_MPNG_PROPOSAL */ /* ************************************************************************** */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER mng_retcode mng_create_ang_obj (mng_datap pData, mng_uint32 iNumframes, mng_uint32 iTickspersec, mng_uint32 iNumplays, mng_uint32 iTilewidth, mng_uint32 iTileheight, mng_uint8 iInterlace, mng_uint8 iStillused) #else mng_retcode mng_create_ang_obj (mng_datap pData, mng_ptr pEntry) #endif { mng_ang_objp pANG; mng_ptr pTemp; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANG_OBJ, MNG_LC_START); #endif #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ang_obj), mng_free_ang_obj, mng_process_ang_obj, &pTemp); if (iRetcode) return iRetcode; pANG = (mng_ang_objp)pTemp; #else MNG_ALLOC (pData, pANG, sizeof (mng_ang_obj)); pANG->sHeader.fCleanup = mng_free_ang_obj; pANG->sHeader.fProcess = mng_process_ang_obj; #endif #ifndef MNG_OPTIMIZE_CHUNKREADER pANG->iNumframes = iNumframes; pANG->iTickspersec = iTickspersec; pANG->iNumplays = iNumplays; pANG->iTilewidth = iTilewidth; pANG->iTileheight = iTileheight; pANG->iInterlace = iInterlace; pANG->iStillused = iStillused; #else pANG->iNumframes = ((mng_ahdrp)pEntry)->iNumframes; pANG->iTickspersec = ((mng_ahdrp)pEntry)->iTickspersec; pANG->iNumplays = ((mng_ahdrp)pEntry)->iNumplays; pANG->iTilewidth = ((mng_ahdrp)pEntry)->iTilewidth; pANG->iTileheight = ((mng_ahdrp)pEntry)->iTileheight; pANG->iInterlace = ((mng_ahdrp)pEntry)->iInterlace; pANG->iStillused = ((mng_ahdrp)pEntry)->iStillused; #endif pData->pANG = pANG; pData->eImagetype = mng_it_ang; iRetcode = mng_process_display_ang (pData); if (iRetcode) return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANG_OBJ, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_free_ang_obj (mng_datap pData, mng_objectp pObject) { mng_ang_objp pANG = (mng_ang_objp)pObject; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANG_OBJ, MNG_LC_START); #endif if (pANG->iTilessize) MNG_FREEX (pData, pANG->pTiles, pANG->iTilessize); #ifndef MNG_OPTIMIZE_OBJCLEANUP MNG_FREEX (pData, pANG, sizeof (mng_ang_obj)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANG_OBJ, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_OBJCLEANUP return MNG_NOERROR; #else return mng_free_obj_general(pData, pObject); #endif } /* ************************************************************************** */ mng_retcode mng_process_ang_obj (mng_datap pData, mng_objectp pObject) { mng_ang_objp pANG = (mng_ang_objp)pObject; mng_uint8p pTile = (mng_uint8p)pANG->pTiles; mng_retcode iRetcode; mng_int32 iCnt, iMax; mng_uint32 iTicks; mng_int32 iXoffset, iYoffset; mng_uint8 iSource; mng_ani_loopp pLOOP; mng_ani_endlp pENDL; mng_ani_framp pFRAM; mng_ani_movep pMOVE; mng_ani_showp pSHOW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANG_OBJ, MNG_LC_START); #endif /* let's create the MNG animation directives from this */ iMax = pANG->iNumframes; /* set up MNG impersonation */ pData->iTicks = pANG->iTickspersec; pData->iLayercount = iMax; if (pANG->iNumplays != 1) /* create a LOOP/ENDL pair ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ani_loop), mng_free_ani_loop, mng_process_ani_loop, &((mng_ptr)pLOOP)); if (iRetcode) return iRetcode; #else MNG_ALLOC (pData, pLOOP, sizeof (mng_ani_loop)); pLOOP->sHeader.fCleanup = mng_free_ani_loop; pLOOP->sHeader.fProcess = mng_process_ani_loop; #endif pLOOP->iLevel = 1; if (pANG->iNumplays) pLOOP->iRepeatcount = pANG->iNumplays; else pLOOP->iRepeatcount = 0xFFFFFFFFl; mng_add_ani_object (pData, (mng_object_headerp)pLOOP); } for (iCnt = 0; iCnt < iMax; iCnt++) { iTicks = mng_get_uint32 (pTile); iXoffset = mng_get_int32 (pTile+4); iYoffset = mng_get_int32 (pTile+8); iSource = *(pTile+12); #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ani_fram), mng_free_obj_general, mng_process_ani_fram, &((mng_ptr)pFRAM)); if (iRetcode) return iRetcode; #else MNG_ALLOC (pData, pFRAM, sizeof (mng_ani_fram)); pFRAM->sHeader.fCleanup = mng_free_ani_fram; pFRAM->sHeader.fProcess = mng_process_ani_fram; #endif pFRAM->iFramemode = 4; pFRAM->iChangedelay = 1; pFRAM->iDelay = iTicks; mng_add_ani_object (pData, (mng_object_headerp)pFRAM); if (!iSource) { #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ani_move), mng_free_obj_general, mng_process_ani_move, &((mng_ptr)pMOVE)); if (iRetcode) return iRetcode; #else MNG_ALLOC (pData, pMOVE, sizeof (mng_ani_move)); pMOVE->sHeader.fCleanup = mng_free_ani_move; pMOVE->sHeader.fProcess = mng_process_ani_move; #endif pMOVE->iFirstid = 1; pMOVE->iLastid = 1; pMOVE->iLocax = -iXoffset; pMOVE->iLocay = -iYoffset; mng_add_ani_object (pData, (mng_object_headerp)pMOVE); } #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ani_show), mng_free_obj_general, mng_process_ani_show, &((mng_ptr)pSHOW)); if (iRetcode) return iRetcode; #else MNG_ALLOC (pData, pSHOW, sizeof (mng_ani_show)); pSHOW->sHeader.fCleanup = mng_free_ani_show; pSHOW->sHeader.fProcess = mng_process_ani_show; #endif if (iSource) pSHOW->iFirstid = 0; else pSHOW->iFirstid = 1; pSHOW->iLastid = pSHOW->iFirstid; mng_add_ani_object (pData, (mng_object_headerp)pSHOW); pTile += sizeof(mng_adat_tile); } if (pANG->iNumplays != 1) /* create a LOOP/ENDL pair ? */ { #ifdef MNG_OPTIMIZE_OBJCLEANUP iRetcode = create_obj_general (pData, sizeof (mng_ani_endl), mng_free_obj_general, mng_process_ani_endl, &((mng_ptr)pENDL)); if (iRetcode) return iRetcode; #else MNG_ALLOC (pData, pENDL, sizeof (mng_ani_endl)); pENDL->sHeader.fCleanup = mng_free_ani_endl; pENDL->sHeader.fProcess = mng_process_ani_endl; #endif pENDL->iLevel = 1; mng_add_ani_object (pData, (mng_object_headerp)pENDL); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANG_OBJ, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_INCLUDE_ANG_PROPOSAL */ /* ************************************************************************** */ #endif /* MNG_INCLUDE_DISPLAY_PROCS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/Makefile0000644000000000000000000007573112115373260013136 0ustar rootroot# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile. Generated from Makefile.in by configure. # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/libmng-2.0.2 pkgincludedir = $(includedir)/libmng-2.0.2 pkglibdir = $(libdir)/libmng-2.0.2 pkglibexecdir = $(libexecdir)/libmng-2.0.2 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = x86_64-unknown-linux-gnu host_triplet = x86_64-unknown-linux-gnu subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in $(srcdir)/libmng.pc.in \ $(include_HEADERS) $(noinst_HEADERS) README config.guess \ config.sub install-sh missing ltmain.sh ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = libmng.pc CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" \ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libmng_la_LIBADD = am_libmng_la_OBJECTS = libmng_callback_xs.lo libmng_chunk_io.lo \ libmng_chunk_prc.lo libmng_chunk_xs.lo libmng_cms.lo \ libmng_display.lo libmng_dither.lo libmng_error.lo \ libmng_filter.lo libmng_hlapi.lo libmng_jpeg.lo \ libmng_object_prc.lo libmng_pixels.lo libmng_prop_xs.lo \ libmng_read.lo libmng_trace.lo libmng_write.lo libmng_zlib.lo libmng_la_OBJECTS = $(am_libmng_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent am__v_lt_1 = libmng_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libmng_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_$(V)) am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I. depcomp = am__depfiles_maybe = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmng_la_SOURCES) DIST_SOURCES = $(libmng_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac man3dir = $(mandir)/man3 man5dir = $(mandir)/man5 NROFF = nroff MANS = $(man_MANS) DATA = $(pkgconfig_DATA) HEADERS = $(include_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope AM_RECURSIVE_TARGETS = cscope DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = ${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing aclocal-1.13 AMTAR = $${TAR-tar} AM_DEFAULT_VERBOSITY = 1 AR = ar AS = as AUTOCONF = ${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing autoconf AUTOHEADER = ${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing autoheader AUTOMAKE = ${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing automake-1.13 AWK = gawk CC = gcc CCDEPMODE = depmode=none CFLAGS = -g -O2 CPP = gcc -E CPPFLAGS = CYGPATH_W = echo DEFS = -DHAVE_CONFIG_H DEPDIR = .deps DLLTOOL = dlltool DSYMUTIL = DUMPBIN = ECHO_C = ECHO_N = -n ECHO_T = EGREP = /usr/bin/grep -E EXEEXT = FGREP = /usr/bin/grep -F GREP = /usr/bin/grep INSTALL = /usr/bin/ginstall -c INSTALL_DATA = ${INSTALL} -m 644 INSTALL_PROGRAM = ${INSTALL} INSTALL_SCRIPT = ${INSTALL} INSTALL_STRIP_PROGRAM = $(install_sh) -c -s LD = /usr/x86_64-slackware-linux/bin/ld -m elf_x86_64 LDFLAGS = LIBOBJS = LIBS = -lz -lm -ljpeg -llcms2 LIBTOOL = $(SHELL) $(top_builddir)/libtool LIPO = LN_S = ln -s LTLIBOBJS = MAKEINFO = ${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing makeinfo MANIFEST_TOOL = : MKDIR_P = /usr/bin/mkdir -p MNG_MAJOR_NR = 2 MNG_MINOR_NR = 0 MNG_RELEASE_NR = 2 NM = /usr/bin/nm -B NMEDIT = OBJDUMP = objdump OBJEXT = o OTOOL = OTOOL64 = PACKAGE = libmng-2.0.2 PACKAGE_BUGREPORT = png-mng-implement@lists.sourceforge.net PACKAGE_NAME = libmng PACKAGE_STRING = libmng 2.0.2 PACKAGE_TARNAME = libmng-2.0.2 PACKAGE_URL = http://www.libmng.com/ PACKAGE_VERSION = 2.0.2 PATH_SEPARATOR = : RANLIB = ranlib SED = /usr/bin/sed SET_MAKE = SHELL = /bin/sh STRIP = strip VERSION = 2.0.2 abs_builddir = /sources/LIB/MNG/libmng-2.0.2 abs_srcdir = /sources/LIB/MNG/libmng-2.0.2 abs_top_builddir = /sources/LIB/MNG/libmng-2.0.2 abs_top_srcdir = /sources/LIB/MNG/libmng-2.0.2 ac_ct_AR = ar ac_ct_CC = gcc ac_ct_DUMPBIN = am__include = include am__leading_dot = . am__quote = am__tar = $${TAR-tar} chof - "$$tardir" am__untar = $${TAR-tar} xf - bindir = ${exec_prefix}/bin build = x86_64-unknown-linux-gnu build_alias = build_cpu = x86_64 build_os = linux-gnu build_vendor = unknown builddir = . datadir = ${datarootdir} datarootdir = ${prefix}/share docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} dvidir = ${docdir} exec_prefix = ${prefix} host = x86_64-unknown-linux-gnu host_alias = host_cpu = x86_64 host_os = linux-gnu host_vendor = unknown htmldir = ${docdir} includedir = ${prefix}/include infodir = ${datarootdir}/info install_sh = ${SHELL} /sources/LIB/MNG/libmng-2.0.2/install-sh libdir = /usr/lib64 libexecdir = ${exec_prefix}/libexec localedir = ${datarootdir}/locale localstatedir = ${prefix}/var mandir = ${datarootdir}/man mkdir_p = $(MKDIR_P) oldincludedir = /usr/include pdfdir = ${docdir} prefix = /usr program_transform_name = s,x,x, psdir = ${docdir} sbindir = ${exec_prefix}/sbin sharedstatedir = ${prefix}/com srcdir = . sysconfdir = ${prefix}/etc target_alias = top_build_prefix = top_builddir = . top_srcdir = . MAINTAINERCLEANFILES = Makefile.in ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = 1.3 foreign no-dependencies # include the app subdirectories in the distribution EXTRA_DIST = makefiles doc contrib # libmng release 2.0.2 libmng_la_LDFLAGS = \ -version-number 2:0:2 lib_LTLIBRARIES = libmng.la include_HEADERS = libmng.h libmng_conf.h libmng_types.h noinst_HEADERS = libmng_chunk_io.h libmng_chunk_prc.h libmng_chunks.h \ libmng_cms.h libmng_data.h libmng_display.h libmng_dither.h \ libmng_error.h libmng_filter.h libmng_jpeg.h libmng_memory.h \ libmng_object_prc.h libmng_objects.h libmng_pixels.h \ libmng_read.h libmng_trace.h libmng_write.h libmng_zlib.h libmng_la_SOURCES = libmng_callback_xs.c libmng_chunk_io.c \ libmng_chunk_prc.c libmng_chunk_xs.c libmng_cms.c \ libmng_display.c libmng_dither.c libmng_error.c \ libmng_filter.c libmng_hlapi.c libmng_jpeg.c \ libmng_object_prc.c libmng_pixels.c libmng_prop_xs.c \ libmng_read.c libmng_trace.c libmng_write.c libmng_zlib.c man_MANS = doc/man/libmng.3 doc/man/jng.5 doc/man/mng.5 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libmng.pc all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 libmng.pc: $(top_builddir)/config.status $(srcdir)/libmng.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libmng.la: $(libmng_la_OBJECTS) $(libmng_la_DEPENDENCIES) $(EXTRA_libmng_la_DEPENDENCIES) $(AM_V_CCLD)$(libmng_la_LINK) -rpath $(libdir) $(libmng_la_OBJECTS) $(libmng_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c .c.o: $(AM_V_CC)$(COMPILE) -c $< .c.obj: $(AM_V_CC)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-man3: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man3dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.3[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ done; } uninstall-man3: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man3dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.3[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) install-man5: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man5dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.5[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS) config.h installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-man \ install-pkgconfigDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man3 install-man5 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \ uninstall-man uninstall-pkgconfigDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-man: uninstall-man3 uninstall-man5 .MAKE: all install-am install-strip uninstall-am .PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \ clean-cscope clean-generic clean-libLTLIBRARIES clean-libtool \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-includeHEADERS \ install-info install-info-am install-libLTLIBRARIES \ install-man install-man3 install-man5 install-pdf \ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-hook uninstall-includeHEADERS \ uninstall-libLTLIBRARIES uninstall-man uninstall-man3 \ uninstall-man5 uninstall-pkgconfigDATA uninstall-hook: rm -f $(DESTDIR)$(pkgconfigdir)/libmng.pc rm -f $(DESTDIR)$(includedir)/libmng.h rm -f $(DESTDIR)$(includedir)/libmng_conf.h rm -f $(DESTDIR)$(includedir)/libmng_types.h # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libmng-2.0.2/libmng_chunk_xs.c0000644000000000000000000076760012005307152015012 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_chunk_xs.c copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : chunk access functions (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the chunk access functions * */ /* * * */ /* * changes : 0.5.1 - 05/06/2000 - G.Juyn * */ /* * - changed and filled iterate-chunk function * */ /* * 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - fixed calling convention * */ /* * - added getchunk functions * */ /* * - added putchunk functions * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - added empty-chunk put-routines * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * 0.5.1 - 05/15/2000 - G.Juyn * */ /* * - added getimgdata & putimgdata functions * */ /* * * */ /* * 0.5.2 - 05/19/2000 - G.Juyn * */ /* * - B004 - fixed problem with MNG_SUPPORT_WRITE not defined * */ /* * also for MNG_SUPPORT_WRITE without MNG_INCLUDE_JNG * */ /* * - Cleaned up some code regarding mixed support * */ /* * * */ /* * 0.9.1 - 07/19/2000 - G.Juyn * */ /* * - fixed creation-code * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * - added function to set simplicity field * */ /* * - fixed putchunk_unknown() function * */ /* * * */ /* * 0.9.3 - 08/07/2000 - G.Juyn * */ /* * - B111300 - fixup for improved portability * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 10/20/2000 - G.Juyn * */ /* * - fixed putchunk_plte() to set bEmpty parameter * */ /* * * */ /* * 0.9.5 - 01/25/2001 - G.Juyn * */ /* * - fixed some small compiler warnings (thanks Nikki) * */ /* * * */ /* * 1.0.5 - 09/07/2002 - G.Juyn * */ /* * - B578940 - unimplemented functions return errorcode * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * - added HLAPI function to copy chunks * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * 1.0.5 - 10/07/2002 - G.Juyn * */ /* * - added check for TERM placement during create/write * */ /* * 1.0.5 - 11/28/2002 - G.Juyn * */ /* * - fixed definition of iMethodX/Y for MAGN chunk * */ /* * * */ /* * 1.0.6 - 05/25/2003 - G.R-P * */ /* * - added MNG_SKIPCHUNK_cHNK footprint optimizations * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - added MNG_NO_DELTA_PNG reduction and more SKIPCHUNK * */ /* * optimizations * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditionals around PAST chunk support * */ /* * 1.0.6 - 08/17/2003 - G.R-P * */ /* * - added conditionals around non-VLC chunk support * */ /* * * */ /* * 1.0.8 - 04/01/2004 - G.Juyn * */ /* * - added missing get-/put-chunk-jdaa * */ /* * 1.0.8 - 08/02/2004 - G.Juyn * */ /* * - added conditional to allow easier writing of large MNG's * */ /* * * */ /* * 1.0.9 - 09/17/2004 - G.R-P * */ /* * - added two more conditionals * */ /* * 1.0.9 - 09/25/2004 - G.Juyn * */ /* * - replaced MNG_TWEAK_LARGE_FILES with permanent solution * */ /* * 1.0.9 - 17/14/2004 - G.Juyn * */ /* * - fixed PPLT getchunk/putchunk routines * */ /* * 1.0.9 - 12/05/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKINITFREE * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_memory.h" #include "libmng_chunks.h" #ifdef MNG_OPTIMIZE_CHUNKREADER #include "libmng_chunk_descr.h" #endif #include "libmng_chunk_prc.h" #include "libmng_chunk_io.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #ifdef MNG_ACCESS_CHUNKS /* ************************************************************************** */ mng_retcode MNG_DECL mng_iterate_chunks (mng_handle hHandle, mng_uint32 iChunkseq, mng_iteratechunk fProc) { mng_uint32 iSeq; mng_chunkid iChunkname; mng_datap pData; mng_chunkp pChunk; mng_bool bCont; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_ITERATE_CHUNKS, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)hHandle); /* and make it addressable */ iSeq = 0; bCont = MNG_TRUE; pChunk = pData->pFirstchunk; /* get the first chunk */ /* as long as there are some more */ while ((pChunk) && (bCont)) /* and the app didn't signal a stop */ { if (iSeq >= iChunkseq) /* reached the first target ? */ { /* then call this and next ones back in... */ iChunkname = ((mng_chunk_headerp)pChunk)->iChunkname; bCont = fProc (hHandle, (mng_handle)pChunk, iChunkname, iSeq); } iSeq++; /* next one */ pChunk = ((mng_chunk_headerp)pChunk)->pNext; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_ITERATE_CHUNKS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_copy_chunk (mng_handle hHandle, mng_handle hChunk, mng_handle hHandleOut) { mng_datap pDataOut; mng_chunkp pChunk; mng_chunkp pChunkOut; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_COPY_CHUNK, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handles */ MNG_VALIDHANDLE (hHandleOut) pDataOut = (mng_datap)hHandleOut; /* make outhandle addressable */ pChunk = (mng_chunkp)hChunk; /* address the chunk */ if (!pDataOut->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pDataOut, MNG_FUNCTIONINVALID) /* create a new chunk */ iRetcode = ((mng_createchunk)((mng_chunk_headerp)pChunk)->fCreate) (pDataOut, ((mng_chunk_headerp)pChunk), &pChunkOut); if (!iRetcode) /* assign the chunk-specific data */ iRetcode = ((mng_assignchunk)((mng_chunk_headerp)pChunk)->fAssign) (pDataOut, pChunkOut, pChunk); if (iRetcode) /* on error bail out */ return iRetcode; mng_add_chunk (pDataOut, pChunkOut); /* and put it in the output-stream */ /* could it be the end of the chain ? */ if (((mng_chunk_headerp)pChunkOut)->iChunkname == MNG_UINT_IEND) { #ifdef MNG_INCLUDE_JNG if ((pDataOut->iFirstchunkadded == MNG_UINT_IHDR) || (pDataOut->iFirstchunkadded == MNG_UINT_JHDR) ) #else if (pDataOut->iFirstchunkadded == MNG_UINT_IHDR) #endif pDataOut->bCreating = MNG_FALSE; /* right; this should be the last chunk !!! */ } if (((mng_chunk_headerp)pChunkOut)->iChunkname == MNG_UINT_MEND) pDataOut->bCreating = MNG_FALSE; /* definitely this should be the last !!! */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_COPY_CHUNK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ /* ************************************************************************** */ mng_retcode MNG_DECL mng_getchunk_ihdr (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iWidth, mng_uint32 *iHeight, mng_uint8 *iBitdepth, mng_uint8 *iColortype, mng_uint8 *iCompression, mng_uint8 *iFilter, mng_uint8 *iInterlace) { mng_datap pData; mng_ihdrp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_IHDR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_ihdrp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_IHDR) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iWidth = pChunk->iWidth; /* fill the fields */ *iHeight = pChunk->iHeight; *iBitdepth = pChunk->iBitdepth; *iColortype = pChunk->iColortype; *iCompression = pChunk->iCompression; *iFilter = pChunk->iFilter; *iInterlace = pChunk->iInterlace; /* fill the chunk */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_IHDR, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_getchunk_plte (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iCount, mng_palette8 *aPalette) { mng_datap pData; mng_pltep pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PLTE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_pltep)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_PLTE) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iCount = pChunk->iEntrycount; /* fill the fields */ MNG_COPY (*aPalette, pChunk->aEntries, sizeof (mng_palette8)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PLTE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_getchunk_idat (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iRawlen, mng_ptr *pRawdata) { mng_datap pData; mng_idatp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_IDAT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_idatp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_IDAT) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iRawlen = pChunk->iDatasize; /* fill the fields */ *pRawdata = pChunk->pData; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_IDAT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_getchunk_trns (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_bool *bGlobal, mng_uint8 *iType, mng_uint32 *iCount, mng_uint8arr *aAlphas, mng_uint16 *iGray, mng_uint16 *iRed, mng_uint16 *iGreen, mng_uint16 *iBlue, mng_uint32 *iRawlen, mng_uint8arr *aRawdata) { mng_datap pData; mng_trnsp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TRNS, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_trnsp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_tRNS) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *bGlobal = pChunk->bGlobal; *iType = pChunk->iType; *iCount = pChunk->iCount; *iGray = pChunk->iGray; *iRed = pChunk->iRed; *iGreen = pChunk->iGreen; *iBlue = pChunk->iBlue; *iRawlen = pChunk->iRawlen; MNG_COPY (*aAlphas, pChunk->aEntries, sizeof (mng_uint8arr)); MNG_COPY (*aRawdata, pChunk->aRawdata, sizeof (mng_uint8arr)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TRNS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_gAMA mng_retcode MNG_DECL mng_getchunk_gama (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iGamma) { mng_datap pData; mng_gamap pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_GAMA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_gamap)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_gAMA) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *iGamma = pChunk->iGamma; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_GAMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_cHRM mng_retcode MNG_DECL mng_getchunk_chrm (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iWhitepointx, mng_uint32 *iWhitepointy, mng_uint32 *iRedx, mng_uint32 *iRedy, mng_uint32 *iGreenx, mng_uint32 *iGreeny, mng_uint32 *iBluex, mng_uint32 *iBluey) { mng_datap pData; mng_chrmp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CHRM, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_chrmp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_cHRM) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *iWhitepointx = pChunk->iWhitepointx; *iWhitepointy = pChunk->iWhitepointy; *iRedx = pChunk->iRedx; *iRedy = pChunk->iRedy; *iGreenx = pChunk->iGreenx; *iGreeny = pChunk->iGreeny; *iBluex = pChunk->iBluex; *iBluey = pChunk->iBluey; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CHRM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sRGB mng_retcode MNG_DECL mng_getchunk_srgb (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint8 *iRenderingintent) { mng_datap pData; mng_srgbp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SRGB, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_srgbp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_sRGB) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *iRenderingintent = pChunk->iRenderingintent; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SRGB, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iCCP mng_retcode MNG_DECL mng_getchunk_iccp (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iNamesize, mng_pchar *zName, mng_uint8 *iCompression, mng_uint32 *iProfilesize, mng_ptr *pProfile) { mng_datap pData; mng_iccpp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ICCP, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_iccpp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_iCCP) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *iNamesize = pChunk->iNamesize; *zName = pChunk->zName; *iCompression = pChunk->iCompression; *iProfilesize = pChunk->iProfilesize; *pProfile = pChunk->pProfile; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ICCP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tEXt mng_retcode MNG_DECL mng_getchunk_text (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iKeywordsize, mng_pchar *zKeyword, mng_uint32 *iTextsize, mng_pchar *zText) { mng_datap pData; mng_textp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TEXT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_textp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_tEXt) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ /* fill the fields */ *iKeywordsize = pChunk->iKeywordsize; *zKeyword = pChunk->zKeyword; *iTextsize = pChunk->iTextsize; *zText = pChunk->zText; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TEXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_zTXt mng_retcode MNG_DECL mng_getchunk_ztxt (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iKeywordsize, mng_pchar *zKeyword, mng_uint8 *iCompression, mng_uint32 *iTextsize, mng_pchar *zText) { mng_datap pData; mng_ztxtp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ZTXT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_ztxtp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_zTXt) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ /* fill the fields */ *iKeywordsize = pChunk->iKeywordsize; *zKeyword = pChunk->zKeyword; *iCompression = pChunk->iCompression; *iTextsize = pChunk->iTextsize; *zText = pChunk->zText; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ZTXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iTXt mng_retcode MNG_DECL mng_getchunk_itxt (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iKeywordsize, mng_pchar *zKeyword, mng_uint8 *iCompressionflag, mng_uint8 *iCompressionmethod, mng_uint32 *iLanguagesize, mng_pchar *zLanguage, mng_uint32 *iTranslationsize, mng_pchar *zTranslation, mng_uint32 *iTextsize, mng_pchar *zText) { mng_datap pData; mng_itxtp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ITXT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_itxtp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_iTXt) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ /* fill the fields */ *iKeywordsize = pChunk->iKeywordsize; *zKeyword = pChunk->zKeyword; *iCompressionflag = pChunk->iCompressionflag; *iCompressionmethod = pChunk->iCompressionmethod; *iLanguagesize = pChunk->iLanguagesize; *zLanguage = pChunk->zLanguage; *iTranslationsize = pChunk->iTranslationsize; *zTranslation = pChunk->zTranslation; *iTextsize = pChunk->iTextsize; *zText = pChunk->zText; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ITXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_bKGD mng_retcode MNG_DECL mng_getchunk_bkgd (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint8 *iType, mng_uint8 *iIndex, mng_uint16 *iGray, mng_uint16 *iRed, mng_uint16 *iGreen, mng_uint16 *iBlue) { mng_datap pData; mng_bkgdp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BKGD, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_bkgdp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_bKGD) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *iType = pChunk->iType; *iIndex = pChunk->iIndex; *iGray = pChunk->iGray; *iRed = pChunk->iRed; *iGreen = pChunk->iGreen; *iBlue = pChunk->iBlue; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BKGD, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYs mng_retcode MNG_DECL mng_getchunk_phys (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iSizex, mng_uint32 *iSizey, mng_uint8 *iUnit) { mng_datap pData; mng_physp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PHYS, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_physp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_pHYs) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *iSizex = pChunk->iSizex; *iSizey = pChunk->iSizey; *iUnit = pChunk->iUnit; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PHYS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sBIT mng_retcode MNG_DECL mng_getchunk_sbit (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint8 *iType, mng_uint8arr4 *aBits) { mng_datap pData; mng_sbitp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SBIT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_sbitp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_sBIT) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; *iType = pChunk->iType; (*aBits)[0] = pChunk->aBits[0]; (*aBits)[1] = pChunk->aBits[1]; (*aBits)[2] = pChunk->aBits[2]; (*aBits)[3] = pChunk->aBits[3]; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SBIT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sPLT mng_retcode MNG_DECL mng_getchunk_splt (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iNamesize, mng_pchar *zName, mng_uint8 *iSampledepth, mng_uint32 *iEntrycount, mng_ptr *pEntries) { mng_datap pData; mng_spltp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SPLT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_spltp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_sPLT) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *iNamesize = pChunk->iNamesize; *zName = pChunk->zName; *iSampledepth = pChunk->iSampledepth; *iEntrycount = pChunk->iEntrycount; *pEntries = pChunk->pEntries; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SPLT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_hIST mng_retcode MNG_DECL mng_getchunk_hist (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iEntrycount, mng_uint16arr *aEntries) { mng_datap pData; mng_histp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_HIST, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_histp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_hIST) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iEntrycount = pChunk->iEntrycount; /* fill the fields */ MNG_COPY (*aEntries, pChunk->aEntries, sizeof (mng_uint16arr)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_HIST, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tIME mng_retcode MNG_DECL mng_getchunk_time (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iYear, mng_uint8 *iMonth, mng_uint8 *iDay, mng_uint8 *iHour, mng_uint8 *iMinute, mng_uint8 *iSecond) { mng_datap pData; mng_timep pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TIME, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_timep)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_tIME) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iYear = pChunk->iYear; /* fill the fields */ *iMonth = pChunk->iMonth; *iDay = pChunk->iDay; *iHour = pChunk->iHour; *iMinute = pChunk->iMinute; *iSecond = pChunk->iSecond; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TIME, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode MNG_DECL mng_getchunk_mhdr (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iWidth, mng_uint32 *iHeight, mng_uint32 *iTicks, mng_uint32 *iLayercount, mng_uint32 *iFramecount, mng_uint32 *iPlaytime, mng_uint32 *iSimplicity) { mng_datap pData; mng_mhdrp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MHDR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_mhdrp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iWidth = pChunk->iWidth; /* fill the fields */ *iHeight = pChunk->iHeight; *iTicks = pChunk->iTicks; *iLayercount = pChunk->iLayercount; *iFramecount = pChunk->iFramecount; *iPlaytime = pChunk->iPlaytime; *iSimplicity = pChunk->iSimplicity; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MHDR, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_LOOP mng_retcode MNG_DECL mng_getchunk_loop (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iLevel, mng_uint32 *iRepeat, mng_uint8 *iTermination, mng_uint32 *iItermin, mng_uint32 *iItermax, mng_uint32 *iCount, mng_uint32p *pSignals) { mng_datap pData; mng_loopp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_LOOP, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_loopp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_LOOP) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iLevel = pChunk->iLevel; /* fill teh fields */ *iRepeat = pChunk->iRepeat; *iTermination = pChunk->iTermination; *iItermin = pChunk->iItermin; *iItermax = pChunk->iItermax; *iCount = pChunk->iCount; *pSignals = pChunk->pSignals; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_LOOP, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_getchunk_endl (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iLevel) { mng_datap pData; mng_endlp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ENDL, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_endlp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_ENDL) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iLevel = pChunk->iLevel; /* fill the field */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ENDL, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DEFI mng_retcode MNG_DECL mng_getchunk_defi (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iObjectid, mng_uint8 *iDonotshow, mng_uint8 *iConcrete, mng_bool *bHasloca, mng_int32 *iXlocation, mng_int32 *iYlocation, mng_bool *bHasclip, mng_int32 *iLeftcb, mng_int32 *iRightcb, mng_int32 *iTopcb, mng_int32 *iBottomcb) { mng_datap pData; mng_defip pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DEFI, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_defip)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_DEFI) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iObjectid = pChunk->iObjectid; /* fill the fields */ *iDonotshow = pChunk->iDonotshow; *iConcrete = pChunk->iConcrete; *bHasloca = pChunk->bHasloca; *iXlocation = pChunk->iXlocation; *iYlocation = pChunk->iYlocation; *bHasclip = pChunk->bHasclip; *iLeftcb = pChunk->iLeftcb; *iRightcb = pChunk->iRightcb; *iTopcb = pChunk->iTopcb; *iBottomcb = pChunk->iBottomcb; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DEFI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BASI mng_retcode MNG_DECL mng_getchunk_basi (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iWidth, mng_uint32 *iHeight, mng_uint8 *iBitdepth, mng_uint8 *iColortype, mng_uint8 *iCompression, mng_uint8 *iFilter, mng_uint8 *iInterlace, mng_uint16 *iRed, mng_uint16 *iGreen, mng_uint16 *iBlue, mng_uint16 *iAlpha, mng_uint8 *iViewable) { mng_datap pData; mng_basip pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BASI, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_basip)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_BASI) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iWidth = pChunk->iWidth; /* fill the fields */ *iHeight = pChunk->iHeight; *iBitdepth = pChunk->iBitdepth; *iColortype = pChunk->iColortype; *iCompression = pChunk->iCompression; *iFilter = pChunk->iFilter; *iInterlace = pChunk->iInterlace; *iRed = pChunk->iRed; *iGreen = pChunk->iGreen; *iBlue = pChunk->iBlue; *iAlpha = pChunk->iAlpha; *iViewable = pChunk->iViewable; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BASI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLON mng_retcode MNG_DECL mng_getchunk_clon (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iSourceid, mng_uint16 *iCloneid, mng_uint8 *iClonetype, mng_uint8 *iDonotshow, mng_uint8 *iConcrete, mng_bool *bHasloca, mng_uint8 *iLocationtype, mng_int32 *iLocationx, mng_int32 *iLocationy) { mng_datap pData; mng_clonp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CLON, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_clonp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_CLON) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iSourceid = pChunk->iSourceid; /* fill the fields */ *iCloneid = pChunk->iCloneid; *iClonetype = pChunk->iClonetype; *iDonotshow = pChunk->iDonotshow; *iConcrete = pChunk->iConcrete; *bHasloca = pChunk->bHasloca; *iLocationtype = pChunk->iLocationtype; *iLocationx = pChunk->iLocationx; *iLocationy = pChunk->iLocationy; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CLON, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST mng_retcode MNG_DECL mng_getchunk_past (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iDestid, mng_uint8 *iTargettype, mng_int32 *iTargetx, mng_int32 *iTargety, mng_uint32 *iCount) { mng_datap pData; mng_pastp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PAST, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_pastp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_PAST) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iDestid = pChunk->iDestid; /* fill the fields */ *iTargettype = pChunk->iTargettype; *iTargetx = pChunk->iTargetx; *iTargety = pChunk->iTargety; *iCount = pChunk->iCount; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PAST, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST mng_retcode MNG_DECL mng_getchunk_past_src (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_uint16 *iSourceid, mng_uint8 *iComposition, mng_uint8 *iOrientation, mng_uint8 *iOffsettype, mng_int32 *iOffsetx, mng_int32 *iOffsety, mng_uint8 *iBoundarytype, mng_int32 *iBoundaryl, mng_int32 *iBoundaryr, mng_int32 *iBoundaryt, mng_int32 *iBoundaryb) { mng_datap pData; mng_pastp pChunk; mng_past_sourcep pEntry; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PAST_SRC, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_pastp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_PAST) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ if (iEntry >= pChunk->iCount) /* valid index ? */ MNG_ERROR (pData, MNG_INVALIDENTRYIX) /* address the entry */ pEntry = pChunk->pSources + iEntry; *iSourceid = pEntry->iSourceid; /* fill the fields */ *iComposition = pEntry->iComposition; *iOrientation = pEntry->iOrientation; *iOffsettype = pEntry->iOffsettype; *iOffsetx = pEntry->iOffsetx; *iOffsety = pEntry->iOffsety; *iBoundarytype = pEntry->iBoundarytype; *iBoundaryl = pEntry->iBoundaryl; *iBoundaryr = pEntry->iBoundaryr; *iBoundaryt = pEntry->iBoundaryt; *iBoundaryb = pEntry->iBoundaryb; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PAST_SRC, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DISC mng_retcode MNG_DECL mng_getchunk_disc (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iCount, mng_uint16p *pObjectids) { mng_datap pData; mng_discp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DISC, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_discp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_DISC) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iCount = pChunk->iCount; /* fill the fields */ *pObjectids = pChunk->pObjectids; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DISC, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BACK mng_retcode MNG_DECL mng_getchunk_back (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iRed, mng_uint16 *iGreen, mng_uint16 *iBlue, mng_uint8 *iMandatory, mng_uint16 *iImageid, mng_uint8 *iTile) { mng_datap pData; mng_backp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BACK, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_backp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_BACK) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iRed = pChunk->iRed; /* fill the fields */ *iGreen = pChunk->iGreen; *iBlue = pChunk->iBlue; *iMandatory = pChunk->iMandatory; *iImageid = pChunk->iImageid; *iTile = pChunk->iTile; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BACK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_FRAM mng_retcode MNG_DECL mng_getchunk_fram (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint8 *iMode, mng_uint32 *iNamesize, mng_pchar *zName, mng_uint8 *iChangedelay, mng_uint8 *iChangetimeout, mng_uint8 *iChangeclipping, mng_uint8 *iChangesyncid, mng_uint32 *iDelay, mng_uint32 *iTimeout, mng_uint8 *iBoundarytype, mng_int32 *iBoundaryl, mng_int32 *iBoundaryr, mng_int32 *iBoundaryt, mng_int32 *iBoundaryb, mng_uint32 *iCount, mng_uint32p *pSyncids) { mng_datap pData; mng_framp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_FRAM, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_framp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_FRAM) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *iMode = pChunk->iMode; *iNamesize = pChunk->iNamesize; *zName = pChunk->zName; *iChangedelay = pChunk->iChangedelay; *iChangetimeout = pChunk->iChangetimeout; *iChangeclipping = pChunk->iChangeclipping; *iChangesyncid = pChunk->iChangesyncid; *iDelay = pChunk->iDelay; *iTimeout = pChunk->iTimeout; *iBoundarytype = pChunk->iBoundarytype; *iBoundaryl = pChunk->iBoundaryl; *iBoundaryr = pChunk->iBoundaryr; *iBoundaryt = pChunk->iBoundaryt; *iBoundaryb = pChunk->iBoundaryb; *iCount = pChunk->iCount; *pSyncids = pChunk->pSyncids; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_FRAM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MOVE mng_retcode MNG_DECL mng_getchunk_move (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iFirstid, mng_uint16 *iLastid, mng_uint8 *iMovetype, mng_int32 *iMovex, mng_int32 *iMovey) { mng_datap pData; mng_movep pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MOVE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_movep)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_MOVE) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iFirstid = pChunk->iFirstid; /* fill the fields */ *iLastid = pChunk->iLastid; *iMovetype = pChunk->iMovetype; *iMovex = pChunk->iMovex; *iMovey = pChunk->iMovey; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MOVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLIP mng_retcode MNG_DECL mng_getchunk_clip (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iFirstid, mng_uint16 *iLastid, mng_uint8 *iCliptype, mng_int32 *iClipl, mng_int32 *iClipr, mng_int32 *iClipt, mng_int32 *iClipb) { mng_datap pData; mng_clipp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CLIP, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_clipp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_CLIP) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iFirstid = pChunk->iFirstid; /* fill the fields */ *iLastid = pChunk->iLastid; *iCliptype = pChunk->iCliptype; *iClipl = pChunk->iClipl; *iClipr = pChunk->iClipr; *iClipt = pChunk->iClipt; *iClipb = pChunk->iClipb; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CLIP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SHOW mng_retcode MNG_DECL mng_getchunk_show (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint16 *iFirstid, mng_uint16 *iLastid, mng_uint8 *iMode) { mng_datap pData; mng_showp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SHOW, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_showp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_SHOW) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *iFirstid = pChunk->iFirstid; *iLastid = pChunk->iLastid; *iMode = pChunk->iMode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SHOW, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_TERM mng_retcode MNG_DECL mng_getchunk_term (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iTermaction, mng_uint8 *iIteraction, mng_uint32 *iDelay, mng_uint32 *iItermax) { mng_datap pData; mng_termp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TERM, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_termp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_TERM) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iTermaction = pChunk->iTermaction; /* fill the fields */ *iIteraction = pChunk->iIteraction; *iDelay = pChunk->iDelay; *iItermax = pChunk->iItermax; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TERM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE mng_retcode MNG_DECL mng_getchunk_save (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint8 *iOffsettype, mng_uint32 *iCount) { mng_datap pData; mng_savep pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SAVE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_savep)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_SAVE) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *iOffsettype = pChunk->iOffsettype; *iCount = pChunk->iCount; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SAVE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_getchunk_save_entry (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_uint8 *iEntrytype, mng_uint32arr2 *iOffset, mng_uint32arr2 *iStarttime, mng_uint32 *iLayernr, mng_uint32 *iFramenr, mng_uint32 *iNamesize, mng_pchar *zName) { mng_datap pData; mng_savep pChunk; mng_save_entryp pEntry; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SAVE_ENTRY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_savep)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_SAVE) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ if (iEntry >= pChunk->iCount) /* valid index ? */ MNG_ERROR (pData, MNG_INVALIDENTRYIX) pEntry = pChunk->pEntries + iEntry; /* address the entry */ /* fill the fields */ *iEntrytype = pEntry->iEntrytype; (*iOffset)[0] = pEntry->iOffset[0]; (*iOffset)[1] = pEntry->iOffset[1]; (*iStarttime)[0] = pEntry->iStarttime[0]; (*iStarttime)[1] = pEntry->iStarttime[1]; *iLayernr = pEntry->iLayernr; *iFramenr = pEntry->iFramenr; *iNamesize = pEntry->iNamesize; *zName = pEntry->zName; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SAVE_ENTRY, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SEEK mng_retcode MNG_DECL mng_getchunk_seek (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iNamesize, mng_pchar *zName) { mng_datap pData; mng_seekp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SEEK, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_seekp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_SEEK) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iNamesize = pChunk->iNamesize; /* fill the fields */ *zName = pChunk->zName; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SEEK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_eXPI mng_retcode MNG_DECL mng_getchunk_expi (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iSnapshotid, mng_uint32 *iNamesize, mng_pchar *zName) { mng_datap pData; mng_expip pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EXPI, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_expip)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_eXPI) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iSnapshotid = pChunk->iSnapshotid; /* fill the fields */ *iNamesize = pChunk->iNamesize; *zName = pChunk->zName; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EXPI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_fPRI mng_retcode MNG_DECL mng_getchunk_fpri (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iDeltatype, mng_uint8 *iPriority) { mng_datap pData; mng_fprip pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_FPRI, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_fprip)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_fPRI) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iDeltatype = pChunk->iDeltatype; /* fill the fields */ *iPriority = pChunk->iPriority; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_FPRI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_nEED mng_retcode MNG_DECL mng_getchunk_need (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iKeywordssize, mng_pchar *zKeywords) { mng_datap pData; mng_needp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_NEED, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_needp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_nEED) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ /* fill the fields */ *iKeywordssize = pChunk->iKeywordssize; *zKeywords = pChunk->zKeywords; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_NEED, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYg mng_retcode MNG_DECL mng_getchunk_phyg (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iSizex, mng_uint32 *iSizey, mng_uint8 *iUnit) { mng_datap pData; mng_phygp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PHYG, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_phygp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_pHYg) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *bEmpty = pChunk->bEmpty; /* fill the fields */ *iSizex = pChunk->iSizex; *iSizey = pChunk->iSizey; *iUnit = pChunk->iUnit; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PHYG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG mng_retcode MNG_DECL mng_getchunk_jhdr (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iWidth, mng_uint32 *iHeight, mng_uint8 *iColortype, mng_uint8 *iImagesampledepth, mng_uint8 *iImagecompression, mng_uint8 *iImageinterlace, mng_uint8 *iAlphasampledepth, mng_uint8 *iAlphacompression, mng_uint8 *iAlphafilter, mng_uint8 *iAlphainterlace) { mng_datap pData; mng_jhdrp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JHDR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_jhdrp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_JHDR) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iWidth = pChunk->iWidth; /* fill the fields */ *iHeight = pChunk->iHeight; *iColortype = pChunk->iColortype; *iImagesampledepth = pChunk->iImagesampledepth; *iImagecompression = pChunk->iImagecompression; *iImageinterlace = pChunk->iImageinterlace; *iAlphasampledepth = pChunk->iAlphasampledepth; *iAlphacompression = pChunk->iAlphacompression; *iAlphafilter = pChunk->iAlphafilter; *iAlphainterlace = pChunk->iAlphainterlace; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG mng_retcode MNG_DECL mng_getchunk_jdat (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iRawlen, mng_ptr *pRawdata) { mng_datap pData; mng_jdatp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JDAT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_jdatp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_JDAT) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iRawlen = pChunk->iDatasize; /* fill the fields */ *pRawdata = pChunk->pData; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JDAT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG mng_retcode MNG_DECL mng_getchunk_jdaa (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iRawlen, mng_ptr *pRawdata) { mng_datap pData; mng_jdaap pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JDAA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_jdaap)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_JDAA) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iRawlen = pChunk->iDatasize; /* fill the fields */ *pRawdata = pChunk->pData; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JDAA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode MNG_DECL mng_getchunk_dhdr (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iObjectid, mng_uint8 *iImagetype, mng_uint8 *iDeltatype, mng_uint32 *iBlockwidth, mng_uint32 *iBlockheight, mng_uint32 *iBlockx, mng_uint32 *iBlocky) { mng_datap pData; mng_dhdrp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DHDR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_dhdrp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_DHDR) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iObjectid = pChunk->iObjectid; /* fill the fields */ *iImagetype = pChunk->iImagetype; *iDeltatype = pChunk->iDeltatype; *iBlockwidth = pChunk->iBlockwidth; *iBlockheight = pChunk->iBlockheight; *iBlockx = pChunk->iBlockx; *iBlocky = pChunk->iBlocky; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode MNG_DECL mng_getchunk_prom (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iColortype, mng_uint8 *iSampledepth, mng_uint8 *iFilltype) { mng_datap pData; mng_promp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PROM, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_promp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_PROM) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iColortype = pChunk->iColortype; /* fill the fields */ *iSampledepth = pChunk->iSampledepth; *iFilltype = pChunk->iFilltype; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PROM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode MNG_DECL mng_getchunk_pplt (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iDeltatype, mng_uint32 *iCount) { mng_datap pData; mng_ppltp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PPLT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_ppltp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_PPLT) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iDeltatype = pChunk->iDeltatype; /* fill the fields */ *iCount = pChunk->iCount; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PPLT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode MNG_DECL mng_getchunk_pplt_entry (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_uint16 *iRed, mng_uint16 *iGreen, mng_uint16 *iBlue, mng_uint16 *iAlpha, mng_bool *bUsed) { mng_datap pData; mng_ppltp pChunk; mng_pplt_entryp pEntry; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PPLT_ENTRY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_ppltp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_PPLT) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ if (iEntry >= pChunk->iCount) /* valid index ? */ MNG_ERROR (pData, MNG_INVALIDENTRYIX) pEntry = &pChunk->aEntries[iEntry]; /* address the entry */ *iRed = pEntry->iRed; /* fill the fields */ *iGreen = pEntry->iGreen; *iBlue = pEntry->iBlue; *iAlpha = pEntry->iAlpha; *bUsed = pEntry->bUsed; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PPLT_ENTRY, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode MNG_DECL mng_getchunk_drop (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iCount, mng_chunkidp *pChunknames) { mng_datap pData; mng_dropp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DROP, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_dropp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_DROP) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iCount = pChunk->iCount; /* fill the fields */ *pChunknames = pChunk->pChunknames; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DROP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK mng_retcode MNG_DECL mng_getchunk_dbyk (mng_handle hHandle, mng_handle hChunk, mng_chunkid *iChunkname, mng_uint8 *iPolarity, mng_uint32 *iKeywordssize, mng_pchar *zKeywords) { mng_datap pData; mng_dbykp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DBYK, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_dbykp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_DBYK) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iChunkname = pChunk->iChunkname; /* fill the fields */ *iPolarity = pChunk->iPolarity; *iKeywordssize = pChunk->iKeywordssize; *zKeywords = pChunk->zKeywords; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DBYK, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR mng_retcode MNG_DECL mng_getchunk_ordr (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iCount) { mng_datap pData; mng_ordrp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ORDR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_ordrp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_ORDR) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iCount = pChunk->iCount; /* fill the field */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ORDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR mng_retcode MNG_DECL mng_getchunk_ordr_entry (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_chunkid *iChunkname, mng_uint8 *iOrdertype) { mng_datap pData; mng_ordrp pChunk; mng_ordr_entryp pEntry; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ORDR_ENTRY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_ordrp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_ORDR) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ if (iEntry >= pChunk->iCount) /* valid index ? */ MNG_ERROR (pData, MNG_INVALIDENTRYIX) pEntry = pChunk->pEntries + iEntry; /* address the proper entry */ *iChunkname = pEntry->iChunkname; /* fill the fields */ *iOrdertype = pEntry->iOrdertype; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ORDR_ENTRY, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MAGN mng_retcode MNG_DECL mng_getchunk_magn (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iFirstid, mng_uint16 *iLastid, mng_uint16 *iMethodX, mng_uint16 *iMX, mng_uint16 *iMY, mng_uint16 *iML, mng_uint16 *iMR, mng_uint16 *iMT, mng_uint16 *iMB, mng_uint16 *iMethodY) { mng_datap pData; mng_magnp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MAGN, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_magnp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_MAGN) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iFirstid = pChunk->iFirstid; /* fill the fields */ *iLastid = pChunk->iLastid; *iMethodX = (mng_uint16)pChunk->iMethodX; *iMX = pChunk->iMX; *iMY = pChunk->iMY; *iML = pChunk->iML; *iMR = pChunk->iMR; *iMT = pChunk->iMT; *iMB = pChunk->iMB; *iMethodY = (mng_uint16)pChunk->iMethodY; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MAGN, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL MNG_EXT mng_retcode MNG_DECL mng_getchunk_mpng (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iFramewidth, mng_uint32 *iFrameheight, mng_uint16 *iNumplays, mng_uint16 *iTickspersec, mng_uint8 *iCompressionmethod, mng_uint32 *iCount) { mng_datap pData; mng_mpngp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MPNG, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_mpngp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_mpNG) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ /* fill the fields */ *iFramewidth = pChunk->iFramewidth; *iFrameheight = pChunk->iFrameheight; *iNumplays = pChunk->iNumplays; *iTickspersec = pChunk->iTickspersec; *iCompressionmethod = pChunk->iCompressionmethod; *iCount = pChunk->iFramessize / sizeof (mng_mpng_frame); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MPNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL MNG_EXT mng_retcode MNG_DECL mng_getchunk_mpng_frame (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_uint32 *iX, mng_uint32 *iY, mng_uint32 *iWidth, mng_uint32 *iHeight, mng_int32 *iXoffset, mng_int32 *iYoffset, mng_uint16 *iTicks) { mng_datap pData; mng_mpngp pChunk; mng_mpng_framep pFrame; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MPNG_FRAME, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_mpngp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_mpNG) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ /* valid index ? */ if (iEntry >= (pChunk->iFramessize / sizeof (mng_mpng_frame))) MNG_ERROR (pData, MNG_INVALIDENTRYIX) pFrame = pChunk->pFrames + iEntry; /* address the entry */ /* fill the fields */ *iX = pFrame->iX; *iY = pFrame->iY; *iWidth = pFrame->iWidth; *iHeight = pFrame->iHeight; *iXoffset = pFrame->iXoffset; *iYoffset = pFrame->iYoffset; *iTicks = pFrame->iTicks; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MPNG_FRAME, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_evNT mng_retcode MNG_DECL mng_getchunk_evnt (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iCount) { mng_datap pData; mng_evntp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EVNT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_evntp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_evNT) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ *iCount = pChunk->iCount; /* fill the fields */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EVNT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_getchunk_evnt_entry (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_uint8 *iEventtype, mng_uint8 *iMasktype, mng_int32 *iLeft, mng_int32 *iRight, mng_int32 *iTop, mng_int32 *iBottom, mng_uint16 *iObjectid, mng_uint8 *iIndex, mng_uint32 *iSegmentnamesize, mng_pchar *zSegmentname) { mng_datap pData; mng_evntp pChunk; mng_evnt_entryp pEntry; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EVNT_ENTRY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_evntp)hChunk; /* address the chunk */ if (pChunk->sHeader.iChunkname != MNG_UINT_evNT) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ if (iEntry >= pChunk->iCount) /* valid index ? */ MNG_ERROR (pData, MNG_INVALIDENTRYIX) pEntry = pChunk->pEntries + iEntry; /* address the entry */ /* fill the fields */ *iEventtype = pEntry->iEventtype; *iMasktype = pEntry->iMasktype; *iLeft = pEntry->iLeft; *iRight = pEntry->iRight; *iTop = pEntry->iTop; *iBottom = pEntry->iBottom; *iObjectid = pEntry->iObjectid; *iIndex = pEntry->iIndex; *iSegmentnamesize = pEntry->iSegmentnamesize; *zSegmentname = pEntry->zSegmentname; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EVNT_ENTRY, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode MNG_DECL mng_getchunk_unknown (mng_handle hHandle, mng_handle hChunk, mng_chunkid *iChunkname, mng_uint32 *iRawlen, mng_ptr *pRawdata) { mng_datap pData; mng_unknown_chunkp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_UNKNOWN, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ pChunk = (mng_unknown_chunkp)hChunk; /* address the chunk */ if (pChunk->sHeader.fCleanup != mng_free_unknown) MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */ /* fill the fields */ *iChunkname = pChunk->sHeader.iChunkname; *iRawlen = pChunk->iDatasize; *pRawdata = pChunk->pData; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_UNKNOWN, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_WRITE_PROCS /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_TERM MNG_LOCAL mng_bool check_term (mng_datap pData, mng_chunkid iChunkname) { mng_chunk_headerp pChunk = (mng_chunk_headerp)pData->pLastchunk; if (!pChunk) /* nothing added yet ? */ return MNG_TRUE; /* last added chunk is TERM ? */ if (pChunk->iChunkname != MNG_UINT_TERM) return MNG_TRUE; /* previous to last is MHDR ? */ if ((pChunk->pPrev) && (((mng_chunk_headerp)pChunk->pPrev)->iChunkname == MNG_UINT_MHDR)) return MNG_TRUE; if (iChunkname == MNG_UINT_SEEK) /* new chunk to be added is SEEK ? */ return MNG_TRUE; return MNG_FALSE; } #endif /* ************************************************************************** */ mng_retcode MNG_DECL mng_putchunk_ihdr (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_IHDR, mng_init_general, mng_free_general, mng_read_ihdr, mng_write_ihdr, mng_assign_general, 0, 0, sizeof(mng_ihdr)}; #else {MNG_UINT_IHDR, mng_init_ihdr, mng_free_ihdr, mng_read_ihdr, mng_write_ihdr, mng_assign_ihdr, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IHDR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_IHDR)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_ihdr (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_IHDR, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; ((mng_ihdrp)pChunk)->iWidth = iWidth; ((mng_ihdrp)pChunk)->iHeight = iHeight; ((mng_ihdrp)pChunk)->iBitdepth = iBitdepth; ((mng_ihdrp)pChunk)->iColortype = iColortype; ((mng_ihdrp)pChunk)->iCompression = iCompression; ((mng_ihdrp)pChunk)->iFilter = iFilter; ((mng_ihdrp)pChunk)->iInterlace = iInterlace; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IHDR, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_putchunk_plte (mng_handle hHandle, mng_uint32 iCount, mng_palette8 aPalette) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_PLTE, mng_init_general, mng_free_general, mng_read_plte, mng_write_plte, mng_assign_general, 0, 0, sizeof(mng_plte)}; #else {MNG_UINT_PLTE, mng_init_plte, mng_free_plte, mng_read_plte, mng_write_plte, mng_assign_plte, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PLTE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_PLTE)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_plte (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_PLTE, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_pltep)pChunk)->iEntrycount = iCount; ((mng_pltep)pChunk)->bEmpty = (mng_bool)(iCount == 0); MNG_COPY (((mng_pltep)pChunk)->aEntries, aPalette, sizeof (mng_palette8)); mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PLTE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_putchunk_idat (mng_handle hHandle, mng_uint32 iRawlen, mng_ptr pRawdata) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_IDAT, mng_init_general, mng_free_idat, mng_read_idat, mng_write_idat, mng_assign_idat, 0, 0, sizeof(mng_idat)}; #else {MNG_UINT_IDAT, mng_init_idat, mng_free_idat, mng_read_idat, mng_write_idat, mng_assign_idat, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IDAT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_IDAT)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_idat (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_IDAT, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_idatp)pChunk)->bEmpty = (mng_bool)(iRawlen == 0); ((mng_idatp)pChunk)->iDatasize = iRawlen; if (iRawlen) { MNG_ALLOC (pData, ((mng_idatp)pChunk)->pData, iRawlen); MNG_COPY (((mng_idatp)pChunk)->pData, pRawdata, iRawlen); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IDAT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_putchunk_iend (mng_handle hHandle) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_IEND, mng_init_general, mng_free_general, mng_read_iend, mng_write_iend, mng_assign_general, 0, 0, sizeof(mng_iend)}; #else {MNG_UINT_IEND, mng_init_iend, mng_free_iend, mng_read_iend, mng_write_iend, mng_assign_iend, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IEND, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_IEND)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_iend (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_IEND, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_INCLUDE_JNG if ((pData->iFirstchunkadded == MNG_UINT_IHDR) || (pData->iFirstchunkadded == MNG_UINT_JHDR) ) #else if (pData->iFirstchunkadded == MNG_UINT_IHDR) #endif pData->bCreating = MNG_FALSE; /* should be last chunk !!! */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IEND, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_putchunk_trns (mng_handle hHandle, mng_bool bEmpty, mng_bool bGlobal, mng_uint8 iType, mng_uint32 iCount, mng_uint8arr aAlphas, mng_uint16 iGray, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_uint32 iRawlen, mng_uint8arr aRawdata) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_tRNS, mng_init_general, mng_free_general, mng_read_trns, mng_write_trns, mng_assign_general, 0, 0, sizeof(mng_trns)}; #else {MNG_UINT_tRNS, mng_init_trns, mng_free_trns, mng_read_trns, mng_write_trns, mng_assign_trns, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TRNS, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_tRNS)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_trns (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_tRNS, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_trnsp)pChunk)->bEmpty = bEmpty; ((mng_trnsp)pChunk)->bGlobal = bGlobal; ((mng_trnsp)pChunk)->iType = iType; ((mng_trnsp)pChunk)->iCount = iCount; ((mng_trnsp)pChunk)->iGray = iGray; ((mng_trnsp)pChunk)->iRed = iRed; ((mng_trnsp)pChunk)->iGreen = iGreen; ((mng_trnsp)pChunk)->iBlue = iBlue; ((mng_trnsp)pChunk)->iRawlen = iRawlen; MNG_COPY (((mng_trnsp)pChunk)->aEntries, aAlphas, sizeof (mng_uint8arr)); MNG_COPY (((mng_trnsp)pChunk)->aRawdata, aRawdata, sizeof (mng_uint8arr)); mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TRNS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_gAMA mng_retcode MNG_DECL mng_putchunk_gama (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iGamma) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_gAMA, mng_init_general, mng_free_general, mng_read_gama, mng_write_gama, mng_assign_general, 0, 0, sizeof(mng_gama)}; #else {MNG_UINT_gAMA, mng_init_gama, mng_free_gama, mng_read_gama, mng_write_gama, mng_assign_gama, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_GAMA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_gAMA)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_gama (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_gAMA, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_gamap)pChunk)->bEmpty = bEmpty; ((mng_gamap)pChunk)->iGamma = iGamma; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_GAMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_cHRM mng_retcode MNG_DECL mng_putchunk_chrm (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iWhitepointx, mng_uint32 iWhitepointy, mng_uint32 iRedx, mng_uint32 iRedy, mng_uint32 iGreenx, mng_uint32 iGreeny, mng_uint32 iBluex, mng_uint32 iBluey) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_cHRM, mng_init_general, mng_free_general, mng_read_chrm, mng_write_chrm, mng_assign_general, 0, 0, sizeof(mng_chrm)}; #else {MNG_UINT_cHRM, mng_init_chrm, mng_free_chrm, mng_read_chrm, mng_write_chrm, mng_assign_chrm, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CHRM, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_cHRM)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_chrm (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_cHRM, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_chrmp)pChunk)->bEmpty = bEmpty; ((mng_chrmp)pChunk)->iWhitepointx = iWhitepointx; ((mng_chrmp)pChunk)->iWhitepointy = iWhitepointy; ((mng_chrmp)pChunk)->iRedx = iRedx; ((mng_chrmp)pChunk)->iRedy = iRedy; ((mng_chrmp)pChunk)->iGreenx = iGreenx; ((mng_chrmp)pChunk)->iGreeny = iGreeny; ((mng_chrmp)pChunk)->iBluex = iBluex; ((mng_chrmp)pChunk)->iBluey = iBluey; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CHRM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sRGB mng_retcode MNG_DECL mng_putchunk_srgb (mng_handle hHandle, mng_bool bEmpty, mng_uint8 iRenderingintent) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_sRGB, mng_init_general, mng_free_general, mng_read_srgb, mng_write_srgb, mng_assign_general, 0, 0, sizeof(mng_srgb)}; #else {MNG_UINT_sRGB, mng_init_srgb, mng_free_srgb, mng_read_srgb, mng_write_srgb, mng_assign_srgb, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SRGB, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_sRGB)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_srgb (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_sRGB, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_srgbp)pChunk)->bEmpty = bEmpty; ((mng_srgbp)pChunk)->iRenderingintent = iRenderingintent; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SRGB, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iCCP mng_retcode MNG_DECL mng_putchunk_iccp (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iNamesize, mng_pchar zName, mng_uint8 iCompression, mng_uint32 iProfilesize, mng_ptr pProfile) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_iCCP, mng_init_general, mng_free_iccp, mng_read_iccp, mng_write_iccp, mng_assign_iccp, 0, 0, sizeof(mng_iccp)}; #else {MNG_UINT_iCCP, mng_init_iccp, mng_free_iccp, mng_read_iccp, mng_write_iccp, mng_assign_iccp, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ICCP, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_iCCP)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_iccp (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_iCCP, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_iccpp)pChunk)->bEmpty = bEmpty; ((mng_iccpp)pChunk)->iNamesize = iNamesize; ((mng_iccpp)pChunk)->iCompression = iCompression; ((mng_iccpp)pChunk)->iProfilesize = iProfilesize; if (iNamesize) { MNG_ALLOC (pData, ((mng_iccpp)pChunk)->zName, iNamesize + 1); MNG_COPY (((mng_iccpp)pChunk)->zName, zName, iNamesize); } if (iProfilesize) { MNG_ALLOC (pData, ((mng_iccpp)pChunk)->pProfile, iProfilesize); MNG_COPY (((mng_iccpp)pChunk)->pProfile, pProfile, iProfilesize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ICCP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tEXt mng_retcode MNG_DECL mng_putchunk_text (mng_handle hHandle, mng_uint32 iKeywordsize, mng_pchar zKeyword, mng_uint32 iTextsize, mng_pchar zText) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_tEXt, mng_init_general, mng_free_text, mng_read_text, mng_write_text, mng_assign_text, 0, 0, sizeof(mng_text)}; #else {MNG_UINT_tEXt, mng_init_text, mng_free_text, mng_read_text, mng_write_text, mng_assign_text, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TEXT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_tEXt)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_text (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_tEXt, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_textp)pChunk)->iKeywordsize = iKeywordsize; ((mng_textp)pChunk)->iTextsize = iTextsize; if (iKeywordsize) { MNG_ALLOC (pData, ((mng_textp)pChunk)->zKeyword, iKeywordsize + 1); MNG_COPY (((mng_textp)pChunk)->zKeyword, zKeyword, iKeywordsize); } if (iTextsize) { MNG_ALLOC (pData, ((mng_textp)pChunk)->zText, iTextsize + 1); MNG_COPY (((mng_textp)pChunk)->zText, zText, iTextsize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TEXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_zTXt mng_retcode MNG_DECL mng_putchunk_ztxt (mng_handle hHandle, mng_uint32 iKeywordsize, mng_pchar zKeyword, mng_uint8 iCompression, mng_uint32 iTextsize, mng_pchar zText) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_zTXt, mng_init_general, mng_free_ztxt, mng_read_ztxt, mng_write_ztxt, mng_assign_ztxt, 0, 0, sizeof(mng_ztxt)}; #else {MNG_UINT_zTXt, mng_init_ztxt, mng_free_ztxt, mng_read_ztxt, mng_write_ztxt, mng_assign_ztxt, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ZTXT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_zTXt)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_ztxt (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_zTXt, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_ztxtp)pChunk)->iKeywordsize = iKeywordsize; ((mng_ztxtp)pChunk)->iCompression = iCompression; ((mng_ztxtp)pChunk)->iTextsize = iTextsize; if (iKeywordsize) { MNG_ALLOC (pData, ((mng_ztxtp)pChunk)->zKeyword, iKeywordsize + 1); MNG_COPY (((mng_ztxtp)pChunk)->zKeyword, zKeyword, iKeywordsize); } if (iTextsize) { MNG_ALLOC (pData, ((mng_ztxtp)pChunk)->zText, iTextsize + 1); MNG_COPY (((mng_ztxtp)pChunk)->zText, zText, iTextsize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ZTXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iTXt mng_retcode MNG_DECL mng_putchunk_itxt (mng_handle hHandle, mng_uint32 iKeywordsize, mng_pchar zKeyword, mng_uint8 iCompressionflag, mng_uint8 iCompressionmethod, mng_uint32 iLanguagesize, mng_pchar zLanguage, mng_uint32 iTranslationsize, mng_pchar zTranslation, mng_uint32 iTextsize, mng_pchar zText) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_iTXt, mng_init_general, mng_free_itxt, mng_read_itxt, mng_write_itxt, mng_assign_itxt, 0, 0, sizeof(mng_itxt)}; #else {MNG_UINT_iTXt, mng_init_itxt, mng_free_itxt, mng_read_itxt, mng_write_itxt, mng_assign_itxt, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ITXT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_iTXt)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_itxt (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_iTXt, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_itxtp)pChunk)->iKeywordsize = iKeywordsize; ((mng_itxtp)pChunk)->iCompressionflag = iCompressionflag; ((mng_itxtp)pChunk)->iCompressionmethod = iCompressionmethod; ((mng_itxtp)pChunk)->iLanguagesize = iLanguagesize; ((mng_itxtp)pChunk)->iTranslationsize = iTranslationsize; ((mng_itxtp)pChunk)->iTextsize = iTextsize; if (iKeywordsize) { MNG_ALLOC (pData, ((mng_itxtp)pChunk)->zKeyword, iKeywordsize + 1); MNG_COPY (((mng_itxtp)pChunk)->zKeyword, zKeyword, iKeywordsize); } if (iLanguagesize) { MNG_ALLOC (pData, ((mng_itxtp)pChunk)->zLanguage, iLanguagesize + 1); MNG_COPY (((mng_itxtp)pChunk)->zLanguage, zLanguage, iLanguagesize); } if (iTranslationsize) { MNG_ALLOC (pData, ((mng_itxtp)pChunk)->zTranslation, iTranslationsize + 1); MNG_COPY (((mng_itxtp)pChunk)->zTranslation, zTranslation, iTranslationsize); } if (iTextsize) { MNG_ALLOC (pData, ((mng_itxtp)pChunk)->zText, iTextsize + 1); MNG_COPY (((mng_itxtp)pChunk)->zText, zText, iTextsize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ITXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_bKGD mng_retcode MNG_DECL mng_putchunk_bkgd (mng_handle hHandle, mng_bool bEmpty, mng_uint8 iType, mng_uint8 iIndex, mng_uint16 iGray, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_bKGD, mng_init_general, mng_free_general, mng_read_bkgd, mng_write_bkgd, mng_assign_general, 0, 0, sizeof(mng_bkgd)}; #else {MNG_UINT_bKGD, mng_init_bkgd, mng_free_bkgd, mng_read_bkgd, mng_write_bkgd, mng_assign_bkgd, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BKGD, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_bKGD)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_bkgd (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_bKGD, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_bkgdp)pChunk)->bEmpty = bEmpty; ((mng_bkgdp)pChunk)->iType = iType; ((mng_bkgdp)pChunk)->iIndex = iIndex; ((mng_bkgdp)pChunk)->iGray = iGray; ((mng_bkgdp)pChunk)->iRed = iRed; ((mng_bkgdp)pChunk)->iGreen = iGreen; ((mng_bkgdp)pChunk)->iBlue = iBlue; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BKGD, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYs mng_retcode MNG_DECL mng_putchunk_phys (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iSizex, mng_uint32 iSizey, mng_uint8 iUnit) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_pHYs, mng_init_general, mng_free_general, mng_read_phys, mng_write_phys, mng_assign_general, 0, 0, sizeof(mng_phys)}; #else {MNG_UINT_pHYs, mng_init_phys, mng_free_phys, mng_read_phys, mng_write_phys, mng_assign_phys, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PHYS, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_pHYs)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_phys (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_pHYs, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_physp)pChunk)->bEmpty = bEmpty; ((mng_physp)pChunk)->iSizex = iSizex; ((mng_physp)pChunk)->iSizey = iSizey; ((mng_physp)pChunk)->iUnit = iUnit; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PHYS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sBIT mng_retcode MNG_DECL mng_putchunk_sbit (mng_handle hHandle, mng_bool bEmpty, mng_uint8 iType, mng_uint8arr4 aBits) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_sBIT, mng_init_general, mng_free_general, mng_read_sbit, mng_write_sbit, mng_assign_general, 0, 0, sizeof(mng_sbit)}; #else {MNG_UINT_sBIT, mng_init_sbit, mng_free_sbit, mng_read_sbit, mng_write_sbit, mng_assign_sbit, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SBIT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_sBIT)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_sbit (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_sBIT, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_sbitp)pChunk)->bEmpty = bEmpty; ((mng_sbitp)pChunk)->iType = iType; ((mng_sbitp)pChunk)->aBits[0] = aBits[0]; ((mng_sbitp)pChunk)->aBits[1] = aBits[1]; ((mng_sbitp)pChunk)->aBits[2] = aBits[2]; ((mng_sbitp)pChunk)->aBits[3] = aBits[3]; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SBIT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sPLT mng_retcode MNG_DECL mng_putchunk_splt (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iNamesize, mng_pchar zName, mng_uint8 iSampledepth, mng_uint32 iEntrycount, mng_ptr pEntries) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_sPLT, mng_init_general, mng_free_splt, mng_read_splt, mng_write_splt, mng_assign_splt, 0, 0, sizeof(mng_splt)}; #else {MNG_UINT_sPLT, mng_init_splt, mng_free_splt, mng_read_splt, mng_write_splt, mng_assign_splt, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SPLT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_sPLT)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_splt (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_sPLT, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_spltp)pChunk)->bEmpty = bEmpty; ((mng_spltp)pChunk)->iNamesize = iNamesize; ((mng_spltp)pChunk)->iSampledepth = iSampledepth; ((mng_spltp)pChunk)->iEntrycount = iEntrycount; if (iNamesize) { MNG_ALLOC (pData, ((mng_spltp)pChunk)->zName, iNamesize + 1); MNG_COPY (((mng_spltp)pChunk)->zName, zName, iNamesize); } if (iEntrycount) { mng_uint32 iSize = iEntrycount * ((iSampledepth >> 1) + 2); MNG_ALLOC (pData, ((mng_spltp)pChunk)->pEntries, iSize); MNG_COPY (((mng_spltp)pChunk)->pEntries, pEntries, iSize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SPLT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_hIST mng_retcode MNG_DECL mng_putchunk_hist (mng_handle hHandle, mng_uint32 iEntrycount, mng_uint16arr aEntries) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_hIST, mng_init_general, mng_free_general, mng_read_hist, mng_write_hist, mng_assign_general, 0, 0, sizeof(mng_hist)}; #else {MNG_UINT_hIST, mng_init_hist, mng_free_hist, mng_read_hist, mng_write_hist, mng_assign_hist, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_HIST, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_hIST)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_hist (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_hIST, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_histp)pChunk)->iEntrycount = iEntrycount; MNG_COPY (((mng_histp)pChunk)->aEntries, aEntries, sizeof (mng_uint16arr)); mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_HIST, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tIME mng_retcode MNG_DECL mng_putchunk_time (mng_handle hHandle, mng_uint16 iYear, mng_uint8 iMonth, mng_uint8 iDay, mng_uint8 iHour, mng_uint8 iMinute, mng_uint8 iSecond) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_tIME, mng_init_general, mng_free_general, mng_read_time, mng_write_time, mng_assign_general, 0, 0, sizeof(mng_time)}; #else {MNG_UINT_tIME, mng_init_time, mng_free_time, mng_read_time, mng_write_time, mng_assign_time, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TIME, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_tIME)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_time (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_tIME, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_timep)pChunk)->iYear = iYear; ((mng_timep)pChunk)->iMonth = iMonth; ((mng_timep)pChunk)->iDay = iDay; ((mng_timep)pChunk)->iHour = iHour; ((mng_timep)pChunk)->iMinute = iMinute; ((mng_timep)pChunk)->iSecond = iSecond; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TIME, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode MNG_DECL mng_putchunk_mhdr (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint32 iTicks, mng_uint32 iLayercount, mng_uint32 iFramecount, mng_uint32 iPlaytime, mng_uint32 iSimplicity) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_MHDR, mng_init_general, mng_free_general, mng_read_mhdr, mng_write_mhdr, mng_assign_general, 0, 0, sizeof(mng_mhdr)}; #else {MNG_UINT_MHDR, mng_init_mhdr, mng_free_mhdr, mng_read_mhdr, mng_write_mhdr, mng_assign_mhdr, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MHDR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must be very first! */ if (pData->iFirstchunkadded != 0) MNG_ERROR (pData, MNG_SEQUENCEERROR) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_MHDR)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_mhdr (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_MHDR, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_mhdrp)pChunk)->iWidth = iWidth; ((mng_mhdrp)pChunk)->iHeight = iHeight; ((mng_mhdrp)pChunk)->iTicks = iTicks; ((mng_mhdrp)pChunk)->iLayercount = iLayercount; ((mng_mhdrp)pChunk)->iFramecount = iFramecount; ((mng_mhdrp)pChunk)->iPlaytime = iPlaytime; ((mng_mhdrp)pChunk)->iSimplicity = iSimplicity; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MHDR, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_putchunk_mend (mng_handle hHandle) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_MEND, mng_init_general, mng_free_general, mng_read_mend, mng_write_mend, mng_assign_general, 0, 0, sizeof(mng_mend)}; #else {MNG_UINT_MEND, mng_init_mend, mng_free_mend, mng_read_mend, mng_write_mend, mng_assign_mend, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MEND, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_MEND)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_mend (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_MEND, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; mng_add_chunk (pData, pChunk); /* add it to the list */ pData->bCreating = MNG_FALSE; /* should be last chunk !!! */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MEND, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_LOOP mng_retcode MNG_DECL mng_putchunk_loop (mng_handle hHandle, mng_uint8 iLevel, mng_uint32 iRepeat, mng_uint8 iTermination, mng_uint32 iItermin, mng_uint32 iItermax, mng_uint32 iCount, mng_uint32p pSignals) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_LOOP, mng_init_general, mng_free_loop, mng_read_loop, mng_write_loop, mng_assign_loop, 0, 0, sizeof(mng_loop)}; #else {MNG_UINT_LOOP, mng_init_loop, mng_free_loop, mng_read_loop, mng_write_loop, mng_assign_loop, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_LOOP, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_LOOP)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_loop (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_LOOP, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_loopp)pChunk)->iLevel = iLevel; ((mng_loopp)pChunk)->iRepeat = iRepeat; ((mng_loopp)pChunk)->iTermination = iTermination; ((mng_loopp)pChunk)->iItermin = iItermin; ((mng_loopp)pChunk)->iItermax = iItermax; ((mng_loopp)pChunk)->iCount = iCount; ((mng_loopp)pChunk)->pSignals = pSignals; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_LOOP, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_putchunk_endl (mng_handle hHandle, mng_uint8 iLevel) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_ENDL, mng_init_general, mng_free_general, mng_read_endl, mng_write_endl, mng_assign_general, 0, 0, sizeof(mng_endl)}; #else {MNG_UINT_ENDL, mng_init_endl, mng_free_endl, mng_read_endl, mng_write_endl, mng_assign_endl, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ENDL, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_ENDL)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_endl (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_ENDL, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_endlp)pChunk)->iLevel = iLevel; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ENDL, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DEFI mng_retcode MNG_DECL mng_putchunk_defi (mng_handle hHandle, mng_uint16 iObjectid, mng_uint8 iDonotshow, mng_uint8 iConcrete, mng_bool bHasloca, mng_int32 iXlocation, mng_int32 iYlocation, mng_bool bHasclip, mng_int32 iLeftcb, mng_int32 iRightcb, mng_int32 iTopcb, mng_int32 iBottomcb) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_DEFI, mng_init_general, mng_free_general, mng_read_defi, mng_write_defi, mng_assign_general, 0, 0, sizeof(mng_defi)}; #else {MNG_UINT_DEFI, mng_init_defi, mng_free_defi, mng_read_defi, mng_write_defi, mng_assign_defi, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DEFI, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_DEFI)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_defi (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_DEFI, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_defip)pChunk)->iObjectid = iObjectid; ((mng_defip)pChunk)->iDonotshow = iDonotshow; ((mng_defip)pChunk)->iConcrete = iConcrete; ((mng_defip)pChunk)->bHasloca = bHasloca; ((mng_defip)pChunk)->iXlocation = iXlocation; ((mng_defip)pChunk)->iYlocation = iYlocation; ((mng_defip)pChunk)->bHasclip = bHasclip; ((mng_defip)pChunk)->iLeftcb = iLeftcb; ((mng_defip)pChunk)->iRightcb = iRightcb; ((mng_defip)pChunk)->iTopcb = iTopcb; ((mng_defip)pChunk)->iBottomcb = iBottomcb; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DEFI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BASI mng_retcode MNG_DECL mng_putchunk_basi (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_uint16 iAlpha, mng_uint8 iViewable) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_BASI, mng_init_general, mng_free_general, mng_read_basi, mng_write_basi, mng_assign_general, 0, 0, sizeof(mng_basi)}; #else {MNG_UINT_BASI, mng_init_basi, mng_free_basi, mng_read_basi, mng_write_basi, mng_assign_basi, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BASI, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_BASI)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_basi (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_BASI, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_basip)pChunk)->iWidth = iWidth; ((mng_basip)pChunk)->iHeight = iHeight; ((mng_basip)pChunk)->iBitdepth = iBitdepth; ((mng_basip)pChunk)->iColortype = iColortype; ((mng_basip)pChunk)->iCompression = iCompression; ((mng_basip)pChunk)->iFilter = iFilter; ((mng_basip)pChunk)->iInterlace = iInterlace; ((mng_basip)pChunk)->iRed = iRed; ((mng_basip)pChunk)->iGreen = iGreen; ((mng_basip)pChunk)->iBlue = iBlue; ((mng_basip)pChunk)->iAlpha = iAlpha; ((mng_basip)pChunk)->iViewable = iViewable; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BASI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLON mng_retcode MNG_DECL mng_putchunk_clon (mng_handle hHandle, mng_uint16 iSourceid, mng_uint16 iCloneid, mng_uint8 iClonetype, mng_uint8 iDonotshow, mng_uint8 iConcrete, mng_bool bHasloca, mng_uint8 iLocationtype, mng_int32 iLocationx, mng_int32 iLocationy) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_CLON, mng_init_general, mng_free_general, mng_read_clon, mng_write_clon, mng_assign_general, 0, 0, sizeof(mng_clon)}; #else {MNG_UINT_CLON, mng_init_clon, mng_free_clon, mng_read_clon, mng_write_clon, mng_assign_clon, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CLON, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_CLON)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_clon (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_CLON, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_clonp)pChunk)->iSourceid = iSourceid; ((mng_clonp)pChunk)->iCloneid = iCloneid; ((mng_clonp)pChunk)->iClonetype = iClonetype; ((mng_clonp)pChunk)->iDonotshow = iDonotshow; ((mng_clonp)pChunk)->iConcrete = iConcrete; ((mng_clonp)pChunk)->bHasloca = bHasloca; ((mng_clonp)pChunk)->iLocationtype = iLocationtype; ((mng_clonp)pChunk)->iLocationx = iLocationx; ((mng_clonp)pChunk)->iLocationy = iLocationy; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CLON, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST mng_retcode MNG_DECL mng_putchunk_past (mng_handle hHandle, mng_uint16 iDestid, mng_uint8 iTargettype, mng_int32 iTargetx, mng_int32 iTargety, mng_uint32 iCount) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_PAST, mng_init_general, mng_free_past, mng_read_past, mng_write_past, mng_assign_past, 0, 0, sizeof(mng_past)}; #else {MNG_UINT_PAST, mng_init_past, mng_free_past, mng_read_past, mng_write_past, mng_assign_past, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PAST, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_PAST)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_past (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_PAST, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_pastp)pChunk)->iDestid = iDestid; ((mng_pastp)pChunk)->iTargettype = iTargettype; ((mng_pastp)pChunk)->iTargetx = iTargetx; ((mng_pastp)pChunk)->iTargety = iTargety; ((mng_pastp)pChunk)->iCount = iCount; if (iCount) MNG_ALLOC (pData, ((mng_pastp)pChunk)->pSources, iCount * sizeof (mng_past_source)); mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PAST, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST mng_retcode MNG_DECL mng_putchunk_past_src (mng_handle hHandle, mng_uint32 iEntry, mng_uint16 iSourceid, mng_uint8 iComposition, mng_uint8 iOrientation, mng_uint8 iOffsettype, mng_int32 iOffsetx, mng_int32 iOffsety, mng_uint8 iBoundarytype, mng_int32 iBoundaryl, mng_int32 iBoundaryr, mng_int32 iBoundaryt, mng_int32 iBoundaryb) { mng_datap pData; mng_chunkp pChunk; mng_past_sourcep pEntry; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PAST_SRC, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) pChunk = pData->pLastchunk; /* last one must have been PAST ! */ if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_PAST) MNG_ERROR (pData, MNG_NOCORRCHUNK) /* index out of bounds ? */ if (iEntry >= ((mng_pastp)pChunk)->iCount) MNG_ERROR (pData, MNG_INVALIDENTRYIX) /* address proper entry */ pEntry = ((mng_pastp)pChunk)->pSources + iEntry; pEntry->iSourceid = iSourceid; /* fill entry */ pEntry->iComposition = iComposition; pEntry->iOrientation = iOrientation; pEntry->iOffsettype = iOffsettype; pEntry->iOffsetx = iOffsetx; pEntry->iOffsety = iOffsety; pEntry->iBoundarytype = iBoundarytype; pEntry->iBoundaryl = iBoundaryl; pEntry->iBoundaryr = iBoundaryr; pEntry->iBoundaryt = iBoundaryt; pEntry->iBoundaryb = iBoundaryb; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PAST_SRC, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DISC mng_retcode MNG_DECL mng_putchunk_disc (mng_handle hHandle, mng_uint32 iCount, mng_uint16p pObjectids) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_DISC, mng_init_general, mng_free_disc, mng_read_disc, mng_write_disc, mng_assign_disc, 0, 0, sizeof(mng_disc)}; #else {MNG_UINT_DISC, mng_init_disc, mng_free_disc, mng_read_disc, mng_write_disc, mng_assign_disc, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DISC, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_DISC)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_disc (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_DISC, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_discp)pChunk)->iCount = iCount; if (iCount) { mng_uint32 iSize = iCount * sizeof (mng_uint32); MNG_ALLOC (pData, ((mng_discp)pChunk)->pObjectids, iSize); MNG_COPY (((mng_discp)pChunk)->pObjectids, pObjectids, iSize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DISC, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BACK mng_retcode MNG_DECL mng_putchunk_back (mng_handle hHandle, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_uint8 iMandatory, mng_uint16 iImageid, mng_uint8 iTile) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_BACK, mng_init_general, mng_free_general, mng_read_back, mng_write_back, mng_assign_general, 0, 0, sizeof(mng_back)}; #else {MNG_UINT_BACK, mng_init_back, mng_free_back, mng_read_back, mng_write_back, mng_assign_back, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BACK, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_BACK)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_back (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_BACK, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_backp)pChunk)->iRed = iRed; ((mng_backp)pChunk)->iGreen = iGreen; ((mng_backp)pChunk)->iBlue = iBlue; ((mng_backp)pChunk)->iMandatory = iMandatory; ((mng_backp)pChunk)->iImageid = iImageid; ((mng_backp)pChunk)->iTile = iTile; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BACK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_FRAM mng_retcode MNG_DECL mng_putchunk_fram (mng_handle hHandle, mng_bool bEmpty, mng_uint8 iMode, mng_uint32 iNamesize, mng_pchar zName, mng_uint8 iChangedelay, mng_uint8 iChangetimeout, mng_uint8 iChangeclipping, mng_uint8 iChangesyncid, mng_uint32 iDelay, mng_uint32 iTimeout, mng_uint8 iBoundarytype, mng_int32 iBoundaryl, mng_int32 iBoundaryr, mng_int32 iBoundaryt, mng_int32 iBoundaryb, mng_uint32 iCount, mng_uint32p pSyncids) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_FRAM, mng_init_general, mng_free_fram, mng_read_fram, mng_write_fram, mng_assign_fram, 0, 0, sizeof(mng_fram)}; #else {MNG_UINT_FRAM, mng_init_fram, mng_free_fram, mng_read_fram, mng_write_fram, mng_assign_fram, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_FRAM, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_FRAM)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_fram (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_FRAM, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_framp)pChunk)->bEmpty = bEmpty; ((mng_framp)pChunk)->iMode = iMode; ((mng_framp)pChunk)->iNamesize = iNamesize; ((mng_framp)pChunk)->iChangedelay = iChangedelay; ((mng_framp)pChunk)->iChangetimeout = iChangetimeout; ((mng_framp)pChunk)->iChangeclipping = iChangeclipping; ((mng_framp)pChunk)->iChangesyncid = iChangesyncid; ((mng_framp)pChunk)->iDelay = iDelay; ((mng_framp)pChunk)->iTimeout = iTimeout; ((mng_framp)pChunk)->iBoundarytype = iBoundarytype; ((mng_framp)pChunk)->iBoundaryl = iBoundaryl; ((mng_framp)pChunk)->iBoundaryr = iBoundaryr; ((mng_framp)pChunk)->iBoundaryt = iBoundaryt; ((mng_framp)pChunk)->iBoundaryb = iBoundaryb; ((mng_framp)pChunk)->iCount = iCount; if (iNamesize) { MNG_ALLOC (pData, ((mng_framp)pChunk)->zName, iNamesize + 1); MNG_COPY (((mng_framp)pChunk)->zName, zName, iNamesize); } if (iCount) { mng_uint32 iSize = iCount * sizeof (mng_uint32); MNG_ALLOC (pData, ((mng_framp)pChunk)->pSyncids, iSize); MNG_COPY (((mng_framp)pChunk)->pSyncids, pSyncids, iSize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_FRAM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MOVE mng_retcode MNG_DECL mng_putchunk_move (mng_handle hHandle, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iMovetype, mng_int32 iMovex, mng_int32 iMovey) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_MOVE, mng_init_general, mng_free_general, mng_read_move, mng_write_move, mng_assign_general, 0, 0, sizeof(mng_move)}; #else {MNG_UINT_MOVE, mng_init_move, mng_free_move, mng_read_move, mng_write_move, mng_assign_move, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MOVE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_MOVE)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_move (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_MOVE, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_movep)pChunk)->iFirstid = iFirstid; ((mng_movep)pChunk)->iLastid = iLastid; ((mng_movep)pChunk)->iMovetype = iMovetype; ((mng_movep)pChunk)->iMovex = iMovex; ((mng_movep)pChunk)->iMovey = iMovey; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MOVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLIP mng_retcode MNG_DECL mng_putchunk_clip (mng_handle hHandle, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iCliptype, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_CLIP, mng_init_general, mng_free_general, mng_read_clip, mng_write_clip, mng_assign_general, 0, 0, sizeof(mng_clip)}; #else {MNG_UINT_CLIP, mng_init_clip, mng_free_clip, mng_read_clip, mng_write_clip, mng_assign_clip, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CLIP, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_CLIP)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_clip (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_CLIP, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_clipp)pChunk)->iFirstid = iFirstid; ((mng_clipp)pChunk)->iLastid = iLastid; ((mng_clipp)pChunk)->iCliptype = iCliptype; ((mng_clipp)pChunk)->iClipl = iClipl; ((mng_clipp)pChunk)->iClipr = iClipr; ((mng_clipp)pChunk)->iClipt = iClipt; ((mng_clipp)pChunk)->iClipb = iClipb; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CLIP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SHOW mng_retcode MNG_DECL mng_putchunk_show (mng_handle hHandle, mng_bool bEmpty, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iMode) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_SHOW, mng_init_general, mng_free_general, mng_read_show, mng_write_show, mng_assign_general, 0, 0, sizeof(mng_show)}; #else {MNG_UINT_SHOW, mng_init_show, mng_free_show, mng_read_show, mng_write_show, mng_assign_show, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SHOW, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_SHOW)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_show (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_SHOW, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_showp)pChunk)->bEmpty = bEmpty; ((mng_showp)pChunk)->iFirstid = iFirstid; ((mng_showp)pChunk)->iLastid = iLastid; ((mng_showp)pChunk)->iMode = iMode; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SHOW, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_TERM mng_retcode MNG_DECL mng_putchunk_term (mng_handle hHandle, mng_uint8 iTermaction, mng_uint8 iIteraction, mng_uint32 iDelay, mng_uint32 iItermax) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_TERM, mng_init_general, mng_free_general, mng_read_term, mng_write_term, mng_assign_general, 0, 0, sizeof(mng_term)}; #else {MNG_UINT_TERM, mng_init_term, mng_free_term, mng_read_term, mng_write_term, mng_assign_term, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TERM, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_term (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_TERM, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_termp)pChunk)->iTermaction = iTermaction; ((mng_termp)pChunk)->iIteraction = iIteraction; ((mng_termp)pChunk)->iDelay = iDelay; ((mng_termp)pChunk)->iItermax = iItermax; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TERM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE mng_retcode MNG_DECL mng_putchunk_save (mng_handle hHandle, mng_bool bEmpty, mng_uint8 iOffsettype, mng_uint32 iCount) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_SAVE, mng_init_general, mng_free_save, mng_read_save, mng_write_save, mng_assign_save, 0, 0, sizeof(mng_save)}; #else {MNG_UINT_SAVE, mng_init_save, mng_free_save, mng_read_save, mng_write_save, mng_assign_save, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SAVE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_SAVE)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_save (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_SAVE, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_savep)pChunk)->bEmpty = bEmpty; ((mng_savep)pChunk)->iOffsettype = iOffsettype; ((mng_savep)pChunk)->iCount = iCount; if (iCount) MNG_ALLOC (pData, ((mng_savep)pChunk)->pEntries, iCount * sizeof (mng_save_entry)); mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SAVE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_putchunk_save_entry (mng_handle hHandle, mng_uint32 iEntry, mng_uint8 iEntrytype, mng_uint32arr2 iOffset, mng_uint32arr2 iStarttime, mng_uint32 iLayernr, mng_uint32 iFramenr, mng_uint32 iNamesize, mng_pchar zName) { mng_datap pData; mng_chunkp pChunk; mng_save_entryp pEntry; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SAVE_ENTRY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) pChunk = pData->pLastchunk; /* last one must have been SAVE ! */ if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_SAVE) MNG_ERROR (pData, MNG_NOCORRCHUNK) /* index out of bounds ? */ if (iEntry >= ((mng_savep)pChunk)->iCount) MNG_ERROR (pData, MNG_INVALIDENTRYIX) /* address proper entry */ pEntry = ((mng_savep)pChunk)->pEntries + iEntry; pEntry->iEntrytype = iEntrytype; /* fill entry */ pEntry->iOffset[0] = iOffset[0]; pEntry->iOffset[1] = iOffset[1]; pEntry->iStarttime[0] = iStarttime[0]; pEntry->iStarttime[1] = iStarttime[1]; pEntry->iLayernr = iLayernr; pEntry->iFramenr = iFramenr; pEntry->iNamesize = iNamesize; if (iNamesize) { MNG_ALLOC (pData, pEntry->zName, iNamesize + 1); MNG_COPY (pEntry->zName, zName, iNamesize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SAVE_ENTRY, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SEEK mng_retcode MNG_DECL mng_putchunk_seek (mng_handle hHandle, mng_uint32 iNamesize, mng_pchar zName) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_SEEK, mng_init_general, mng_free_seek, mng_read_seek, mng_write_seek, mng_assign_seek, 0, 0, sizeof(mng_seek)}; #else {MNG_UINT_SEEK, mng_init_seek, mng_free_seek, mng_read_seek, mng_write_seek, mng_assign_seek, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SEEK, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_SEEK)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_seek (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_SEEK, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_seekp)pChunk)->iNamesize = iNamesize; if (iNamesize) { MNG_ALLOC (pData, ((mng_seekp)pChunk)->zName, iNamesize + 1); MNG_COPY (((mng_seekp)pChunk)->zName, zName, iNamesize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SEEK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_eXPI mng_retcode MNG_DECL mng_putchunk_expi (mng_handle hHandle, mng_uint16 iSnapshotid, mng_uint32 iNamesize, mng_pchar zName) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_eXPI, mng_init_general, mng_free_expi, mng_read_expi, mng_write_expi, mng_assign_general, 0, 0, sizeof(mng_expi)}; #else {MNG_UINT_eXPI, mng_init_expi, mng_free_expi, mng_read_expi, mng_write_expi, mng_assign_expi, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EXPI, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_eXPI)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_expi (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_eXPI, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_expip)pChunk)->iSnapshotid = iSnapshotid; ((mng_expip)pChunk)->iNamesize = iNamesize; if (iNamesize) { MNG_ALLOC (pData, ((mng_expip)pChunk)->zName, iNamesize + 1); MNG_COPY (((mng_expip)pChunk)->zName, zName, iNamesize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EXPI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_fPRI mng_retcode MNG_DECL mng_putchunk_fpri (mng_handle hHandle, mng_uint8 iDeltatype, mng_uint8 iPriority) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_fPRI, mng_init_general, mng_free_general, mng_read_fpri, mng_write_fpri, mng_assign_general, 0, 0, sizeof(mng_fpri)}; #else {MNG_UINT_fPRI, mng_init_fpri, mng_free_fpri, mng_read_fpri, mng_write_fpri, mng_assign_fpri, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_FPRI, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_fPRI)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_fpri (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_fPRI, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_fprip)pChunk)->iDeltatype = iDeltatype; ((mng_fprip)pChunk)->iPriority = iPriority; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_FPRI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_nEED mng_retcode MNG_DECL mng_putchunk_need (mng_handle hHandle, mng_uint32 iKeywordssize, mng_pchar zKeywords) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_nEED, mng_init_general, mng_free_need, mng_read_need, mng_write_need, mng_assign_need, 0, 0, sizeof(mng_need)}; #else {MNG_UINT_nEED, mng_init_need, mng_free_need, mng_read_need, mng_write_need, mng_assign_need, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_NEED, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_nEED)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_need (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_nEED, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_needp)pChunk)->iKeywordssize = iKeywordssize; if (iKeywordssize) { MNG_ALLOC (pData, ((mng_needp)pChunk)->zKeywords, iKeywordssize + 1); MNG_COPY (((mng_needp)pChunk)->zKeywords, zKeywords, iKeywordssize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_NEED, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYg mng_retcode MNG_DECL mng_putchunk_phyg (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iSizex, mng_uint32 iSizey, mng_uint8 iUnit) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_pHYg, mng_init_general, mng_free_general, mng_read_phyg, mng_write_phyg, mng_assign_general, 0, 0, sizeof(mng_phyg)}; #else {MNG_UINT_pHYg, mng_init_phyg, mng_free_phyg, mng_read_phyg, mng_write_phyg, mng_assign_phyg, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PHYG, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_pHYg)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_phyg (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_pHYg, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_phygp)pChunk)->bEmpty = bEmpty; ((mng_phygp)pChunk)->iSizex = iSizex; ((mng_phygp)pChunk)->iSizey = iSizey; ((mng_phygp)pChunk)->iUnit = iUnit; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PHYG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG mng_retcode MNG_DECL mng_putchunk_jhdr (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iColortype, mng_uint8 iImagesampledepth, mng_uint8 iImagecompression, mng_uint8 iImageinterlace, mng_uint8 iAlphasampledepth, mng_uint8 iAlphacompression, mng_uint8 iAlphafilter, mng_uint8 iAlphainterlace) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_JHDR, mng_init_general, mng_free_general, mng_read_jhdr, mng_write_jhdr, mng_assign_general, 0, 0, sizeof(mng_jhdr)}; #else {MNG_UINT_JHDR, mng_init_jhdr, mng_free_jhdr, mng_read_jhdr, mng_write_jhdr, mng_assign_jhdr, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JHDR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_JHDR)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_jhdr (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_JHDR, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_jhdrp)pChunk)->iWidth = iWidth; ((mng_jhdrp)pChunk)->iHeight = iHeight; ((mng_jhdrp)pChunk)->iColortype = iColortype; ((mng_jhdrp)pChunk)->iImagesampledepth = iImagesampledepth; ((mng_jhdrp)pChunk)->iImagecompression = iImagecompression; ((mng_jhdrp)pChunk)->iImageinterlace = iImageinterlace; ((mng_jhdrp)pChunk)->iAlphasampledepth = iAlphasampledepth; ((mng_jhdrp)pChunk)->iAlphacompression = iAlphacompression; ((mng_jhdrp)pChunk)->iAlphafilter = iAlphafilter; ((mng_jhdrp)pChunk)->iAlphainterlace = iAlphainterlace; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG mng_retcode MNG_DECL mng_putchunk_jdat (mng_handle hHandle, mng_uint32 iRawlen, mng_ptr pRawdata) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_JDAT, mng_init_general, mng_free_jdat, mng_read_jdat, mng_write_jdat, mng_assign_jdat, 0, 0, sizeof(mng_jdat)}; #else {MNG_UINT_JDAT, mng_init_jdat, mng_free_jdat, mng_read_jdat, mng_write_jdat, mng_assign_jdat, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JDAT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR or JHDR first! */ if ((pData->iFirstchunkadded != MNG_UINT_MHDR) && (pData->iFirstchunkadded != MNG_UINT_JHDR) ) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_JDAT)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_jdat (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_JDAT, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_jdatp)pChunk)->iDatasize = iRawlen; if (iRawlen) { MNG_ALLOC (pData, ((mng_jdatp)pChunk)->pData, iRawlen); MNG_COPY (((mng_jdatp)pChunk)->pData, pRawdata, iRawlen); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JDAT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG mng_retcode MNG_DECL mng_putchunk_jdaa (mng_handle hHandle, mng_uint32 iRawlen, mng_ptr pRawdata) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_JDAA, mng_init_general, mng_free_jdaa, mng_read_jdaa, mng_write_jdaa, mng_assign_jdaa, 0, 0, sizeof(mng_jdaa)}; #else {MNG_UINT_JDAA, mng_init_jdaa, mng_free_jdaa, mng_read_jdaa, mng_write_jdaa, mng_assign_jdaa, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JDAA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR or JHDR first! */ if ((pData->iFirstchunkadded != MNG_UINT_MHDR) && (pData->iFirstchunkadded != MNG_UINT_JHDR) ) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_JDAA)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_jdaa (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_JDAA, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_jdaap)pChunk)->iDatasize = iRawlen; if (iRawlen) { MNG_ALLOC (pData, ((mng_jdaap)pChunk)->pData, iRawlen); MNG_COPY (((mng_jdaap)pChunk)->pData, pRawdata, iRawlen); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JDAA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG mng_retcode MNG_DECL mng_putchunk_jsep (mng_handle hHandle) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_JSEP, mng_init_general, mng_free_general, mng_read_jsep, mng_write_jsep, mng_assign_general, 0, 0, sizeof(mng_jsep)}; #else {MNG_UINT_JSEP, mng_init_jsep, mng_free_jsep, mng_read_jsep, mng_write_jsep, mng_assign_jsep, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JSEP, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR or JHDR first! */ if ((pData->iFirstchunkadded != MNG_UINT_MHDR) && (pData->iFirstchunkadded != MNG_UINT_JHDR) ) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_JSEP)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_jsep (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_JSEP, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JSEP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode MNG_DECL mng_putchunk_dhdr (mng_handle hHandle, mng_uint16 iObjectid, mng_uint8 iImagetype, mng_uint8 iDeltatype, mng_uint32 iBlockwidth, mng_uint32 iBlockheight, mng_uint32 iBlockx, mng_uint32 iBlocky) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_DHDR, mng_init_general, mng_free_general, mng_read_dhdr, mng_write_dhdr, mng_assign_general, 0, 0, sizeof(mng_dhdr)}; #else {MNG_UINT_DHDR, mng_init_dhdr, mng_free_dhdr, mng_read_dhdr, mng_write_dhdr, mng_assign_dhdr, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DHDR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_DHDR)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_dhdr (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_DHDR, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_dhdrp)pChunk)->iObjectid = iObjectid; ((mng_dhdrp)pChunk)->iImagetype = iImagetype; ((mng_dhdrp)pChunk)->iDeltatype = iDeltatype; ((mng_dhdrp)pChunk)->iBlockwidth = iBlockwidth; ((mng_dhdrp)pChunk)->iBlockheight = iBlockheight; ((mng_dhdrp)pChunk)->iBlockx = iBlockx; ((mng_dhdrp)pChunk)->iBlocky = iBlocky; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode MNG_DECL mng_putchunk_prom (mng_handle hHandle, mng_uint8 iColortype, mng_uint8 iSampledepth, mng_uint8 iFilltype) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_PROM, mng_init_general, mng_free_general, mng_read_prom, mng_write_prom, mng_assign_general, 0, 0, sizeof(mng_prom)}; #else {MNG_UINT_PROM, mng_init_prom, mng_free_prom, mng_read_prom, mng_write_prom, mng_assign_prom, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PROM, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_PROM)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_prom (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_PROM, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_promp)pChunk)->iColortype = iColortype; ((mng_promp)pChunk)->iSampledepth = iSampledepth; ((mng_promp)pChunk)->iFilltype = iFilltype; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PROM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode MNG_DECL mng_putchunk_ipng (mng_handle hHandle) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_IPNG, mng_init_general, mng_free_general, mng_read_ipng, mng_write_ipng, mng_assign_general, 0, 0, sizeof(mng_ipng)}; #else {MNG_UINT_IPNG, mng_init_ipng, mng_free_ipng, mng_read_ipng, mng_write_ipng, mng_assign_ipng, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IPNG, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_IPNG)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_ipng (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_IPNG, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IPNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode MNG_DECL mng_putchunk_pplt (mng_handle hHandle, mng_uint8 iDeltatype, mng_uint32 iCount) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_PPLT, mng_init_general, mng_free_general, mng_read_pplt, mng_write_pplt, mng_assign_general, 0, 0, sizeof(mng_pplt)}; #else {MNG_UINT_PPLT, mng_init_pplt, mng_free_pplt, mng_read_pplt, mng_write_pplt, mng_assign_pplt, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PPLT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_PPLT)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_pplt (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_PPLT, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_ppltp)pChunk)->iDeltatype = iDeltatype; ((mng_ppltp)pChunk)->iCount = iCount; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PPLT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode MNG_DECL mng_putchunk_pplt_entry (mng_handle hHandle, mng_uint32 iEntry, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_uint16 iAlpha) { mng_datap pData; mng_chunkp pChunk; mng_pplt_entryp pEntry; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PPLT_ENTRY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) pChunk = pData->pLastchunk; /* last one must have been PPLT ! */ if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_PPLT) MNG_ERROR (pData, MNG_NOCORRCHUNK) /* index out of bounds ? */ if (iEntry >= ((mng_ppltp)pChunk)->iCount) MNG_ERROR (pData, MNG_INVALIDENTRYIX) /* address proper entry */ pEntry = (mng_pplt_entryp)(((mng_ppltp)pChunk)->aEntries) + iEntry; pEntry->iRed = (mng_uint8)iRed; /* fill the entry */ pEntry->iGreen = (mng_uint8)iGreen; pEntry->iBlue = (mng_uint8)iBlue; pEntry->iAlpha = (mng_uint8)iAlpha; pEntry->bUsed = MNG_TRUE; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PPLT_ENTRY, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG mng_retcode MNG_DECL mng_putchunk_ijng (mng_handle hHandle) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_IJNG, mng_init_general, mng_free_general, mng_read_ijng, mng_write_ijng, mng_assign_general, 0, 0, sizeof(mng_ijng)}; #else {MNG_UINT_IJNG, mng_init_ijng, mng_free_ijng, mng_read_ijng, mng_write_ijng, mng_assign_ijng, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IJNG, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_IJNG)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_ijng (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_IJNG, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IJNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode MNG_DECL mng_putchunk_drop (mng_handle hHandle, mng_uint32 iCount, mng_chunkidp pChunknames) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_DROP, mng_init_general, mng_free_drop, mng_read_drop, mng_write_drop, mng_assign_drop, 0, 0, sizeof(mng_drop)}; #else {MNG_UINT_DROP, mng_init_drop, mng_free_drop, mng_read_drop, mng_write_drop, mng_assign_drop, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DROP, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_DROP)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_drop (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_DROP, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_dropp)pChunk)->iCount = iCount; if (iCount) { mng_uint32 iSize = iCount * sizeof (mng_chunkid); MNG_ALLOC (pData, ((mng_dropp)pChunk)->pChunknames, iSize); MNG_COPY (((mng_dropp)pChunk)->pChunknames, pChunknames, iSize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DROP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK mng_retcode MNG_DECL mng_putchunk_dbyk (mng_handle hHandle, mng_chunkid iChunkname, mng_uint8 iPolarity, mng_uint32 iKeywordssize, mng_pchar zKeywords) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_DBYK, mng_init_general, mng_free_dbyk, mng_read_dbyk, mng_write_dbyk, mng_assign_dbyk, 0, 0, sizeof(mng_dbyk)}; #else {MNG_UINT_DBYK, mng_init_dbyk, mng_free_dbyk, mng_read_dbyk, mng_write_dbyk, mng_assign_dbyk, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DBYK, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_DBYK)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_dbyk (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_DBYK, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_dbykp)pChunk)->iChunkname = iChunkname; ((mng_dbykp)pChunk)->iPolarity = iPolarity; ((mng_dbykp)pChunk)->iKeywordssize = iKeywordssize; if (iKeywordssize) { MNG_ALLOC (pData, ((mng_dbykp)pChunk)->zKeywords, iKeywordssize + 1); MNG_COPY (((mng_dbykp)pChunk)->zKeywords, zKeywords, iKeywordssize); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DBYK, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR mng_retcode MNG_DECL mng_putchunk_ordr (mng_handle hHandle, mng_uint32 iCount) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_ORDR, mng_init_general, mng_free_ordr, mng_read_ordr, mng_write_ordr, mng_assign_ordr, 0, 0, sizeof(mng_ordr)}; #else {MNG_UINT_ORDR, mng_init_ordr, mng_free_ordr, mng_read_ordr, mng_write_ordr, mng_assign_ordr, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ORDR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_ORDR)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_ordr (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_ORDR, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_ordrp)pChunk)->iCount = iCount; if (iCount) MNG_ALLOC (pData, ((mng_ordrp)pChunk)->pEntries, iCount * sizeof (mng_ordr_entry)); mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ORDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR mng_retcode MNG_DECL mng_putchunk_ordr_entry (mng_handle hHandle, mng_uint32 iEntry, mng_chunkid iChunkname, mng_uint8 iOrdertype) { mng_datap pData; mng_chunkp pChunk; mng_ordr_entryp pEntry; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ORDR_ENTRY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) pChunk = pData->pLastchunk; /* last one must have been ORDR ! */ if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_ORDR) MNG_ERROR (pData, MNG_NOCORRCHUNK) /* index out of bounds ? */ if (iEntry >= ((mng_ordrp)pChunk)->iCount) MNG_ERROR (pData, MNG_INVALIDENTRYIX) /* address proper entry */ pEntry = ((mng_ordrp)pChunk)->pEntries + iEntry; pEntry->iChunkname = iChunkname; /* fill the entry */ pEntry->iOrdertype = iOrdertype; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ORDR_ENTRY, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MAGN mng_retcode MNG_DECL mng_putchunk_magn (mng_handle hHandle, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint16 iMethodX, mng_uint16 iMX, mng_uint16 iMY, mng_uint16 iML, mng_uint16 iMR, mng_uint16 iMT, mng_uint16 iMB, mng_uint16 iMethodY) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_MAGN, mng_init_general, mng_free_general, mng_read_magn, mng_write_magn, mng_assign_general, 0, 0, sizeof(mng_magn)}; #else {MNG_UINT_MAGN, mng_init_magn, mng_free_magn, mng_read_magn, mng_write_magn, mng_assign_magn, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MAGN, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_MAGN)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_magn (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_MAGN, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_magnp)pChunk)->iFirstid = iFirstid; ((mng_magnp)pChunk)->iLastid = iLastid; ((mng_magnp)pChunk)->iMethodX = (mng_uint8)iMethodX; ((mng_magnp)pChunk)->iMX = iMX; ((mng_magnp)pChunk)->iMY = iMY; ((mng_magnp)pChunk)->iML = iML; ((mng_magnp)pChunk)->iMR = iMR; ((mng_magnp)pChunk)->iMT = iMT; ((mng_magnp)pChunk)->iMB = iMB; ((mng_magnp)pChunk)->iMethodY = (mng_uint8)iMethodY; mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MAGN, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL MNG_EXT mng_retcode MNG_DECL mng_putchunk_mpng (mng_handle hHandle, mng_uint32 iFramewidth, mng_uint32 iFrameheight, mng_uint16 iNumplays, mng_uint16 iTickspersec, mng_uint8 iCompressionmethod, mng_uint32 iCount) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_mpNG, mng_init_general, mng_free_mpng, mng_read_mpng, mng_write_mpng, mng_assign_mpng, 0, 0, sizeof(mng_mpng)}; #else {MNG_UINT_mpNG, mng_init_mpng, mng_free_mpng, mng_read_mpng, mng_write_mpng, mng_assign_mpng, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MPNG, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a IHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_IHDR) MNG_ERROR (pData, MNG_NOHEADER) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_mpng (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_mpNG, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_mpngp)pChunk)->iFramewidth = iFramewidth; ((mng_mpngp)pChunk)->iFrameheight = iFrameheight; ((mng_mpngp)pChunk)->iNumplays = iNumplays; ((mng_mpngp)pChunk)->iTickspersec = iTickspersec; ((mng_mpngp)pChunk)->iCompressionmethod = iCompressionmethod; ((mng_mpngp)pChunk)->iFramessize = iCount * sizeof (mng_mpng_frame); if (iCount) MNG_ALLOC (pData, ((mng_mpngp)pChunk)->pFrames, ((mng_mpngp)pChunk)->iFramessize); mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MPNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL MNG_EXT mng_retcode MNG_DECL mng_putchunk_mpng_frame (mng_handle hHandle, mng_uint32 iEntry, mng_uint32 iX, mng_uint32 iY, mng_uint32 iWidth, mng_uint32 iHeight, mng_int32 iXoffset, mng_int32 iYoffset, mng_uint16 iTicks) { mng_datap pData; mng_chunkp pChunk; mng_mpng_framep pFrame; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MPNG_FRAME, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a IHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_IHDR) MNG_ERROR (pData, MNG_NOHEADER) pChunk = pData->pLastchunk; /* last one must have been mpNG ! */ if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_mpNG) MNG_ERROR (pData, MNG_NOCORRCHUNK) /* index out of bounds ? */ if (iEntry >= (((mng_mpngp)pChunk)->iFramessize / sizeof (mng_mpng_frame))) MNG_ERROR (pData, MNG_INVALIDENTRYIX) /* address proper entry */ pFrame = ((mng_mpngp)pChunk)->pFrames + iEntry; /* fill entry */ pFrame->iX = iX; pFrame->iY = iY; pFrame->iWidth = iWidth; pFrame->iHeight = iHeight; pFrame->iXoffset = iXoffset; pFrame->iYoffset = iYoffset; pFrame->iTicks = iTicks; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MPNG_FRAME, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_evNT mng_retcode MNG_DECL mng_putchunk_evnt (mng_handle hHandle, mng_uint32 iCount) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_evNT, mng_init_general, mng_free_evnt, mng_read_evnt, mng_write_evnt, mng_assign_evnt, 0, 0, sizeof(mng_evnt)}; #else {MNG_UINT_evNT, mng_init_evnt, mng_free_evnt, mng_read_evnt, mng_write_evnt, mng_assign_evnt, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EVNT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, MNG_UINT_evNT)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_evnt (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_evNT, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_evntp)pChunk)->iCount = iCount; if (iCount) MNG_ALLOC (pData, ((mng_evntp)pChunk)->pEntries, iCount * sizeof (mng_evnt_entry)); mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EVNT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_putchunk_evnt_entry (mng_handle hHandle, mng_uint32 iEntry, mng_uint8 iEventtype, mng_uint8 iMasktype, mng_int32 iLeft, mng_int32 iRight, mng_int32 iTop, mng_int32 iBottom, mng_uint16 iObjectid, mng_uint8 iIndex, mng_uint32 iSegmentnamesize, mng_pchar zSegmentname) { mng_datap pData; mng_chunkp pChunk; mng_evnt_entryp pEntry; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EVNT_ENTRY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a MHDR first! */ if (pData->iFirstchunkadded != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_NOHEADER) pChunk = pData->pLastchunk; /* last one must have been evNT ! */ if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_evNT) MNG_ERROR (pData, MNG_NOCORRCHUNK) /* index out of bounds ? */ if (iEntry >= ((mng_evntp)pChunk)->iCount) MNG_ERROR (pData, MNG_INVALIDENTRYIX) /* address proper entry */ pEntry = ((mng_evntp)pChunk)->pEntries + iEntry; /* fill entry */ pEntry->iEventtype = iEventtype; pEntry->iMasktype = iMasktype; pEntry->iLeft = iLeft; pEntry->iRight = iRight; pEntry->iTop = iTop; pEntry->iBottom = iBottom; pEntry->iObjectid = iObjectid; pEntry->iIndex = iIndex; pEntry->iSegmentnamesize = iSegmentnamesize; if (iSegmentnamesize) { MNG_ALLOC (pData, pEntry->zSegmentname, iSegmentnamesize + 1); MNG_COPY (pEntry->zSegmentname, zSegmentname, iSegmentnamesize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EVNT_ENTRY, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode MNG_DECL mng_putchunk_unknown (mng_handle hHandle, mng_chunkid iChunkname, mng_uint32 iRawlen, mng_ptr pRawdata) { mng_datap pData; mng_chunkp pChunk; mng_retcode iRetcode; #ifndef MNG_OPTIMIZE_CHUNKREADER mng_chunk_header sChunkheader = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_HUH, mng_init_general, mng_free_unknown, mng_read_unknown, mng_write_unknown, mng_assign_unknown, 0, 0, sizeof(mng_unknown_chunk)}; #else {MNG_UINT_HUH, mng_init_unknown, mng_free_unknown, mng_read_unknown, mng_write_unknown, mng_assign_unknown, 0, 0}; #endif #else mng_chunk_header sChunkheader; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_UNKNOWN, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must have had a header first! */ if (pData->iFirstchunkadded == 0) MNG_ERROR (pData, MNG_NOHEADER) /* prevent misplaced TERM ! */ if (!check_term (pData, iChunkname)) MNG_ERROR (pData, MNG_TERMSEQERROR) /* create the chunk */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_OPTIMIZE_CHUNKINITFREE iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #else iRetcode = mng_init_unknown (pData, &sChunkheader, &pChunk); #endif #else mng_get_chunkheader(MNG_UINT_HUH, &sChunkheader); iRetcode = mng_init_general (pData, &sChunkheader, &pChunk); #endif if (iRetcode) /* on error bail out */ return iRetcode; /* fill the chunk */ ((mng_unknown_chunkp)pChunk)->sHeader.iChunkname = iChunkname; ((mng_unknown_chunkp)pChunk)->iDatasize = iRawlen; if (iRawlen) { MNG_ALLOC (pData, ((mng_unknown_chunkp)pChunk)->pData, iRawlen); MNG_COPY (((mng_unknown_chunkp)pChunk)->pData, pRawdata, iRawlen); } mng_add_chunk (pData, pChunk); /* add it to the list */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_UNKNOWN, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_INCLUDE_WRITE_PROCS */ /* ************************************************************************** */ /* ************************************************************************** */ mng_retcode MNG_DECL mng_getimgdata_seq (mng_handle hHandle, mng_uint32 iSeqnr, mng_uint32 iCanvasstyle, mng_getcanvasline fGetcanvasline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_SEQ, MNG_LC_START); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_SEQ, MNG_LC_END); #endif return MNG_FNNOTIMPLEMENTED; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_getimgdata_chunkseq (mng_handle hHandle, mng_uint32 iSeqnr, mng_uint32 iCanvasstyle, mng_getcanvasline fGetcanvasline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_CHUNKSEQ, MNG_LC_START); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_CHUNKSEQ, MNG_LC_END); #endif return MNG_FNNOTIMPLEMENTED; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_getimgdata_chunk (mng_handle hHandle, mng_handle hChunk, mng_uint32 iCanvasstyle, mng_getcanvasline fGetcanvasline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_CHUNK, MNG_LC_START); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_CHUNK, MNG_LC_END); #endif return MNG_FNNOTIMPLEMENTED; } /* ************************************************************************** */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_WRITE_PROCS /* ************************************************************************** */ mng_retcode MNG_DECL mng_putimgdata_ihdr (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iColortype, mng_uint8 iBitdepth, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace, mng_uint32 iCanvasstyle, mng_getcanvasline fGetcanvasline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTIMGDATA_IHDR, MNG_LC_START); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTIMGDATA_IHDR, MNG_LC_END); #endif return MNG_FNNOTIMPLEMENTED; } /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG mng_retcode MNG_DECL mng_putimgdata_jhdr (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iColortype, mng_uint8 iBitdepth, mng_uint8 iCompression, mng_uint8 iInterlace, mng_uint8 iAlphaBitdepth, mng_uint8 iAlphaCompression, mng_uint8 iAlphaFilter, mng_uint8 iAlphaInterlace, mng_uint32 iCanvasstyle, mng_getcanvasline fGetcanvasline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTIMGDATA_JHDR, MNG_LC_START); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTIMGDATA_JHDR, MNG_LC_END); #endif return MNG_FNNOTIMPLEMENTED; } #endif /* ************************************************************************** */ mng_retcode MNG_DECL mng_updatemngheader (mng_handle hHandle, mng_uint32 iFramecount, mng_uint32 iLayercount, mng_uint32 iPlaytime) { mng_datap pData; mng_chunkp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_UPDATEMNGHEADER, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must be a MNG animation! */ if ((pData->eImagetype != mng_it_mng) || (pData->iFirstchunkadded != MNG_UINT_MHDR)) MNG_ERROR (pData, MNG_NOMHDR) pChunk = pData->pFirstchunk; /* get the first chunk */ /* and update the variables */ ((mng_mhdrp)pChunk)->iFramecount = iFramecount; ((mng_mhdrp)pChunk)->iLayercount = iLayercount; ((mng_mhdrp)pChunk)->iPlaytime = iPlaytime; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_UPDATEMNGHEADER, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_updatemngsimplicity (mng_handle hHandle, mng_uint32 iSimplicity) { mng_datap pData; mng_chunkp pChunk; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_UPDATEMNGSIMPLICITY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = (mng_datap)hHandle; /* and make it addressable */ if (!pData->bCreating) /* aren't we creating a new file ? */ MNG_ERROR (pData, MNG_FUNCTIONINVALID) /* must be a MNG animation! */ if ((pData->eImagetype != mng_it_mng) || (pData->iFirstchunkadded != MNG_UINT_MHDR)) MNG_ERROR (pData, MNG_NOMHDR) pChunk = pData->pFirstchunk; /* get the first chunk */ /* and update the variable */ ((mng_mhdrp)pChunk)->iSimplicity = iSimplicity; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_UPDATEMNGSIMPLICITY, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_INCLUDE_WRITE_PROCS */ /* ************************************************************************** */ #endif /* MNG_ACCESS_CHUNKS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/README.dll0000644000000000000000000000335512005307152013114 0ustar rootrootStandard Windows DLL ==================== The DLL provided in the BCB/win32dll directory is meant as the sole candidate for distributions, based on libmng.dll, that install the DLL into the public Windows system-directory. The outline herein defines the requirements to which such a distribution must comply. If you cannot comply with these requirements please install the dll in the same directory as your application and NOT in the Windows system-directory!!! 1) Only the DLL already assembled in the libmng distribution may be used for other distributions! 2) Only stable public releases are eligible for distribution! A public release is one where the y-value of the x.y.z version-code is an even number. Eg. 1.0.0, 1.2.1, 2.4.7, etc. 3) The installation program MUST store the DLL in the Windows system-directory! Eg. C:\WinNT\System32, C:\Windows98\System (Note: InstallShield users can use the variable) 3) The installation program MUST flag the file as a shared library! 4) The installation program MUST NOT install the DLL if a newer version already exists in the Windows system-directory! The standard DLL provided contains the Windows-default version-numbering system. PLEASE USE IT!! DO NOT rely on the date or size of the files. 5) An uninstall procedure MAY NOT remove the DLL if other applications are still linked to it! Proper handling as a shared library is imperitive. 6) TEST IT, TEST IT, TEST IT!!! (I just can't stress this enough) If you don't have enough time, let someone else test it BEFORE you distribute! The penalty for violating these rules is inclusion of your name in the list of endangered but useless species (just below the GIF entry!), and on my blacklist. YOU HAVE BEEN FOREWARNED! libmng-2.0.2/libmng_chunk_descr.c0000644000000000000000000060116212005307152015446 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_chunk_descr.c copyright (c) 2005-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Chunk descriptor functions (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the chunk- anf field-descriptor * */ /* * routines * */ /* * * */ /* * changes : 1.0.9 - 12/06/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKREADER * */ /* * 1.0.9 - 12/11/2004 - G.Juyn * */ /* * - made all constants 'static' * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * 1.0.9 - 01/17/2005 - G.Juyn * */ /* * - fixed problem with global PLTE/tRNS * */ /* * * */ /* * 1.0.10 - 01/17/2005 - G.R-P. * */ /* * - added typecast to appease the compiler * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #include /* needed for offsetof() */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_memory.h" #include "libmng_objects.h" #include "libmng_chunks.h" #include "libmng_chunk_descr.h" #include "libmng_object_prc.h" #include "libmng_chunk_prc.h" #include "libmng_chunk_io.h" #include "libmng_display.h" #ifdef MNG_INCLUDE_ANG_PROPOSAL #include "libmng_pixels.h" #include "libmng_filter.h" #endif #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #ifdef MNG_OPTIMIZE_CHUNKREADER #if defined(MNG_INCLUDE_READ_PROCS) || defined(MNG_INCLUDE_WRITE_PROCS) /* ************************************************************************** */ /* ************************************************************************** */ /* PNG chunks */ MNG_LOCAL mng_field_descriptor mng_fields_ihdr [] = { {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_NOHIGHBIT, 1, 0, 4, 4, offsetof(mng_ihdr, iWidth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_NOHIGHBIT, 1, 0, 4, 4, offsetof(mng_ihdr, iHeight), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 1, 16, 1, 1, offsetof(mng_ihdr, iBitdepth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 6, 1, 1, offsetof(mng_ihdr, iColortype), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 1, 1, offsetof(mng_ihdr, iCompression), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 1, 1, offsetof(mng_ihdr, iFilter), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_ihdr, iInterlace), MNG_NULL, MNG_NULL} }; /* ************************************************************************** */ MNG_LOCAL mng_field_descriptor mng_fields_plte [] = { {mng_debunk_plte, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; /* ************************************************************************** */ MNG_LOCAL mng_field_descriptor mng_fields_idat [] = { {MNG_NULL, MNG_NULL, 0, 0, 0, 0, offsetof(mng_idat, pData), MNG_NULL, offsetof(mng_idat, iDatasize)} }; /* ************************************************************************** */ MNG_LOCAL mng_field_descriptor mng_fields_trns [] = { {mng_debunk_trns, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_gAMA MNG_LOCAL mng_field_descriptor mng_fields_gama [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_gama, iGamma), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_cHRM MNG_LOCAL mng_field_descriptor mng_fields_chrm [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_chrm, iWhitepointx), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_chrm, iWhitepointy), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_chrm, iRedx), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_chrm, iRedy), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_chrm, iGreeny), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_chrm, iGreeny), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_chrm, iBluex), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_chrm, iBluey), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sRGB MNG_LOCAL mng_field_descriptor mng_fields_srgb [] = { {MNG_NULL, MNG_FIELD_INT, 0, 4, 1, 1, offsetof(mng_srgb, iRenderingintent), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iCCP MNG_LOCAL mng_field_descriptor mng_fields_iccp [] = { {MNG_NULL, MNG_FIELD_TERMINATOR, 0, 0, 1, 79, offsetof(mng_iccp, zName), MNG_NULL, offsetof(mng_iccp, iNamesize)}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 1, 1, offsetof(mng_iccp, iCompression), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_DEFLATED, 0, 0, 0, 0, offsetof(mng_iccp, pProfile), MNG_NULL, offsetof(mng_iccp, iProfilesize)} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tEXt MNG_LOCAL mng_field_descriptor mng_fields_text [] = { {MNG_NULL, MNG_FIELD_TERMINATOR, 0, 0, 1, 79, offsetof(mng_text, zKeyword), MNG_NULL, offsetof(mng_text, iKeywordsize)}, {MNG_NULL, MNG_NULL, 0, 0, 0, 0, offsetof(mng_text, zText), MNG_NULL, offsetof(mng_text, iTextsize)} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_zTXt MNG_LOCAL mng_field_descriptor mng_fields_ztxt [] = { {MNG_NULL, MNG_FIELD_TERMINATOR, 0, 0, 1, 79, offsetof(mng_ztxt, zKeyword), MNG_NULL, offsetof(mng_ztxt, iKeywordsize)}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 1, 1, offsetof(mng_ztxt, iCompression), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_DEFLATED, 0, 0, 0, 0, offsetof(mng_ztxt, zText), MNG_NULL, offsetof(mng_ztxt, iTextsize)} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iTXt MNG_LOCAL mng_field_descriptor mng_fields_itxt [] = { {MNG_NULL, MNG_FIELD_TERMINATOR, 0, 0, 1, 79, offsetof(mng_itxt, zKeyword), MNG_NULL, offsetof(mng_itxt, iKeywordsize)}, {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_itxt, iCompressionflag), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 1, 1, offsetof(mng_itxt, iCompressionmethod), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_TERMINATOR, 0, 0, 0, 0, offsetof(mng_itxt, zLanguage), MNG_NULL, offsetof(mng_itxt, iLanguagesize)}, {MNG_NULL, MNG_FIELD_TERMINATOR, 0, 0, 0, 0, offsetof(mng_itxt, zTranslation), MNG_NULL, offsetof(mng_itxt, iTranslationsize)}, {mng_deflate_itxt, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_bKGD MNG_LOCAL mng_field_descriptor mng_fields_bkgd [] = { {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_PUTIMGTYPE, 0, 0, 0, 0, offsetof(mng_bkgd, iType), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_IFIMGTYPE3, 0, 0xFF, 1, 1, offsetof(mng_bkgd, iIndex), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_IFIMGTYPE0 | MNG_FIELD_IFIMGTYPE4, 0, 0xFFFF, 2, 2, offsetof(mng_bkgd, iGray), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_IFIMGTYPE2 | MNG_FIELD_IFIMGTYPE6, 0, 0xFFFF, 2, 2, offsetof(mng_bkgd, iRed), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_IFIMGTYPE2 | MNG_FIELD_IFIMGTYPE6, 0, 0xFFFF, 2, 2, offsetof(mng_bkgd, iGreen), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_IFIMGTYPE2 | MNG_FIELD_IFIMGTYPE6, 0, 0xFFFF, 2, 2, offsetof(mng_bkgd, iBlue), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYs MNG_LOCAL mng_field_descriptor mng_fields_phys [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_phys, iSizex), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_phys, iSizey), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_phys, iUnit), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sBIT MNG_LOCAL mng_field_descriptor mng_fields_sbit [] = { {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_PUTIMGTYPE, 0, 0, 0, 0, offsetof(mng_sbit, iType), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_IFIMGTYPES, 0, 0xFF, 1, 1, offsetof(mng_sbit, aBits[0]), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_IFIMGTYPE2 | MNG_FIELD_IFIMGTYPE3 | MNG_FIELD_IFIMGTYPE4 | MNG_FIELD_IFIMGTYPE6, 0, 0xFF, 1, 1, offsetof(mng_sbit, aBits[1]), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_IFIMGTYPE2 | MNG_FIELD_IFIMGTYPE3 | MNG_FIELD_IFIMGTYPE6, 0, 0xFF, 1, 1, offsetof(mng_sbit, aBits[2]), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_IFIMGTYPE6, 0, 0xFF, 1, 1, offsetof(mng_sbit, aBits[3]), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sPLT MNG_LOCAL mng_field_descriptor mng_fields_splt [] = { {MNG_NULL, MNG_NULL, 0, 0, 1, 79, offsetof(mng_splt, zName), MNG_NULL, offsetof(mng_splt, iNamesize)}, {MNG_NULL, MNG_FIELD_INT, 8, 16, 1, 1, offsetof(mng_splt, iSampledepth), MNG_NULL, MNG_NULL}, {mng_splt_entries, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_hIST MNG_LOCAL mng_field_descriptor mng_fields_hist [] = { {mng_hist_entries, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tIME MNG_LOCAL mng_field_descriptor mng_fields_time [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_time, iYear), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 1, 12, 1, 1, offsetof(mng_time, iMonth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 1, 31, 1, 1, offsetof(mng_time, iDay), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 24, 1, 1, offsetof(mng_time, iHour), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 60, 1, 1, offsetof(mng_time, iMinute), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 60, 1, 1, offsetof(mng_time, iSecond), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ /* ************************************************************************** */ /* JNG chunks */ #ifdef MNG_INCLUDE_JNG MNG_LOCAL mng_field_descriptor mng_fields_jhdr [] = { {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_NOHIGHBIT, 1, 0, 4, 4, offsetof(mng_jhdr, iWidth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_NOHIGHBIT, 1, 0, 4, 4, offsetof(mng_jhdr, iHeight), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 8, 16, 1, 1, offsetof(mng_jhdr, iColortype), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 8, 20, 1, 1, offsetof(mng_jhdr, iImagesampledepth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 8, 8, 1, 1, offsetof(mng_jhdr, iImagecompression), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 8, 1, 1, offsetof(mng_jhdr, iImageinterlace), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 16, 1, 1, offsetof(mng_jhdr, iAlphasampledepth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 8, 1, 1, offsetof(mng_jhdr, iAlphacompression), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 1, 1, offsetof(mng_jhdr, iAlphafilter), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_jhdr, iAlphainterlace), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #define mng_fields_jdaa mng_fields_idat #define mng_fields_jdat mng_fields_idat #endif /* ************************************************************************** */ /* ************************************************************************** */ /* MNG chunks */ MNG_LOCAL mng_field_descriptor mng_fields_mhdr [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_mhdr, iWidth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_mhdr, iHeight), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_mhdr, iTicks), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_mhdr, iLayercount), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_mhdr, iFramecount), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_mhdr, iPlaytime), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_mhdr, iSimplicity), MNG_NULL, MNG_NULL} }; /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_LOOP MNG_LOCAL mng_field_descriptor mng_fields_loop [] = { {mng_debunk_loop, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_LOOP MNG_LOCAL mng_field_descriptor mng_fields_endl [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0xFF, 1, 1, offsetof(mng_endl, iLevel), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DEFI MNG_LOCAL mng_field_descriptor mng_fields_defi [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_defi, iObjectid), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 0xFF, 1, 1, offsetof(mng_defi, iDonotshow), offsetof(mng_defi, bHasdonotshow), MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 0xFF, 1, 1, offsetof(mng_defi, iConcrete), offsetof(mng_defi, bHasconcrete), MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 0, 4, 4, offsetof(mng_defi, iXlocation), offsetof(mng_defi, bHasloca), MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 0, 4, 4, offsetof(mng_defi, iYlocation), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP2, 0, 0, 4, 4, offsetof(mng_defi, iLeftcb), offsetof(mng_defi, bHasclip), MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP2, 0, 0, 4, 4, offsetof(mng_defi, iRightcb), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP2, 0, 0, 4, 4, offsetof(mng_defi, iTopcb), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP2, 0, 0, 4, 4, offsetof(mng_defi, iBottomcb), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BASI MNG_LOCAL mng_field_descriptor mng_fields_basi [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_basi, iWidth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_basi, iHeight), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 1, 16, 1, 1, offsetof(mng_basi, iBitdepth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 6, 1, 1, offsetof(mng_basi, iColortype), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 1, 1, offsetof(mng_basi, iCompression), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 1, 1, offsetof(mng_basi, iFilter), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_basi, iInterlace), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 0xFFFF, 2, 2, offsetof(mng_basi, iRed), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 0xFFFF, 2, 2, offsetof(mng_basi, iGreen), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 0xFFFF, 2, 2, offsetof(mng_basi, iBlue), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 0xFFFF, 2, 2, offsetof(mng_basi, iAlpha), offsetof(mng_basi, bHasalpha), MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 1, 1, 1, offsetof(mng_basi, iViewable), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLON MNG_LOCAL mng_field_descriptor mng_fields_clon [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_clon, iSourceid), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_clon, iCloneid), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 2, 1, 1, offsetof(mng_clon, iClonetype), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 1, 1, 1, offsetof(mng_clon, iDonotshow), offsetof(mng_clon, bHasdonotshow), MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 1, 1, 1, offsetof(mng_clon, iConcrete), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 2, 1, 1, offsetof(mng_clon, iLocationtype), offsetof(mng_clon, bHasloca), MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 0, 4, 4, offsetof(mng_clon, iLocationx), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 0, 4, 4, offsetof(mng_clon, iLocationy), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST MNG_LOCAL mng_field_descriptor mng_fields_past [] = { {mng_debunk_past, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DISC MNG_LOCAL mng_field_descriptor mng_fields_disc [] = { {mng_disc_entries, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BACK MNG_LOCAL mng_field_descriptor mng_fields_back [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_back, iRed), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_back, iGreen), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_back, iBlue), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 3, 1, 1, offsetof(mng_back, iMandatory), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 0xFFFF, 2, 2, offsetof(mng_back, iImageid), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 1, 1, 1, offsetof(mng_back, iTile), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_FRAM MNG_LOCAL mng_field_descriptor mng_fields_fram [] = { {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 4, 1, 1, offsetof(mng_fram, iMode), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_TERMINATOR | MNG_FIELD_OPTIONAL, 0, 0, 1, 79, offsetof(mng_fram, zName), MNG_NULL, offsetof(mng_fram, iNamesize)}, {mng_fram_remainder, MNG_FIELD_OPTIONAL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MOVE MNG_LOCAL mng_field_descriptor mng_fields_move [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_move, iFirstid), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_move, iLastid), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_move, iMovetype), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_move, iMovex), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_move, iMovey), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLIP MNG_LOCAL mng_field_descriptor mng_fields_clip [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_clip, iFirstid), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_clip, iLastid), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_clip, iCliptype), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_clip, iClipl), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_clip, iClipr), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_clip, iClipt), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_clip, iClipb), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SHOW MNG_LOCAL mng_field_descriptor mng_fields_show [] = { {MNG_NULL, MNG_FIELD_INT, 1, 0xFFFF, 2, 2, offsetof(mng_show, iFirstid), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 1, 0xFFFF, 2, 2, offsetof(mng_show, iLastid), offsetof(mng_show, bHaslastid), MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL, 0, 7, 1, 1, offsetof(mng_show, iMode), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_TERM MNG_LOCAL mng_field_descriptor mng_fields_term [] = { {MNG_NULL, MNG_FIELD_INT, 0, 3, 1, 1, offsetof(mng_term, iTermaction), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 2, 1, 1, offsetof(mng_term, iIteraction), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 0, 4, 4, offsetof(mng_term, iDelay), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 0, 4, 4, offsetof(mng_term, iItermax), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE MNG_LOCAL mng_field_descriptor mng_fields_save [] = { {mng_save_entries, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SEEK MNG_LOCAL mng_field_descriptor mng_fields_seek [] = { {MNG_NULL, MNG_NULL, 0, 0, 1, 79, offsetof(mng_seek, zName), MNG_NULL, offsetof(mng_seek, iNamesize)} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_eXPI MNG_LOCAL mng_field_descriptor mng_fields_expi [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_expi, iSnapshotid), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_NULL, 0, 0, 1, 79, offsetof(mng_expi, zName), MNG_NULL, offsetof(mng_expi, iNamesize)} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_fPRI MNG_LOCAL mng_field_descriptor mng_fields_fpri [] = { {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_fpri, iDeltatype), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0xFF, 1, 1, offsetof(mng_fpri, iPriority), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_nEED MNG_LOCAL mng_field_descriptor mng_fields_need [] = { {MNG_NULL, MNG_NULL, 0, 0, 1, 0, offsetof(mng_need, zKeywords), MNG_NULL, offsetof(mng_need, iKeywordssize)} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYg #define mng_fields_phyg mng_fields_phys #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG MNG_LOCAL mng_field_descriptor mng_fields_dhdr [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_dhdr, iObjectid), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 2, 1, 1, offsetof(mng_dhdr, iImagetype), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 7, 1, 1, offsetof(mng_dhdr, iDeltatype), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 0, 4, 4, offsetof(mng_dhdr, iBlockwidth), offsetof(mng_dhdr, bHasblocksize), MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP1, 0, 0, 4, 4, offsetof(mng_dhdr, iBlockheight), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP2, 0, 0, 4, 4, offsetof(mng_dhdr, iBlockx), offsetof(mng_dhdr, bHasblockloc), MNG_NULL}, {MNG_NULL, MNG_FIELD_INT | MNG_FIELD_OPTIONAL | MNG_FIELD_GROUP2, 0, 0, 4, 4, offsetof(mng_dhdr, iBlocky), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG MNG_LOCAL mng_field_descriptor mng_fields_prom [] = { {MNG_NULL, MNG_FIELD_INT, 0, 14, 1, 1, offsetof(mng_prom, iColortype), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 16, 1, 1, offsetof(mng_prom, iSampledepth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_prom, iFilltype), MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG MNG_LOCAL mng_field_descriptor mng_fields_pplt [] = { {MNG_NULL, MNG_FIELD_INT, 0, 5, 1, 1, offsetof(mng_pplt, iDeltatype), MNG_NULL, MNG_NULL}, {mng_pplt_entries, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG MNG_LOCAL mng_field_descriptor mng_fields_drop [] = { {mng_drop_entries, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK MNG_LOCAL mng_field_descriptor mng_fields_dbyk [] = { {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_dbyk, iChunkname), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_dbyk, iPolarity), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_NULL, 0, 0, 1, 0, offsetof(mng_dbyk, zKeywords), MNG_NULL, offsetof(mng_dbyk, iKeywordssize)} }; #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR MNG_LOCAL mng_field_descriptor mng_fields_ordr [] = { {mng_drop_entries, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MAGN MNG_LOCAL mng_field_descriptor mng_fields_magn [] = { {mng_debunk_magn, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL MNG_LOCAL mng_field_descriptor mng_fields_mpng [] = { {MNG_NULL, MNG_FIELD_INT, 1, 0, 4, 4, offsetof(mng_mpng, iFramewidth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 1, 0, 4, 4, offsetof(mng_mpng, iFrameheight), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0xFFFF, 2, 2, offsetof(mng_mpng, iNumplays), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 1, 0xFFFF, 2, 2, offsetof(mng_mpng, iTickspersec), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 1, 1, offsetof(mng_mpng, iCompressionmethod), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_DEFLATED, 0, 0, 1, 0, offsetof(mng_mpng, pFrames), MNG_NULL, offsetof(mng_mpng, iFramessize)} }; #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL MNG_LOCAL mng_field_descriptor mng_fields_ahdr [] = { {MNG_NULL, MNG_FIELD_INT, 1, 0, 4, 4, offsetof(mng_ahdr, iNumframes), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_ahdr, iTickspersec), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 0, 4, 4, offsetof(mng_ahdr, iNumplays), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 1, 0, 4, 4, offsetof(mng_ahdr, iTilewidth), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 1, 0, 4, 4, offsetof(mng_ahdr, iTileheight), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_ahdr, iInterlace), MNG_NULL, MNG_NULL}, {MNG_NULL, MNG_FIELD_INT, 0, 1, 1, 1, offsetof(mng_ahdr, iStillused), MNG_NULL, MNG_NULL} }; MNG_LOCAL mng_field_descriptor mng_fields_adat [] = { {mng_adat_tiles, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_evNT MNG_LOCAL mng_field_descriptor mng_fields_evnt [] = { {mng_evnt_entries, MNG_NULL, 0, 0, 0, 0, MNG_NULL, MNG_NULL, MNG_NULL} }; #endif /* ************************************************************************** */ MNG_LOCAL mng_field_descriptor mng_fields_unknown [] = { {MNG_NULL, MNG_NULL, 0, 0, 1, 0, offsetof(mng_unknown_chunk, pData), MNG_NULL, offsetof(mng_unknown_chunk, iDatasize)} }; /* ************************************************************************** */ /* ************************************************************************** */ /* PNG chunks */ MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_ihdr = {mng_it_png, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_ihdr, mng_fields_ihdr, (sizeof(mng_fields_ihdr) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL, MNG_NULL, MNG_DESCR_NOIHDR | MNG_DESCR_NOJHDR | MNG_DESCR_NOBASI | MNG_DESCR_NOIDAT | MNG_DESCR_NOPLTE}; MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_plte = {mng_it_png, mng_create_none, 0, offsetof(mng_plte, bEmpty), MNG_NULL, MNG_NULL, mng_special_plte, mng_fields_plte, (sizeof(mng_fields_plte) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL | MNG_DESCR_EMPTYEMBED, MNG_DESCR_GenHDR, MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT | MNG_DESCR_NOJDAA}; MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_idat = {mng_it_png, mng_create_none, 0, offsetof(mng_idat, bEmpty), MNG_NULL, MNG_NULL, mng_special_idat, mng_fields_idat, (sizeof(mng_fields_idat) / sizeof(mng_field_descriptor)), MNG_DESCR_EMPTYEMBED, MNG_DESCR_GenHDR, MNG_DESCR_NOJSEP}; MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_iend = {mng_it_png, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_iend, MNG_NULL, 0, MNG_DESCR_EMPTY | MNG_DESCR_EMPTYEMBED, MNG_DESCR_GenHDR, MNG_NULL}; MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_trns = {mng_it_png, mng_create_none, 0, offsetof(mng_trns, bEmpty), MNG_NULL, MNG_NULL, mng_special_trns, mng_fields_trns, (sizeof(mng_fields_trns) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL | MNG_DESCR_EMPTYEMBED, MNG_DESCR_GenHDR, MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT | MNG_DESCR_NOJDAA}; #ifndef MNG_SKIPCHUNK_gAMA MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_gama = {mng_it_png, mng_create_none, 0, offsetof(mng_gama, bEmpty), MNG_NULL, MNG_NULL, mng_special_gama, mng_fields_gama, (sizeof(mng_fields_gama) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL | MNG_DESCR_EMPTYEMBED | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_GenHDR, MNG_DESCR_NOPLTE | MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT | MNG_DESCR_NOJDAA}; #endif #ifndef MNG_SKIPCHUNK_cHRM MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_chrm = {mng_it_png, mng_create_none, 0, offsetof(mng_chrm, bEmpty), MNG_NULL, MNG_NULL, mng_special_chrm, mng_fields_chrm, (sizeof(mng_fields_chrm) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL | MNG_DESCR_EMPTYEMBED | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_GenHDR, MNG_DESCR_NOPLTE | MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT | MNG_DESCR_NOJDAA}; #endif #ifndef MNG_SKIPCHUNK_sRGB MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_srgb = {mng_it_png, mng_create_none, 0, offsetof(mng_srgb, bEmpty), MNG_NULL, MNG_NULL, mng_special_srgb, mng_fields_srgb, (sizeof(mng_fields_srgb) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL | MNG_DESCR_EMPTYEMBED | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_GenHDR, MNG_DESCR_NOPLTE | MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT | MNG_DESCR_NOJDAA}; #endif #ifndef MNG_SKIPCHUNK_iCCP MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_iccp = {mng_it_png, mng_create_none, 0, offsetof(mng_iccp, bEmpty), MNG_NULL, MNG_NULL, mng_special_iccp, mng_fields_iccp, (sizeof(mng_fields_iccp) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL | MNG_DESCR_EMPTYEMBED | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_GenHDR, MNG_DESCR_NOPLTE | MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT | MNG_DESCR_NOJDAA}; #endif #ifndef MNG_SKIPCHUNK_tEXt MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_text = {mng_it_png, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_text, mng_fields_text, (sizeof(mng_fields_text) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL, MNG_DESCR_GenHDR, MNG_NULL}; #endif #ifndef MNG_SKIPCHUNK_zTXt MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_ztxt = {mng_it_png, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_ztxt, mng_fields_ztxt, (sizeof(mng_fields_ztxt) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL, MNG_DESCR_GenHDR, MNG_NULL}; #endif #ifndef MNG_SKIPCHUNK_iTXt MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_itxt = {mng_it_png, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_itxt, mng_fields_itxt, (sizeof(mng_fields_itxt) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL, MNG_DESCR_GenHDR, MNG_NULL}; #endif #ifndef MNG_SKIPCHUNK_bKGD MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_bkgd = {mng_it_png, mng_create_none, 0, offsetof(mng_bkgd, bEmpty), MNG_NULL, MNG_NULL, mng_special_bkgd, mng_fields_bkgd, (sizeof(mng_fields_bkgd) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL | MNG_DESCR_EMPTYEMBED | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_GenHDR, MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT | MNG_DESCR_NOJDAA}; #endif #ifndef MNG_SKIPCHUNK_pHYs MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_phys = {mng_it_png, mng_create_none, 0, offsetof(mng_phys, bEmpty), MNG_NULL, MNG_NULL, mng_special_phys, mng_fields_phys, (sizeof(mng_fields_phys) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL | MNG_DESCR_EMPTYEMBED | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_GenHDR, MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT | MNG_DESCR_NOJDAA}; #endif #ifndef MNG_SKIPCHUNK_sBIT MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_sbit = {mng_it_png, mng_create_none, 0, offsetof(mng_sbit, bEmpty), MNG_NULL, MNG_NULL, mng_special_sbit, mng_fields_sbit, (sizeof(mng_fields_sbit) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL | MNG_DESCR_EMPTYEMBED | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_GenHDR, MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT | MNG_DESCR_NOJDAA}; #endif #ifndef MNG_SKIPCHUNK_sPLT MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_splt = {mng_it_png, mng_create_none, 0, offsetof(mng_splt, bEmpty), MNG_NULL, MNG_NULL, mng_special_splt, mng_fields_splt, (sizeof(mng_fields_splt) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL | MNG_DESCR_EMPTYEMBED | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_GenHDR, MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT | MNG_DESCR_NOJDAA}; #endif #ifndef MNG_SKIPCHUNK_hIST MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_hist = {mng_it_png, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_hist, mng_fields_hist, (sizeof(mng_fields_hist) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_GenHDR | MNG_DESCR_PLTE, MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT | MNG_DESCR_NOJDAA}; #endif #ifndef MNG_SKIPCHUNK_tIME MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_time = {mng_it_png, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_time, mng_fields_time, (sizeof(mng_fields_time) / sizeof(mng_field_descriptor)), MNG_DESCR_GLOBAL, MNG_DESCR_GenHDR, MNG_NULL}; #endif /* ************************************************************************** */ /* JNG chunks */ #ifdef MNG_INCLUDE_JNG MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_jhdr = {mng_it_jng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_jhdr, mng_fields_jhdr, (sizeof(mng_fields_jhdr) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_NULL, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifdef MNG_INCLUDE_JNG MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_jdaa = {mng_it_jng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_jdaa, mng_fields_jdaa, (sizeof(mng_fields_jdaa) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_JngHDR, MNG_DESCR_NOJSEP}; #endif #ifdef MNG_INCLUDE_JNG MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_jdat = {mng_it_jng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_jdat, mng_fields_jdat, (sizeof(mng_fields_jdat) / sizeof(mng_field_descriptor)), MNG_DESCR_EMPTYEMBED, MNG_DESCR_JngHDR, MNG_NULL}; #endif #ifdef MNG_INCLUDE_JNG MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_jsep = {mng_it_jng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_jsep, MNG_NULL, 0, MNG_DESCR_EMPTY | MNG_DESCR_EMPTYEMBED, MNG_DESCR_JngHDR, MNG_DESCR_NOJSEP}; #endif /* ************************************************************************** */ /* MNG chunks */ MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_mhdr = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_mhdr, mng_fields_mhdr, (sizeof(mng_fields_mhdr) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_NULL, MNG_DESCR_NOMHDR | MNG_DESCR_NOIHDR | MNG_DESCR_NOJHDR}; MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_mend = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_mend, MNG_NULL, 0, MNG_DESCR_EMPTY | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_MHDR, MNG_NULL}; #ifndef MNG_SKIPCHUNK_LOOP MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_loop = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_loop, mng_fields_loop, (sizeof(mng_fields_loop) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_endl = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_endl, mng_fields_endl, (sizeof(mng_fields_endl) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_DEFI MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_defi = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_defi, mng_fields_defi, (sizeof(mng_fields_defi) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_BASI MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_basi = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_basi, mng_fields_basi, (sizeof(mng_fields_basi) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_CLON MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_clon = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_clon, mng_fields_clon, (sizeof(mng_fields_clon) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_PAST MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_past = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_past, mng_fields_past, (sizeof(mng_fields_past) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_DISC MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_disc = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_disc, mng_fields_disc, (sizeof(mng_fields_disc) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_BACK MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_back = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_back, mng_fields_back, (sizeof(mng_fields_back) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_FRAM MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_fram = {mng_it_mng, mng_create_none, 0, offsetof(mng_fram, bEmpty), MNG_NULL, MNG_NULL, mng_special_fram, mng_fields_fram, (sizeof(mng_fields_fram) / sizeof(mng_field_descriptor)), MNG_DESCR_EMPTY | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_MOVE MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_move = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_move, mng_fields_move, (sizeof(mng_fields_move) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_CLIP MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_clip = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_clip, mng_fields_clip, (sizeof(mng_fields_clip) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_SHOW MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_show = {mng_it_mng, mng_create_none, 0, offsetof(mng_show, bEmpty), MNG_NULL, MNG_NULL, mng_special_show, mng_fields_show, (sizeof(mng_fields_show) / sizeof(mng_field_descriptor)), MNG_DESCR_EMPTY | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_TERM MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_term = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_term, mng_fields_term, (sizeof(mng_fields_term) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR | MNG_DESCR_NOTERM | MNG_DESCR_NOLOOP}; #endif #ifndef MNG_SKIPCHUNK_SAVE MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_save = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_save, mng_fields_save, (sizeof(mng_fields_save) / sizeof(mng_field_descriptor)), MNG_DESCR_EMPTY | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_MHDR, MNG_DESCR_NOSAVE | MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_SEEK MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_seek = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_seek, mng_fields_seek, (sizeof(mng_fields_seek) / sizeof(mng_field_descriptor)), MNG_DESCR_EMPTY | MNG_DESCR_EMPTYGLOBAL, MNG_DESCR_MHDR | MNG_DESCR_SAVE, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_eXPI MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_expi = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_expi, mng_fields_expi, (sizeof(mng_fields_expi) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_fPRI MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_fpri = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_fpri, mng_fields_fpri, (sizeof(mng_fields_fpri) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_nEED MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_need = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_need, mng_fields_need, (sizeof(mng_fields_need) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_pHYg MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_phyg = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_phyg, mng_fields_phyg, (sizeof(mng_fields_phyg) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_NO_DELTA_PNG MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_dhdr = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_dhdr, mng_fields_dhdr, (sizeof(mng_fields_dhdr) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_NO_DELTA_PNG MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_prom = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_prom, mng_fields_prom, (sizeof(mng_fields_prom) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR | MNG_DESCR_DHDR, MNG_NULL}; #endif #ifndef MNG_NO_DELTA_PNG MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_ipng = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_ipng, MNG_NULL, 0, MNG_DESCR_EMPTY | MNG_DESCR_EMPTYEMBED, MNG_DESCR_MHDR | MNG_DESCR_DHDR, MNG_NULL}; #endif #ifndef MNG_NO_DELTA_PNG MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_pplt = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_pplt, mng_fields_pplt, (sizeof(mng_fields_pplt) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR | MNG_DESCR_DHDR, MNG_NULL}; #endif #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_ijng = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_ijng, MNG_NULL, 0, MNG_DESCR_EMPTY | MNG_DESCR_EMPTYEMBED, MNG_DESCR_MHDR | MNG_DESCR_DHDR, MNG_NULL}; #endif #endif #ifndef MNG_NO_DELTA_PNG MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_drop = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_drop, mng_fields_drop, (sizeof(mng_fields_drop) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR | MNG_DESCR_DHDR, MNG_NULL}; #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_dbyk = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_dbyk, mng_fields_dbyk, (sizeof(mng_fields_dbyk) / sizeof(mng_field_descriptor)), MNG_DESCR_EMPTY | MNG_DESCR_EMPTYEMBED, MNG_DESCR_MHDR | MNG_DESCR_DHDR, MNG_NULL}; #endif #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_ordr = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_ordr, mng_fields_ordr, (sizeof(mng_fields_ordr) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR | MNG_DESCR_DHDR, MNG_NULL}; #endif #endif #ifndef MNG_SKIPCHUNK_MAGN MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_magn = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_magn, mng_fields_magn, (sizeof(mng_fields_magn) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOIHDR | MNG_DESCR_NOBASI | MNG_DESCR_NODHDR | MNG_DESCR_NOJHDR}; #endif #ifndef MNG_SKIPCHUNK_evNT MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_evnt = {mng_it_mng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_evnt, mng_fields_evnt, (sizeof(mng_fields_evnt) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_MHDR, MNG_DESCR_NOSAVE}; #endif #ifdef MNG_INCLUDE_MPNG_PROPOSAL MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_mpng = {mng_it_mpng, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_mpng, mng_fields_mpng, (sizeof(mng_fields_mpng) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_NULL, MNG_DESCR_NOMHDR | MNG_DESCR_NOIDAT | MNG_DESCR_NOJDAT}; #endif #ifdef MNG_INCLUDE_ANG_PROPOSAL MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_ahdr = {mng_it_ang, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_ahdr, mng_fields_ahdr, (sizeof(mng_fields_ahdr) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_IHDR, MNG_DESCR_NOMHDR | MNG_DESCR_NOJHDR | MNG_DESCR_NOIDAT}; MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_adat = {mng_it_ang, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_adat, mng_fields_adat, (sizeof(mng_fields_adat) / sizeof(mng_field_descriptor)), MNG_NULL, MNG_DESCR_IHDR, MNG_DESCR_NOMHDR | MNG_DESCR_NOJHDR}; #endif /* ************************************************************************** */ /* ************************************************************************** */ /* the good ol' unknown babe */ MNG_LOCAL mng_chunk_descriptor mng_chunk_descr_unknown = {mng_it_png, mng_create_none, 0, 0, MNG_NULL, MNG_NULL, mng_special_unknown, mng_fields_unknown, (sizeof(mng_fields_unknown) / sizeof(mng_field_descriptor)), MNG_DESCR_EMPTY | MNG_DESCR_EMPTYEMBED, MNG_NULL, MNG_NULL}; /* ************************************************************************** */ /* ************************************************************************** */ MNG_LOCAL mng_chunk_header mng_chunk_unknown = {MNG_UINT_HUH, mng_init_general, mng_free_unknown, mng_read_general, mng_write_unknown, mng_assign_unknown, 0, 0, sizeof(mng_unknown_chunk), &mng_chunk_descr_unknown}; /* ************************************************************************** */ /* the table-idea & binary search code was adapted from libpng 1.1.0 (pngread.c) */ /* NOTE1: the table must remain sorted by chunkname, otherwise the binary search will break !!! (ps. watch upper-/lower-case chunknames !!) */ /* NOTE2: the layout must remain equal to the header part of all the chunk-structures (yes, that means even the pNext and pPrev fields; it's wasting a bit of space, but hey, the code is a lot easier) */ MNG_LOCAL mng_chunk_header mng_chunk_table [] = { #ifndef MNG_SKIPCHUNK_BACK {MNG_UINT_BACK, mng_init_general, mng_free_general, mng_read_general, mng_write_back, mng_assign_general, 0, 0, sizeof(mng_back), &mng_chunk_descr_back}, #endif #ifndef MNG_SKIPCHUNK_BASI {MNG_UINT_BASI, mng_init_general, mng_free_general, mng_read_general, mng_write_basi, mng_assign_general, 0, 0, sizeof(mng_basi), &mng_chunk_descr_basi}, #endif #ifndef MNG_SKIPCHUNK_CLIP {MNG_UINT_CLIP, mng_init_general, mng_free_general, mng_read_general, mng_write_clip, mng_assign_general, 0, 0, sizeof(mng_clip), &mng_chunk_descr_clip}, #endif #ifndef MNG_SKIPCHUNK_CLON {MNG_UINT_CLON, mng_init_general, mng_free_general, mng_read_general, mng_write_clon, mng_assign_general, 0, 0, sizeof(mng_clon), &mng_chunk_descr_clon}, #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK {MNG_UINT_DBYK, mng_init_general, mng_free_dbyk, mng_read_general, mng_write_dbyk, mng_assign_dbyk, 0, 0, sizeof(mng_dbyk), &mng_chunk_descr_dbyk}, #endif #endif #ifndef MNG_SKIPCHUNK_DEFI {MNG_UINT_DEFI, mng_init_general, mng_free_general, mng_read_general, mng_write_defi, mng_assign_general, 0, 0, sizeof(mng_defi), &mng_chunk_descr_defi}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_UINT_DHDR, mng_init_general, mng_free_general, mng_read_general, mng_write_dhdr, mng_assign_general, 0, 0, sizeof(mng_dhdr), &mng_chunk_descr_dhdr}, #endif #ifndef MNG_SKIPCHUNK_DISC {MNG_UINT_DISC, mng_init_general, mng_free_disc, mng_read_general, mng_write_disc, mng_assign_disc, 0, 0, sizeof(mng_disc), &mng_chunk_descr_disc}, #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DROP {MNG_UINT_DROP, mng_init_general, mng_free_drop, mng_read_general, mng_write_drop, mng_assign_drop, 0, 0, sizeof(mng_drop), &mng_chunk_descr_drop}, #endif #endif #ifndef MNG_SKIPCHUNK_LOOP {MNG_UINT_ENDL, mng_init_general, mng_free_general, mng_read_general, mng_write_endl, mng_assign_general, 0, 0, sizeof(mng_endl), &mng_chunk_descr_endl}, #endif #ifndef MNG_SKIPCHUNK_FRAM {MNG_UINT_FRAM, mng_init_general, mng_free_fram, mng_read_general, mng_write_fram, mng_assign_fram, 0, 0, sizeof(mng_fram), &mng_chunk_descr_fram}, #endif {MNG_UINT_IDAT, mng_init_general, mng_free_idat, mng_read_general, mng_write_idat, mng_assign_idat, 0, 0, sizeof(mng_idat), &mng_chunk_descr_idat}, /* 12-th element! */ {MNG_UINT_IEND, mng_init_general, mng_free_general, mng_read_general, mng_write_iend, mng_assign_general, 0, 0, sizeof(mng_iend), &mng_chunk_descr_iend}, {MNG_UINT_IHDR, mng_init_general, mng_free_general, mng_read_general, mng_write_ihdr, mng_assign_general, 0, 0, sizeof(mng_ihdr), &mng_chunk_descr_ihdr}, #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG {MNG_UINT_IJNG, mng_init_general, mng_free_general, mng_read_general, mng_write_ijng, mng_assign_general, 0, 0, sizeof(mng_ijng), &mng_chunk_descr_ijng}, #endif {MNG_UINT_IPNG, mng_init_general, mng_free_general, mng_read_general, mng_write_ipng, mng_assign_general, 0, 0, sizeof(mng_ipng), &mng_chunk_descr_ipng}, #endif #ifdef MNG_INCLUDE_JNG {MNG_UINT_JDAA, mng_init_general, mng_free_jdaa, mng_read_general, mng_write_jdaa, mng_assign_jdaa, 0, 0, sizeof(mng_jdaa), &mng_chunk_descr_jdaa}, {MNG_UINT_JDAT, mng_init_general, mng_free_jdat, mng_read_general, mng_write_jdat, mng_assign_jdat, 0, 0, sizeof(mng_jdat), &mng_chunk_descr_jdat}, {MNG_UINT_JHDR, mng_init_general, mng_free_general, mng_read_general, mng_write_jhdr, mng_assign_general, 0, 0, sizeof(mng_jhdr), &mng_chunk_descr_jhdr}, {MNG_UINT_JSEP, mng_init_general, mng_free_general, mng_read_general, mng_write_jsep, mng_assign_general, 0, 0, sizeof(mng_jsep), &mng_chunk_descr_jsep}, {MNG_UINT_JdAA, mng_init_general, mng_free_jdaa, mng_read_general, mng_write_jdaa, mng_assign_jdaa, 0, 0, sizeof(mng_jdaa), &mng_chunk_descr_jdaa}, #endif #ifndef MNG_SKIPCHUNK_LOOP {MNG_UINT_LOOP, mng_init_general, mng_free_loop, mng_read_general, mng_write_loop, mng_assign_loop, 0, 0, sizeof(mng_loop), &mng_chunk_descr_loop}, #endif #ifndef MNG_SKIPCHUNK_MAGN {MNG_UINT_MAGN, mng_init_general, mng_free_general, mng_read_general, mng_write_magn, mng_assign_general, 0, 0, sizeof(mng_magn), &mng_chunk_descr_magn}, #endif {MNG_UINT_MEND, mng_init_general, mng_free_general, mng_read_general, mng_write_mend, mng_assign_general, 0, 0, sizeof(mng_mend), &mng_chunk_descr_mend}, {MNG_UINT_MHDR, mng_init_general, mng_free_general, mng_read_general, mng_write_mhdr, mng_assign_general, 0, 0, sizeof(mng_mhdr), &mng_chunk_descr_mhdr}, #ifndef MNG_SKIPCHUNK_MOVE {MNG_UINT_MOVE, mng_init_general, mng_free_general, mng_read_general, mng_write_move, mng_assign_general, 0, 0, sizeof(mng_move), &mng_chunk_descr_move}, #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR {MNG_UINT_ORDR, mng_init_general, mng_free_ordr, mng_read_general, mng_write_ordr, mng_assign_ordr, 0, 0, sizeof(mng_ordr), &mng_chunk_descr_ordr}, #endif #endif #ifndef MNG_SKIPCHUNK_PAST {MNG_UINT_PAST, mng_init_general, mng_free_past, mng_read_general, mng_write_past, mng_assign_past, 0, 0, sizeof(mng_past), &mng_chunk_descr_past}, #endif {MNG_UINT_PLTE, mng_init_general, mng_free_general, mng_read_general, mng_write_plte, mng_assign_general, 0, 0, sizeof(mng_plte), &mng_chunk_descr_plte}, #ifndef MNG_NO_DELTA_PNG {MNG_UINT_PPLT, mng_init_general, mng_free_general, mng_read_general, mng_write_pplt, mng_assign_general, 0, 0, sizeof(mng_pplt), &mng_chunk_descr_pplt}, {MNG_UINT_PROM, mng_init_general, mng_free_general, mng_read_general, mng_write_prom, mng_assign_general, 0, 0, sizeof(mng_prom), &mng_chunk_descr_prom}, #endif #ifndef MNG_SKIPCHUNK_SAVE {MNG_UINT_SAVE, mng_init_general, mng_free_save, mng_read_general, mng_write_save, mng_assign_save, 0, 0, sizeof(mng_save), &mng_chunk_descr_save}, #endif #ifndef MNG_SKIPCHUNK_SEEK {MNG_UINT_SEEK, mng_init_general, mng_free_seek, mng_read_general, mng_write_seek, mng_assign_seek, 0, 0, sizeof(mng_seek), &mng_chunk_descr_seek}, #endif #ifndef MNG_SKIPCHUNK_SHOW {MNG_UINT_SHOW, mng_init_general, mng_free_general, mng_read_general, mng_write_show, mng_assign_general, 0, 0, sizeof(mng_show), &mng_chunk_descr_show}, #endif #ifndef MNG_SKIPCHUNK_TERM {MNG_UINT_TERM, mng_init_general, mng_free_general, mng_read_general, mng_write_term, mng_assign_general, 0, 0, sizeof(mng_term), &mng_chunk_descr_term}, #endif #ifdef MNG_INCLUDE_ANG_PROPOSAL {MNG_UINT_adAT, mng_init_general, mng_free_adat, mng_read_general, mng_write_adat, mng_assign_adat, 0, 0, sizeof(mng_adat), &mng_chunk_descr_adat}, {MNG_UINT_ahDR, mng_init_general, mng_free_general, mng_read_general, mng_write_ahdr, mng_assign_ahdr, 0, 0, sizeof(mng_ahdr), &mng_chunk_descr_ahdr}, #endif #ifndef MNG_SKIPCHUNK_bKGD {MNG_UINT_bKGD, mng_init_general, mng_free_general, mng_read_general, mng_write_bkgd, mng_assign_general, 0, 0, sizeof(mng_bkgd), &mng_chunk_descr_bkgd}, #endif #ifndef MNG_SKIPCHUNK_cHRM {MNG_UINT_cHRM, mng_init_general, mng_free_general, mng_read_general, mng_write_chrm, mng_assign_general, 0, 0, sizeof(mng_chrm), &mng_chunk_descr_chrm}, #endif #ifndef MNG_SKIPCHUNK_eXPI {MNG_UINT_eXPI, mng_init_general, mng_free_expi, mng_read_general, mng_write_expi, mng_assign_expi, 0, 0, sizeof(mng_expi), &mng_chunk_descr_expi}, #endif #ifndef MNG_SKIPCHUNK_evNT {MNG_UINT_evNT, mng_init_general, mng_free_evnt, mng_read_general, mng_write_evnt, mng_assign_evnt, 0, 0, sizeof(mng_evnt), &mng_chunk_descr_evnt}, #endif #ifndef MNG_SKIPCHUNK_fPRI {MNG_UINT_fPRI, mng_init_general, mng_free_general, mng_read_general, mng_write_fpri, mng_assign_general, 0, 0, sizeof(mng_fpri), &mng_chunk_descr_fpri}, #endif #ifndef MNG_SKIPCHUNK_gAMA {MNG_UINT_gAMA, mng_init_general, mng_free_general, mng_read_general, mng_write_gama, mng_assign_general, 0, 0, sizeof(mng_gama), &mng_chunk_descr_gama}, #endif #ifndef MNG_SKIPCHUNK_hIST {MNG_UINT_hIST, mng_init_general, mng_free_general, mng_read_general, mng_write_hist, mng_assign_general, 0, 0, sizeof(mng_hist), &mng_chunk_descr_hist}, #endif #ifndef MNG_SKIPCHUNK_iCCP {MNG_UINT_iCCP, mng_init_general, mng_free_iccp, mng_read_general, mng_write_iccp, mng_assign_iccp, 0, 0, sizeof(mng_iccp), &mng_chunk_descr_iccp}, #endif #ifndef MNG_SKIPCHUNK_iTXt {MNG_UINT_iTXt, mng_init_general, mng_free_itxt, mng_read_general, mng_write_itxt, mng_assign_itxt, 0, 0, sizeof(mng_itxt), &mng_chunk_descr_itxt}, #endif #ifdef MNG_INCLUDE_MPNG_PROPOSAL {MNG_UINT_mpNG, mng_init_general, mng_free_mpng, mng_read_general, mng_write_mpng, mng_assign_mpng, 0, 0, sizeof(mng_mpng), &mng_chunk_descr_mpng}, #endif #ifndef MNG_SKIPCHUNK_nEED {MNG_UINT_nEED, mng_init_general, mng_free_need, mng_read_general, mng_write_need, mng_assign_need, 0, 0, sizeof(mng_need), &mng_chunk_descr_need}, #endif /* TODO: {MNG_UINT_oFFs, 0, 0, 0, 0, 0, 0}, */ /* TODO: {MNG_UINT_pCAL, 0, 0, 0, 0, 0, 0}, */ #ifndef MNG_SKIPCHUNK_pHYg {MNG_UINT_pHYg, mng_init_general, mng_free_general, mng_read_general, mng_write_phyg, mng_assign_general, 0, 0, sizeof(mng_phyg), &mng_chunk_descr_phyg}, #endif #ifndef MNG_SKIPCHUNK_pHYs {MNG_UINT_pHYs, mng_init_general, mng_free_general, mng_read_general, mng_write_phys, mng_assign_general, 0, 0, sizeof(mng_phys), &mng_chunk_descr_phys}, #endif #ifndef MNG_SKIPCHUNK_sBIT {MNG_UINT_sBIT, mng_init_general, mng_free_general, mng_read_general, mng_write_sbit, mng_assign_general, 0, 0, sizeof(mng_sbit), &mng_chunk_descr_sbit}, #endif /* TODO: {MNG_UINT_sCAL, 0, 0, 0, 0, 0, 0}, */ #ifndef MNG_SKIPCHUNK_sPLT {MNG_UINT_sPLT, mng_init_general, mng_free_splt, mng_read_general, mng_write_splt, mng_assign_splt, 0, 0, sizeof(mng_splt), &mng_chunk_descr_splt}, #endif {MNG_UINT_sRGB, mng_init_general, mng_free_general, mng_read_general, mng_write_srgb, mng_assign_general, 0, 0, sizeof(mng_srgb), &mng_chunk_descr_srgb}, #ifndef MNG_SKIPCHUNK_tEXt {MNG_UINT_tEXt, mng_init_general, mng_free_text, mng_read_general, mng_write_text, mng_assign_text, 0, 0, sizeof(mng_text), &mng_chunk_descr_text}, #endif #ifndef MNG_SKIPCHUNK_tIME {MNG_UINT_tIME, mng_init_general, mng_free_general, mng_read_general, mng_write_time, mng_assign_general, 0, 0, sizeof(mng_time), &mng_chunk_descr_time}, #endif {MNG_UINT_tRNS, mng_init_general, mng_free_general, mng_read_general, mng_write_trns, mng_assign_general, 0, 0, sizeof(mng_trns), &mng_chunk_descr_trns}, #ifndef MNG_SKIPCHUNK_zTXt {MNG_UINT_zTXt, mng_init_general, mng_free_ztxt, mng_read_general, mng_write_ztxt, mng_assign_ztxt, 0, 0, sizeof(mng_ztxt), &mng_chunk_descr_ztxt}, #endif }; /* ************************************************************************** */ /* ************************************************************************** */ void mng_get_chunkheader (mng_chunkid iChunkname, mng_chunk_headerp pResult) { /* binary search variables */ mng_int32 iTop, iLower, iUpper, iMiddle; mng_chunk_headerp pEntry; /* pointer to found entry */ /* determine max index of table */ iTop = (sizeof (mng_chunk_table) / sizeof (mng_chunk_table [0])) - 1; /* binary search; with 54 chunks, worst-case is 7 comparisons */ iLower = 0; #ifndef MNG_NO_DELTA_PNG iMiddle = 11; /* start with the IDAT entry */ #else iMiddle = 8; #endif iUpper = iTop; pEntry = 0; /* no goods yet! */ do /* the binary search itself */ { if (mng_chunk_table [iMiddle].iChunkname < iChunkname) iLower = iMiddle + 1; else if (mng_chunk_table [iMiddle].iChunkname > iChunkname) iUpper = iMiddle - 1; else { pEntry = &mng_chunk_table [iMiddle]; break; } iMiddle = (iLower + iUpper) >> 1; } while (iLower <= iUpper); if (!pEntry) /* unknown chunk ? */ pEntry = &mng_chunk_unknown; /* make it so! */ MNG_COPY (pResult, pEntry, sizeof(mng_chunk_header)); return; } /* ************************************************************************** */ /* ************************************************************************** */ /* PNG chunks */ MNG_C_SPECIALFUNC (mng_special_ihdr) { pData->bHasIHDR = MNG_TRUE; /* indicate IHDR is present */ /* and store interesting fields */ if ((!pData->bHasDHDR) || (pData->iDeltatype == MNG_DELTATYPE_NOCHANGE)) { pData->iDatawidth = ((mng_ihdrp)pChunk)->iWidth; pData->iDataheight = ((mng_ihdrp)pChunk)->iHeight; } pData->iBitdepth = ((mng_ihdrp)pChunk)->iBitdepth; pData->iColortype = ((mng_ihdrp)pChunk)->iColortype; pData->iCompression = ((mng_ihdrp)pChunk)->iCompression; pData->iFilter = ((mng_ihdrp)pChunk)->iFilter; pData->iInterlace = ((mng_ihdrp)pChunk)->iInterlace; #if defined(MNG_NO_1_2_4BIT_SUPPORT) || defined(MNG_NO_16BIT_SUPPORT) pData->iPNGmult = 1; pData->iPNGdepth = pData->iBitdepth; #endif #ifdef MNG_NO_1_2_4BIT_SUPPORT if (pData->iBitdepth < 8) pData->iBitdepth = 8; #endif #ifdef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth > 8) { pData->iBitdepth = 8; pData->iPNGmult = 2; } #endif if ((pData->iBitdepth != 8) /* parameter validity checks */ #ifndef MNG_NO_1_2_4BIT_SUPPORT && (pData->iBitdepth != 1) && (pData->iBitdepth != 2) && (pData->iBitdepth != 4) #endif #ifndef MNG_NO_16BIT_SUPPORT && (pData->iBitdepth != 16) #endif ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if ((pData->iColortype != MNG_COLORTYPE_GRAY ) && (pData->iColortype != MNG_COLORTYPE_RGB ) && (pData->iColortype != MNG_COLORTYPE_INDEXED) && (pData->iColortype != MNG_COLORTYPE_GRAYA ) && (pData->iColortype != MNG_COLORTYPE_RGBA ) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); if ((pData->iColortype == MNG_COLORTYPE_INDEXED) && (pData->iBitdepth > 8)) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if (((pData->iColortype == MNG_COLORTYPE_RGB ) || (pData->iColortype == MNG_COLORTYPE_GRAYA ) || (pData->iColortype == MNG_COLORTYPE_RGBA ) ) && (pData->iBitdepth < 8 ) ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if (pData->iCompression != MNG_COMPRESSION_DEFLATE) MNG_ERROR (pData, MNG_INVALIDCOMPRESS); #if defined(FILTER192) || defined(FILTER193) if ((pData->iFilter != MNG_FILTER_ADAPTIVE ) && #if defined(FILTER192) && defined(FILTER193) (pData->iFilter != MNG_FILTER_DIFFERING) && (pData->iFilter != MNG_FILTER_NOFILTER ) ) #else #ifdef FILTER192 (pData->iFilter != MNG_FILTER_DIFFERING) ) #else (pData->iFilter != MNG_FILTER_NOFILTER ) ) #endif #endif MNG_ERROR (pData, MNG_INVALIDFILTER); #else if (pData->iFilter) MNG_ERROR (pData, MNG_INVALIDFILTER); #endif if ((pData->iInterlace != MNG_INTERLACE_NONE ) && (pData->iInterlace != MNG_INTERLACE_ADAM7) ) MNG_ERROR (pData, MNG_INVALIDINTERLACE); #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* check the colortype for delta-images ! */ { mng_imagedatap pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; if (pData->iColortype != pBuf->iColortype) { if ( ( (pData->iColortype != MNG_COLORTYPE_INDEXED) || (pBuf->iColortype == MNG_COLORTYPE_GRAY ) ) && ( (pData->iColortype != MNG_COLORTYPE_GRAY ) || (pBuf->iColortype == MNG_COLORTYPE_INDEXED) ) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); } } #endif #endif if (!pData->bHasheader) /* first chunk ? */ { pData->bHasheader = MNG_TRUE; /* we've got a header */ pData->eImagetype = mng_it_png; /* then this must be a PNG */ pData->iWidth = pData->iDatawidth; pData->iHeight = pData->iDataheight; /* predict alpha-depth ! */ if ((pData->iColortype == MNG_COLORTYPE_GRAYA ) || (pData->iColortype == MNG_COLORTYPE_RGBA ) ) pData->iAlphadepth = pData->iBitdepth; else if (pData->iColortype == MNG_COLORTYPE_INDEXED) pData->iAlphadepth = 8; /* worst case scenario */ else pData->iAlphadepth = 1; /* Possible tRNS cheap binary transparency */ /* fits on maximum canvas ? */ if ((pData->iWidth > pData->iMaxwidth) || (pData->iHeight > pData->iMaxheight)) MNG_WARNING (pData, MNG_IMAGETOOLARGE); #if !defined(MNG_INCLUDE_MPNG_PROPOSAL) || !defined(MNG_SUPPORT_DISPLAY) if (pData->fProcessheader) /* inform the app ? */ if (!pData->fProcessheader (((mng_handle)pData), pData->iWidth, pData->iHeight)) MNG_ERROR (pData, MNG_APPMISCERROR); #endif } if (!pData->bHasDHDR) pData->iImagelevel++; /* one level deeper */ #ifdef MNG_SUPPORT_DISPLAY return mng_process_display_ihdr (pData); #else return MNG_NOERROR; #endif /* MNG_SUPPORT_DISPLAY */ } /* ************************************************************************** */ MNG_F_SPECIALFUNC (mng_debunk_plte) { mng_pltep pPLTE = (mng_pltep)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; /* length must be multiple of 3 */ if (((iRawlen % 3) != 0) || (iRawlen > 768)) MNG_ERROR (pData, MNG_INVALIDLENGTH); /* this is the exact length */ pPLTE->iEntrycount = iRawlen / 3; MNG_COPY (pPLTE->aEntries, pRawdata, iRawlen); *piRawlen = 0; return MNG_NOERROR; } /* ************************************************************************** */ MNG_C_SPECIALFUNC (mng_special_plte) { /* multiple PLTE only inside BASI */ if ((pData->bHasPLTE) && (!pData->bHasBASI)) MNG_ERROR (pData, MNG_MULTIPLEERROR); if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { /* only allowed for indexed-color or rgb(a)-color! */ if ((pData->iColortype != MNG_COLORTYPE_RGB ) && (pData->iColortype != MNG_COLORTYPE_INDEXED) && (pData->iColortype != MNG_COLORTYPE_RGBA ) ) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); /* empty only allowed if global present */ if ((((mng_pltep)pChunk)->bEmpty) && (!pData->bHasglobalPLTE)) MNG_ERROR (pData, MNG_CANNOTBEEMPTY); } else { if (((mng_pltep)pChunk)->bEmpty) /* cannot be empty as global! */ MNG_ERROR (pData, MNG_CANNOTBEEMPTY); } if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) pData->bHasPLTE = MNG_TRUE; /* got it! */ else pData->bHasglobalPLTE = MNG_TRUE; pData->iPLTEcount = ((mng_pltep)pChunk)->iEntrycount; #ifdef MNG_SUPPORT_DISPLAY if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { mng_imagep pImage; mng_imagedatap pBuf; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* processing delta-image ? */ { /* store in object 0 !!! */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; pBuf->bHasPLTE = MNG_TRUE; /* it's definitely got a PLTE now */ pBuf->iPLTEcount = ((mng_pltep)pChunk)->iEntrycount; MNG_COPY (pBuf->aPLTEentries, ((mng_pltep)pChunk)->aEntries, sizeof (pBuf->aPLTEentries)); } else #endif { /* get the current object */ pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address the object buffer */ pBuf->bHasPLTE = MNG_TRUE; /* and tell it it's got a PLTE now */ if (((mng_pltep)pChunk)->bEmpty) /* if empty, inherit from global */ { pBuf->iPLTEcount = pData->iGlobalPLTEcount; MNG_COPY (pBuf->aPLTEentries, pData->aGlobalPLTEentries, sizeof (pBuf->aPLTEentries)); if (pData->bHasglobalTRNS) /* also copy global tRNS ? */ { mng_uint32 iRawlen2 = pData->iGlobalTRNSrawlen; mng_uint8p pRawdata2 = (mng_uint8p)(pData->aGlobalTRNSrawdata); /* indicate tRNS available */ pBuf->bHasTRNS = MNG_TRUE; /* global length oke ? */ if ((iRawlen2 == 0) || (iRawlen2 > pBuf->iPLTEcount)) MNG_ERROR (pData, MNG_GLOBALLENGTHERR); /* copy it */ pBuf->iTRNScount = iRawlen2; MNG_COPY (pBuf->aTRNSentries, pRawdata2, iRawlen2); } } else { /* store fields for future reference */ pBuf->iPLTEcount = ((mng_pltep)pChunk)->iEntrycount; MNG_COPY (pBuf->aPLTEentries, ((mng_pltep)pChunk)->aEntries, sizeof (pBuf->aPLTEentries)); } } } else /* store as global */ { pData->iGlobalPLTEcount = ((mng_pltep)pChunk)->iEntrycount; MNG_COPY (pData->aGlobalPLTEentries, ((mng_pltep)pChunk)->aEntries, sizeof (pData->aGlobalPLTEentries)); /* create an animation object */ return mng_create_ani_plte (pData); } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } /* ************************************************************************** */ MNG_C_SPECIALFUNC (mng_special_idat) { #ifdef MNG_INCLUDE_JNG if ((pData->bHasJHDR) && (pData->iJHDRalphacompression != MNG_COMPRESSION_DEFLATE)) MNG_ERROR (pData, MNG_SEQUENCEERROR); #endif /* not allowed for deltatype NO_CHANGE */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && ((pData->iDeltatype == MNG_DELTATYPE_NOCHANGE))) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); #endif /* can only be empty in BASI-block! */ if ((((mng_idatp)pChunk)->bEmpty) && (!pData->bHasBASI)) MNG_ERROR (pData, MNG_INVALIDLENGTH); /* indexed-color requires PLTE */ if ((pData->bHasIHDR) && (pData->iColortype == 3) && (!pData->bHasPLTE)) MNG_ERROR (pData, MNG_PLTEMISSING); pData->bHasIDAT = MNG_TRUE; /* got some IDAT now, don't we */ return MNG_NOERROR; /* done */ } /* ************************************************************************** */ MNG_C_SPECIALFUNC (mng_special_iend) { /* IHDR-block requires IDAT */ if ((pData->bHasIHDR) && (!pData->bHasIDAT)) MNG_ERROR (pData, MNG_IDATMISSING); pData->iImagelevel--; /* one level up */ #ifdef MNG_SUPPORT_DISPLAY { /* create an animation object */ mng_retcode iRetcode = mng_create_ani_image (pData); if (iRetcode) /* on error bail out */ return iRetcode; /* display processing */ iRetcode = mng_process_display_iend (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_SUPPORT_DISPLAY if (!pData->bTimerset) /* reset only if not broken !!! */ { #endif /* IEND signals the end for most ... */ pData->bHasIHDR = MNG_FALSE; pData->bHasBASI = MNG_FALSE; pData->bHasDHDR = MNG_FALSE; #ifdef MNG_INCLUDE_JNG pData->bHasJHDR = MNG_FALSE; pData->bHasJSEP = MNG_FALSE; pData->bHasJDAA = MNG_FALSE; pData->bHasJDAT = MNG_FALSE; #endif pData->bHasPLTE = MNG_FALSE; pData->bHasTRNS = MNG_FALSE; pData->bHasGAMA = MNG_FALSE; pData->bHasCHRM = MNG_FALSE; pData->bHasSRGB = MNG_FALSE; pData->bHasICCP = MNG_FALSE; pData->bHasBKGD = MNG_FALSE; pData->bHasIDAT = MNG_FALSE; #ifdef MNG_SUPPORT_DISPLAY } #endif return MNG_NOERROR; /* done */ } /* ************************************************************************** */ MNG_F_SPECIALFUNC (mng_debunk_trns) { mng_trnsp pTRNS = (mng_trnsp)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { /* not global! */ pTRNS->bGlobal = MNG_FALSE; pTRNS->iType = pData->iColortype; if (iRawlen != 0) { switch (pData->iColortype) /* store fields */ { case 0: { /* gray */ if (iRawlen != 2) MNG_ERROR (pData, MNG_INVALIDLENGTH); pTRNS->iGray = mng_get_uint16 (pRawdata); break; } case 2: { /* rgb */ if (iRawlen != 6) MNG_ERROR (pData, MNG_INVALIDLENGTH); pTRNS->iRed = mng_get_uint16 (pRawdata); pTRNS->iGreen = mng_get_uint16 (pRawdata+2); pTRNS->iBlue = mng_get_uint16 (pRawdata+4); break; } case 3: { /* indexed */ if (iRawlen > 256) MNG_ERROR (pData, MNG_INVALIDLENGTH); pTRNS->iCount = iRawlen; MNG_COPY (pTRNS->aEntries, pRawdata, iRawlen); break; } } } } else /* it's global! */ { if (iRawlen == 0) MNG_ERROR (pData, MNG_INVALIDLENGTH); pTRNS->bGlobal = MNG_TRUE; pTRNS->iType = 0; pTRNS->iRawlen = iRawlen; MNG_COPY (pTRNS->aRawdata, pRawdata, iRawlen); pData->iGlobalTRNSrawlen = iRawlen; MNG_COPY (pData->aGlobalTRNSrawdata, pRawdata, iRawlen); } *piRawlen = 0; return MNG_NOERROR; } /* ************************************************************************** */ MNG_C_SPECIALFUNC (mng_special_trns) { /* multiple tRNS only inside BASI */ if ((pData->bHasTRNS) && (!pData->bHasBASI)) MNG_ERROR (pData, MNG_MULTIPLEERROR); if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { /* not allowed with full alpha-channel */ if ((pData->iColortype == 4) || (pData->iColortype == 6)) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); if (!((mng_trnsp)pChunk)->bEmpty) /* filled ? */ { #ifdef MNG_SUPPORT_DISPLAY if (pData->iColortype == 3) { mng_imagep pImage = (mng_imagep)pData->pCurrentobj; mng_imagedatap pBuf; if (!pImage) /* no object then check obj 0 */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address object buffer */ if (((mng_trnsp)pChunk)->iCount > pBuf->iPLTEcount) MNG_ERROR (pData, MNG_INVALIDLENGTH); } #endif } else /* if empty there must be global stuff! */ { if (!pData->bHasglobalTRNS) MNG_ERROR (pData, MNG_CANNOTBEEMPTY); } } if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) pData->bHasTRNS = MNG_TRUE; /* indicate tRNS available */ else pData->bHasglobalTRNS = MNG_TRUE; #ifdef MNG_SUPPORT_DISPLAY if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { mng_imagep pImage; mng_imagedatap pBuf; mng_uint8p pRawdata2; mng_uint32 iRawlen2; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* processing delta-image ? */ { /* store in object 0 !!! */ #if defined(MNG_NO_1_2_4BIT_SUPPORT) mng_uint8 multiplier[]={0,255,85,0,17,0,0,0,1,0,0,0,0,0,0,0,1}; #endif pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address object buffer */ pBuf->bHasTRNS = MNG_TRUE; /* tell it it's got a tRNS now */ pBuf->iTRNSgray = 0; pBuf->iTRNSred = 0; pBuf->iTRNSgreen = 0; pBuf->iTRNSblue = 0; pBuf->iTRNScount = 0; switch (pData->iColortype) /* store fields for future reference */ { case 0: { /* gray */ pBuf->iTRNSgray = ((mng_trnsp)pChunk)->iGray; #if defined(MNG_NO_1_2_4BIT_SUPPORT) pBuf->iTRNSgray *= multiplier[pData->iPNGdepth]; #endif #if defined(MNG_NO_16BIT_SUPPORT) if (pData->iPNGmult == 2) pBuf->iTRNSgray >>= 8; #endif break; } case 2: { /* rgb */ pBuf->iTRNSred = ((mng_trnsp)pChunk)->iRed; pBuf->iTRNSgreen = ((mng_trnsp)pChunk)->iGreen; pBuf->iTRNSblue = ((mng_trnsp)pChunk)->iBlue; #if defined(MNG_NO_16BIT_SUPPORT) if (pData->iPNGmult == 2) { pBuf->iTRNSred >>= 8; pBuf->iTRNSgreen >>= 8; pBuf->iTRNSblue >>= 8; } #endif break; } case 3: { /* indexed */ pBuf->iTRNScount = ((mng_trnsp)pChunk)->iCount; MNG_COPY (pBuf->aTRNSentries, ((mng_trnsp)pChunk)->aEntries, ((mng_trnsp)pChunk)->iCount); break; } } } else #endif { /* address current object */ pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address object buffer */ pBuf->bHasTRNS = MNG_TRUE; /* and tell it it's got a tRNS now */ pBuf->iTRNSgray = 0; pBuf->iTRNSred = 0; pBuf->iTRNSgreen = 0; pBuf->iTRNSblue = 0; pBuf->iTRNScount = 0; if (((mng_trnsp)pChunk)->bEmpty) /* if empty, inherit from global */ { iRawlen2 = pData->iGlobalTRNSrawlen; pRawdata2 = (mng_ptr)(pData->aGlobalTRNSrawdata); /* global length oke ? */ if ((pData->iColortype == 0) && (iRawlen2 != 2)) MNG_ERROR (pData, MNG_GLOBALLENGTHERR); if ((pData->iColortype == 2) && (iRawlen2 != 6)) MNG_ERROR (pData, MNG_GLOBALLENGTHERR); if ((pData->iColortype == 3) && ((iRawlen2 == 0) || (iRawlen2 > pBuf->iPLTEcount))) MNG_ERROR (pData, MNG_GLOBALLENGTHERR); switch (pData->iColortype) /* store fields for future reference */ { case 0: { /* gray */ pBuf->iTRNSgray = mng_get_uint16 (pRawdata2); #if defined(MNG_NO_16BIT_SUPPORT) if (pData->iPNGmult == 2) pBuf->iTRNSgray >>= 8; #endif break; } case 2: { /* rgb */ pBuf->iTRNSred = mng_get_uint16 (pRawdata2); pBuf->iTRNSgreen = mng_get_uint16 (pRawdata2+2); pBuf->iTRNSblue = mng_get_uint16 (pRawdata2+4); #if defined(MNG_NO_16BIT_SUPPORT) if (pData->iPNGmult == 2) { pBuf->iTRNSred >>= 8; pBuf->iTRNSgreen >>= 8; pBuf->iTRNSblue >>= 8; } #endif break; } case 3: { /* indexed */ pBuf->iTRNScount = iRawlen2; MNG_COPY (pBuf->aTRNSentries, pRawdata2, iRawlen2); break; } } } else { switch (pData->iColortype) /* store fields for future reference */ { case 0: { /* gray */ pBuf->iTRNSgray = ((mng_trnsp)pChunk)->iGray; #if defined(MNG_NO_16BIT_SUPPORT) if (pData->iPNGmult == 2) pBuf->iTRNSgray >>= 8; #endif break; } case 2: { /* rgb */ pBuf->iTRNSred = ((mng_trnsp)pChunk)->iRed; pBuf->iTRNSgreen = ((mng_trnsp)pChunk)->iGreen; pBuf->iTRNSblue = ((mng_trnsp)pChunk)->iBlue; #if defined(MNG_NO_16BIT_SUPPORT) if (pData->iPNGmult == 2) { pBuf->iTRNSred >>= 8; pBuf->iTRNSgreen >>= 8; pBuf->iTRNSblue >>= 8; } #endif break; } case 3: { /* indexed */ pBuf->iTRNScount = ((mng_trnsp)pChunk)->iCount; MNG_COPY (pBuf->aTRNSentries, ((mng_trnsp)pChunk)->aEntries, ((mng_trnsp)pChunk)->iCount); break; } } } } } else { /* create an animation object */ return mng_create_ani_trns (pData); } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } /* ************************************************************************** */ MNG_C_SPECIALFUNC (mng_special_gama) { #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif pData->bHasGAMA = MNG_TRUE; /* indicate we've got it */ else pData->bHasglobalGAMA = (mng_bool)!((mng_gamap)pChunk)->bEmpty; #ifdef MNG_SUPPORT_DISPLAY #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { mng_imagep pImage; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* update delta image ? */ pImage = (mng_imagep)pData->pObjzero; else #endif { pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; } /* store for color-processing routines */ pImage->pImgbuf->iGamma = ((mng_gamap)pChunk)->iGamma; pImage->pImgbuf->bHasGAMA = MNG_TRUE; } else { /* store as global */ if (!((mng_gamap)pChunk)->bEmpty) pData->iGlobalGamma = ((mng_gamap)pChunk)->iGamma; /* create an animation object */ return mng_create_ani_gama (pData, pChunk); } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_cHRM MNG_C_SPECIALFUNC (mng_special_chrm) { #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif pData->bHasCHRM = MNG_TRUE; /* indicate we've got it */ else pData->bHasglobalCHRM = (mng_bool)!((mng_chrmp)pChunk)->bEmpty; #ifdef MNG_SUPPORT_DISPLAY { #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { mng_imagep pImage; mng_imagedatap pBuf; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* update delta image ? */ pImage = (mng_imagep)pData->pObjzero; else #endif { pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; } pBuf = pImage->pImgbuf; /* address object buffer */ pBuf->bHasCHRM = MNG_TRUE; /* and tell it it's got a CHRM now */ /* store for color-processing routines */ pBuf->iWhitepointx = ((mng_chrmp)pChunk)->iWhitepointx; pBuf->iWhitepointy = ((mng_chrmp)pChunk)->iWhitepointy; pBuf->iPrimaryredx = ((mng_chrmp)pChunk)->iRedx; pBuf->iPrimaryredy = ((mng_chrmp)pChunk)->iRedy; pBuf->iPrimarygreenx = ((mng_chrmp)pChunk)->iGreenx; pBuf->iPrimarygreeny = ((mng_chrmp)pChunk)->iGreeny; pBuf->iPrimarybluex = ((mng_chrmp)pChunk)->iBluex; pBuf->iPrimarybluey = ((mng_chrmp)pChunk)->iBluey; } else { /* store as global */ if (!((mng_chrmp)pChunk)->bEmpty) { pData->iGlobalWhitepointx = ((mng_chrmp)pChunk)->iWhitepointx; pData->iGlobalWhitepointy = ((mng_chrmp)pChunk)->iWhitepointy; pData->iGlobalPrimaryredx = ((mng_chrmp)pChunk)->iRedx; pData->iGlobalPrimaryredy = ((mng_chrmp)pChunk)->iRedy; pData->iGlobalPrimarygreenx = ((mng_chrmp)pChunk)->iGreenx; pData->iGlobalPrimarygreeny = ((mng_chrmp)pChunk)->iGreeny; pData->iGlobalPrimarybluex = ((mng_chrmp)pChunk)->iBluex; pData->iGlobalPrimarybluey = ((mng_chrmp)pChunk)->iBluey; } /* create an animation object */ return mng_create_ani_chrm (pData, pChunk); } } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ MNG_C_SPECIALFUNC (mng_special_srgb) { #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif pData->bHasSRGB = MNG_TRUE; /* indicate we've got it */ else pData->bHasglobalSRGB = (mng_bool)!((mng_srgbp)pChunk)->bEmpty; #ifdef MNG_SUPPORT_DISPLAY #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { mng_imagep pImage; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* update delta image ? */ pImage = (mng_imagep)pData->pObjzero; else #endif { pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; } /* store for color-processing routines */ pImage->pImgbuf->iRenderingintent = ((mng_srgbp)pChunk)->iRenderingintent; pImage->pImgbuf->bHasSRGB = MNG_TRUE; } else { /* store as global */ if (!((mng_srgbp)pChunk)->bEmpty) pData->iGlobalRendintent = ((mng_srgbp)pChunk)->iRenderingintent; /* create an animation object */ return mng_create_ani_srgb (pData, pChunk); } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iCCP MNG_C_SPECIALFUNC (mng_special_iccp) { mng_retcode iRetcode; mng_chunk_headerp pDummy; #ifdef MNG_CHECK_BAD_ICCP /* Check for bad iCCP chunk */ if (!strncmp (((mng_iccpp)pChunk)->zName, "Photoshop ICC profile", 21)) { if (((mng_iccpp)pChunk)->iProfilesize == 2615) /* is it the sRGB profile ? */ { mng_chunk_header chunk_srgb; mng_get_chunkheader (MNG_UINT_sRGB, &chunk_srgb); /* pretend it's an sRGB chunk then ! */ iRetcode = mng_read_general (pData, &chunk_srgb, 1, (mng_ptr)"0", &pDummy); if (iRetcode) /* on error bail out */ return iRetcode; pDummy->fCleanup (pData, pDummy); } } else { #endif /* MNG_CHECK_BAD_ICCP */ #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif pData->bHasICCP = MNG_TRUE; /* indicate we've got it */ else pData->bHasglobalICCP = (mng_bool)!((mng_iccpp)pChunk)->bEmpty; #ifdef MNG_SUPPORT_DISPLAY #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { mng_imagep pImage; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* update delta image ? */ { /* store in object 0 ! */ pImage = (mng_imagep)pData->pObjzero; if (pImage->pImgbuf->pProfile) /* profile existed ? */ MNG_FREEX (pData, pImage->pImgbuf->pProfile, pImage->pImgbuf->iProfilesize); /* allocate a buffer & copy it */ MNG_ALLOC (pData, pImage->pImgbuf->pProfile, ((mng_iccpp)pChunk)->iProfilesize); MNG_COPY (pImage->pImgbuf->pProfile, ((mng_iccpp)pChunk)->pProfile, ((mng_iccpp)pChunk)->iProfilesize); /* store its length as well */ pImage->pImgbuf->iProfilesize = ((mng_iccpp)pChunk)->iProfilesize; pImage->pImgbuf->bHasICCP = MNG_TRUE; } else #endif { pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; if (pImage->pImgbuf->pProfile) /* profile existed ? */ MNG_FREEX (pData, pImage->pImgbuf->pProfile, pImage->pImgbuf->iProfilesize); /* allocate a buffer & copy it */ MNG_ALLOC (pData, pImage->pImgbuf->pProfile, ((mng_iccpp)pChunk)->iProfilesize); MNG_COPY (pImage->pImgbuf->pProfile, ((mng_iccpp)pChunk)->pProfile, ((mng_iccpp)pChunk)->iProfilesize); /* store its length as well */ pImage->pImgbuf->iProfilesize = ((mng_iccpp)pChunk)->iProfilesize; pImage->pImgbuf->bHasICCP = MNG_TRUE; } } else { /* store as global */ if (pData->pGlobalProfile) /* did we have a global profile ? */ MNG_FREEX (pData, pData->pGlobalProfile, pData->iGlobalProfilesize); if (((mng_iccpp)pChunk)->bEmpty) /* empty chunk ? */ { pData->iGlobalProfilesize = 0; /* reset to null */ pData->pGlobalProfile = MNG_NULL; } else { /* allocate a global buffer & copy it */ MNG_ALLOC (pData, pData->pGlobalProfile, ((mng_iccpp)pChunk)->iProfilesize); MNG_COPY (pData->pGlobalProfile, ((mng_iccpp)pChunk)->pProfile, ((mng_iccpp)pChunk)->iProfilesize); /* store its length as well */ pData->iGlobalProfilesize = ((mng_iccpp)pChunk)->iProfilesize; } /* create an animation object */ return mng_create_ani_iccp (pData, pChunk); } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_CHECK_BAD_ICCP } #endif return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tEXt MNG_C_SPECIALFUNC (mng_special_text) { if (pData->fProcesstext) /* inform the application ? */ { mng_bool bOke = pData->fProcesstext ((mng_handle)pData, MNG_TYPE_TEXT, ((mng_textp)pChunk)->zKeyword, ((mng_textp)pChunk)->zText, 0, 0); if (!bOke) MNG_ERROR (pData, MNG_APPMISCERROR); } return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_zTXt MNG_C_SPECIALFUNC (mng_special_ztxt) { if (pData->fProcesstext) /* inform the application ? */ { mng_bool bOke = pData->fProcesstext ((mng_handle)pData, MNG_TYPE_ZTXT, ((mng_ztxtp)pChunk)->zKeyword, ((mng_ztxtp)pChunk)->zText, 0, 0); if (!bOke) MNG_ERROR (pData, MNG_APPMISCERROR); } return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iTXt MNG_F_SPECIALFUNC (mng_deflate_itxt) { mng_itxtp pITXT = (mng_itxtp)pChunk; mng_uint32 iBufsize = 0; mng_uint8p pBuf = 0; mng_uint32 iTextlen = 0; if (pITXT->iCompressionflag) /* decompress the text ? */ { mng_retcode iRetcode = mng_inflate_buffer (pData, *ppRawdata, *piRawlen, &pBuf, &iBufsize, &iTextlen); if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffer */ MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } MNG_ALLOC (pData, pITXT->zText, iTextlen+1); MNG_COPY (pITXT->zText, pBuf, iTextlen); pITXT->iTextsize = iTextlen; MNG_FREEX (pData, pBuf, iBufsize); } else { MNG_ALLOC (pData, pITXT->zText, (*piRawlen)+1); MNG_COPY (pITXT->zText, *ppRawdata, *piRawlen); pITXT->iTextsize = *piRawlen; } *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iTXt MNG_C_SPECIALFUNC (mng_special_itxt) { if (pData->fProcesstext) /* inform the application ? */ { mng_bool bOke = pData->fProcesstext ((mng_handle)pData, MNG_TYPE_ITXT, ((mng_itxtp)pChunk)->zKeyword, ((mng_itxtp)pChunk)->zText, ((mng_itxtp)pChunk)->zLanguage, ((mng_itxtp)pChunk)->zTranslation); if (!bOke) MNG_ERROR (pData, MNG_APPMISCERROR); } return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_bKGD MNG_C_SPECIALFUNC (mng_special_bkgd) { #ifdef MNG_SUPPORT_DISPLAY mng_imagep pImage = (mng_imagep)pData->pCurrentobj; mng_imagedatap pBuf; #endif #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif pData->bHasBKGD = MNG_TRUE; /* indicate bKGD available */ else pData->bHasglobalBKGD = (mng_bool)!(((mng_bkgdp)pChunk)->bEmpty); #ifdef MNG_SUPPORT_DISPLAY if (!pImage) /* if no object dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address object buffer */ #ifdef MNG_INCLUDE_JNG if (pData->bHasJHDR) { pBuf->bHasBKGD = MNG_TRUE; /* tell the object it's got bKGD now */ switch (pData->iJHDRcolortype) /* store fields for future reference */ { case 8 : ; /* gray */ case 12 : { /* graya */ pBuf->iBKGDgray = ((mng_bkgdp)pChunk)->iGray; break; } case 10 : ; /* rgb */ case 14 : { /* rgba */ pBuf->iBKGDred = ((mng_bkgdp)pChunk)->iRed; pBuf->iBKGDgreen = ((mng_bkgdp)pChunk)->iGreen; pBuf->iBKGDblue = ((mng_bkgdp)pChunk)->iBlue; break; } } } else #endif /* MNG_INCLUDE_JNG */ if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { pBuf->bHasBKGD = MNG_TRUE; /* tell the object it's got bKGD now */ switch (pData->iColortype) /* store fields for future reference */ { case 0 : ; /* gray */ case 4 : { /* graya */ pBuf->iBKGDgray = ((mng_bkgdp)pChunk)->iGray; break; } case 2 : ; /* rgb */ case 6 : { /* rgba */ pBuf->iBKGDred = ((mng_bkgdp)pChunk)->iRed; pBuf->iBKGDgreen = ((mng_bkgdp)pChunk)->iGreen; pBuf->iBKGDblue = ((mng_bkgdp)pChunk)->iBlue; break; } case 3 : { /* indexed */ pBuf->iBKGDindex = ((mng_bkgdp)pChunk)->iIndex; break; } } } else /* store as global */ { if (!(((mng_bkgdp)pChunk)->bEmpty)) { pData->iGlobalBKGDred = ((mng_bkgdp)pChunk)->iRed; pData->iGlobalBKGDgreen = ((mng_bkgdp)pChunk)->iGreen; pData->iGlobalBKGDblue = ((mng_bkgdp)pChunk)->iBlue; } /* create an animation object */ return mng_create_ani_bkgd (pData); } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYs MNG_C_SPECIALFUNC (mng_special_phys) { #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sBIT MNG_C_SPECIALFUNC (mng_special_sbit) { #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sPLT MNG_F_SPECIALFUNC (mng_splt_entries) { mng_spltp pSPLT = (mng_spltp)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; if ((pSPLT->iSampledepth != MNG_BITDEPTH_8 ) && (pSPLT->iSampledepth != MNG_BITDEPTH_16) ) MNG_ERROR (pData, MNG_INVSAMPLEDEPTH); /* check remaining length */ if ( ((pSPLT->iSampledepth == MNG_BITDEPTH_8 ) && (iRawlen % 6 != 0)) || ((pSPLT->iSampledepth == MNG_BITDEPTH_16) && (iRawlen % 10 != 0)) ) MNG_ERROR (pData, MNG_INVALIDLENGTH); if (pSPLT->iSampledepth == MNG_BITDEPTH_8) pSPLT->iEntrycount = iRawlen / 6; else pSPLT->iEntrycount = iRawlen / 10; if (iRawlen) { MNG_ALLOC (pData, pSPLT->pEntries, iRawlen); MNG_COPY (pSPLT->pEntries, pRawdata, iRawlen); } *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sPLT MNG_C_SPECIALFUNC (mng_special_splt) { #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_hIST MNG_F_SPECIALFUNC (mng_hist_entries) { mng_histp pHIST = (mng_histp)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; mng_uint32 iX; if ( ((iRawlen & 0x01) != 0) || ((iRawlen >> 1) != pData->iPLTEcount) ) MNG_ERROR (pData, MNG_INVALIDLENGTH); pHIST->iEntrycount = iRawlen >> 1; for (iX = 0; iX < pHIST->iEntrycount; iX++) { pHIST->aEntries[iX] = mng_get_uint16 (pRawdata); pRawdata += 2; } *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_hIST MNG_C_SPECIALFUNC (mng_special_hist) { #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tIME MNG_C_SPECIALFUNC (mng_special_time) { /* if (pData->fProcesstime) */ /* inform the application ? */ /* { pData->fProcesstime ((mng_handle)pData, ); } */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ /* ************************************************************************** */ /* JNG chunks */ #ifdef MNG_INCLUDE_JNG MNG_C_SPECIALFUNC (mng_special_jhdr) { if ((pData->eSigtype == mng_it_jng) && (pData->iChunkseq > 1)) MNG_ERROR (pData, MNG_SEQUENCEERROR); /* inside a JHDR-IEND block now */ pData->bHasJHDR = MNG_TRUE; /* and store interesting fields */ pData->iDatawidth = ((mng_jhdrp)pChunk)->iWidth; pData->iDataheight = ((mng_jhdrp)pChunk)->iHeight; pData->iJHDRcolortype = ((mng_jhdrp)pChunk)->iColortype; pData->iJHDRimgbitdepth = ((mng_jhdrp)pChunk)->iImagesampledepth; pData->iJHDRimgcompression = ((mng_jhdrp)pChunk)->iImagecompression; pData->iJHDRimginterlace = ((mng_jhdrp)pChunk)->iImageinterlace; pData->iJHDRalphabitdepth = ((mng_jhdrp)pChunk)->iAlphasampledepth; pData->iJHDRalphacompression = ((mng_jhdrp)pChunk)->iAlphacompression; pData->iJHDRalphafilter = ((mng_jhdrp)pChunk)->iAlphafilter; pData->iJHDRalphainterlace = ((mng_jhdrp)pChunk)->iAlphainterlace; #if defined(MNG_NO_1_2_4BIT_SUPPORT) || defined(MNG_NO_16BIT_SUPPORT) pData->iPNGmult = 1; pData->iPNGdepth = pData->iJHDRalphabitdepth; #endif #ifdef MNG_NO_1_2_4BIT_SUPPORT if (pData->iJHDRalphabitdepth < 8) pData->iJHDRalphabitdepth = 8; #endif #ifdef MNG_NO_16BIT_SUPPORT if (pData->iJHDRalphabitdepth > 8) { pData->iPNGmult = 2; pData->iJHDRalphabitdepth = 8; } #endif /* parameter validity checks */ if ((pData->iJHDRcolortype != MNG_COLORTYPE_JPEGGRAY ) && (pData->iJHDRcolortype != MNG_COLORTYPE_JPEGCOLOR ) && (pData->iJHDRcolortype != MNG_COLORTYPE_JPEGGRAYA ) && (pData->iJHDRcolortype != MNG_COLORTYPE_JPEGCOLORA) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); if ((pData->iJHDRimgbitdepth != MNG_BITDEPTH_JPEG8 ) && (pData->iJHDRimgbitdepth != MNG_BITDEPTH_JPEG12 ) && (pData->iJHDRimgbitdepth != MNG_BITDEPTH_JPEG8AND12) ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if ((pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAYA ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLORA) ) { if ((pData->iJHDRalphabitdepth != MNG_BITDEPTH_8 ) #ifndef MNG_NO_1_2_4BIT_SUPPORT && (pData->iJHDRalphabitdepth != MNG_BITDEPTH_1 ) && (pData->iJHDRalphabitdepth != MNG_BITDEPTH_2 ) && (pData->iJHDRalphabitdepth != MNG_BITDEPTH_4 ) #endif #ifndef MNG_NO_16BIT_SUPPORT && (pData->iJHDRalphabitdepth != MNG_BITDEPTH_16) #endif ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if ((pData->iJHDRalphacompression != MNG_COMPRESSION_DEFLATE ) && (pData->iJHDRalphacompression != MNG_COMPRESSION_BASELINEJPEG) ) MNG_ERROR (pData, MNG_INVALIDCOMPRESS); if ((pData->iJHDRalphacompression == MNG_COMPRESSION_BASELINEJPEG) && (pData->iJHDRalphabitdepth != MNG_BITDEPTH_8 ) ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); #if defined(FILTER192) || defined(FILTER193) if ((pData->iJHDRalphafilter != MNG_FILTER_ADAPTIVE ) && #if defined(FILTER192) && defined(FILTER193) (pData->iJHDRalphafilter != MNG_FILTER_DIFFERING) && (pData->iJHDRalphafilter != MNG_FILTER_NOFILTER ) ) #else #ifdef FILTER192 (pData->iJHDRalphafilter != MNG_FILTER_DIFFERING) ) #else (pData->iJHDRalphafilter != MNG_FILTER_NOFILTER ) ) #endif #endif MNG_ERROR (pData, MNG_INVALIDFILTER); #else if (pData->iJHDRalphafilter) MNG_ERROR (pData, MNG_INVALIDFILTER); #endif } else { if (pData->iJHDRalphabitdepth) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if (pData->iJHDRalphacompression) MNG_ERROR (pData, MNG_INVALIDCOMPRESS); if (pData->iJHDRalphafilter) MNG_ERROR (pData, MNG_INVALIDFILTER); if (pData->iJHDRalphainterlace) MNG_ERROR (pData, MNG_INVALIDINTERLACE); } if (!pData->bHasheader) /* first chunk ? */ { pData->bHasheader = MNG_TRUE; /* we've got a header */ pData->eImagetype = mng_it_jng; /* then this must be a JNG */ pData->iWidth = ((mng_jhdrp)pChunk)->iWidth; pData->iHeight = ((mng_jhdrp)pChunk)->iHeight; /* predict alpha-depth ! */ if ((pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAYA ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLORA) ) pData->iAlphadepth = pData->iJHDRalphabitdepth; else pData->iAlphadepth = 0; /* fits on maximum canvas ? */ if ((pData->iWidth > pData->iMaxwidth) || (pData->iHeight > pData->iMaxheight)) MNG_WARNING (pData, MNG_IMAGETOOLARGE); if (pData->fProcessheader) /* inform the app ? */ if (!pData->fProcessheader (((mng_handle)pData), pData->iWidth, pData->iHeight)) MNG_ERROR (pData, MNG_APPMISCERROR); } pData->iColortype = 0; /* fake grayscale for other routines */ pData->iImagelevel++; /* one level deeper */ #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode = mng_process_display_jhdr (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_NO_16BIT_SUPPORT if (((mng_jhdrp)pChunk)->iAlphasampledepth > 8) ((mng_jhdrp)pChunk)->iAlphasampledepth = 8; #endif return MNG_NOERROR; /* done */ } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG MNG_C_SPECIALFUNC (mng_special_jdaa) { if (pData->iJHDRalphacompression != MNG_COMPRESSION_BASELINEJPEG) MNG_ERROR (pData, MNG_SEQUENCEERROR); pData->bHasJDAA = MNG_TRUE; /* got some JDAA now, don't we */ return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG MNG_C_SPECIALFUNC (mng_special_jdat) { pData->bHasJDAT = MNG_TRUE; /* got some JDAT now, don't we */ return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG MNG_C_SPECIALFUNC (mng_special_jsep) { pData->bHasJSEP = MNG_TRUE; /* indicate we've had the 8-/12-bit separator */ return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ /* ************************************************************************** */ /* MNG chunks */ MNG_C_SPECIALFUNC (mng_special_mhdr) { if (pData->bHasheader) /* can only be the first chunk! */ MNG_ERROR (pData, MNG_SEQUENCEERROR); pData->bHasMHDR = MNG_TRUE; /* oh boy, a real MNG */ pData->bHasheader = MNG_TRUE; /* we've got a header */ pData->eImagetype = mng_it_mng; /* fill header fields */ pData->iWidth = ((mng_mhdrp)pChunk)->iWidth; pData->iHeight = ((mng_mhdrp)pChunk)->iHeight; pData->iTicks = ((mng_mhdrp)pChunk)->iTicks; pData->iLayercount = ((mng_mhdrp)pChunk)->iLayercount; pData->iFramecount = ((mng_mhdrp)pChunk)->iFramecount; pData->iPlaytime = ((mng_mhdrp)pChunk)->iPlaytime; pData->iSimplicity = ((mng_mhdrp)pChunk)->iSimplicity; #ifndef MNG_NO_OLD_VERSIONS pData->bPreDraft48 = MNG_FALSE; #endif /* predict alpha-depth */ if ((pData->iSimplicity & 0x00000001) == 0) #ifndef MNG_NO_16BIT_SUPPORT pData->iAlphadepth = 16; /* no indicators = assume the worst */ #else pData->iAlphadepth = 8; /* anything else = assume the worst */ #endif else if ((pData->iSimplicity & 0x00000008) == 0) pData->iAlphadepth = 0; /* no transparency at all */ else if ((pData->iSimplicity & 0x00000140) == 0x00000040) pData->iAlphadepth = 1; /* no semi-transparency guaranteed */ else #ifndef MNG_NO_16BIT_SUPPORT pData->iAlphadepth = 16; /* anything else = assume the worst */ #else pData->iAlphadepth = 8; /* anything else = assume the worst */ #endif #ifdef MNG_INCLUDE_JNG /* can we handle the complexity ? */ if (pData->iSimplicity & 0x0000FC00) #else if (pData->iSimplicity & 0x0000FC10) #endif MNG_ERROR (pData, MNG_MNGTOOCOMPLEX); /* fits on maximum canvas ? */ if ((pData->iWidth > pData->iMaxwidth) || (pData->iHeight > pData->iMaxheight)) MNG_WARNING (pData, MNG_IMAGETOOLARGE); if (pData->fProcessheader) /* inform the app ? */ if (!pData->fProcessheader (((mng_handle)pData), pData->iWidth, pData->iHeight)) MNG_ERROR (pData, MNG_APPMISCERROR); pData->iImagelevel++; /* one level deeper */ return MNG_NOERROR; /* done */ } /* ************************************************************************** */ MNG_C_SPECIALFUNC (mng_special_mend) { #ifdef MNG_SUPPORT_DISPLAY { /* do something */ mng_retcode iRetcode = mng_process_display_mend (pData); if (iRetcode) /* on error bail out */ return iRetcode; if (!pData->iTotalframes) /* save totals */ pData->iTotalframes = pData->iFrameseq; if (!pData->iTotallayers) pData->iTotallayers = pData->iLayerseq; if (!pData->iTotalplaytime) pData->iTotalplaytime = pData->iFrametime; } #endif /* MNG_SUPPORT_DISPLAY */ pData->bHasMHDR = MNG_FALSE; /* end of the line, bro! */ return MNG_NOERROR; /* done */ } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_LOOP MNG_F_SPECIALFUNC (mng_debunk_loop) { mng_loopp pLOOP = (mng_loopp)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; if (iRawlen >= 5) /* length checks */ { if (iRawlen >= 6) { if ((iRawlen - 6) % 4 != 0) MNG_ERROR (pData, MNG_INVALIDLENGTH); } } else MNG_ERROR (pData, MNG_INVALIDLENGTH); if (iRawlen >= 5) /* store the fields */ { pLOOP->iLevel = *pRawdata; #ifndef MNG_NO_OLD_VERSIONS if (pData->bPreDraft48) { pLOOP->iTermination = *(pRawdata+1); pLOOP->iRepeat = mng_get_uint32 (pRawdata+2); } else #endif { pLOOP->iRepeat = mng_get_uint32 (pRawdata+1); } if (iRawlen >= 6) { #ifndef MNG_NO_OLD_VERSIONS if (!pData->bPreDraft48) #endif pLOOP->iTermination = *(pRawdata+5); if (iRawlen >= 10) { pLOOP->iItermin = mng_get_uint32 (pRawdata+6); #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED if (iRawlen >= 14) { pLOOP->iItermax = mng_get_uint32 (pRawdata+10); pLOOP->iCount = (iRawlen - 14) / 4; if (pLOOP->iCount) { MNG_ALLOC (pData, pLOOP->pSignals, pLOOP->iCount << 2); #ifndef MNG_BIGENDIAN_SUPPORTED { mng_uint32 iX; mng_uint8p pIn = pRawdata + 14; mng_uint32p pOut = (mng_uint32p)pLOOP->pSignals; for (iX = 0; iX < pLOOP->iCount; iX++) { *pOut++ = mng_get_uint32 (pIn); pIn += 4; } } #else MNG_COPY (pLOOP->pSignals, pRawdata + 14, pLOOP->iCount << 2); #endif /* !MNG_BIGENDIAN_SUPPORTED */ } } #endif } } } *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_LOOP MNG_C_SPECIALFUNC (mng_special_loop) { if (!pData->bCacheplayback) /* must store playback info to work!! */ MNG_ERROR (pData, MNG_LOOPWITHCACHEOFF); #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode; pData->bHasLOOP = MNG_TRUE; /* indicate we're inside a loop */ /* create the LOOP ani-object */ iRetcode = mng_create_ani_loop (pData, pChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* skip till matching ENDL if iteration=0 */ if ((!pData->bSkipping) && (((mng_loopp)pChunk)->iRepeat == 0)) pData->bSkipping = MNG_TRUE; } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_LOOP MNG_C_SPECIALFUNC (mng_special_endl) { #ifdef MNG_SUPPORT_DISPLAY if (pData->bHasLOOP) /* are we really processing a loop ? */ { mng_uint8 iLevel = ((mng_endlp)pChunk)->iLevel; /* create an ENDL animation object */ return mng_create_ani_endl (pData, iLevel); } else MNG_ERROR (pData, MNG_NOMATCHINGLOOP); #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DEFI MNG_C_SPECIALFUNC (mng_special_defi) { #ifdef MNG_SUPPORT_DISPLAY mng_retcode iRetcode; pData->iDEFIobjectid = ((mng_defip)pChunk)->iObjectid; pData->bDEFIhasdonotshow = ((mng_defip)pChunk)->bHasdonotshow; pData->iDEFIdonotshow = ((mng_defip)pChunk)->iDonotshow; pData->bDEFIhasconcrete = ((mng_defip)pChunk)->bHasconcrete; pData->iDEFIconcrete = ((mng_defip)pChunk)->iConcrete; pData->bDEFIhasloca = ((mng_defip)pChunk)->bHasloca; pData->iDEFIlocax = ((mng_defip)pChunk)->iXlocation; pData->iDEFIlocay = ((mng_defip)pChunk)->iYlocation; pData->bDEFIhasclip = ((mng_defip)pChunk)->bHasclip; pData->iDEFIclipl = ((mng_defip)pChunk)->iLeftcb; pData->iDEFIclipr = ((mng_defip)pChunk)->iRightcb; pData->iDEFIclipt = ((mng_defip)pChunk)->iTopcb; pData->iDEFIclipb = ((mng_defip)pChunk)->iBottomcb; /* create an animation object */ iRetcode = mng_create_ani_defi (pData); if (!iRetcode) /* do display processing */ iRetcode = mng_process_display_defi (pData); return iRetcode; #else return MNG_NOERROR; /* done */ #endif /* MNG_SUPPORT_DISPLAY */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BASI MNG_C_SPECIALFUNC (mng_special_basi) { pData->bHasBASI = MNG_TRUE; /* inside a BASI-IEND block now */ /* store interesting fields */ pData->iDatawidth = ((mng_basip)pChunk)->iWidth; pData->iDataheight = ((mng_basip)pChunk)->iHeight; pData->iBitdepth = ((mng_basip)pChunk)->iBitdepth; pData->iColortype = ((mng_basip)pChunk)->iColortype; pData->iCompression = ((mng_basip)pChunk)->iCompression; pData->iFilter = ((mng_basip)pChunk)->iFilter; pData->iInterlace = ((mng_basip)pChunk)->iInterlace; #if defined(MNG_NO_1_2_4BIT_SUPPORT) || defined(MNG_NO_16BIT_SUPPORT) pData->iPNGmult = 1; pData->iPNGdepth = pData->iBitdepth; #endif #ifdef MNG_NO_1_2_4BIT_SUPPORT if (pData->iBitdepth < 8) pData->iBitdepth = 8; #endif #ifdef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth > 8) { pData->iBitdepth = 8; pData->iPNGmult = 2; } #endif if ((pData->iBitdepth != 8) /* parameter validity checks */ #ifndef MNG_NO_1_2_4BIT_SUPPORT && (pData->iBitdepth != 1) && (pData->iBitdepth != 2) && (pData->iBitdepth != 4) #endif #ifndef MNG_NO_16BIT_SUPPORT && (pData->iBitdepth != 16) #endif ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if ((pData->iColortype != MNG_COLORTYPE_GRAY ) && (pData->iColortype != MNG_COLORTYPE_RGB ) && (pData->iColortype != MNG_COLORTYPE_INDEXED) && (pData->iColortype != MNG_COLORTYPE_GRAYA ) && (pData->iColortype != MNG_COLORTYPE_RGBA ) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); if ((pData->iColortype == MNG_COLORTYPE_INDEXED) && (pData->iBitdepth > 8)) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if (((pData->iColortype == MNG_COLORTYPE_RGB ) || (pData->iColortype == MNG_COLORTYPE_GRAYA ) || (pData->iColortype == MNG_COLORTYPE_RGBA ) ) && (pData->iBitdepth < 8 ) ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); #if defined(FILTER192) || defined(FILTER193) if ((pData->iFilter != MNG_FILTER_ADAPTIVE ) && #if defined(FILTER192) && defined(FILTER193) (pData->iFilter != MNG_FILTER_DIFFERING) && (pData->iFilter != MNG_FILTER_NOFILTER ) ) #else #ifdef FILTER192 (pData->iFilter != MNG_FILTER_DIFFERING) ) #else (pData->iFilter != MNG_FILTER_NOFILTER ) ) #endif #endif MNG_ERROR (pData, MNG_INVALIDFILTER); #else if (pData->iFilter) MNG_ERROR (pData, MNG_INVALIDFILTER); #endif pData->iImagelevel++; /* one level deeper */ #ifdef MNG_SUPPORT_DISPLAY { /* create an animation object */ mng_retcode iRetcode = mng_create_ani_basi (pData, pChunk); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_NO_16BIT_SUPPORT if (((mng_basip)pChunk)->iBitdepth > 8) ((mng_basip)pChunk)->iBitdepth = 8; #endif return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLON MNG_C_SPECIALFUNC (mng_special_clon) { #ifdef MNG_SUPPORT_DISPLAY return mng_create_ani_clon (pData, pChunk); #else return MNG_NOERROR; /* done */ #endif /* MNG_SUPPORT_DISPLAY */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST MNG_F_SPECIALFUNC (mng_debunk_past) { mng_pastp pPAST = (mng_pastp)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; mng_uint32 iSize; mng_uint32 iX; mng_past_sourcep pSource; /* check the length */ if ((iRawlen < 41) || (((iRawlen - 11) % 30) != 0)) MNG_ERROR (pData, MNG_INVALIDLENGTH); pPAST->iDestid = mng_get_uint16 (pRawdata); pPAST->iTargettype = *(pRawdata+2); pPAST->iTargetx = mng_get_int32 (pRawdata+3); pPAST->iTargety = mng_get_int32 (pRawdata+7); pPAST->iCount = ((iRawlen - 11) / 30); /* how many entries again? */ iSize = pPAST->iCount * sizeof (mng_past_source); pRawdata += 11; /* get a buffer for all the source blocks */ MNG_ALLOC (pData, pPAST->pSources, iSize); pSource = (mng_past_sourcep)(pPAST->pSources); for (iX = pPAST->iCount; iX > 0; iX--) { /* now copy the source blocks */ pSource->iSourceid = mng_get_uint16 (pRawdata); pSource->iComposition = *(pRawdata+2); pSource->iOrientation = *(pRawdata+3); pSource->iOffsettype = *(pRawdata+4); pSource->iOffsetx = mng_get_int32 (pRawdata+5); pSource->iOffsety = mng_get_int32 (pRawdata+9); pSource->iBoundarytype = *(pRawdata+13); pSource->iBoundaryl = mng_get_int32 (pRawdata+14); pSource->iBoundaryr = mng_get_int32 (pRawdata+18); pSource->iBoundaryt = mng_get_int32 (pRawdata+22); pSource->iBoundaryb = mng_get_int32 (pRawdata+26); pSource++; pRawdata += 30; } *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST MNG_C_SPECIALFUNC (mng_special_past) { #ifdef MNG_SUPPORT_DISPLAY return mng_create_ani_past (pData, pChunk); #else return MNG_NOERROR; #endif /* MNG_SUPPORT_DISPLAY */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DISC MNG_F_SPECIALFUNC (mng_disc_entries) { mng_discp pDISC = (mng_discp)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; if ((iRawlen % 2) != 0) /* check the length */ MNG_ERROR (pData, MNG_INVALIDLENGTH); pDISC->iCount = (iRawlen / sizeof (mng_uint16)); if (pDISC->iCount) { MNG_ALLOC (pData, pDISC->pObjectids, iRawlen); #ifndef MNG_BIGENDIAN_SUPPORTED { mng_uint32 iX; mng_uint8p pIn = pRawdata; mng_uint16p pOut = pDISC->pObjectids; for (iX = pDISC->iCount; iX > 0; iX--) { *pOut++ = mng_get_uint16 (pIn); pIn += 2; } } #else MNG_COPY (pDISC->pObjectids, pRawdata, iRawlen); #endif /* !MNG_BIGENDIAN_SUPPORTED */ } *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DISC MNG_C_SPECIALFUNC (mng_special_disc) { #ifdef MNG_SUPPORT_DISPLAY return mng_create_ani_disc (pData, pChunk); #else return MNG_NOERROR; #endif /* MNG_SUPPORT_DISPLAY */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BACK MNG_C_SPECIALFUNC (mng_special_back) { #ifdef MNG_SUPPORT_DISPLAY /* retrieve the fields */ pData->bHasBACK = MNG_TRUE; pData->iBACKred = ((mng_backp)pChunk)->iRed; pData->iBACKgreen = ((mng_backp)pChunk)->iGreen; pData->iBACKblue = ((mng_backp)pChunk)->iBlue; pData->iBACKmandatory = ((mng_backp)pChunk)->iMandatory; pData->iBACKimageid = ((mng_backp)pChunk)->iImageid; pData->iBACKtile = ((mng_backp)pChunk)->iTile; return mng_create_ani_back (pData); #else return MNG_NOERROR; #endif /* MNG_SUPPORT_DISPLAY */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_FRAM MNG_F_SPECIALFUNC (mng_fram_remainder) { mng_framp pFRAM = (mng_framp)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; mng_uint32 iRequired = 0; if (iRawlen < 4) /* must have at least 4 bytes */ MNG_ERROR (pData, MNG_INVALIDLENGTH); iRequired = 4; /* calculate and check required remaining length */ pFRAM->iChangedelay = *pRawdata; pFRAM->iChangetimeout = *(pRawdata+1); pFRAM->iChangeclipping = *(pRawdata+2); pFRAM->iChangesyncid = *(pRawdata+3); if (pFRAM->iChangedelay ) { iRequired += 4; } if (pFRAM->iChangetimeout ) { iRequired += 4; } if (pFRAM->iChangeclipping) { iRequired += 17; } if (pFRAM->iChangesyncid) { if ((iRawlen - iRequired) % 4 != 0) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else { if (iRawlen != iRequired) MNG_ERROR (pData, MNG_INVALIDLENGTH); } pRawdata += 4; if (pFRAM->iChangedelay) /* delay changed ? */ { pFRAM->iDelay = mng_get_uint32 (pRawdata); pRawdata += 4; } if (pFRAM->iChangetimeout) /* timeout changed ? */ { pFRAM->iTimeout = mng_get_uint32 (pRawdata); pRawdata += 4; } if (pFRAM->iChangeclipping) /* clipping changed ? */ { pFRAM->iBoundarytype = *pRawdata; pFRAM->iBoundaryl = mng_get_int32 (pRawdata+1); pFRAM->iBoundaryr = mng_get_int32 (pRawdata+5); pFRAM->iBoundaryt = mng_get_int32 (pRawdata+9); pFRAM->iBoundaryb = mng_get_int32 (pRawdata+13); pRawdata += 17; } if (pFRAM->iChangesyncid) { pFRAM->iCount = (iRawlen - iRequired) / 4; if (pFRAM->iCount) { MNG_ALLOC (pData, pFRAM->pSyncids, pFRAM->iCount * 4); #ifndef MNG_BIGENDIAN_SUPPORTED { mng_uint32 iX; mng_uint32p pOut = pFRAM->pSyncids; for (iX = pFRAM->iCount; iX > 0; iX--) { *pOut++ = mng_get_uint32 (pRawdata); pRawdata += 4; } } #else MNG_COPY (pFRAM->pSyncids, pRawdata, pFRAM->iCount * 4); #endif /* !MNG_BIGENDIAN_SUPPORTED */ } } #ifndef MNG_NO_OLD_VERSIONS if (pData->bPreDraft48) /* old style input-stream ? */ { switch (pFRAM->iMode) /* fix the framing mode then */ { case 0: { break; } case 1: { pFRAM->iMode = 3; break; } case 2: { pFRAM->iMode = 4; break; } case 3: { pFRAM->iMode = 1; break; } case 4: { pFRAM->iMode = 1; break; } case 5: { pFRAM->iMode = 2; break; } default: { pFRAM->iMode = 1; break; } } } #endif *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_FRAM MNG_C_SPECIALFUNC (mng_special_fram) { #ifdef MNG_SUPPORT_DISPLAY return mng_create_ani_fram (pData, pChunk); #else return MNG_NOERROR; #endif /* MNG_SUPPORT_DISPLAY */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MOVE MNG_C_SPECIALFUNC (mng_special_move) { #ifdef MNG_SUPPORT_DISPLAY return mng_create_ani_move (pData, pChunk); #else return MNG_NOERROR; #endif /* MNG_SUPPORT_DISPLAY */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLIP MNG_C_SPECIALFUNC (mng_special_clip) { #ifdef MNG_SUPPORT_DISPLAY return mng_create_ani_clip (pData, pChunk); #else return MNG_NOERROR; #endif /* MNG_SUPPORT_DISPLAY */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SHOW MNG_C_SPECIALFUNC (mng_special_show) { #ifdef MNG_SUPPORT_DISPLAY mng_retcode iRetcode; if (!((mng_showp)pChunk)->bEmpty) /* any data ? */ { if (!((mng_showp)pChunk)->bHaslastid) ((mng_showp)pChunk)->iLastid = ((mng_showp)pChunk)->iFirstid; pData->iSHOWfromid = ((mng_showp)pChunk)->iFirstid; pData->iSHOWtoid = ((mng_showp)pChunk)->iLastid; pData->iSHOWmode = ((mng_showp)pChunk)->iMode; } else /* use defaults then */ { pData->iSHOWfromid = 1; pData->iSHOWtoid = 65535; pData->iSHOWmode = 2; } /* create a SHOW animation object */ iRetcode = mng_create_ani_show (pData); if (!iRetcode) /* go and do it! */ iRetcode = mng_process_display_show (pData); #endif /* MNG_SUPPORT_DISPLAY */ return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_TERM MNG_C_SPECIALFUNC (mng_special_term) { /* should be behind MHDR or SAVE !! */ if ((!pData->bHasSAVE) && (pData->iChunkseq > 2)) { pData->bMisplacedTERM = MNG_TRUE; /* indicate we found a misplaced TERM */ /* and send a warning signal!!! */ MNG_WARNING (pData, MNG_SEQUENCEERROR); } pData->bHasTERM = MNG_TRUE; if (pData->fProcessterm) /* inform the app ? */ if (!pData->fProcessterm (((mng_handle)pData), ((mng_termp)pChunk)->iTermaction, ((mng_termp)pChunk)->iIteraction, ((mng_termp)pChunk)->iDelay, ((mng_termp)pChunk)->iItermax)) MNG_ERROR (pData, MNG_APPMISCERROR); #ifdef MNG_SUPPORT_DISPLAY { /* create the TERM ani-object */ mng_retcode iRetcode = mng_create_ani_term (pData, pChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* save for future reference */ pData->pTermaniobj = pData->pLastaniobj; } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE MNG_F_SPECIALFUNC (mng_save_entries) { mng_savep pSAVE = (mng_savep)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; mng_save_entryp pEntry = MNG_NULL; mng_uint32 iCount = 0; mng_uint8 iOtype = *pRawdata; mng_uint8 iEtype; mng_uint8p pTemp; mng_uint8p pNull; mng_uint32 iLen; mng_uint32 iOffset[2]; mng_uint32 iStarttime[2]; mng_uint32 iFramenr; mng_uint32 iLayernr; mng_uint32 iX; mng_uint32 iNamesize; if ((iOtype != 4) && (iOtype != 8)) MNG_ERROR (pData, MNG_INVOFFSETSIZE); pSAVE->iOffsettype = iOtype; for (iX = 0; iX < 2; iX++) /* do this twice to get the count first ! */ { pTemp = pRawdata + 1; iLen = iRawlen - 1; if (iX) /* second run ? */ { MNG_ALLOC (pData, pEntry, (iCount * sizeof (mng_save_entry))); pSAVE->iCount = iCount; pSAVE->pEntries = pEntry; } while (iLen) /* anything left ? */ { iEtype = *pTemp; /* entrytype */ if ((iEtype != 0) && (iEtype != 1) && (iEtype != 2) && (iEtype != 3)) MNG_ERROR (pData, MNG_INVENTRYTYPE); pTemp++; if (iEtype > 1) { iOffset [0] = 0; iOffset [1] = 0; iStarttime [0] = 0; iStarttime [1] = 0; iLayernr = 0; iFramenr = 0; } else { if (iOtype == 4) { iOffset [0] = 0; iOffset [1] = mng_get_uint32 (pTemp); pTemp += 4; } else { iOffset [0] = mng_get_uint32 (pTemp); iOffset [1] = mng_get_uint32 (pTemp+4); pTemp += 8; } if (iEtype > 0) { iStarttime [0] = 0; iStarttime [1] = 0; iLayernr = 0; iFramenr = 0; } else { if (iOtype == 4) { iStarttime [0] = 0; iStarttime [1] = mng_get_uint32 (pTemp+0); iLayernr = mng_get_uint32 (pTemp+4); iFramenr = mng_get_uint32 (pTemp+8); pTemp += 12; } else { iStarttime [0] = mng_get_uint32 (pTemp+0); iStarttime [1] = mng_get_uint32 (pTemp+4); iLayernr = mng_get_uint32 (pTemp+8); iFramenr = mng_get_uint32 (pTemp+12); pTemp += 16; } } } pNull = pTemp; /* get the name length */ while (*pNull) pNull++; if ((pNull - pRawdata) > (mng_int32)iRawlen) { iNamesize = iLen; /* no null found; so end of SAVE */ iLen = 0; } else { iNamesize = pNull - pTemp; /* should be another entry */ iLen -= iNamesize; if (!iLen) /* must not end with a null ! */ MNG_ERROR (pData, MNG_ENDWITHNULL); } if (!pEntry) { iCount++; } else { pEntry->iEntrytype = iEtype; pEntry->iOffset [0] = iOffset [0]; pEntry->iOffset [1] = iOffset [1]; pEntry->iStarttime [0] = iStarttime [0]; pEntry->iStarttime [1] = iStarttime [1]; pEntry->iLayernr = iLayernr; pEntry->iFramenr = iFramenr; pEntry->iNamesize = iNamesize; if (iNamesize) { MNG_ALLOC (pData, pEntry->zName, iNamesize+1); MNG_COPY (pEntry->zName, pTemp, iNamesize); } pEntry++; } pTemp += iNamesize; } } *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE MNG_C_SPECIALFUNC (mng_special_save) { pData->bHasSAVE = MNG_TRUE; if (pData->fProcesssave) /* inform the application ? */ { mng_bool bOke = pData->fProcesssave ((mng_handle)pData); if (!bOke) MNG_ERROR (pData, MNG_APPMISCERROR); } #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode; /* TODO: something with the parameters */ /* create a SAVE animation object */ iRetcode = mng_create_ani_save (pData); if (!iRetcode) /* process it */ iRetcode = mng_process_display_save (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SEEK MNG_C_SPECIALFUNC (mng_special_seek) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_DISPLAY /* create a SEEK animation object */ iRetcode = mng_create_ani_seek (pData, pChunk); if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_SUPPORT_DISPLAY */ if (pData->fProcessseek) /* inform the app ? */ if (!pData->fProcessseek ((mng_handle)pData, ((mng_seekp)pChunk)->zName)) MNG_ERROR (pData, MNG_APPMISCERROR); #ifdef MNG_SUPPORT_DISPLAY return mng_process_display_seek (pData); #else return MNG_NOERROR; #endif /* MNG_SUPPORT_DISPLAY */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_eXPI MNG_C_SPECIALFUNC (mng_special_expi) { #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_fPRI MNG_C_SPECIALFUNC (mng_special_fpri) { #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_nEED MNG_LOCAL mng_bool CheckKeyword (mng_datap pData, mng_uint8p pKeyword) { mng_chunkid handled_chunks [] = { MNG_UINT_BACK, /* keep it sorted !!!! */ MNG_UINT_BASI, MNG_UINT_CLIP, MNG_UINT_CLON, #ifndef MNG_NO_DELTA_PNG /* TODO: MNG_UINT_DBYK, */ #endif MNG_UINT_DEFI, #ifndef MNG_NO_DELTA_PNG MNG_UINT_DHDR, #endif MNG_UINT_DISC, #ifndef MNG_NO_DELTA_PNG /* TODO: MNG_UINT_DROP, */ #endif MNG_UINT_ENDL, MNG_UINT_FRAM, MNG_UINT_IDAT, MNG_UINT_IEND, MNG_UINT_IHDR, #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG MNG_UINT_IJNG, #endif MNG_UINT_IPNG, #endif #ifdef MNG_INCLUDE_JNG MNG_UINT_JDAA, MNG_UINT_JDAT, MNG_UINT_JHDR, /* TODO: MNG_UINT_JSEP, */ MNG_UINT_JdAA, #endif MNG_UINT_LOOP, MNG_UINT_MAGN, MNG_UINT_MEND, MNG_UINT_MHDR, MNG_UINT_MOVE, /* TODO: MNG_UINT_ORDR, */ MNG_UINT_PAST, MNG_UINT_PLTE, #ifndef MNG_NO_DELTA_PNG MNG_UINT_PPLT, MNG_UINT_PROM, #endif MNG_UINT_SAVE, MNG_UINT_SEEK, MNG_UINT_SHOW, MNG_UINT_TERM, MNG_UINT_bKGD, MNG_UINT_cHRM, /* TODO: MNG_UINT_eXPI, */ MNG_UINT_evNT, /* TODO: MNG_UINT_fPRI, */ MNG_UINT_gAMA, /* TODO: MNG_UINT_hIST, */ MNG_UINT_iCCP, MNG_UINT_iTXt, MNG_UINT_nEED, /* TODO: MNG_UINT_oFFs, */ /* TODO: MNG_UINT_pCAL, */ /* TODO: MNG_UINT_pHYg, */ /* TODO: MNG_UINT_pHYs, */ /* TODO: MNG_UINT_sBIT, */ /* TODO: MNG_UINT_sCAL, */ /* TODO: MNG_UINT_sPLT, */ MNG_UINT_sRGB, MNG_UINT_tEXt, MNG_UINT_tIME, MNG_UINT_tRNS, MNG_UINT_zTXt, }; mng_bool bOke = MNG_FALSE; if (pData->fProcessneed) /* does the app handle it ? */ bOke = pData->fProcessneed ((mng_handle)pData, (mng_pchar)pKeyword); if (!bOke) { /* find the keyword length */ mng_uint8p pNull = pKeyword; while (*pNull) pNull++; if ((pNull - pKeyword) == 4) /* test a chunk ? */ { /* get the chunk-id */ mng_chunkid iChunkid = (*pKeyword << 24) + (*(pKeyword+1) << 16) + (*(pKeyword+2) << 8) + (*(pKeyword+3) ); /* binary search variables */ mng_int32 iTop, iLower, iUpper, iMiddle; /* determine max index of table */ iTop = (sizeof (handled_chunks) / sizeof (handled_chunks [0])) - 1; /* binary search; with 52 chunks, worst-case is 7 comparisons */ iLower = 0; iMiddle = iTop >> 1; iUpper = iTop; do /* the binary search itself */ { if (handled_chunks [iMiddle] < iChunkid) iLower = iMiddle + 1; else if (handled_chunks [iMiddle] > iChunkid) iUpper = iMiddle - 1; else { bOke = MNG_TRUE; break; } iMiddle = (iLower + iUpper) >> 1; } while (iLower <= iUpper); } /* test draft ? */ if ((!bOke) && ((pNull - pKeyword) == 8) && (*pKeyword == 'd') && (*(pKeyword+1) == 'r') && (*(pKeyword+2) == 'a') && (*(pKeyword+3) == 'f') && (*(pKeyword+4) == 't') && (*(pKeyword+5) == ' ')) { mng_uint32 iDraft; iDraft = (*(pKeyword+6) - '0') * 10 + (*(pKeyword+7) - '0'); bOke = (mng_bool)(iDraft <= MNG_MNG_DRAFT); } /* test MNG 1.0/1.1 ? */ if ((!bOke) && ((pNull - pKeyword) == 7) && (*pKeyword == 'M') && (*(pKeyword+1) == 'N') && (*(pKeyword+2) == 'G') && (*(pKeyword+3) == '-') && (*(pKeyword+4) == '1') && (*(pKeyword+5) == '.') && ((*(pKeyword+6) == '0') || (*(pKeyword+6) == '1'))) bOke = MNG_TRUE; /* test CACHEOFF ? */ if ((!bOke) && ((pNull - pKeyword) == 8) && (*pKeyword == 'C') && (*(pKeyword+1) == 'A') && (*(pKeyword+2) == 'C') && (*(pKeyword+3) == 'H') && (*(pKeyword+4) == 'E') && (*(pKeyword+5) == 'O') && (*(pKeyword+6) == 'F') && (*(pKeyword+7) == 'F')) { if (!pData->pFirstaniobj) /* only if caching hasn't started yet ! */ { bOke = MNG_TRUE; pData->bCacheplayback = MNG_FALSE; pData->bStorechunks = MNG_FALSE; } } } return bOke; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_nEED MNG_C_SPECIALFUNC (mng_special_need) { /* let's check it */ mng_bool bOke = MNG_TRUE; mng_uint8p pNull, pTemp, pMax; pTemp = (mng_uint8p)((mng_needp)pChunk)->zKeywords; pMax = (mng_uint8p)(pTemp + ((mng_needp)pChunk)->iKeywordssize); pNull = pTemp; while (*pNull) pNull++; while ((bOke) && (pNull < pMax)) { bOke = CheckKeyword (pData, pTemp); pTemp = pNull + 1; pNull = pTemp; while (*pNull) pNull++; } if (bOke) bOke = CheckKeyword (pData, pTemp); if (!bOke) MNG_ERROR (pData, MNG_UNSUPPORTEDNEED); return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYg MNG_C_SPECIALFUNC (mng_special_phyg) { #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG MNG_C_SPECIALFUNC (mng_special_dhdr) { if ((((mng_dhdrp)pChunk)->iDeltatype == MNG_DELTATYPE_REPLACE) && (((mng_dhdrp)pChunk)->bHasblockloc)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((((mng_dhdrp)pChunk)->iDeltatype == MNG_DELTATYPE_NOCHANGE) && (((mng_dhdrp)pChunk)->bHasblocksize)) MNG_ERROR (pData, MNG_INVALIDLENGTH); pData->bHasDHDR = MNG_TRUE; /* inside a DHDR-IEND block now */ pData->iDeltatype = ((mng_dhdrp)pChunk)->iDeltatype; pData->iImagelevel++; /* one level deeper */ #ifdef MNG_SUPPORT_DISPLAY return mng_create_ani_dhdr (pData, pChunk); #else return MNG_NOERROR; #endif /* MNG_SUPPORT_DISPLAY */ } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG MNG_C_SPECIALFUNC (mng_special_prom) { if ((((mng_promp)pChunk)->iColortype != MNG_COLORTYPE_GRAY ) && (((mng_promp)pChunk)->iColortype != MNG_COLORTYPE_RGB ) && (((mng_promp)pChunk)->iColortype != MNG_COLORTYPE_INDEXED) && (((mng_promp)pChunk)->iColortype != MNG_COLORTYPE_GRAYA ) && (((mng_promp)pChunk)->iColortype != MNG_COLORTYPE_RGBA ) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); #ifdef MNG_NO_16BIT_SUPPORT if (((mng_promp)pChunk)->iSampledepth == MNG_BITDEPTH_16 ) ((mng_promp)pChunk)->iSampledepth = MNG_BITDEPTH_8; #endif if ((((mng_promp)pChunk)->iSampledepth != MNG_BITDEPTH_1 ) && (((mng_promp)pChunk)->iSampledepth != MNG_BITDEPTH_2 ) && (((mng_promp)pChunk)->iSampledepth != MNG_BITDEPTH_4 ) && (((mng_promp)pChunk)->iSampledepth != MNG_BITDEPTH_8 ) #ifndef MNG_NO_16BIT_SUPPORT && (((mng_promp)pChunk)->iSampledepth != MNG_BITDEPTH_16) #endif ) MNG_ERROR (pData, MNG_INVSAMPLEDEPTH); #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode = mng_create_ani_prom (pData, pChunk); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG MNG_C_SPECIALFUNC (mng_special_ipng) { #ifdef MNG_SUPPORT_DISPLAY mng_retcode iRetcode = mng_create_ani_ipng (pData); if (!iRetcode) /* process it */ iRetcode = mng_process_display_ipng (pData); if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG MNG_F_SPECIALFUNC (mng_pplt_entries) { mng_ppltp pPPLT = (mng_ppltp)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; mng_uint8 iDeltatype = pPPLT->iDeltatype; mng_uint32 iMax = 0; mng_int32 iX, iY, iM; mng_rgbpaltab aIndexentries; mng_uint8arr aAlphaentries; mng_uint8arr aUsedentries; /* must be indexed color ! */ if (pData->iColortype != MNG_COLORTYPE_INDEXED) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); for (iY = 255; iY >= 0; iY--) /* reset arrays */ { aIndexentries [iY].iRed = 0; aIndexentries [iY].iGreen = 0; aIndexentries [iY].iBlue = 0; aAlphaentries [iY] = 255; aUsedentries [iY] = 0; } while (iRawlen) /* as long as there are entries left ... */ { mng_uint32 iDiff; if (iRawlen < 2) MNG_ERROR (pData, MNG_INVALIDLENGTH); iX = (mng_int32)(*pRawdata); /* get start and end index */ iM = (mng_int32)(*(pRawdata+1)); if (iM < iX) MNG_ERROR (pData, MNG_INVALIDINDEX); if (iM >= (mng_int32) iMax) /* determine highest used index */ iMax = iM + 1; pRawdata += 2; iRawlen -= 2; iDiff = (iM - iX + 1); if ((iDeltatype == MNG_DELTATYPE_REPLACERGB ) || (iDeltatype == MNG_DELTATYPE_DELTARGB ) ) iDiff = iDiff * 3; else if ((iDeltatype == MNG_DELTATYPE_REPLACERGBA) || (iDeltatype == MNG_DELTATYPE_DELTARGBA ) ) iDiff = iDiff * 4; if (iRawlen < iDiff) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((iDeltatype == MNG_DELTATYPE_REPLACERGB ) || (iDeltatype == MNG_DELTATYPE_DELTARGB ) ) { for (iY = iX; iY <= iM; iY++) { aIndexentries [iY].iRed = *pRawdata; aIndexentries [iY].iGreen = *(pRawdata+1); aIndexentries [iY].iBlue = *(pRawdata+2); aUsedentries [iY] = 1; pRawdata += 3; iRawlen -= 3; } } else if ((iDeltatype == MNG_DELTATYPE_REPLACEALPHA) || (iDeltatype == MNG_DELTATYPE_DELTAALPHA ) ) { for (iY = iX; iY <= iM; iY++) { aAlphaentries [iY] = *pRawdata; aUsedentries [iY] = 1; pRawdata++; iRawlen--; } } else { for (iY = iX; iY <= iM; iY++) { aIndexentries [iY].iRed = *pRawdata; aIndexentries [iY].iGreen = *(pRawdata+1); aIndexentries [iY].iBlue = *(pRawdata+2); aAlphaentries [iY] = *(pRawdata+3); aUsedentries [iY] = 1; pRawdata += 4; iRawlen -= 4; } } } switch (pData->iBitdepth) /* check maximum allowed entries for bitdepth */ { case MNG_BITDEPTH_1 : { if (iMax > 2) MNG_ERROR (pData, MNG_INVALIDINDEX); break; } case MNG_BITDEPTH_2 : { if (iMax > 4) MNG_ERROR (pData, MNG_INVALIDINDEX); break; } case MNG_BITDEPTH_4 : { if (iMax > 16) MNG_ERROR (pData, MNG_INVALIDINDEX); break; } } pPPLT->iCount = iMax; for (iY = 255; iY >= 0; iY--) { pPPLT->aEntries [iY].iRed = aIndexentries [iY].iRed; pPPLT->aEntries [iY].iGreen = aIndexentries [iY].iGreen; pPPLT->aEntries [iY].iBlue = aIndexentries [iY].iBlue; pPPLT->aEntries [iY].iAlpha = aAlphaentries [iY]; pPPLT->aEntries [iY].bUsed = (mng_bool)(aUsedentries [iY]); } { /* create animation object */ mng_retcode iRetcode = mng_create_ani_pplt (pData, iDeltatype, iMax, aIndexentries, aAlphaentries, aUsedentries); if (iRetcode) return iRetcode; } *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG MNG_C_SPECIALFUNC (mng_special_pplt) { return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG MNG_C_SPECIALFUNC (mng_special_ijng) { #ifdef MNG_SUPPORT_DISPLAY mng_retcode iRetcode = mng_create_ani_ijng (pData); if (!iRetcode) /* process it */ iRetcode = mng_process_display_ijng (pData); return iRetcode; #else return MNG_NOERROR; /* done */ #endif /* MNG_SUPPORT_DISPLAY */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG MNG_F_SPECIALFUNC (mng_drop_entries) { mng_dropp pDROP = (mng_dropp)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; mng_uint32 iX; mng_uint32p pEntry; /* check length */ if ((iRawlen < 4) || ((iRawlen % 4) != 0)) MNG_ERROR (pData, MNG_INVALIDLENGTH); MNG_ALLOC (pData, pEntry, iRawlen); pDROP->iCount = iRawlen / 4; pDROP->pChunknames = (mng_ptr)pEntry; for (iX = pDROP->iCount; iX > 0; iX--) { *pEntry++ = mng_get_uint32 (pRawdata); pRawdata += 4; } *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG MNG_C_SPECIALFUNC (mng_special_drop) { #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK MNG_C_SPECIALFUNC (mng_special_dbyk) { #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR MNG_F_SPECIALFUNC (mng_ordr_entries) { mng_ordrp pORDR = (mng_ordrp)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; mng_uint32 iX; mng_ordr_entryp pEntry; /* check length */ if ((iRawlen < 5) || ((iRawlen % 5) != 0)) MNG_ERROR (pData, MNG_INVALIDLENGTH); MNG_ALLOC (pData, pEntry, iRawlen); pORDR->iCount = iRawlen / 5; pORDR->pEntries = (mng_ptr)pEntry; for (iX = pORDR->iCount; iX > 0; iX--) { pEntry->iChunkname = mng_get_uint32 (pRawdata); pEntry->iOrdertype = *(pRawdata+4); pEntry++; pRawdata += 5; } *piRawlen = 0; return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR MNG_C_SPECIALFUNC (mng_special_ordr) { #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MAGN MNG_F_SPECIALFUNC (mng_debunk_magn) { mng_magnp pMAGN = (mng_magnp)pChunk; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; mng_bool bFaulty; /* check length */ if (iRawlen > 20) MNG_ERROR (pData, MNG_INVALIDLENGTH); /* following is an ugly hack to allow faulty layout caused by previous versions of libmng and MNGeye, which wrote MAGN with a 16-bit MethodX/MethodY (as opposed to the proper 8-bit as defined in the spec!) */ if ((iRawlen == 6) || (iRawlen == 8) || (iRawlen == 10) || (iRawlen == 12) || (iRawlen == 14) || (iRawlen == 16) || (iRawlen == 20)) bFaulty = MNG_TRUE; /* these lengths are all wrong */ else /* length 18 can be right or wrong !!! */ if ((iRawlen == 18) && (mng_get_uint16 (pRawdata+4) <= 5) && (mng_get_uint16 (pRawdata+6) < 256) && (mng_get_uint16 (pRawdata+8) < 256) && (mng_get_uint16 (pRawdata+10) < 256) && (mng_get_uint16 (pRawdata+12) < 256) && (mng_get_uint16 (pRawdata+14) < 256) && (mng_get_uint16 (pRawdata+16) < 256)) bFaulty = MNG_TRUE; /* this is very likely the wrong layout */ else bFaulty = MNG_FALSE; /* all other cases are handled as right */ if (bFaulty) /* wrong layout ? */ { if (iRawlen > 0) /* get the fields */ pMAGN->iFirstid = mng_get_uint16 (pRawdata); else pMAGN->iFirstid = 0; if (iRawlen > 2) pMAGN->iLastid = mng_get_uint16 (pRawdata+2); else pMAGN->iLastid = pMAGN->iFirstid; if (iRawlen > 4) pMAGN->iMethodX = (mng_uint8)(mng_get_uint16 (pRawdata+4)); else pMAGN->iMethodX = 0; if (iRawlen > 6) pMAGN->iMX = mng_get_uint16 (pRawdata+6); else pMAGN->iMX = 1; if (iRawlen > 8) pMAGN->iMY = mng_get_uint16 (pRawdata+8); else pMAGN->iMY = pMAGN->iMX; if (iRawlen > 10) pMAGN->iML = mng_get_uint16 (pRawdata+10); else pMAGN->iML = pMAGN->iMX; if (iRawlen > 12) pMAGN->iMR = mng_get_uint16 (pRawdata+12); else pMAGN->iMR = pMAGN->iMX; if (iRawlen > 14) pMAGN->iMT = mng_get_uint16 (pRawdata+14); else pMAGN->iMT = pMAGN->iMY; if (iRawlen > 16) pMAGN->iMB = mng_get_uint16 (pRawdata+16); else pMAGN->iMB = pMAGN->iMY; if (iRawlen > 18) pMAGN->iMethodY = (mng_uint8)(mng_get_uint16 (pRawdata+18)); else pMAGN->iMethodY = pMAGN->iMethodX; } else /* proper layout !!!! */ { if (iRawlen > 0) /* get the fields */ pMAGN->iFirstid = mng_get_uint16 (pRawdata); else pMAGN->iFirstid = 0; if (iRawlen > 2) pMAGN->iLastid = mng_get_uint16 (pRawdata+2); else pMAGN->iLastid = pMAGN->iFirstid; if (iRawlen > 4) pMAGN->iMethodX = *(pRawdata+4); else pMAGN->iMethodX = 0; if (iRawlen > 5) pMAGN->iMX = mng_get_uint16 (pRawdata+5); else pMAGN->iMX = 1; if (iRawlen > 7) pMAGN->iMY = mng_get_uint16 (pRawdata+7); else pMAGN->iMY = pMAGN->iMX; if (iRawlen > 9) pMAGN->iML = mng_get_uint16 (pRawdata+9); else pMAGN->iML = pMAGN->iMX; if (iRawlen > 11) pMAGN->iMR = mng_get_uint16 (pRawdata+11); else pMAGN->iMR = pMAGN->iMX; if (iRawlen > 13) pMAGN->iMT = mng_get_uint16 (pRawdata+13); else pMAGN->iMT = pMAGN->iMY; if (iRawlen > 15) pMAGN->iMB = mng_get_uint16 (pRawdata+15); else pMAGN->iMB = pMAGN->iMY; if (iRawlen > 17) pMAGN->iMethodY = *(pRawdata+17); else pMAGN->iMethodY = pMAGN->iMethodX; } /* check field validity */ if ((pMAGN->iMethodX > 5) || (pMAGN->iMethodY > 5)) MNG_ERROR (pData, MNG_INVALIDMETHOD); *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MAGN MNG_C_SPECIALFUNC (mng_special_magn) { #ifdef MNG_SUPPORT_DISPLAY return mng_create_ani_magn (pData, pChunk); #else return MNG_NOERROR; #endif /* MNG_SUPPORT_DISPLAY */ } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_evNT MNG_F_SPECIALFUNC (mng_evnt_entries) { mng_evntp pEVNT = (mng_evntp)pChunk; mng_uint32 iRawlen; mng_uint8p pRawdata; #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_SUPPORT_DYNAMICMNG) mng_retcode iRetcode; #endif mng_uint8p pNull; mng_uint8 iEventtype; mng_uint8 iMasktype; mng_int32 iLeft; mng_int32 iRight; mng_int32 iTop; mng_int32 iBottom; mng_uint16 iObjectid; mng_uint8 iIndex; mng_uint32 iNamesize; mng_uint32 iCount = 0; mng_evnt_entryp pEntry = MNG_NULL; mng_uint32 iX; for (iX = 0; iX < 2; iX++) { iRawlen = *piRawlen; pRawdata = *ppRawdata; if (iX) /* second run ? */ { MNG_ALLOC (pData, pEntry, (iCount * sizeof (mng_evnt_entry))); pEVNT->iCount = iCount; pEVNT->pEntries = pEntry; } while (iRawlen) /* anything left ? */ { if (iRawlen < 2) /* must have at least 2 bytes ! */ MNG_ERROR (pData, MNG_INVALIDLENGTH); iEventtype = *pRawdata; /* eventtype */ if (iEventtype > 5) MNG_ERROR (pData, MNG_INVALIDEVENT); pRawdata++; iMasktype = *pRawdata; /* masktype */ if (iMasktype > 5) MNG_ERROR (pData, MNG_INVALIDMASK); pRawdata++; iRawlen -= 2; iLeft = 0; iRight = 0; iTop = 0; iBottom = 0; iObjectid = 0; iIndex = 0; switch (iMasktype) { case 1 : { if (iRawlen > 16) { iLeft = mng_get_int32 (pRawdata); iRight = mng_get_int32 (pRawdata+4); iTop = mng_get_int32 (pRawdata+8); iBottom = mng_get_int32 (pRawdata+12); pRawdata += 16; iRawlen -= 16; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 2 : { if (iRawlen > 2) { iObjectid = mng_get_uint16 (pRawdata); pRawdata += 2; iRawlen -= 2; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 3 : { if (iRawlen > 3) { iObjectid = mng_get_uint16 (pRawdata); iIndex = *(pRawdata+2); pRawdata += 3; iRawlen -= 3; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 4 : { if (iRawlen > 18) { iLeft = mng_get_int32 (pRawdata); iRight = mng_get_int32 (pRawdata+4); iTop = mng_get_int32 (pRawdata+8); iBottom = mng_get_int32 (pRawdata+12); iObjectid = mng_get_uint16 (pRawdata+16); pRawdata += 18; iRawlen -= 18; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 5 : { if (iRawlen > 19) { iLeft = mng_get_int32 (pRawdata); iRight = mng_get_int32 (pRawdata+4); iTop = mng_get_int32 (pRawdata+8); iBottom = mng_get_int32 (pRawdata+12); iObjectid = mng_get_uint16 (pRawdata+16); iIndex = *(pRawdata+18); pRawdata += 19; iRawlen -= 19; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } } pNull = pRawdata; /* get the name length */ while (*pNull) pNull++; if ((pNull - pRawdata) > (mng_int32)iRawlen) { iNamesize = iRawlen; /* no null found; so end of evNT */ iRawlen = 0; } else { iNamesize = pNull - pRawdata; /* should be another entry */ iRawlen = iRawlen - iNamesize - 1; if (!iRawlen) /* must not end with a null ! */ MNG_ERROR (pData, MNG_ENDWITHNULL); } if (!iX) { iCount++; } else { pEntry->iEventtype = iEventtype; pEntry->iMasktype = iMasktype; pEntry->iLeft = iLeft; pEntry->iRight = iRight; pEntry->iTop = iTop; pEntry->iBottom = iBottom; pEntry->iObjectid = iObjectid; pEntry->iIndex = iIndex; pEntry->iSegmentnamesize = iNamesize; if (iNamesize) { MNG_ALLOC (pData, pEntry->zSegmentname, iNamesize+1); MNG_COPY (pEntry->zSegmentname, pRawdata, iNamesize); } #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_SUPPORT_DYNAMICMNG) iRetcode = mng_create_event (pData, (mng_ptr)pEntry); if (iRetcode) /* on error bail out */ return iRetcode; #endif pEntry++; } pRawdata = pRawdata + iNamesize + 1; } } *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_evNT MNG_C_SPECIALFUNC (mng_special_evnt) { return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL MNG_C_SPECIALFUNC (mng_special_mpng) { if ((pData->eImagetype != mng_it_png) && (pData->eImagetype != mng_it_jng)) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); #ifdef MNG_SUPPORT_DISPLAY return mng_create_mpng_obj (pData, pChunk); #else return MNG_NOERROR; #endif } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL MNG_C_SPECIALFUNC (mng_special_ahdr) { #ifdef MNG_SUPPORT_DISPLAY return mng_create_ang_obj (pData, pChunk); #else return MNG_NOERROR; #endif } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL MNG_F_SPECIALFUNC (mng_adat_tiles) { if ((pData->eImagetype != mng_it_ang) || (!pData->pANG)) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); { mng_adatp pADAT = (mng_adatp)pChunk; mng_ang_objp pANG = (mng_ang_objp)pData->pANG; mng_uint32 iRawlen = *piRawlen; mng_uint8p pRawdata = *ppRawdata; mng_retcode iRetcode; mng_uint8p pBuf; mng_uint32 iBufsize; mng_uint32 iRealsize; mng_uint8p pTemp; mng_uint8p pTemp2; mng_int32 iX; mng_int32 iSize; #ifdef MNG_SUPPORT_DISPLAY mng_imagep pImage; mng_int32 iTemplen; mng_uint8p pSwap; mng_processobject pProcess; mng_uint32 iSavedatawidth; mng_uint32 iSavedataheight; mng_fptr fSaveinitrowproc; mng_fptr fSavestorerow; mng_fptr fSaveprocessrow; mng_fptr fSavedifferrow; mng_imagep fSavestoreobj; mng_imagedatap fSavestorebuf; #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT png_imgtype eSavepngimgtype; #endif mng_uint8 iSaveinterlace; mng_int8 iSavepass; mng_int32 iSaverow; mng_int32 iSaverowinc; mng_int32 iSavecol; mng_int32 iSavecolinc; mng_int32 iSaverowsamples; mng_int32 iSavesamplemul; mng_int32 iSavesampleofs; mng_int32 iSavesamplediv; mng_int32 iSaverowsize; mng_int32 iSaverowmax; mng_int32 iSavefilterofs; mng_int32 iSavepixelofs; mng_uint32 iSavelevel0; mng_uint32 iSavelevel1; mng_uint32 iSavelevel2; mng_uint32 iSavelevel3; mng_uint8p pSaveworkrow; mng_uint8p pSaveprevrow; mng_uint8p pSaverGBArow; mng_bool bSaveisRGBA16; mng_bool bSaveisOpaque; mng_int32 iSavefilterbpp; mng_int32 iSavedestl; mng_int32 iSavedestt; mng_int32 iSavedestr; mng_int32 iSavedestb; mng_int32 iSavesourcel; mng_int32 iSavesourcet; mng_int32 iSavesourcer; mng_int32 iSavesourceb; #endif /* MNG_SUPPORT_DISPLAY */ iRetcode = mng_inflate_buffer (pData, pRawdata, iRawlen, &pBuf, &iBufsize, &iRealsize); if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffer */ MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } /* get buffer for tile info in ADAT chunk */ pADAT->iTilessize = pANG->iNumframes * sizeof(mng_adat_tile); MNG_ALLOCX (pData, pADAT->pTiles, pADAT->iTilessize); if (!pADAT->pTiles) { pADAT->iTilessize = 0; MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, MNG_OUTOFMEMORY); } pTemp = pBuf; pTemp2 = (mng_uint8p)pADAT->pTiles; if (!pANG->iStillused) iSize = 12; else iSize = 13; for (iX = 0; iX < pANG->iNumframes; iX++) { MNG_COPY (pTemp2, pTemp, iSize); pTemp += iSize; pTemp2 += sizeof(mng_adat_tile); } #ifdef MNG_SUPPORT_DISPLAY /* get buffer for tile info in ANG object */ pANG->iTilessize = pADAT->iTilessize; MNG_ALLOCX (pData, pANG->pTiles, pANG->iTilessize); if (!pANG->pTiles) { pANG->iTilessize = 0; MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, MNG_OUTOFMEMORY); } /* copy it from the ADAT object */ MNG_COPY (pANG->pTiles, pADAT->pTiles, pANG->iTilessize); /* save IDAT work-parms */ fSaveinitrowproc = pData->fInitrowproc; fSavestorerow = pData->fDisplayrow; fSaveprocessrow = pData->fProcessrow; fSavedifferrow = pData->fDifferrow; fSavestoreobj = pData->pStoreobj; fSavestorebuf = pData->pStorebuf; #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT eSavepngimgtype = pData->ePng_imgtype; #endif iSavedatawidth = pData->iDatawidth; iSavedataheight = pData->iDataheight; iSaveinterlace = pData->iInterlace; iSavepass = pData->iPass; iSaverow = pData->iRow; iSaverowinc = pData->iRowinc; iSavecol = pData->iCol; iSavecolinc = pData->iColinc; iSaverowsamples = pData->iRowsamples; iSavesamplemul = pData->iSamplemul; iSavesampleofs = pData->iSampleofs; iSavesamplediv = pData->iSamplediv; iSaverowsize = pData->iRowsize; iSaverowmax = pData->iRowmax; iSavefilterofs = pData->iFilterofs; iSavepixelofs = pData->iPixelofs; iSavelevel0 = pData->iLevel0; iSavelevel1 = pData->iLevel1; iSavelevel2 = pData->iLevel2; iSavelevel3 = pData->iLevel3; pSaveworkrow = pData->pWorkrow; pSaveprevrow = pData->pPrevrow; pSaverGBArow = pData->pRGBArow; bSaveisRGBA16 = pData->bIsRGBA16; bSaveisOpaque = pData->bIsOpaque; iSavefilterbpp = pData->iFilterbpp; iSavedestl = pData->iDestl; iSavedestt = pData->iDestt; iSavedestr = pData->iDestr; iSavedestb = pData->iDestb; iSavesourcel = pData->iSourcel; iSavesourcet = pData->iSourcet; iSavesourcer = pData->iSourcer; iSavesourceb = pData->iSourceb; pData->iDatawidth = pANG->iTilewidth; pData->iDataheight = pANG->iTileheight; pData->iDestl = 0; pData->iDestt = 0; pData->iDestr = pANG->iTilewidth; pData->iDestb = pANG->iTileheight; pData->iSourcel = 0; pData->iSourcet = 0; pData->iSourcer = pANG->iTilewidth; pData->iSourceb = pANG->iTileheight; pData->fInitrowproc = MNG_NULL; pData->fStorerow = MNG_NULL; pData->fProcessrow = MNG_NULL; pData->fDifferrow = MNG_NULL; /* clone image object to store the pixel-data from object 0 */ iRetcode = mng_clone_imageobject (pData, 1, MNG_FALSE, MNG_FALSE, MNG_FALSE, MNG_FALSE, 0, 0, 0, pData->pObjzero, &pImage); if (iRetcode) /* on error, drop temp buffer and bail */ { MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } /* make sure we got the right dimensions and interlacing */ iRetcode = mng_reset_object_details (pData, pImage, pANG->iTilewidth, pANG->iTileheight, pImage->pImgbuf->iBitdepth, pImage->pImgbuf->iColortype, pImage->pImgbuf->iCompression, pImage->pImgbuf->iFilter, pANG->iInterlace, MNG_FALSE); if (iRetcode) /* on error, drop temp buffer and bail */ { MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } pData->pStoreobj = pImage; #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT pData->fInitrowproc = (mng_fptr)mng_init_rowproc; pData->ePng_imgtype = mng_png_imgtype(pData->iColortype,pData->iBitdepth); #else switch (pData->iColortype) /* determine row initialization routine */ { case 0 : { /* gray */ switch (pData->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g1_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g1_i; break; } case 2 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g2_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g2_i; break; } case 4 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g4_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g4_i; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_g16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_g16_i; break; } #endif } break; } case 2 : { /* rgb */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgb8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgb8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgb16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgb16_i; break; } #endif } break; } case 3 : { /* indexed */ switch (pData->iBitdepth) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case 1 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx1_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx1_i; break; } case 2 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx2_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx2_i; break; } case 4 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx4_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx4_i; break; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_idx8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_idx8_i; break; } } break; } case 4 : { /* gray+alpha */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_ga8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_ga8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_ga16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_ga16_i; break; } #endif } break; } case 6 : { /* rgb+alpha */ switch (pData->iBitdepth) { case 8 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgba8_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgba8_i; break; } #ifndef MNG_NO_16BIT_SUPPORT case 16 : { if (!pData->iInterlace) pData->fInitrowproc = (mng_fptr)mng_init_rgba16_ni; else pData->fInitrowproc = (mng_fptr)mng_init_rgba16_i; break; } #endif } break; } } #endif /* MNG_OPTIMIZE_FOOTPRINT_INIT */ pData->iFilterofs = 0; /* determine filter characteristics */ pData->iLevel0 = 0; /* default levels */ pData->iLevel1 = 0; pData->iLevel2 = 0; pData->iLevel3 = 0; #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) { switch (pData->iColortype) { case 0 : { if (pData->iBitdepth <= 8) pData->iFilterofs = 1; else pData->iFilterofs = 2; break; } case 2 : { if (pData->iBitdepth <= 8) pData->iFilterofs = 3; else pData->iFilterofs = 6; break; } case 3 : { pData->iFilterofs = 1; break; } case 4 : { if (pData->iBitdepth <= 8) pData->iFilterofs = 2; else pData->iFilterofs = 4; break; } case 6 : { if (pData->iBitdepth <= 8) pData->iFilterofs = 4; else pData->iFilterofs = 8; break; } } } #endif #ifdef FILTER193 /* no adaptive filtering ? */ if (pData->iFilter == MNG_FILTER_NOFILTER) pData->iPixelofs = pData->iFilterofs; else #endif pData->iPixelofs = pData->iFilterofs + 1; if (pData->fInitrowproc) /* need to initialize row processing? */ { iRetcode = ((mng_initrowproc)pData->fInitrowproc) (pData); if (iRetcode) { MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } } /* calculate remainder of buffer */ pTemp = pBuf + (mng_int32)(pANG->iNumframes * iSize); iTemplen = iRealsize - (mng_int32)(pANG->iNumframes * iSize); do { if (iTemplen > pData->iRowmax) /* get a pixel-row from the temp buffer */ { MNG_COPY (pData->pWorkrow, pTemp, pData->iRowmax); } else { MNG_COPY (pData->pWorkrow, pTemp, iTemplen); } { /* image not completed yet ? */ if (pData->iRow < (mng_int32)pData->iDataheight) { #ifdef MNG_NO_1_2_4BIT_SUPPORT if (pData->iPNGdepth == 1) { /* Inflate Workrow to 8-bit */ mng_int32 iX; mng_uint8p pSrc = pData->pWorkrow+1; mng_uint8p pDest = pSrc + pData->iRowsize - (pData->iRowsize+7)/8; for (iX = ((pData->iRowsize+7)/8) ; iX > 0 ; iX--) *pDest++ = *pSrc++; pDest = pData->pWorkrow+1; pSrc = pDest + pData->iRowsize - (pData->iRowsize+7)/8; for (iX = pData->iRowsize; ;) { *pDest++ = (((*pSrc)>>7)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>6)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>5)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>4)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>3)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>2)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>1)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc) )&1); if (iX-- <= 0) break; pSrc++; } } else if (pData->iPNGdepth == 2) { /* Inflate Workrow to 8-bit */ mng_int32 iX; mng_uint8p pSrc = pData->pWorkrow+1; mng_uint8p pDest = pSrc + pData->iRowsize - (2*pData->iRowsize+7)/8; for (iX = ((2*pData->iRowsize+7)/8) ; iX > 0 ; iX--) *pDest++ = *pSrc++; pDest = pData->pWorkrow+1; pSrc = pDest + pData->iRowsize - (2*pData->iRowsize+7)/8; for (iX = pData->iRowsize; ;) { *pDest++ = (((*pSrc)>>6)&3); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>4)&3); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>2)&3); if (iX-- <= 0) break; *pDest++ = (((*pSrc) )&3); if (iX-- <= 0) break; pSrc++; } } else if (pData->iPNGdepth == 4) { /* Inflate Workrow to 8-bit */ mng_int32 iX; mng_uint8p pSrc = pData->pWorkrow+1; mng_uint8p pDest = pSrc + pData->iRowsize - (4*pData->iRowsize+7)/8; for (iX = ((4*pData->iRowsize+7)/8) ; iX > 0 ; iX--) *pDest++ = *pSrc++; pDest = pData->pWorkrow+1; pSrc = pDest + pData->iRowsize - (4*pData->iRowsize+7)/8; for (iX = pData->iRowsize; ;) { *pDest++ = (((*pSrc)>>4)&0x0f); if (iX-- <= 0) break; *pDest++ = (((*pSrc) )&0x0f); if (iX-- <= 0) break; pSrc++; } } if (pData->iPNGdepth < 8 && pData->iColortype == 0) { /* Expand samples to 8-bit by LBR */ mng_int32 iX; mng_uint8p pSrc = pData->pWorkrow+1; mng_uint8 multiplier[]={0,255,85,0,17,0,0,0,1}; for (iX = pData->iRowsize; iX > 0; iX--) *pSrc++ *= multiplier[pData->iPNGdepth]; } #endif #ifdef MNG_NO_16BIT_SUPPORT if (pData->iPNGdepth > 8) { /* Reduce Workrow to 8-bit */ mng_int32 iX; mng_uint8p pSrc = pData->pWorkrow+1; mng_uint8p pDest = pSrc; for (iX = pData->iRowsize; iX > 0; iX--) { *pDest = *pSrc; pDest++; pSrc+=2; } } #endif #ifdef FILTER192 /* has leveling info ? */ if (pData->iFilterofs == MNG_FILTER_DIFFERING) iRetcode = init_rowdiffering (pData); else #endif iRetcode = MNG_NOERROR; /* filter the row if necessary */ if ((!iRetcode) && (pData->iFilterofs < pData->iPixelofs ) && (*(pData->pWorkrow + pData->iFilterofs)) ) iRetcode = mng_filter_a_row (pData); /* additional leveling/differing ? */ if ((!iRetcode) && (pData->fDifferrow)) { iRetcode = ((mng_differrow)pData->fDifferrow) (pData); pSwap = pData->pWorkrow; pData->pWorkrow = pData->pPrevrow; pData->pPrevrow = pSwap; /* make sure we're processing the right data */ } if (!iRetcode) { { /* process this row */ if ((!iRetcode) && (pData->fProcessrow)) iRetcode = ((mng_processrow)pData->fProcessrow) (pData); /* store in object ? */ if ((!iRetcode) && (pData->fStorerow)) iRetcode = ((mng_storerow)pData->fStorerow) (pData); } } if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, iRetcode); } if (!pData->fDifferrow) /* swap row-pointers */ { pSwap = pData->pWorkrow; pData->pWorkrow = pData->pPrevrow; pData->pPrevrow = pSwap; /* so prev points to the processed row! */ } /* adjust variables for next row */ iRetcode = mng_next_row (pData); if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, iRetcode); } } } pTemp += pData->iRowmax; iTemplen -= pData->iRowmax; } /* until some error or EOI or all pixels received */ while ( (iTemplen > 0) && ( (pData->iRow < (mng_int32)pData->iDataheight) || ( (pData->iPass >= 0) && (pData->iPass < 7) ) ) ); mng_cleanup_rowproc (pData); /* cleanup row processing buffers !! */ /* restore saved work-parms */ pData->iDatawidth = iSavedatawidth; pData->iDataheight = iSavedataheight; pData->fInitrowproc = fSaveinitrowproc; pData->fDisplayrow = fSavestorerow; pData->fProcessrow = fSaveprocessrow; pData->fDifferrow = fSavedifferrow; pData->pStoreobj = fSavestoreobj; pData->pStorebuf = fSavestorebuf; #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT pData->ePng_imgtype = eSavepngimgtype; #endif pData->iInterlace = iSaveinterlace; pData->iPass = iSavepass; pData->iRow = iSaverow; pData->iRowinc = iSaverowinc; pData->iCol = iSavecol; pData->iColinc = iSavecolinc; pData->iRowsamples = iSaverowsamples; pData->iSamplemul = iSavesamplemul; pData->iSampleofs = iSavesampleofs; pData->iSamplediv = iSavesamplediv; pData->iRowsize = iSaverowsize; pData->iRowmax = iSaverowmax; pData->iFilterofs = iSavefilterofs; pData->iPixelofs = iSavepixelofs; pData->iLevel0 = iSavelevel0; pData->iLevel1 = iSavelevel1; pData->iLevel2 = iSavelevel2; pData->iLevel3 = iSavelevel3; pData->pWorkrow = pSaveworkrow; pData->pPrevrow = pSaveprevrow; pData->pRGBArow = pSaverGBArow; pData->bIsRGBA16 = bSaveisRGBA16; pData->bIsOpaque = bSaveisOpaque; pData->iFilterbpp = iSavefilterbpp; pData->iDestl = iSavedestl; pData->iDestt = iSavedestt; pData->iDestr = iSavedestr; pData->iDestb = iSavedestb; pData->iSourcel = iSavesourcel; pData->iSourcet = iSavesourcet; pData->iSourcer = iSavesourcer; pData->iSourceb = iSavesourceb; /* create the animation directives ! */ pProcess = (mng_processobject)pANG->sHeader.fProcess; iRetcode = pProcess (pData, (mng_objectp)pData->pANG); if (iRetcode) return iRetcode; #endif /* MNG_SUPPORT_DISPLAY */ MNG_FREE (pData, pBuf, iBufsize); /* always free the temp buffer ! */ } *piRawlen = 0; return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL MNG_C_SPECIALFUNC (mng_special_adat) { return MNG_NOERROR; } #endif /* ************************************************************************** */ MNG_C_SPECIALFUNC (mng_special_unknown) { /* critical chunk ? */ if ((((mng_uint32)pData->iChunkname & 0x20000000) == 0) #ifdef MNG_SKIPCHUNK_SAVE && (pData->iChunkname != MNG_UINT_SAVE) #endif #ifdef MNG_SKIPCHUNK_SEEK && (pData->iChunkname != MNG_UINT_SEEK) #endif #ifdef MNG_SKIPCHUNK_DBYK && (pData->iChunkname != MNG_UINT_DBYK) #endif #ifdef MNG_SKIPCHUNK_ORDR && (pData->iChunkname != MNG_UINT_ORDR) #endif ) MNG_ERROR (pData, MNG_UNKNOWNCRITICAL); if (pData->fProcessunknown) /* let the app handle it ? */ { mng_bool bOke = pData->fProcessunknown ((mng_handle)pData, pData->iChunkname, ((mng_unknown_chunkp)pChunk)->iDatasize, ((mng_unknown_chunkp)pChunk)->pData); if (!bOke) MNG_ERROR (pData, MNG_APPMISCERROR); } return MNG_NOERROR; /* done */ } /* ************************************************************************** */ #endif /* MNG_INCLUDE_READ_PROCS || MNG_INCLUDE_WRITE_PROCS */ #endif /* MNG_OPTIMIZE_CHUNKREADER */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_filter.h0000644000000000000000000000754612005307152014456 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_filter.h copyright (c) 2000-2002 G.Juyn * */ /* * version : 1.0.5 * */ /* * * */ /* * purpose : Filtering routines (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the filtering routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 09/07/2000 - G.Juyn * */ /* * - added support for new filter_types * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_filter_h_ #define _libmng_filter_h_ /* ************************************************************************** */ mng_retcode mng_filter_a_row (mng_datap pData); /* ************************************************************************** */ #ifdef FILTER192 mng_retcode mng_init_rowdiffering (mng_datap pData); mng_retcode mng_differ_g1 (mng_datap pData); mng_retcode mng_differ_g2 (mng_datap pData); mng_retcode mng_differ_g4 (mng_datap pData); mng_retcode mng_differ_g8 (mng_datap pData); mng_retcode mng_differ_g16 (mng_datap pData); mng_retcode mng_differ_rgb8 (mng_datap pData); mng_retcode mng_differ_rgb16 (mng_datap pData); mng_retcode mng_differ_idx1 (mng_datap pData); mng_retcode mng_differ_idx2 (mng_datap pData); mng_retcode mng_differ_idx4 (mng_datap pData); mng_retcode mng_differ_idx8 (mng_datap pData); mng_retcode mng_differ_ga8 (mng_datap pData); mng_retcode mng_differ_ga16 (mng_datap pData); mng_retcode mng_differ_rgba8 (mng_datap pData); mng_retcode mng_differ_rgba16 (mng_datap pData); #endif /* ************************************************************************** */ #endif /* _libmng_filter_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_chunk_io.c0000644000000000000000000124766312005307152014772 0ustar rootroot#include "config.h" /** ************************************************************************* */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_chunk_io.c copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Chunk I/O routines (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of chunk input/output routines * */ /* * * */ /* * changes : 0.5.1 - 05/01/2000 - G.Juyn * */ /* * - cleaned up left-over teststuff in the BACK chunk routine * */ /* * 0.5.1 - 05/04/2000 - G.Juyn * */ /* * - changed CRC initialization to use dynamic structure * */ /* * (wasn't thread-safe the old way !) * */ /* * 0.5.1 - 05/06/2000 - G.Juyn * */ /* * - filled in many missing sequence&length checks * */ /* * - filled in many missing chunk-store snippets * */ /* * 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - added checks for running animations * */ /* * - filled some write routines * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/10/2000 - G.Juyn * */ /* * - filled some more write routines * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - filled remaining write routines * */ /* * - fixed read_pplt with regard to deltatype * */ /* * - added callback error-reporting support * */ /* * - added pre-draft48 support (short MHDR, frame_mode, LOOP) * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * - fixed chunk-storage bit in several routines * */ /* * 0.5.1 - 05/13/2000 - G.Juyn * */ /* * - added eMNGma hack (will be removed in 1.0.0 !!!) * */ /* * - added TERM animation object pointer (easier reference) * */ /* * - supplemented the SAVE & SEEK display processing * */ /* * * */ /* * 0.5.2 - 05/18/2000 - G.Juyn * */ /* * - B004 - fixed problem with MNG_SUPPORT_WRITE not defined * */ /* * also for MNG_SUPPORT_WRITE without MNG_INCLUDE_JNG * */ /* * 0.5.2 - 05/19/2000 - G.Juyn * */ /* * - cleaned up some code regarding mixed support * */ /* * 0.5.2 - 05/20/2000 - G.Juyn * */ /* * - implemented JNG support * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - added support for global color-chunks in animation * */ /* * - added support for global PLTE,tRNS,bKGD in animation * */ /* * - added support for SAVE & SEEK in animation * */ /* * 0.5.2 - 05/29/2000 - G.Juyn * */ /* * - changed ani_create calls not returning object pointer * */ /* * - create ani objects always (not just inside TERM/LOOP) * */ /* * 0.5.2 - 05/30/2000 - G.Juyn * */ /* * - added support for delta-image processing * */ /* * 0.5.2 - 05/31/2000 - G.Juyn * */ /* * - fixed up punctuation (contributed by Tim Rowley) * */ /* * 0.5.2 - 06/02/2000 - G.Juyn * */ /* * - changed SWAP_ENDIAN to BIGENDIAN_SUPPORTED * */ /* * 0.5.2 - 06/03/2000 - G.Juyn * */ /* * - fixed makeup for Linux gcc compile * */ /* * * */ /* * 0.5.3 - 06/12/2000 - G.Juyn * */ /* * - added processing of color-info on delta-image * */ /* * 0.5.3 - 06/13/2000 - G.Juyn * */ /* * - fixed handling of empty SAVE chunk * */ /* * 0.5.3 - 06/17/2000 - G.Juyn * */ /* * - changed to support delta-images * */ /* * - added extra checks for delta-images * */ /* * 0.5.3 - 06/20/2000 - G.Juyn * */ /* * - fixed possible trouble if IEND display-process got * */ /* * broken up * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - added processing of PLTE & tRNS for delta-images * */ /* * - added administration of imagelevel parameter * */ /* * 0.5.3 - 06/22/2000 - G.Juyn * */ /* * - implemented support for PPLT chunk * */ /* * 0.5.3 - 06/26/2000 - G.Juyn * */ /* * - added precaution against faulty iCCP chunks from PS * */ /* * 0.5.3 - 06/29/2000 - G.Juyn * */ /* * - fixed some 64-bit warnings * */ /* * * */ /* * 0.9.1 - 07/14/2000 - G.Juyn * */ /* * - changed pre-draft48 frame_mode=3 to frame_mode=1 * */ /* * 0.9.1 - 07/16/2000 - G.Juyn * */ /* * - fixed storage of images during mng_read() * */ /* * - fixed support for mng_display() after mng_read() * */ /* * 0.9.1 - 07/19/2000 - G.Juyn * */ /* * - fixed several chunk-writing routines * */ /* * 0.9.1 - 07/24/2000 - G.Juyn * */ /* * - fixed reading of still-images * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/07/2000 - G.Juyn * */ /* * - B111300 - fixup for improved portability * */ /* * 0.9.3 - 08/08/2000 - G.Juyn * */ /* * - fixed compiler-warnings from Mozilla * */ /* * 0.9.3 - 08/09/2000 - G.Juyn * */ /* * - added check for simplicity-bits in MHDR * */ /* * 0.9.3 - 08/12/2000 - G.Juyn * */ /* * - fixed check for simplicity-bits in MHDR (JNG) * */ /* * 0.9.3 - 08/12/2000 - G.Juyn * */ /* * - added workaround for faulty PhotoShop iCCP chunk * */ /* * 0.9.3 - 08/22/2000 - G.Juyn * */ /* * - fixed write-code for zTXt & iTXt * */ /* * - fixed read-code for iTXt * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 09/07/2000 - G.Juyn * */ /* * - added support for new filter_types * */ /* * 0.9.3 - 09/10/2000 - G.Juyn * */ /* * - fixed DEFI behavior * */ /* * 0.9.3 - 10/02/2000 - G.Juyn * */ /* * - fixed simplicity-check in compliance with draft 81/0.98a * */ /* * 0.9.3 - 10/10/2000 - G.Juyn * */ /* * - added support for alpha-depth prediction * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - added support for nEED * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added support for JDAA * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - fixed support for MAGN * */ /* * - implemented nEED "xxxx" (where "xxxx" is a chunkid) * */ /* * - added callback to process non-critical unknown chunks * */ /* * - fixed support for bKGD * */ /* * 0.9.3 - 10/23/2000 - G.Juyn * */ /* * - fixed bug in empty PLTE handling * */ /* * * */ /* * 0.9.4 - 11/20/2000 - G.Juyn * */ /* * - changed IHDR filter_method check for PNGs * */ /* * 0.9.4 - 1/18/2001 - G.Juyn * */ /* * - added errorchecking for MAGN methods * */ /* * - removed test filter-methods 1 & 65 * */ /* * * */ /* * 0.9.5 - 1/25/2001 - G.Juyn * */ /* * - fixed some small compiler warnings (thanks Nikki) * */ /* * * */ /* * 1.0.2 - 05/05/2000 - G.Juyn * */ /* * - B421427 - writes wrong format in bKGD and tRNS * */ /* * 1.0.2 - 06/20/2000 - G.Juyn * */ /* * - B434583 - compiler-warning if MNG_STORE_CHUNKS undefined * */ /* * * */ /* * 1.0.5 - 07/08/2002 - G.Juyn * */ /* * - B578572 - removed eMNGma hack (thanks Dimitri!) * */ /* * 1.0.5 - 08/07/2002 - G.Juyn * */ /* * - added test-option for PNG filter method 193 (=no filter) * */ /* * 1.0.5 - 08/15/2002 - G.Juyn * */ /* * - completed PROM support * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/07/2002 - G.Juyn * */ /* * - fixed reading of FRAM with just frame_mode and name * */ /* * 1.0.5 - 09/13/2002 - G.Juyn * */ /* * - fixed read/write of MAGN chunk * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * 1.0.5 - 09/15/2002 - G.Juyn * */ /* * - fixed LOOP iteration=0 special case * */ /* * 1.0.5 - 09/19/2002 - G.Juyn * */ /* * - misplaced TERM is now treated as warning * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - added support for PAST * */ /* * 1.0.5 - 10/03/2002 - G.Juyn * */ /* * - fixed chunk-storage for evNT chunk * */ /* * 1.0.5 - 10/07/2002 - G.Juyn * */ /* * - fixed DISC support * */ /* * - added another fix for misplaced TERM chunk * */ /* * 1.0.5 - 10/17/2002 - G.Juyn * */ /* * - fixed initializtion of pIds in dISC read routine * */ /* * 1.0.5 - 11/06/2002 - G.Juyn * */ /* * - added support for nEED "MNG 1.1" * */ /* * - added support for nEED "CACHEOFF" * */ /* * * */ /* * 1.0.6 - 05/25/2003 - G.R-P * */ /* * - added MNG_SKIPCHUNK_cHNK footprint optimizations * */ /* * 1.0.6 - 06/02/2003 - G.R-P * */ /* * - removed some redundant checks for iRawlen==0 * */ /* * 1.0.6 - 06/22/2003 - G.R-P * */ /* * - added MNG_NO_16BIT_SUPPORT, MNG_NO_DELTA_PNG reductions * */ /* * - optionally use zlib's crc32 function instead of * */ /* * local mng_update_crc * */ /* * 1.0.6 - 07/14/2003 - G.R-P * */ /* * - added MNG_NO_LOOP_SIGNALS_SUPPORTED conditional * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditionals around PAST chunk support * */ /* * 1.0.6 - 08/17/2003 - G.R-P * */ /* * - added conditionals around non-VLC chunk support * */ /* * * */ /* * 1.0.7 - 10/29/2003 - G.R-P * */ /* * - revised JDAA and JDAT readers to avoid compiler bug * */ /* * 1.0.7 - 01/25/2004 - J.S * */ /* * - added premultiplied alpha canvas' for RGBA, ARGB, ABGR * */ /* * 1.0.7 - 01/27/2004 - J.S * */ /* * - fixed inclusion of IJNG chunk for non-JNG use * */ /* * 1.0.7 - 02/26/2004 - G.Juyn * */ /* * - fixed bug in chunk-storage of SHOW chunk (from == to) * */ /* * * */ /* * 1.0.8 - 04/02/2004 - G.Juyn * */ /* * - added CRC existence & checking flags * */ /* * 1.0.8 - 07/07/2004 - G.R-P * */ /* * - change worst-case iAlphadepth to 1 for standalone PNGs * */ /* * * */ /* * 1.0.9 - 09/28/2004 - G.R-P * */ /* * - improved handling of cheap transparency when 16-bit * */ /* * support is disabled * */ /* * 1.0.9 - 10/04/2004 - G.Juyn * */ /* * - fixed bug in writing sBIT for indexed color * */ /* * 1.0.9 - 10/10/2004 - G.R-P. * */ /* * - added MNG_NO_1_2_4BIT_SUPPORT * */ /* * 1.0.9 - 12/05/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKINITFREE * */ /* * 1.0.9 - 12/06/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKASSIGN * */ /* * 1.0.9 - 12/07/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKREADER * */ /* * 1.0.9 - 12/11/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_DISPLAYCALLS * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * 1.0.9 - 01/17/2005 - G.Juyn * */ /* * - fixed problem with global PLTE/tRNS * */ /* * * */ /* * 1.0.10 - 02/07/2005 - G.Juyn * */ /* * - fixed display routines called twice for FULL_MNG * */ /* * support in mozlibmngconf.h * */ /* * 1.0.10 - 12/04/2005 - G.R-P. * */ /* * - #ifdef out use of mng_inflate_buffer when it is not * */ /* * available. * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * 1.0.10 - 05/02/2007 - G.Juyn * */ /* * - fixed inflate_buffer for extreme compression ratios * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_objects.h" #include "libmng_object_prc.h" #include "libmng_chunks.h" #ifdef MNG_CHECK_BAD_ICCP #include "libmng_chunk_prc.h" #endif #include "libmng_memory.h" #include "libmng_display.h" #include "libmng_zlib.h" #include "libmng_pixels.h" #include "libmng_chunk_io.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ /* * * */ /* * CRC - Cyclic Redundancy Check * */ /* * * */ /* * The code below is taken directly from the sample provided with the * */ /* * PNG specification. * */ /* * (it is only adapted to the library's internal data-definitions) * */ /* * * */ /* ************************************************************************** */ /* Make the table for a fast CRC. */ #ifndef MNG_USE_ZLIB_CRC MNG_LOCAL void make_crc_table (mng_datap pData) { mng_uint32 iC; mng_int32 iN, iK; for (iN = 0; iN < 256; iN++) { iC = (mng_uint32) iN; for (iK = 0; iK < 8; iK++) { if (iC & 1) iC = 0xedb88320U ^ (iC >> 1); else iC = iC >> 1; } pData->aCRCtable [iN] = iC; } pData->bCRCcomputed = MNG_TRUE; } #endif /* Update a running CRC with the bytes buf[0..len-1]--the CRC should be initialized to all 1's, and the transmitted value is the 1's complement of the final running CRC (see the crc() routine below). */ MNG_LOCAL mng_uint32 update_crc (mng_datap pData, mng_uint32 iCrc, mng_uint8p pBuf, mng_int32 iLen) { #ifdef MNG_USE_ZLIB_CRC return crc32 (iCrc, pBuf, iLen); #else mng_uint32 iC = iCrc; mng_int32 iN; if (!pData->bCRCcomputed) make_crc_table (pData); for (iN = 0; iN < iLen; iN++) iC = pData->aCRCtable [(iC ^ pBuf [iN]) & 0xff] ^ (iC >> 8); return iC; #endif } /* Return the CRC of the bytes buf[0..len-1]. */ mng_uint32 mng_crc (mng_datap pData, mng_uint8p pBuf, mng_int32 iLen) { #ifdef MNG_USE_ZLIB_CRC return update_crc (pData, 0, pBuf, iLen); #else return update_crc (pData, 0xffffffffU, pBuf, iLen) ^ 0xffffffffU; #endif } /* ************************************************************************** */ /* * * */ /* * Routines for swapping byte-order from and to graphic files * */ /* * (This code is adapted from the libpng package) * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_BIGENDIAN_SUPPORTED /* ************************************************************************** */ mng_uint32 mng_get_uint32 (mng_uint8p pBuf) { mng_uint32 i = ((mng_uint32)(*pBuf) << 24) + ((mng_uint32)(*(pBuf + 1)) << 16) + ((mng_uint32)(*(pBuf + 2)) << 8) + (mng_uint32)(*(pBuf + 3)); return (i); } /* ************************************************************************** */ mng_int32 mng_get_int32 (mng_uint8p pBuf) { mng_int32 i = ((mng_int32)(*pBuf) << 24) + ((mng_int32)(*(pBuf + 1)) << 16) + ((mng_int32)(*(pBuf + 2)) << 8) + (mng_int32)(*(pBuf + 3)); return (i); } /* ************************************************************************** */ mng_uint16 mng_get_uint16 (mng_uint8p pBuf) { mng_uint16 i = (mng_uint16)(((mng_uint16)(*pBuf) << 8) + (mng_uint16)(*(pBuf + 1))); return (i); } /* ************************************************************************** */ void mng_put_uint32 (mng_uint8p pBuf, mng_uint32 i) { *pBuf = (mng_uint8)((i >> 24) & 0xff); *(pBuf+1) = (mng_uint8)((i >> 16) & 0xff); *(pBuf+2) = (mng_uint8)((i >> 8) & 0xff); *(pBuf+3) = (mng_uint8)(i & 0xff); } /* ************************************************************************** */ void mng_put_int32 (mng_uint8p pBuf, mng_int32 i) { *pBuf = (mng_uint8)((i >> 24) & 0xff); *(pBuf+1) = (mng_uint8)((i >> 16) & 0xff); *(pBuf+2) = (mng_uint8)((i >> 8) & 0xff); *(pBuf+3) = (mng_uint8)(i & 0xff); } /* ************************************************************************** */ void mng_put_uint16 (mng_uint8p pBuf, mng_uint16 i) { *pBuf = (mng_uint8)((i >> 8) & 0xff); *(pBuf+1) = (mng_uint8)(i & 0xff); } /* ************************************************************************** */ #endif /* !MNG_BIGENDIAN_SUPPORTED */ /* ************************************************************************** */ /* * * */ /* * Helper routines to simplify chunk-data extraction * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_READ_PROCS /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER MNG_LOCAL mng_uint8p find_null (mng_uint8p pIn) { mng_uint8p pOut = pIn; while (*pOut) /* the read_graphic routine has made sure there's */ pOut++; /* always at least 1 zero-byte in the buffer */ return pOut; } #endif /* ************************************************************************** */ #if !defined(MNG_SKIPCHUNK_iCCP) || !defined(MNG_SKIPCHUNK_zTXt) || \ !defined(MNG_SKIPCHUNK_iTXt) || defined(MNG_INCLUDE_MPNG_PROPOSAL) || \ defined(MNG_INCLUDE_ANG_PROPOSAL) mng_retcode mng_inflate_buffer (mng_datap pData, mng_uint8p pInbuf, mng_uint32 iInsize, mng_uint8p *pOutbuf, mng_uint32 *iOutsize, mng_uint32 *iRealsize) { mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INFLATE_BUFFER, MNG_LC_START); #endif if (iInsize) /* anything to do ? */ { *iOutsize = iInsize * 3; /* estimate uncompressed size */ /* and allocate a temporary buffer */ MNG_ALLOC (pData, *pOutbuf, *iOutsize); do { mngzlib_inflateinit (pData); /* initialize zlib */ /* let zlib know where to store the output */ pData->sZlib.next_out = *pOutbuf; /* "size - 1" so we've got space for the zero-termination of a possible string */ pData->sZlib.avail_out = *iOutsize - 1; /* ok; let's inflate... */ iRetcode = mngzlib_inflatedata (pData, iInsize, pInbuf); /* determine actual output size */ *iRealsize = (mng_uint32)pData->sZlib.total_out; mngzlib_inflatefree (pData); /* zlib's done */ if (iRetcode == MNG_BUFOVERFLOW) /* not enough space ? */ { /* then get some more */ MNG_FREEX (pData, *pOutbuf, *iOutsize); *iOutsize = *iOutsize + *iOutsize; MNG_ALLOC (pData, *pOutbuf, *iOutsize); } } /* repeat if we didn't have enough space */ while ((iRetcode == MNG_BUFOVERFLOW) && (*iOutsize < 200 * iInsize)); if (!iRetcode) /* if oke ? */ *((*pOutbuf) + *iRealsize) = 0; /* then put terminator zero */ } else { *pOutbuf = 0; /* nothing to do; then there's no output */ *iOutsize = 0; *iRealsize = 0; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INFLATE_BUFFER, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #endif /* MNG_INCLUDE_READ_PROCS */ /* ************************************************************************** */ /* * * */ /* * Helper routines to simplify chunk writing * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_WRITE_PROCS /* ************************************************************************** */ #if !defined(MNG_SKIPCHUNK_iCCP) || !defined(MNG_SKIPCHUNK_zTXt) || !defined(MNG_SKIPCHUNK_iTXt) MNG_LOCAL mng_retcode deflate_buffer (mng_datap pData, mng_uint8p pInbuf, mng_uint32 iInsize, mng_uint8p *pOutbuf, mng_uint32 *iOutsize, mng_uint32 *iRealsize) { mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DEFLATE_BUFFER, MNG_LC_START); #endif if (iInsize) /* anything to do ? */ { *iOutsize = (iInsize * 5) >> 2; /* estimate compressed size */ /* and allocate a temporary buffer */ MNG_ALLOC (pData, *pOutbuf, *iOutsize); do { mngzlib_deflateinit (pData); /* initialize zlib */ /* let zlib know where to store the output */ pData->sZlib.next_out = *pOutbuf; pData->sZlib.avail_out = *iOutsize; /* ok; let's deflate... */ iRetcode = mngzlib_deflatedata (pData, iInsize, pInbuf); /* determine actual output size */ *iRealsize = pData->sZlib.total_out; mngzlib_deflatefree (pData); /* zlib's done */ if (iRetcode == MNG_BUFOVERFLOW) /* not enough space ? */ { /* then get some more */ MNG_FREEX (pData, *pOutbuf, *iOutsize); *iOutsize = *iOutsize + (iInsize >> 1); MNG_ALLOC (pData, *pOutbuf, *iOutsize); } } /* repeat if we didn't have enough space */ while (iRetcode == MNG_BUFOVERFLOW); } else { *pOutbuf = 0; /* nothing to do; then there's no output */ *iOutsize = 0; *iRealsize = 0; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DEFLATE_BUFFER, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ MNG_LOCAL mng_retcode write_raw_chunk (mng_datap pData, mng_chunkid iChunkname, mng_uint32 iRawlen, mng_uint8p pRawdata) { mng_uint32 iCrc; mng_uint32 iWritten; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_RAW_CHUNK, MNG_LC_START); #endif /* temporary buffer ? */ if ((pRawdata != 0) && (pRawdata != pData->pWritebuf+8)) { /* store length & chunktype in default buffer */ mng_put_uint32 (pData->pWritebuf, iRawlen); mng_put_uint32 (pData->pWritebuf+4, (mng_uint32)iChunkname); if (pData->iCrcmode & MNG_CRC_OUTPUT) { if ((pData->iCrcmode & MNG_CRC_OUTPUT) == MNG_CRC_OUTPUT_GENERATE) { /* calculate the crc */ iCrc = update_crc (pData, 0xffffffffL, pData->pWritebuf+4, 4); iCrc = update_crc (pData, iCrc, pRawdata, iRawlen) ^ 0xffffffffL; } else { iCrc = 0; /* dummy crc */ } /* store in default buffer */ mng_put_uint32 (pData->pWritebuf+8, iCrc); } /* write the length & chunktype */ if (!pData->fWritedata ((mng_handle)pData, pData->pWritebuf, 8, &iWritten)) MNG_ERROR (pData, MNG_APPIOERROR); if (iWritten != 8) /* disk full ? */ MNG_ERROR (pData, MNG_OUTPUTERROR); /* write the temporary buffer */ if (!pData->fWritedata ((mng_handle)pData, pRawdata, iRawlen, &iWritten)) MNG_ERROR (pData, MNG_APPIOERROR); if (iWritten != iRawlen) /* disk full ? */ MNG_ERROR (pData, MNG_OUTPUTERROR); if (pData->iCrcmode & MNG_CRC_OUTPUT) { /* write the crc */ if (!pData->fWritedata ((mng_handle)pData, pData->pWritebuf+8, 4, &iWritten)) MNG_ERROR (pData, MNG_APPIOERROR); if (iWritten != 4) /* disk full ? */ MNG_ERROR (pData, MNG_OUTPUTERROR); } } else { /* prefix with length & chunktype */ mng_put_uint32 (pData->pWritebuf, iRawlen); mng_put_uint32 (pData->pWritebuf+4, (mng_uint32)iChunkname); if (pData->iCrcmode & MNG_CRC_OUTPUT) { if ((pData->iCrcmode & MNG_CRC_OUTPUT) == MNG_CRC_OUTPUT_GENERATE) /* calculate the crc */ iCrc = mng_crc (pData, pData->pWritebuf+4, iRawlen + 4); else iCrc = 0; /* dummy crc */ /* add it to the buffer */ mng_put_uint32 (pData->pWritebuf + iRawlen + 8, iCrc); /* write it in a single pass */ if (!pData->fWritedata ((mng_handle)pData, pData->pWritebuf, iRawlen + 12, &iWritten)) MNG_ERROR (pData, MNG_APPIOERROR); if (iWritten != iRawlen + 12) /* disk full ? */ MNG_ERROR (pData, MNG_OUTPUTERROR); } else { if (!pData->fWritedata ((mng_handle)pData, pData->pWritebuf, iRawlen + 8, &iWritten)) MNG_ERROR (pData, MNG_APPIOERROR); if (iWritten != iRawlen + 8) /* disk full ? */ MNG_ERROR (pData, MNG_OUTPUTERROR); } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_RAW_CHUNK, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ /* B004 */ #endif /* MNG_INCLUDE_WRITE_PROCS */ /* B004 */ /* ************************************************************************** */ /* * * */ /* * chunk read functions * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_READ_PROCS /* ************************************************************************** */ #ifdef MNG_OPTIMIZE_CHUNKREADER /* ************************************************************************** */ MNG_LOCAL mng_retcode create_chunk_storage (mng_datap pData, mng_chunkp pHeader, mng_uint32 iRawlen, mng_uint8p pRawdata, mng_field_descp pField, mng_uint16 iFields, mng_chunkp* ppChunk, mng_bool bWorkcopy) { mng_field_descp pTempfield = pField; mng_uint16 iFieldcount = iFields; mng_uint8p pTempdata = pRawdata; mng_uint32 iTemplen = iRawlen; mng_uint16 iLastgroup = 0; mng_uint8p pChunkdata; mng_uint32 iDatalen; mng_uint8 iColortype; mng_bool bProcess; /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; if (((mng_chunk_headerp)(*ppChunk))->iChunkname == MNG_UINT_HUH) ((mng_chunk_headerp)(*ppChunk))->iChunkname = pData->iChunkname; if ((!bWorkcopy) || ((((mng_chunk_headerp)pHeader)->iChunkname != MNG_UINT_IDAT) && (((mng_chunk_headerp)pHeader)->iChunkname != MNG_UINT_JDAT) && (((mng_chunk_headerp)pHeader)->iChunkname != MNG_UINT_JDAA) )) { pChunkdata = (mng_uint8p)(*ppChunk); #ifdef MNG_INCLUDE_JNG /* determine current colortype */ if (pData->bHasJHDR) iColortype = (mng_uint8)(pData->iJHDRcolortype - 8); else #endif /* MNG_INCLUDE_JNG */ if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) iColortype = pData->iColortype; else iColortype = 6; if (iTemplen) /* not empty ? */ { /* then go fill the fields */ while ((iFieldcount) && (iTemplen)) { if (pTempfield->iOffsetchunk) { if (pTempfield->iFlags & MNG_FIELD_PUTIMGTYPE) { *(pChunkdata+pTempfield->iOffsetchunk) = iColortype; bProcess = MNG_FALSE; } else if (pTempfield->iFlags & MNG_FIELD_IFIMGTYPES) bProcess = (mng_bool)(((pTempfield->iFlags & MNG_FIELD_IFIMGTYPE0) && (iColortype == 0)) || ((pTempfield->iFlags & MNG_FIELD_IFIMGTYPE2) && (iColortype == 2)) || ((pTempfield->iFlags & MNG_FIELD_IFIMGTYPE3) && (iColortype == 3)) || ((pTempfield->iFlags & MNG_FIELD_IFIMGTYPE4) && (iColortype == 4)) || ((pTempfield->iFlags & MNG_FIELD_IFIMGTYPE6) && (iColortype == 6)) ); else bProcess = MNG_TRUE; if (bProcess) { iLastgroup = (mng_uint16)(pTempfield->iFlags & MNG_FIELD_GROUPMASK); /* numeric field ? */ if (pTempfield->iFlags & MNG_FIELD_INT) { if (iTemplen < pTempfield->iLengthmax) MNG_ERROR (pData, MNG_INVALIDLENGTH); switch (pTempfield->iLengthmax) { case 1 : { mng_uint8 iNum = *pTempdata; if (((mng_uint16)iNum < pTempfield->iMinvalue) || ((mng_uint16)iNum > pTempfield->iMaxvalue) ) MNG_ERROR (pData, MNG_INVALIDFIELDVAL); *(pChunkdata+pTempfield->iOffsetchunk) = iNum; break; } case 2 : { mng_uint16 iNum = mng_get_uint16 (pTempdata); if ((iNum < pTempfield->iMinvalue) || (iNum > pTempfield->iMaxvalue)) MNG_ERROR (pData, MNG_INVALIDFIELDVAL); *((mng_uint16p)(pChunkdata+pTempfield->iOffsetchunk)) = iNum; break; } case 4 : { mng_uint32 iNum = mng_get_uint32 (pTempdata); if ((iNum < pTempfield->iMinvalue) || ((pTempfield->iFlags & MNG_FIELD_NOHIGHBIT) && (iNum & 0x80000000)) ) MNG_ERROR (pData, MNG_INVALIDFIELDVAL); *((mng_uint32p)(pChunkdata+pTempfield->iOffsetchunk)) = iNum; break; } } pTempdata += pTempfield->iLengthmax; iTemplen -= pTempfield->iLengthmax; } else { /* not numeric so it's a bunch of bytes */ if (!pTempfield->iOffsetchunklen) /* big fat NONO */ MNG_ERROR (pData, MNG_INTERNALERROR); /* with terminating 0 ? */ if (pTempfield->iFlags & MNG_FIELD_TERMINATOR) { mng_uint8p pWork = pTempdata; while (*pWork) /* find the zero */ pWork++; iDatalen = (mng_uint32)(pWork - pTempdata); } else { /* no terminator, so everything that's left ! */ iDatalen = iTemplen; } if ((pTempfield->iLengthmax) && (iDatalen > pTempfield->iLengthmax)) MNG_ERROR (pData, MNG_INVALIDLENGTH); #if !defined(MNG_SKIPCHUNK_iCCP) || !defined(MNG_SKIPCHUNK_zTXt) || \ !defined(MNG_SKIPCHUNK_iTXt) || defined(MNG_INCLUDE_MPNG_PROPOSAL) || \ defined(MNG_INCLUDE_ANG_PROPOSAL) /* needs decompression ? */ if (pTempfield->iFlags & MNG_FIELD_DEFLATED) { mng_uint8p pBuf = 0; mng_uint32 iBufsize = 0; mng_uint32 iRealsize; mng_ptr pWork; iRetcode = mng_inflate_buffer (pData, pTempdata, iDatalen, &pBuf, &iBufsize, &iRealsize); #ifdef MNG_CHECK_BAD_ICCP /* Check for bad iCCP chunk */ if ((iRetcode) && (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_iCCP)) { *((mng_ptr *)(pChunkdata+pTempfield->iOffsetchunk)) = MNG_NULL; *((mng_uint32p)(pChunkdata+pTempfield->iOffsetchunklen)) = iDatalen; } else #endif { if (iRetcode) return iRetcode; #if defined(MNG_INCLUDE_MPNG_PROPOSAL) || defined(MNG_INCLUDE_ANG_PROPOSAL) if ( (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_mpNG) || (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_adAT) ) { MNG_ALLOC (pData, pWork, iRealsize); } else { #endif /* don't forget to generate null terminator */ MNG_ALLOC (pData, pWork, iRealsize+1); #if defined(MNG_INCLUDE_MPNG_PROPOSAL) || defined(MNG_INCLUDE_ANG_PROPOSAL) } #endif MNG_COPY (pWork, pBuf, iRealsize); *((mng_ptr *)(pChunkdata+pTempfield->iOffsetchunk)) = pWork; *((mng_uint32p)(pChunkdata+pTempfield->iOffsetchunklen)) = iRealsize; } if (pBuf) /* free the temporary buffer */ MNG_FREEX (pData, pBuf, iBufsize); } else #endif { /* no decompression, so just copy */ mng_ptr pWork; /* don't forget to generate null terminator */ MNG_ALLOC (pData, pWork, iDatalen+1); MNG_COPY (pWork, pTempdata, iDatalen); *((mng_ptr *)(pChunkdata+pTempfield->iOffsetchunk)) = pWork; *((mng_uint32p)(pChunkdata+pTempfield->iOffsetchunklen)) = iDatalen; } if (pTempfield->iFlags & MNG_FIELD_TERMINATOR) iDatalen++; /* skip the terminating zero as well !!! */ iTemplen -= iDatalen; pTempdata += iDatalen; } /* need to set an indicator ? */ if (pTempfield->iOffsetchunkind) *((mng_uint8p)(pChunkdata+pTempfield->iOffsetchunkind)) = MNG_TRUE; } } if (pTempfield->pSpecialfunc) /* special function required ? */ { iRetcode = pTempfield->pSpecialfunc(pData, *ppChunk, &iTemplen, &pTempdata); if (iRetcode) /* on error bail out */ return iRetcode; } pTempfield++; /* Neeeeeeexxxtt */ iFieldcount--; } if (iTemplen) /* extra data ??? */ MNG_ERROR (pData, MNG_INVALIDLENGTH); while (iFieldcount) /* not enough data ??? */ { if (pTempfield->iFlags & MNG_FIELD_IFIMGTYPES) bProcess = (mng_bool)(((pTempfield->iFlags & MNG_FIELD_IFIMGTYPE0) && (iColortype == 0)) || ((pTempfield->iFlags & MNG_FIELD_IFIMGTYPE2) && (iColortype == 2)) || ((pTempfield->iFlags & MNG_FIELD_IFIMGTYPE3) && (iColortype == 3)) || ((pTempfield->iFlags & MNG_FIELD_IFIMGTYPE4) && (iColortype == 4)) || ((pTempfield->iFlags & MNG_FIELD_IFIMGTYPE6) && (iColortype == 6)) ); else bProcess = MNG_TRUE; if (bProcess) { if (!(pTempfield->iFlags & MNG_FIELD_OPTIONAL)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pTempfield->iFlags & MNG_FIELD_GROUPMASK) && ((mng_uint16)(pTempfield->iFlags & MNG_FIELD_GROUPMASK) == iLastgroup)) MNG_ERROR (pData, MNG_INVALIDLENGTH); } pTempfield++; iFieldcount--; } } } return MNG_NOERROR; } /* ************************************************************************** */ READ_CHUNK (mng_read_general) { mng_retcode iRetcode = MNG_NOERROR; mng_chunk_descp pDescr = ((mng_chunk_headerp)pHeader)->pChunkdescr; mng_field_descp pField; mng_uint16 iFields; if (!pDescr) /* this is a bad booboo !!! */ MNG_ERROR (pData, MNG_INTERNALERROR); pField = pDescr->pFielddesc; iFields = pDescr->iFielddesc; /* check chunk against signature */ if ((pDescr->eImgtype == mng_it_mng) && (pData->eSigtype != mng_it_mng)) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); if ((pDescr->eImgtype == mng_it_jng) && (pData->eSigtype == mng_it_png)) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); /* empties allowed ? */ if ((iRawlen == 0) && (!(pDescr->iAllowed & MNG_DESCR_EMPTY))) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->eImagetype != mng_it_mng) || (!(pDescr->iAllowed & MNG_DESCR_GLOBAL))) { /* *a* header required ? */ if ((pDescr->iMusthaves & MNG_DESCR_GenHDR) && #ifdef MNG_INCLUDE_JNG (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pDescr->iMusthaves & MNG_DESCR_JngHDR) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) MNG_ERROR (pData, MNG_SEQUENCEERROR); #endif } /* specific chunk pre-requisite ? */ if (((pDescr->iMusthaves & MNG_DESCR_IHDR) && (!pData->bHasIHDR)) || #ifdef MNG_INCLUDE_JNG ((pDescr->iMusthaves & MNG_DESCR_JHDR) && (!pData->bHasJHDR)) || #endif ((pDescr->iMusthaves & MNG_DESCR_DHDR) && (!pData->bHasDHDR)) || ((pDescr->iMusthaves & MNG_DESCR_LOOP) && (!pData->bHasLOOP)) || ((pDescr->iMusthaves & MNG_DESCR_PLTE) && (!pData->bHasPLTE)) || ((pDescr->iMusthaves & MNG_DESCR_MHDR) && (!pData->bHasMHDR)) || ((pDescr->iMusthaves & MNG_DESCR_SAVE) && (!pData->bHasSAVE)) ) MNG_ERROR (pData, MNG_SEQUENCEERROR); /* specific chunk undesired ? */ if (((pDescr->iMustNOThaves & MNG_DESCR_NOIHDR) && (pData->bHasIHDR)) || ((pDescr->iMustNOThaves & MNG_DESCR_NOBASI) && (pData->bHasBASI)) || ((pDescr->iMustNOThaves & MNG_DESCR_NODHDR) && (pData->bHasDHDR)) || ((pDescr->iMustNOThaves & MNG_DESCR_NOIDAT) && (pData->bHasIDAT)) || ((pDescr->iMustNOThaves & MNG_DESCR_NOPLTE) && (pData->bHasPLTE)) || #ifdef MNG_INCLUDE_JNG ((pDescr->iMustNOThaves & MNG_DESCR_NOJHDR) && (pData->bHasJHDR)) || ((pDescr->iMustNOThaves & MNG_DESCR_NOJDAT) && (pData->bHasJDAT)) || ((pDescr->iMustNOThaves & MNG_DESCR_NOJDAA) && (pData->bHasJDAA)) || ((pDescr->iMustNOThaves & MNG_DESCR_NOJSEP) && (pData->bHasJSEP)) || #endif ((pDescr->iMustNOThaves & MNG_DESCR_NOMHDR) && (pData->bHasMHDR)) || ((pDescr->iMustNOThaves & MNG_DESCR_NOLOOP) && (pData->bHasLOOP)) || ((pDescr->iMustNOThaves & MNG_DESCR_NOTERM) && (pData->bHasTERM)) || ((pDescr->iMustNOThaves & MNG_DESCR_NOSAVE) && (pData->bHasSAVE)) ) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (pData->eSigtype == mng_it_mng) /* check global and embedded empty chunks */ { #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { if ((iRawlen == 0) && (!(pDescr->iAllowed & MNG_DESCR_EMPTYEMBED))) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else { if ((iRawlen == 0) && (!(pDescr->iAllowed & MNG_DESCR_EMPTYGLOBAL))) MNG_ERROR (pData, MNG_INVALIDLENGTH); } } if (pDescr->pSpecialfunc) /* need special processing ? */ { iRetcode = create_chunk_storage (pData, pHeader, iRawlen, pRawdata, pField, iFields, ppChunk, MNG_TRUE); if (iRetcode) /* on error bail out */ return iRetcode; /* empty indicator ? */ if ((!iRawlen) && (pDescr->iOffsetempty)) *(((mng_uint8p)*ppChunk)+pDescr->iOffsetempty) = MNG_TRUE; iRetcode = pDescr->pSpecialfunc(pData, *ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; if ((((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_IDAT) || (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAT) || (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAA) ) { iRetcode = ((mng_chunk_headerp)*ppChunk)->fCleanup (pData, *ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; *ppChunk = MNG_NULL; } else { #ifdef MNG_STORE_CHUNKS if (!pData->bStorechunks) #endif { iRetcode = ((mng_chunk_headerp)*ppChunk)->fCleanup (pData, *ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; *ppChunk = MNG_NULL; } } } #ifdef MNG_SUPPORT_DISPLAY if (iRawlen) { #ifdef MNG_OPTIMIZE_DISPLAYCALLS pData->iRawlen = iRawlen; pData->pRawdata = pRawdata; #endif /* display processing */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_IDAT) iRetcode = mng_process_display_idat (pData, iRawlen, pRawdata); #ifdef MNG_INCLUDE_JNG else if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAT) iRetcode = mng_process_display_jdat (pData, iRawlen, pRawdata); else if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAA) iRetcode = mng_process_display_jdaa (pData, iRawlen, pRawdata); #endif #else if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_IDAT) iRetcode = mng_process_display_idat (pData); #ifdef MNG_INCLUDE_JNG else if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAT) iRetcode = mng_process_display_jdat (pData); else if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAA) iRetcode = mng_process_display_jdaa (pData); #endif #endif if (iRetcode) return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if ((pData->bStorechunks) && (!(*ppChunk))) { iRetcode = create_chunk_storage (pData, pHeader, iRawlen, pRawdata, pField, iFields, ppChunk, MNG_FALSE); if (iRetcode) /* on error bail out */ return iRetcode; /* empty indicator ? */ if ((!iRawlen) && (pDescr->iOffsetempty)) *(((mng_uint8p)*ppChunk)+pDescr->iOffsetempty) = MNG_TRUE; } #endif /* MNG_STORE_CHUNKS */ return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_OPTIMIZE_CHUNKREADER */ /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER READ_CHUNK (mng_read_ihdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_IHDR, MNG_LC_START); #endif if (iRawlen != 13) /* length oke ? */ MNG_ERROR (pData, MNG_INVALIDLENGTH); /* only allowed inside PNG or MNG */ if ((pData->eSigtype != mng_it_png) && (pData->eSigtype != mng_it_mng)) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); /* sequence checks */ if ((pData->eSigtype == mng_it_png) && (pData->iChunkseq > 1)) MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasIDAT) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasIDAT)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); pData->bHasIHDR = MNG_TRUE; /* indicate IHDR is present */ /* and store interesting fields */ if ((!pData->bHasDHDR) || (pData->iDeltatype == MNG_DELTATYPE_NOCHANGE)) { pData->iDatawidth = mng_get_uint32 (pRawdata); pData->iDataheight = mng_get_uint32 (pRawdata+4); } pData->iBitdepth = *(pRawdata+8); pData->iColortype = *(pRawdata+9); pData->iCompression = *(pRawdata+10); pData->iFilter = *(pRawdata+11); pData->iInterlace = *(pRawdata+12); #if defined(MNG_NO_1_2_4BIT_SUPPORT) || defined(MNG_NO_16BIT_SUPPORT) pData->iPNGmult = 1; pData->iPNGdepth = pData->iBitdepth; #endif #ifdef MNG_NO_1_2_4BIT_SUPPORT if (pData->iBitdepth < 8) pData->iBitdepth = 8; #endif #ifdef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth > 8) { pData->iBitdepth = 8; pData->iPNGmult = 2; } #endif if ((pData->iBitdepth != 8) /* parameter validity checks */ #ifndef MNG_NO_1_2_4BIT_SUPPORT && (pData->iBitdepth != 1) && (pData->iBitdepth != 2) && (pData->iBitdepth != 4) #endif #ifndef MNG_NO_16BIT_SUPPORT && (pData->iBitdepth != 16) #endif ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if ((pData->iColortype != MNG_COLORTYPE_GRAY ) && (pData->iColortype != MNG_COLORTYPE_RGB ) && (pData->iColortype != MNG_COLORTYPE_INDEXED) && (pData->iColortype != MNG_COLORTYPE_GRAYA ) && (pData->iColortype != MNG_COLORTYPE_RGBA ) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); if ((pData->iColortype == MNG_COLORTYPE_INDEXED) && (pData->iBitdepth > 8)) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if (((pData->iColortype == MNG_COLORTYPE_RGB ) || (pData->iColortype == MNG_COLORTYPE_GRAYA ) || (pData->iColortype == MNG_COLORTYPE_RGBA ) ) && (pData->iBitdepth < 8 ) ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if (pData->iCompression != MNG_COMPRESSION_DEFLATE) MNG_ERROR (pData, MNG_INVALIDCOMPRESS); #if defined(FILTER192) || defined(FILTER193) if ((pData->iFilter != MNG_FILTER_ADAPTIVE ) && #if defined(FILTER192) && defined(FILTER193) (pData->iFilter != MNG_FILTER_DIFFERING) && (pData->iFilter != MNG_FILTER_NOFILTER ) ) #else #ifdef FILTER192 (pData->iFilter != MNG_FILTER_DIFFERING) ) #else (pData->iFilter != MNG_FILTER_NOFILTER ) ) #endif #endif MNG_ERROR (pData, MNG_INVALIDFILTER); #else if (pData->iFilter) MNG_ERROR (pData, MNG_INVALIDFILTER); #endif if ((pData->iInterlace != MNG_INTERLACE_NONE ) && (pData->iInterlace != MNG_INTERLACE_ADAM7) ) MNG_ERROR (pData, MNG_INVALIDINTERLACE); #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* check the colortype for delta-images ! */ { mng_imagedatap pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; if (pData->iColortype != pBuf->iColortype) { if ( ( (pData->iColortype != MNG_COLORTYPE_INDEXED) || (pBuf->iColortype == MNG_COLORTYPE_GRAY ) ) && ( (pData->iColortype != MNG_COLORTYPE_GRAY ) || (pBuf->iColortype == MNG_COLORTYPE_INDEXED) ) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); } } #endif #endif if (!pData->bHasheader) /* first chunk ? */ { pData->bHasheader = MNG_TRUE; /* we've got a header */ pData->eImagetype = mng_it_png; /* then this must be a PNG */ pData->iWidth = pData->iDatawidth; pData->iHeight = pData->iDataheight; /* predict alpha-depth ! */ if ((pData->iColortype == MNG_COLORTYPE_GRAYA ) || (pData->iColortype == MNG_COLORTYPE_RGBA ) ) pData->iAlphadepth = pData->iBitdepth; else if (pData->iColortype == MNG_COLORTYPE_INDEXED) pData->iAlphadepth = 8; /* worst case scenario */ else pData->iAlphadepth = 1; /* Possible tRNS cheap binary transparency */ /* fits on maximum canvas ? */ if ((pData->iWidth > pData->iMaxwidth) || (pData->iHeight > pData->iMaxheight)) MNG_WARNING (pData, MNG_IMAGETOOLARGE); #if !defined(MNG_INCLUDE_MPNG_PROPOSAL) || !defined(MNG_SUPPORT_DISPLAY) if (pData->fProcessheader) /* inform the app ? */ if (!pData->fProcessheader (((mng_handle)pData), pData->iWidth, pData->iHeight)) MNG_ERROR (pData, MNG_APPMISCERROR); #endif } if (!pData->bHasDHDR) pData->iImagelevel++; /* one level deeper */ #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode = mng_process_display_ihdr (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* fill the fields */ ((mng_ihdrp)*ppChunk)->iWidth = mng_get_uint32 (pRawdata); ((mng_ihdrp)*ppChunk)->iHeight = mng_get_uint32 (pRawdata+4); ((mng_ihdrp)*ppChunk)->iBitdepth = pData->iBitdepth; ((mng_ihdrp)*ppChunk)->iColortype = pData->iColortype; ((mng_ihdrp)*ppChunk)->iCompression = pData->iCompression; ((mng_ihdrp)*ppChunk)->iFilter = pData->iFilter; ((mng_ihdrp)*ppChunk)->iInterlace = pData->iInterlace; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_IHDR, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif /* MNG_OPTIMIZE_CHUNKREADER */ /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER READ_CHUNK (mng_read_plte) { #if defined(MNG_SUPPORT_DISPLAY) || defined(MNG_STORE_CHUNKS) mng_uint32 iX; mng_uint8p pRawdata2; #endif #ifdef MNG_SUPPORT_DISPLAY mng_uint32 iRawlen2; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PLTE, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIDAT) || (pData->bHasJHDR)) #else if (pData->bHasIDAT) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* multiple PLTE only inside BASI */ if ((pData->bHasPLTE) && (!pData->bHasBASI)) MNG_ERROR (pData, MNG_MULTIPLEERROR); /* length must be multiple of 3 */ if (((iRawlen % 3) != 0) || (iRawlen > 768)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { /* only allowed for indexed-color or rgb(a)-color! */ if ((pData->iColortype != 2) && (pData->iColortype != 3) && (pData->iColortype != 6)) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); /* empty only allowed if global present */ if ((iRawlen == 0) && (!pData->bHasglobalPLTE)) MNG_ERROR (pData, MNG_CANNOTBEEMPTY); } else { if (iRawlen == 0) /* cannot be empty as global! */ MNG_ERROR (pData, MNG_CANNOTBEEMPTY); } if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) pData->bHasPLTE = MNG_TRUE; /* got it! */ else pData->bHasglobalPLTE = MNG_TRUE; pData->iPLTEcount = iRawlen / 3; #ifdef MNG_SUPPORT_DISPLAY if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { mng_imagep pImage; mng_imagedatap pBuf; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* processing delta-image ? */ { /* store in object 0 !!! */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; pBuf->bHasPLTE = MNG_TRUE; /* it's definitely got a PLTE now */ pBuf->iPLTEcount = iRawlen / 3; /* this is the exact length */ pRawdata2 = pRawdata; /* copy the entries */ for (iX = 0; iX < iRawlen / 3; iX++) { pBuf->aPLTEentries[iX].iRed = *pRawdata2; pBuf->aPLTEentries[iX].iGreen = *(pRawdata2+1); pBuf->aPLTEentries[iX].iBlue = *(pRawdata2+2); pRawdata2 += 3; } } else #endif { /* get the current object */ pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address the object buffer */ pBuf->bHasPLTE = MNG_TRUE; /* and tell it it's got a PLTE now */ if (!iRawlen) /* if empty, inherit from global */ { pBuf->iPLTEcount = pData->iGlobalPLTEcount; MNG_COPY (pBuf->aPLTEentries, pData->aGlobalPLTEentries, sizeof (pBuf->aPLTEentries)); if (pData->bHasglobalTRNS) /* also copy global tRNS ? */ { /* indicate tRNS available */ pBuf->bHasTRNS = MNG_TRUE; iRawlen2 = pData->iGlobalTRNSrawlen; pRawdata2 = (mng_uint8p)(pData->aGlobalTRNSrawdata); /* global length oke ? */ if ((iRawlen2 == 0) || (iRawlen2 > pBuf->iPLTEcount)) MNG_ERROR (pData, MNG_GLOBALLENGTHERR); /* copy it */ pBuf->iTRNScount = iRawlen2; MNG_COPY (pBuf->aTRNSentries, pRawdata2, iRawlen2); } } else { /* store fields for future reference */ pBuf->iPLTEcount = iRawlen / 3; pRawdata2 = pRawdata; for (iX = 0; iX < pBuf->iPLTEcount; iX++) { pBuf->aPLTEentries[iX].iRed = *pRawdata2; pBuf->aPLTEentries[iX].iGreen = *(pRawdata2+1); pBuf->aPLTEentries[iX].iBlue = *(pRawdata2+2); pRawdata2 += 3; } } } } else /* store as global */ { pData->iGlobalPLTEcount = iRawlen / 3; pRawdata2 = pRawdata; for (iX = 0; iX < pData->iGlobalPLTEcount; iX++) { pData->aGlobalPLTEentries[iX].iRed = *pRawdata2; pData->aGlobalPLTEentries[iX].iGreen = *(pRawdata2+1); pData->aGlobalPLTEentries[iX].iBlue = *(pRawdata2+2); pRawdata2 += 3; } { /* create an animation object */ mng_retcode iRetcode = mng_create_ani_plte (pData, pData->iGlobalPLTEcount, pData->aGlobalPLTEentries); if (iRetcode) /* on error bail out */ return iRetcode; } } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_pltep)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); ((mng_pltep)*ppChunk)->iEntrycount = iRawlen / 3; pRawdata2 = pRawdata; for (iX = 0; iX < ((mng_pltep)*ppChunk)->iEntrycount; iX++) { ((mng_pltep)*ppChunk)->aEntries[iX].iRed = *pRawdata2; ((mng_pltep)*ppChunk)->aEntries[iX].iGreen = *(pRawdata2+1); ((mng_pltep)*ppChunk)->aEntries[iX].iBlue = *(pRawdata2+2); pRawdata2 += 3; } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PLTE, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif /* MNG_OPTIMIZE_CHUNKREADER */ /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER READ_CHUNK (mng_read_idat) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_IDAT, MNG_LC_START); #endif #ifdef MNG_INCLUDE_JNG /* sequence checks */ if ((!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasJHDR) && (pData->iJHDRalphacompression != MNG_COMPRESSION_DEFLATE)) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (pData->bHasJSEP) MNG_ERROR (pData, MNG_SEQUENCEERROR); #endif /* not allowed for deltatype NO_CHANGE */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && ((pData->iDeltatype == MNG_DELTATYPE_NOCHANGE))) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); #endif /* can only be empty in BASI-block! */ if ((iRawlen == 0) && (!pData->bHasBASI)) MNG_ERROR (pData, MNG_INVALIDLENGTH); /* indexed-color requires PLTE */ if ((pData->bHasIHDR) && (pData->iColortype == 3) && (!pData->bHasPLTE)) MNG_ERROR (pData, MNG_PLTEMISSING); pData->bHasIDAT = MNG_TRUE; /* got some IDAT now, don't we */ #ifdef MNG_SUPPORT_DISPLAY if (iRawlen) { /* display processing */ mng_retcode iRetcode = mng_process_display_idat (pData, iRawlen, pRawdata); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_idatp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); ((mng_idatp)*ppChunk)->iDatasize = iRawlen; if (iRawlen != 0) /* is there any data ? */ { MNG_ALLOC (pData, ((mng_idatp)*ppChunk)->pData, iRawlen); MNG_COPY (((mng_idatp)*ppChunk)->pData, pRawdata, iRawlen); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_IDAT, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER READ_CHUNK (mng_read_iend) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_IEND, MNG_LC_START); #endif if (iRawlen > 0) /* must not contain data! */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_INCLUDE_JNG /* sequence checks */ if ((!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* IHDR-block requires IDAT */ if ((pData->bHasIHDR) && (!pData->bHasIDAT)) MNG_ERROR (pData, MNG_IDATMISSING); pData->iImagelevel--; /* one level up */ #ifdef MNG_SUPPORT_DISPLAY { /* create an animation object */ mng_retcode iRetcode = mng_create_ani_image (pData); if (iRetcode) /* on error bail out */ return iRetcode; /* display processing */ iRetcode = mng_process_display_iend (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_SUPPORT_DISPLAY if (!pData->bTimerset) /* reset only if not broken !!! */ { #endif /* IEND signals the end for most ... */ pData->bHasIHDR = MNG_FALSE; pData->bHasBASI = MNG_FALSE; pData->bHasDHDR = MNG_FALSE; #ifdef MNG_INCLUDE_JNG pData->bHasJHDR = MNG_FALSE; pData->bHasJSEP = MNG_FALSE; pData->bHasJDAA = MNG_FALSE; pData->bHasJDAT = MNG_FALSE; #endif pData->bHasPLTE = MNG_FALSE; pData->bHasTRNS = MNG_FALSE; pData->bHasGAMA = MNG_FALSE; pData->bHasCHRM = MNG_FALSE; pData->bHasSRGB = MNG_FALSE; pData->bHasICCP = MNG_FALSE; pData->bHasBKGD = MNG_FALSE; pData->bHasIDAT = MNG_FALSE; #ifdef MNG_SUPPORT_DISPLAY } #endif #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_IEND, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER READ_CHUNK (mng_read_trns) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_TRNS, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIDAT) || (pData->bHasJHDR)) #else if (pData->bHasIDAT) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* multiple tRNS only inside BASI */ if ((pData->bHasTRNS) && (!pData->bHasBASI)) MNG_ERROR (pData, MNG_MULTIPLEERROR); if (iRawlen > 256) /* it just can't be bigger than that! */ MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { /* not allowed with full alpha-channel */ if ((pData->iColortype == 4) || (pData->iColortype == 6)) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); if (iRawlen != 0) /* filled ? */ { /* length checks */ if ((pData->iColortype == 0) && (iRawlen != 2)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->iColortype == 2) && (iRawlen != 6)) MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY if (pData->iColortype == 3) { mng_imagep pImage = (mng_imagep)pData->pCurrentobj; mng_imagedatap pBuf; if (!pImage) /* no object then check obj 0 */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address object buffer */ if (iRawlen > pBuf->iPLTEcount) MNG_ERROR (pData, MNG_INVALIDLENGTH); } #endif } else /* if empty there must be global stuff! */ { if (!pData->bHasglobalTRNS) MNG_ERROR (pData, MNG_CANNOTBEEMPTY); } } if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) pData->bHasTRNS = MNG_TRUE; /* indicate tRNS available */ else pData->bHasglobalTRNS = MNG_TRUE; #ifdef MNG_SUPPORT_DISPLAY if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { mng_imagep pImage; mng_imagedatap pBuf; mng_uint8p pRawdata2; mng_uint32 iRawlen2; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* processing delta-image ? */ { /* store in object 0 !!! */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address object buffer */ switch (pData->iColortype) /* store fields for future reference */ { case 0: { /* gray */ #if defined(MNG_NO_1_2_4BIT_SUPPORT) mng_uint8 multiplier[]={0,255,85,0,17,0,0,0,1, 0,0,0,0,0,0,0,1}; #endif pBuf->iTRNSgray = mng_get_uint16 (pRawdata); pBuf->iTRNSred = 0; pBuf->iTRNSgreen = 0; pBuf->iTRNSblue = 0; pBuf->iTRNScount = 0; #if defined(MNG_NO_1_2_4BIT_SUPPORT) pBuf->iTRNSgray *= multiplier[pData->iPNGdepth]; #endif #if defined(MNG_NO_16BIT_SUPPORT) if (pData->iPNGmult == 2) pBuf->iTRNSgray >>= 8; #endif break; } case 2: { /* rgb */ pBuf->iTRNSgray = 0; pBuf->iTRNSred = mng_get_uint16 (pRawdata); pBuf->iTRNSgreen = mng_get_uint16 (pRawdata+2); pBuf->iTRNSblue = mng_get_uint16 (pRawdata+4); pBuf->iTRNScount = 0; #if defined(MNG_NO_16BIT_SUPPORT) if (pData->iPNGmult == 2) { pBuf->iTRNSred >>= 8; pBuf->iTRNSgreen >>= 8; pBuf->iTRNSblue >>= 8; } #endif break; } case 3: { /* indexed */ pBuf->iTRNSgray = 0; pBuf->iTRNSred = 0; pBuf->iTRNSgreen = 0; pBuf->iTRNSblue = 0; pBuf->iTRNScount = iRawlen; MNG_COPY (pBuf->aTRNSentries, pRawdata, iRawlen); break; } } pBuf->bHasTRNS = MNG_TRUE; /* tell it it's got a tRNS now */ } else #endif { /* address current object */ pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address object buffer */ pBuf->bHasTRNS = MNG_TRUE; /* and tell it it's got a tRNS now */ if (iRawlen == 0) /* if empty, inherit from global */ { iRawlen2 = pData->iGlobalTRNSrawlen; pRawdata2 = (mng_ptr)(pData->aGlobalTRNSrawdata); /* global length oke ? */ if ((pData->iColortype == 0) && (iRawlen2 != 2)) MNG_ERROR (pData, MNG_GLOBALLENGTHERR); if ((pData->iColortype == 2) && (iRawlen2 != 6)) MNG_ERROR (pData, MNG_GLOBALLENGTHERR); if ((pData->iColortype == 3) && ((iRawlen2 == 0) || (iRawlen2 > pBuf->iPLTEcount))) MNG_ERROR (pData, MNG_GLOBALLENGTHERR); } else { iRawlen2 = iRawlen; pRawdata2 = pRawdata; } switch (pData->iColortype) /* store fields for future reference */ { case 0: { /* gray */ pBuf->iTRNSgray = mng_get_uint16 (pRawdata2); pBuf->iTRNSred = 0; pBuf->iTRNSgreen = 0; pBuf->iTRNSblue = 0; pBuf->iTRNScount = 0; #if defined(MNG_NO_16BIT_SUPPORT) if (pData->iPNGmult == 2) pBuf->iTRNSgray >>= 8; #endif break; } case 2: { /* rgb */ pBuf->iTRNSgray = 0; pBuf->iTRNSred = mng_get_uint16 (pRawdata2); pBuf->iTRNSgreen = mng_get_uint16 (pRawdata2+2); pBuf->iTRNSblue = mng_get_uint16 (pRawdata2+4); pBuf->iTRNScount = 0; #if defined(MNG_NO_16BIT_SUPPORT) if (pData->iPNGmult == 2) { pBuf->iTRNSred >>= 8; pBuf->iTRNSgreen >>= 8; pBuf->iTRNSblue >>= 8; } #endif break; } case 3: { /* indexed */ pBuf->iTRNSgray = 0; pBuf->iTRNSred = 0; pBuf->iTRNSgreen = 0; pBuf->iTRNSblue = 0; pBuf->iTRNScount = iRawlen2; MNG_COPY (pBuf->aTRNSentries, pRawdata2, iRawlen2); break; } } } } else /* store as global */ { pData->iGlobalTRNSrawlen = iRawlen; MNG_COPY (pData->aGlobalTRNSrawdata, pRawdata, iRawlen); { /* create an animation object */ mng_retcode iRetcode = mng_create_ani_trns (pData, pData->iGlobalTRNSrawlen, pData->aGlobalTRNSrawdata); if (iRetcode) /* on error bail out */ return iRetcode; } } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { /* not global! */ ((mng_trnsp)*ppChunk)->bGlobal = MNG_FALSE; ((mng_trnsp)*ppChunk)->iType = pData->iColortype; if (iRawlen == 0) /* if empty, indicate so */ ((mng_trnsp)*ppChunk)->bEmpty = MNG_TRUE; else { ((mng_trnsp)*ppChunk)->bEmpty = MNG_FALSE; switch (pData->iColortype) /* store fields */ { case 0: { /* gray */ ((mng_trnsp)*ppChunk)->iGray = mng_get_uint16 (pRawdata); break; } case 2: { /* rgb */ ((mng_trnsp)*ppChunk)->iRed = mng_get_uint16 (pRawdata); ((mng_trnsp)*ppChunk)->iGreen = mng_get_uint16 (pRawdata+2); ((mng_trnsp)*ppChunk)->iBlue = mng_get_uint16 (pRawdata+4); break; } case 3: { /* indexed */ ((mng_trnsp)*ppChunk)->iCount = iRawlen; MNG_COPY (((mng_trnsp)*ppChunk)->aEntries, pRawdata, iRawlen); break; } } } } else /* it's global! */ { ((mng_trnsp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); ((mng_trnsp)*ppChunk)->bGlobal = MNG_TRUE; ((mng_trnsp)*ppChunk)->iType = 0; ((mng_trnsp)*ppChunk)->iRawlen = iRawlen; MNG_COPY (((mng_trnsp)*ppChunk)->aRawdata, pRawdata, iRawlen); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_TRNS, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER READ_CHUNK (mng_read_gama) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_GAMA, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIDAT) || (pData->bHasPLTE) || (pData->bHasJDAT) || (pData->bHasJDAA)) #else if ((pData->bHasIDAT) || (pData->bHasPLTE)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { /* length must be exactly 4 */ if (iRawlen != 4) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else { /* length must be empty or exactly 4 */ if ((iRawlen != 0) && (iRawlen != 4)) MNG_ERROR (pData, MNG_INVALIDLENGTH); } #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif pData->bHasGAMA = MNG_TRUE; /* indicate we've got it */ else pData->bHasglobalGAMA = (mng_bool)(iRawlen != 0); #ifdef MNG_SUPPORT_DISPLAY #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { mng_imagep pImage; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* update delta image ? */ { /* store in object 0 ! */ pImage = (mng_imagep)pData->pObjzero; /* store for color-processing routines */ pImage->pImgbuf->iGamma = mng_get_uint32 (pRawdata); pImage->pImgbuf->bHasGAMA = MNG_TRUE; } else #endif { pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; /* store for color-processing routines */ pImage->pImgbuf->iGamma = mng_get_uint32 (pRawdata); pImage->pImgbuf->bHasGAMA = MNG_TRUE; } } else { /* store as global */ if (iRawlen != 0) pData->iGlobalGamma = mng_get_uint32 (pRawdata); { /* create an animation object */ mng_retcode iRetcode = mng_create_ani_gama (pData, (mng_bool)(iRawlen == 0), pData->iGlobalGamma); if (iRetcode) /* on error bail out */ return iRetcode; } } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_gamap)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); if (iRawlen) ((mng_gamap)*ppChunk)->iGamma = mng_get_uint32 (pRawdata); } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_GAMA, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_cHRM READ_CHUNK (mng_read_chrm) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_CHRM, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIDAT) || (pData->bHasPLTE) || (pData->bHasJDAT) || (pData->bHasJDAA)) #else if ((pData->bHasIDAT) || (pData->bHasPLTE)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { /* length must be exactly 32 */ if (iRawlen != 32) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else { /* length must be empty or exactly 32 */ if ((iRawlen != 0) && (iRawlen != 32)) MNG_ERROR (pData, MNG_INVALIDLENGTH); } #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif pData->bHasCHRM = MNG_TRUE; /* indicate we've got it */ else pData->bHasglobalCHRM = (mng_bool)(iRawlen != 0); #ifdef MNG_SUPPORT_DISPLAY { mng_uint32 iWhitepointx, iWhitepointy; mng_uint32 iPrimaryredx, iPrimaryredy; mng_uint32 iPrimarygreenx, iPrimarygreeny; mng_uint32 iPrimarybluex, iPrimarybluey; iWhitepointx = mng_get_uint32 (pRawdata); iWhitepointy = mng_get_uint32 (pRawdata+4); iPrimaryredx = mng_get_uint32 (pRawdata+8); iPrimaryredy = mng_get_uint32 (pRawdata+12); iPrimarygreenx = mng_get_uint32 (pRawdata+16); iPrimarygreeny = mng_get_uint32 (pRawdata+20); iPrimarybluex = mng_get_uint32 (pRawdata+24); iPrimarybluey = mng_get_uint32 (pRawdata+28); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { mng_imagep pImage; mng_imagedatap pBuf; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* update delta image ? */ { /* store it in object 0 ! */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address object buffer */ pBuf->bHasCHRM = MNG_TRUE; /* and tell it it's got a CHRM now */ /* store for color-processing routines */ pBuf->iWhitepointx = iWhitepointx; pBuf->iWhitepointy = iWhitepointy; pBuf->iPrimaryredx = iPrimaryredx; pBuf->iPrimaryredy = iPrimaryredy; pBuf->iPrimarygreenx = iPrimarygreenx; pBuf->iPrimarygreeny = iPrimarygreeny; pBuf->iPrimarybluex = iPrimarybluex; pBuf->iPrimarybluey = iPrimarybluey; } else #endif { pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address object buffer */ pBuf->bHasCHRM = MNG_TRUE; /* and tell it it's got a CHRM now */ /* store for color-processing routines */ pBuf->iWhitepointx = iWhitepointx; pBuf->iWhitepointy = iWhitepointy; pBuf->iPrimaryredx = iPrimaryredx; pBuf->iPrimaryredy = iPrimaryredy; pBuf->iPrimarygreenx = iPrimarygreenx; pBuf->iPrimarygreeny = iPrimarygreeny; pBuf->iPrimarybluex = iPrimarybluex; pBuf->iPrimarybluey = iPrimarybluey; } } else { /* store as global */ if (iRawlen != 0) { pData->iGlobalWhitepointx = iWhitepointx; pData->iGlobalWhitepointy = iWhitepointy; pData->iGlobalPrimaryredx = iPrimaryredx; pData->iGlobalPrimaryredy = iPrimaryredy; pData->iGlobalPrimarygreenx = iPrimarygreenx; pData->iGlobalPrimarygreeny = iPrimarygreeny; pData->iGlobalPrimarybluex = iPrimarybluex; pData->iGlobalPrimarybluey = iPrimarybluey; } { /* create an animation object */ mng_retcode iRetcode = mng_create_ani_chrm (pData, (mng_bool)(iRawlen == 0), iWhitepointx, iWhitepointy, iPrimaryredx, iPrimaryredy, iPrimarygreenx, iPrimarygreeny, iPrimarybluex, iPrimarybluey); if (iRetcode) /* on error bail out */ return iRetcode; } } } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_chrmp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); if (iRawlen) { ((mng_chrmp)*ppChunk)->iWhitepointx = mng_get_uint32 (pRawdata); ((mng_chrmp)*ppChunk)->iWhitepointy = mng_get_uint32 (pRawdata+4); ((mng_chrmp)*ppChunk)->iRedx = mng_get_uint32 (pRawdata+8); ((mng_chrmp)*ppChunk)->iRedy = mng_get_uint32 (pRawdata+12); ((mng_chrmp)*ppChunk)->iGreenx = mng_get_uint32 (pRawdata+16); ((mng_chrmp)*ppChunk)->iGreeny = mng_get_uint32 (pRawdata+20); ((mng_chrmp)*ppChunk)->iBluex = mng_get_uint32 (pRawdata+24); ((mng_chrmp)*ppChunk)->iBluey = mng_get_uint32 (pRawdata+28); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_CHRM, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER READ_CHUNK (mng_read_srgb) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SRGB, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIDAT) || (pData->bHasPLTE) || (pData->bHasJDAT) || (pData->bHasJDAA)) #else if ((pData->bHasIDAT) || (pData->bHasPLTE)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { /* length must be exactly 1 */ if (iRawlen != 1) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else { /* length must be empty or exactly 1 */ if ((iRawlen != 0) && (iRawlen != 1)) MNG_ERROR (pData, MNG_INVALIDLENGTH); } #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif pData->bHasSRGB = MNG_TRUE; /* indicate we've got it */ else pData->bHasglobalSRGB = (mng_bool)(iRawlen != 0); #ifdef MNG_SUPPORT_DISPLAY #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { mng_imagep pImage; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* update delta image ? */ { /* store in object 0 ! */ pImage = (mng_imagep)pData->pObjzero; /* store for color-processing routines */ pImage->pImgbuf->iRenderingintent = *pRawdata; pImage->pImgbuf->bHasSRGB = MNG_TRUE; } else #endif { pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; /* store for color-processing routines */ pImage->pImgbuf->iRenderingintent = *pRawdata; pImage->pImgbuf->bHasSRGB = MNG_TRUE; } } else { /* store as global */ if (iRawlen != 0) pData->iGlobalRendintent = *pRawdata; { /* create an animation object */ mng_retcode iRetcode = mng_create_ani_srgb (pData, (mng_bool)(iRawlen == 0), pData->iGlobalRendintent); if (iRetcode) /* on error bail out */ return iRetcode; } } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_srgbp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); if (iRawlen) ((mng_srgbp)*ppChunk)->iRenderingintent = *pRawdata; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SRGB, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_iCCP READ_CHUNK (mng_read_iccp) { mng_retcode iRetcode; mng_uint8p pTemp; mng_uint32 iCompressedsize; mng_uint32 iProfilesize; mng_uint32 iBufsize = 0; mng_uint8p pBuf = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_ICCP, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIDAT) || (pData->bHasPLTE) || (pData->bHasJDAT) || (pData->bHasJDAA)) #else if ((pData->bHasIDAT) || (pData->bHasPLTE)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { /* length must be at least 2 */ if (iRawlen < 2) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else { /* length must be empty or at least 2 */ if ((iRawlen != 0) && (iRawlen < 2)) MNG_ERROR (pData, MNG_INVALIDLENGTH); } pTemp = find_null (pRawdata); /* find null-separator */ /* not found inside input-data ? */ if ((pTemp - pRawdata) > (mng_int32)iRawlen) MNG_ERROR (pData, MNG_NULLNOTFOUND); /* determine size of compressed profile */ iCompressedsize = (mng_uint32)(iRawlen - (pTemp - pRawdata) - 2); /* decompress the profile */ iRetcode = mng_inflate_buffer (pData, pTemp+2, iCompressedsize, &pBuf, &iBufsize, &iProfilesize); #ifdef MNG_CHECK_BAD_ICCP /* Check for bad iCCP chunk */ if ((iRetcode) && (!strncmp ((char *)pRawdata, "Photoshop ICC profile", 21))) { if (iRawlen == 2615) /* is it the sRGB profile ? */ { mng_chunk_header chunk_srgb = #ifdef MNG_OPTIMIZE_CHUNKINITFREE {MNG_UINT_sRGB, mng_init_general, mng_free_general, mng_read_srgb, mng_write_srgb, mng_assign_general, 0, 0, sizeof(mng_srgb)}; #else {MNG_UINT_sRGB, mng_init_srgb, mng_free_srgb, mng_read_srgb, mng_write_srgb, mng_assign_srgb, 0, 0}; #endif /* pretend it's an sRGB chunk then ! */ iRetcode = mng_read_srgb (pData, &chunk_srgb, 1, (mng_ptr)"0", ppChunk); if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffer */ MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } } } else { #endif /* MNG_CHECK_BAD_ICCP */ if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffer */ MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif pData->bHasICCP = MNG_TRUE; /* indicate we've got it */ else pData->bHasglobalICCP = (mng_bool)(iRawlen != 0); #ifdef MNG_SUPPORT_DISPLAY #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif { mng_imagep pImage; #ifndef MNG_NO_DELTA_PNG if (pData->bHasDHDR) /* update delta image ? */ { /* store in object 0 ! */ pImage = (mng_imagep)pData->pObjzero; if (pImage->pImgbuf->pProfile) /* profile existed ? */ MNG_FREEX (pData, pImage->pImgbuf->pProfile, pImage->pImgbuf->iProfilesize); /* allocate a buffer & copy it */ MNG_ALLOC (pData, pImage->pImgbuf->pProfile, iProfilesize); MNG_COPY (pImage->pImgbuf->pProfile, pBuf, iProfilesize); /* store its length as well */ pImage->pImgbuf->iProfilesize = iProfilesize; pImage->pImgbuf->bHasICCP = MNG_TRUE; } else #endif { pImage = (mng_imagep)pData->pCurrentobj; if (!pImage) /* no object then dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; if (pImage->pImgbuf->pProfile) /* profile existed ? */ MNG_FREEX (pData, pImage->pImgbuf->pProfile, pImage->pImgbuf->iProfilesize); /* allocate a buffer & copy it */ MNG_ALLOC (pData, pImage->pImgbuf->pProfile, iProfilesize); MNG_COPY (pImage->pImgbuf->pProfile, pBuf, iProfilesize); /* store its length as well */ pImage->pImgbuf->iProfilesize = iProfilesize; pImage->pImgbuf->bHasICCP = MNG_TRUE; } } else { /* store as global */ if (iRawlen == 0) /* empty chunk ? */ { if (pData->pGlobalProfile) /* did we have a global profile ? */ MNG_FREEX (pData, pData->pGlobalProfile, pData->iGlobalProfilesize); pData->iGlobalProfilesize = 0; /* reset to null */ pData->pGlobalProfile = MNG_NULL; } else { /* allocate a global buffer & copy it */ MNG_ALLOC (pData, pData->pGlobalProfile, iProfilesize); MNG_COPY (pData->pGlobalProfile, pBuf, iProfilesize); /* store its length as well */ pData->iGlobalProfilesize = iProfilesize; } /* create an animation object */ iRetcode = mng_create_ani_iccp (pData, (mng_bool)(iRawlen == 0), pData->iGlobalProfilesize, pData->pGlobalProfile); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffer */ MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } /* store the fields */ ((mng_iccpp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); if (iRawlen) /* not empty ? */ { if (!pBuf) /* hasn't been unpuzzled it yet ? */ { /* find null-separator */ pTemp = find_null (pRawdata); /* not found inside input-data ? */ if ((pTemp - pRawdata) > (mng_int32)iRawlen) MNG_ERROR (pData, MNG_NULLNOTFOUND); /* determine size of compressed profile */ iCompressedsize = iRawlen - (pTemp - pRawdata) - 2; /* decompress the profile */ iRetcode = mng_inflate_buffer (pData, pTemp+2, iCompressedsize, &pBuf, &iBufsize, &iProfilesize); if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffer */ MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } } ((mng_iccpp)*ppChunk)->iNamesize = (mng_uint32)(pTemp - pRawdata); if (((mng_iccpp)*ppChunk)->iNamesize) { MNG_ALLOC (pData, ((mng_iccpp)*ppChunk)->zName, ((mng_iccpp)*ppChunk)->iNamesize + 1); MNG_COPY (((mng_iccpp)*ppChunk)->zName, pRawdata, ((mng_iccpp)*ppChunk)->iNamesize); } ((mng_iccpp)*ppChunk)->iCompression = *(pTemp+1); ((mng_iccpp)*ppChunk)->iProfilesize = iProfilesize; MNG_ALLOC (pData, ((mng_iccpp)*ppChunk)->pProfile, iProfilesize); MNG_COPY (((mng_iccpp)*ppChunk)->pProfile, pBuf, iProfilesize); } } #endif /* MNG_STORE_CHUNKS */ if (pBuf) /* free the temporary buffer */ MNG_FREEX (pData, pBuf, iBufsize); #ifdef MNG_CHECK_BAD_ICCP } #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_ICCP, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_tEXt READ_CHUNK (mng_read_text) { mng_uint32 iKeywordlen, iTextlen; mng_pchar zKeyword, zText; mng_uint8p pTemp; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_TEXT, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen < 2) /* length must be at least 2 */ MNG_ERROR (pData, MNG_INVALIDLENGTH); pTemp = find_null (pRawdata); /* find the null separator */ /* not found inside input-data ? */ if ((pTemp - pRawdata) > (mng_int32)iRawlen) MNG_ERROR (pData, MNG_NULLNOTFOUND); if (pTemp == pRawdata) /* there must be at least 1 char for keyword */ MNG_ERROR (pData, MNG_KEYWORDNULL); iKeywordlen = (mng_uint32)(pTemp - pRawdata); iTextlen = iRawlen - iKeywordlen - 1; if (pData->fProcesstext) /* inform the application ? */ { mng_bool bOke; MNG_ALLOC (pData, zKeyword, iKeywordlen + 1); MNG_COPY (zKeyword, pRawdata, iKeywordlen); MNG_ALLOCX (pData, zText, iTextlen + 1); if (!zText) /* on error bail out */ { MNG_FREEX (pData, zKeyword, iKeywordlen + 1); MNG_ERROR (pData, MNG_OUTOFMEMORY); } if (iTextlen) MNG_COPY (zText, pTemp+1, iTextlen); bOke = pData->fProcesstext ((mng_handle)pData, MNG_TYPE_TEXT, zKeyword, zText, 0, 0); MNG_FREEX (pData, zText, iTextlen + 1); MNG_FREEX (pData, zKeyword, iKeywordlen + 1); if (!bOke) MNG_ERROR (pData, MNG_APPMISCERROR); } #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_textp)*ppChunk)->iKeywordsize = iKeywordlen; ((mng_textp)*ppChunk)->iTextsize = iTextlen; if (iKeywordlen) { MNG_ALLOC (pData, ((mng_textp)*ppChunk)->zKeyword, iKeywordlen+1); MNG_COPY (((mng_textp)*ppChunk)->zKeyword, pRawdata, iKeywordlen); } if (iTextlen) { MNG_ALLOC (pData, ((mng_textp)*ppChunk)->zText, iTextlen+1); MNG_COPY (((mng_textp)*ppChunk)->zText, pTemp+1, iTextlen); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_TEXT, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_zTXt READ_CHUNK (mng_read_ztxt) { mng_retcode iRetcode; mng_uint32 iKeywordlen, iTextlen; mng_pchar zKeyword; mng_uint8p pTemp; mng_uint32 iCompressedsize; mng_uint32 iBufsize; mng_uint8p pBuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_ZTXT, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen < 3) /* length must be at least 3 */ MNG_ERROR (pData, MNG_INVALIDLENGTH); pTemp = find_null (pRawdata); /* find the null separator */ /* not found inside input-data ? */ if ((pTemp - pRawdata) > (mng_int32)iRawlen) MNG_ERROR (pData, MNG_NULLNOTFOUND); if (pTemp == pRawdata) /* there must be at least 1 char for keyword */ MNG_ERROR (pData, MNG_KEYWORDNULL); if (*(pTemp+1) != 0) /* only deflate compression-method allowed */ MNG_ERROR (pData, MNG_INVALIDCOMPRESS); iKeywordlen = (mng_uint32)(pTemp - pRawdata); iCompressedsize = (mng_uint32)(iRawlen - iKeywordlen - 2); zKeyword = 0; /* there's no keyword buffer yet */ pBuf = 0; /* or a temporary buffer ! */ if (pData->fProcesstext) /* inform the application ? */ { /* decompress the text */ iRetcode = mng_inflate_buffer (pData, pTemp+2, iCompressedsize, &pBuf, &iBufsize, &iTextlen); if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } MNG_ALLOCX (pData, zKeyword, iKeywordlen+1); if (!zKeyword) /* on error bail out */ { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, MNG_OUTOFMEMORY); } MNG_COPY (zKeyword, pRawdata, iKeywordlen); if (!pData->fProcesstext ((mng_handle)pData, MNG_TYPE_ZTXT, zKeyword, (mng_pchar)pBuf, 0, 0)) { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, pBuf, iBufsize); MNG_FREEX (pData, zKeyword, iKeywordlen+1); MNG_ERROR (pData, MNG_APPMISCERROR); } } #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, pBuf, iBufsize); MNG_FREEX (pData, zKeyword, iKeywordlen+1); return iRetcode; } /* store the fields */ ((mng_ztxtp)*ppChunk)->iKeywordsize = iKeywordlen; ((mng_ztxtp)*ppChunk)->iCompression = *(pTemp+1); if ((!pBuf) && (iCompressedsize)) /* did we not get a text-buffer yet ? */ { /* decompress the text */ iRetcode = mng_inflate_buffer (pData, pTemp+2, iCompressedsize, &pBuf, &iBufsize, &iTextlen); if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, pBuf, iBufsize); MNG_FREEX (pData, zKeyword, iKeywordlen+1); return iRetcode; } } MNG_ALLOCX (pData, ((mng_ztxtp)*ppChunk)->zKeyword, iKeywordlen + 1); /* on error bail out */ if (!((mng_ztxtp)*ppChunk)->zKeyword) { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, pBuf, iBufsize); MNG_FREEX (pData, zKeyword, iKeywordlen+1); MNG_ERROR (pData, MNG_OUTOFMEMORY); } MNG_COPY (((mng_ztxtp)*ppChunk)->zKeyword, pRawdata, iKeywordlen); ((mng_ztxtp)*ppChunk)->iTextsize = iTextlen; if (iCompressedsize) { MNG_ALLOCX (pData, ((mng_ztxtp)*ppChunk)->zText, iTextlen + 1); /* on error bail out */ if (!((mng_ztxtp)*ppChunk)->zText) { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, pBuf, iBufsize); MNG_FREEX (pData, zKeyword, iKeywordlen+1); MNG_ERROR (pData, MNG_OUTOFMEMORY); } MNG_COPY (((mng_ztxtp)*ppChunk)->zText, pBuf, iTextlen); } } #endif /* MNG_STORE_CHUNKS */ MNG_FREEX (pData, pBuf, iBufsize); /* free the temporary buffers */ MNG_FREEX (pData, zKeyword, iKeywordlen+1); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_ZTXT, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_iTXt READ_CHUNK (mng_read_itxt) { mng_retcode iRetcode; mng_uint32 iKeywordlen, iTextlen, iLanguagelen, iTranslationlen; mng_pchar zKeyword, zLanguage, zTranslation; mng_uint8p pNull1, pNull2, pNull3; mng_uint32 iCompressedsize; mng_uint8 iCompressionflag; mng_uint32 iBufsize; mng_uint8p pBuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_ITXT, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen < 6) /* length must be at least 6 */ MNG_ERROR (pData, MNG_INVALIDLENGTH); pNull1 = find_null (pRawdata); /* find the null separators */ pNull2 = find_null (pNull1+3); pNull3 = find_null (pNull2+1); /* not found inside input-data ? */ if (((pNull1 - pRawdata) > (mng_int32)iRawlen) || ((pNull2 - pRawdata) > (mng_int32)iRawlen) || ((pNull3 - pRawdata) > (mng_int32)iRawlen) ) MNG_ERROR (pData, MNG_NULLNOTFOUND); if (pNull1 == pRawdata) /* there must be at least 1 char for keyword */ MNG_ERROR (pData, MNG_KEYWORDNULL); /* compression or not ? */ if ((*(pNull1+1) != 0) && (*(pNull1+1) != 1)) MNG_ERROR (pData, MNG_INVALIDCOMPRESS); if (*(pNull1+2) != 0) /* only deflate compression-method allowed */ MNG_ERROR (pData, MNG_INVALIDCOMPRESS); iKeywordlen = (mng_uint32)(pNull1 - pRawdata); iLanguagelen = (mng_uint32)(pNull2 - pNull1 - 3); iTranslationlen = (mng_uint32)(pNull3 - pNull2 - 1); iCompressedsize = (mng_uint32)(iRawlen - iKeywordlen - iLanguagelen - iTranslationlen - 5); iCompressionflag = *(pNull1+1); zKeyword = 0; /* no buffers acquired yet */ zLanguage = 0; zTranslation = 0; pBuf = 0; iTextlen = 0; if (pData->fProcesstext) /* inform the application ? */ { if (iCompressionflag) /* decompress the text ? */ { iRetcode = mng_inflate_buffer (pData, pNull3+1, iCompressedsize, &pBuf, &iBufsize, &iTextlen); if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffer */ MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } } else { iTextlen = iCompressedsize; iBufsize = iTextlen+1; /* plus 1 for terminator byte!!! */ MNG_ALLOC (pData, pBuf, iBufsize); MNG_COPY (pBuf, pNull3+1, iTextlen); } MNG_ALLOCX (pData, zKeyword, iKeywordlen + 1); MNG_ALLOCX (pData, zLanguage, iLanguagelen + 1); MNG_ALLOCX (pData, zTranslation, iTranslationlen + 1); /* on error bail out */ if ((!zKeyword) || (!zLanguage) || (!zTranslation)) { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, zTranslation, iTranslationlen + 1); MNG_FREEX (pData, zLanguage, iLanguagelen + 1); MNG_FREEX (pData, zKeyword, iKeywordlen + 1); MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, MNG_OUTOFMEMORY); } MNG_COPY (zKeyword, pRawdata, iKeywordlen); MNG_COPY (zLanguage, pNull1+3, iLanguagelen); MNG_COPY (zTranslation, pNull2+1, iTranslationlen); if (!pData->fProcesstext ((mng_handle)pData, MNG_TYPE_ITXT, zKeyword, (mng_pchar)pBuf, zLanguage, zTranslation)) { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, zTranslation, iTranslationlen + 1); MNG_FREEX (pData, zLanguage, iLanguagelen + 1); MNG_FREEX (pData, zKeyword, iKeywordlen + 1); MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, MNG_APPMISCERROR); } } #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, zTranslation, iTranslationlen + 1); MNG_FREEX (pData, zLanguage, iLanguagelen + 1); MNG_FREEX (pData, zKeyword, iKeywordlen + 1); MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } /* store the fields */ ((mng_itxtp)*ppChunk)->iKeywordsize = iKeywordlen; ((mng_itxtp)*ppChunk)->iLanguagesize = iLanguagelen; ((mng_itxtp)*ppChunk)->iTranslationsize = iTranslationlen; ((mng_itxtp)*ppChunk)->iCompressionflag = *(pNull1+1); ((mng_itxtp)*ppChunk)->iCompressionmethod = *(pNull1+2); if ((!pBuf) && (iCompressedsize)) /* did we not get a text-buffer yet ? */ { if (iCompressionflag) /* decompress the text ? */ { iRetcode = mng_inflate_buffer (pData, pNull3+1, iCompressedsize, &pBuf, &iBufsize, &iTextlen); if (iRetcode) /* on error bail out */ { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, zTranslation, iTranslationlen + 1); MNG_FREEX (pData, zLanguage, iLanguagelen + 1); MNG_FREEX (pData, zKeyword, iKeywordlen + 1); MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } } else { iTextlen = iCompressedsize; iBufsize = iTextlen+1; /* plus 1 for terminator byte!!! */ MNG_ALLOC (pData, pBuf, iBufsize); MNG_COPY (pBuf, pNull3+1, iTextlen); } } MNG_ALLOCX (pData, ((mng_itxtp)*ppChunk)->zKeyword, iKeywordlen + 1); MNG_ALLOCX (pData, ((mng_itxtp)*ppChunk)->zLanguage, iLanguagelen + 1); MNG_ALLOCX (pData, ((mng_itxtp)*ppChunk)->zTranslation, iTranslationlen + 1); /* on error bail out */ if ((!((mng_itxtp)*ppChunk)->zKeyword ) || (!((mng_itxtp)*ppChunk)->zLanguage ) || (!((mng_itxtp)*ppChunk)->zTranslation) ) { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, zTranslation, iTranslationlen + 1); MNG_FREEX (pData, zLanguage, iLanguagelen + 1); MNG_FREEX (pData, zKeyword, iKeywordlen + 1); MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, MNG_OUTOFMEMORY); } MNG_COPY (((mng_itxtp)*ppChunk)->zKeyword, pRawdata, iKeywordlen); MNG_COPY (((mng_itxtp)*ppChunk)->zLanguage, pNull1+3, iLanguagelen); MNG_COPY (((mng_itxtp)*ppChunk)->zTranslation, pNull2+1, iTranslationlen); ((mng_itxtp)*ppChunk)->iTextsize = iTextlen; if (iTextlen) { MNG_ALLOCX (pData, ((mng_itxtp)*ppChunk)->zText, iTextlen + 1); if (!((mng_itxtp)*ppChunk)->zText) { /* don't forget to drop the temp buffers */ MNG_FREEX (pData, zTranslation, iTranslationlen + 1); MNG_FREEX (pData, zLanguage, iLanguagelen + 1); MNG_FREEX (pData, zKeyword, iKeywordlen + 1); MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, MNG_OUTOFMEMORY); } MNG_COPY (((mng_itxtp)*ppChunk)->zText, pBuf, iTextlen); } } #endif /* MNG_STORE_CHUNKS */ /* free the temporary buffers */ MNG_FREEX (pData, zTranslation, iTranslationlen + 1); MNG_FREEX (pData, zLanguage, iLanguagelen + 1); MNG_FREEX (pData, zKeyword, iKeywordlen + 1); MNG_FREEX (pData, pBuf, iBufsize); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_ITXT, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_bKGD READ_CHUNK (mng_read_bkgd) { #ifdef MNG_SUPPORT_DISPLAY mng_imagep pImage = (mng_imagep)pData->pCurrentobj; mng_imagedatap pBuf; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_BKGD, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIDAT) || (pData->bHasJDAT) || (pData->bHasJDAA)) #else if (pData->bHasIDAT) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen > 6) /* it just can't be bigger than that! */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_INCLUDE_JNG /* length checks */ if (pData->bHasJHDR) { if (((pData->iJHDRcolortype == 8) || (pData->iJHDRcolortype == 12)) && (iRawlen != 2)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if (((pData->iJHDRcolortype == 10) || (pData->iJHDRcolortype == 14)) && (iRawlen != 6)) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else #endif /* MNG_INCLUDE_JNG */ if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { if (((pData->iColortype == 0) || (pData->iColortype == 4)) && (iRawlen != 2)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if (((pData->iColortype == 2) || (pData->iColortype == 6)) && (iRawlen != 6)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->iColortype == 3) && (iRawlen != 1)) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else { if (iRawlen != 6) /* global is always 16-bit RGB ! */ MNG_ERROR (pData, MNG_INVALIDLENGTH); } #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif pData->bHasBKGD = MNG_TRUE; /* indicate bKGD available */ else pData->bHasglobalBKGD = (mng_bool)(iRawlen != 0); #ifdef MNG_SUPPORT_DISPLAY if (!pImage) /* if no object dump it in obj 0 */ pImage = (mng_imagep)pData->pObjzero; pBuf = pImage->pImgbuf; /* address object buffer */ #ifdef MNG_INCLUDE_JNG if (pData->bHasJHDR) { pBuf->bHasBKGD = MNG_TRUE; /* tell the object it's got bKGD now */ switch (pData->iJHDRcolortype) /* store fields for future reference */ { case 8 : ; /* gray */ case 12 : { /* graya */ pBuf->iBKGDgray = mng_get_uint16 (pRawdata); break; } case 10 : ; /* rgb */ case 14 : { /* rgba */ pBuf->iBKGDred = mng_get_uint16 (pRawdata); pBuf->iBKGDgreen = mng_get_uint16 (pRawdata+2); pBuf->iBKGDblue = mng_get_uint16 (pRawdata+4); break; } } } else #endif /* MNG_INCLUDE_JNG */ if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { pBuf->bHasBKGD = MNG_TRUE; /* tell the object it's got bKGD now */ switch (pData->iColortype) /* store fields for future reference */ { case 0 : ; /* gray */ case 4 : { /* graya */ pBuf->iBKGDgray = mng_get_uint16 (pRawdata); break; } case 2 : ; /* rgb */ case 6 : { /* rgba */ pBuf->iBKGDred = mng_get_uint16 (pRawdata); pBuf->iBKGDgreen = mng_get_uint16 (pRawdata+2); pBuf->iBKGDblue = mng_get_uint16 (pRawdata+4); break; } case 3 : { /* indexed */ pBuf->iBKGDindex = *pRawdata; break; } } } else /* store as global */ { if (iRawlen) { pData->iGlobalBKGDred = mng_get_uint16 (pRawdata); pData->iGlobalBKGDgreen = mng_get_uint16 (pRawdata+2); pData->iGlobalBKGDblue = mng_get_uint16 (pRawdata+4); } { /* create an animation object */ mng_retcode iRetcode = mng_create_ani_bkgd (pData, pData->iGlobalBKGDred, pData->iGlobalBKGDgreen, pData->iGlobalBKGDblue); if (iRetcode) /* on error bail out */ return iRetcode; } } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_bkgdp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); ((mng_bkgdp)*ppChunk)->iType = pData->iColortype; if (iRawlen) { switch (iRawlen) /* guess from length */ { case 1 : { /* indexed */ ((mng_bkgdp)*ppChunk)->iType = 3; ((mng_bkgdp)*ppChunk)->iIndex = *pRawdata; break; } case 2 : { /* gray */ ((mng_bkgdp)*ppChunk)->iType = 0; ((mng_bkgdp)*ppChunk)->iGray = mng_get_uint16 (pRawdata); break; } case 6 : { /* rgb */ ((mng_bkgdp)*ppChunk)->iType = 2; ((mng_bkgdp)*ppChunk)->iRed = mng_get_uint16 (pRawdata); ((mng_bkgdp)*ppChunk)->iGreen = mng_get_uint16 (pRawdata+2); ((mng_bkgdp)*ppChunk)->iBlue = mng_get_uint16 (pRawdata+4); break; } } } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_BKGD, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_pHYs READ_CHUNK (mng_read_phys) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PHYS, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIDAT) || (pData->bHasJDAT) || (pData->bHasJDAA)) #else if (pData->bHasIDAT) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* it's 9 bytes or empty; no more, no less! */ if ((iRawlen != 9) && (iRawlen != 0)) MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_physp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); if (iRawlen) { ((mng_physp)*ppChunk)->iSizex = mng_get_uint32 (pRawdata); ((mng_physp)*ppChunk)->iSizey = mng_get_uint32 (pRawdata+4); ((mng_physp)*ppChunk)->iUnit = *(pRawdata+8); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PHYS, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_sBIT READ_CHUNK (mng_read_sbit) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SBIT, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasPLTE) || (pData->bHasIDAT) || (pData->bHasJDAT) || (pData->bHasJDAA)) #else if ((pData->bHasPLTE) || (pData->bHasIDAT)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen > 4) /* it just can't be bigger than that! */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_INCLUDE_JNG /* length checks */ if (pData->bHasJHDR) { if ((pData->iJHDRcolortype == 8) && (iRawlen != 1)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->iJHDRcolortype == 10) && (iRawlen != 3)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->iJHDRcolortype == 12) && (iRawlen != 2)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->iJHDRcolortype == 14) && (iRawlen != 4)) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else #endif /* MNG_INCLUDE_JNG */ if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) { if ((pData->iColortype == 0) && (iRawlen != 1)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->iColortype == 2) && (iRawlen != 3)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->iColortype == 3) && (iRawlen != 3)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->iColortype == 4) && (iRawlen != 2)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((pData->iColortype == 6) && (iRawlen != 4)) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else { /* global = empty or RGBA */ if ((iRawlen != 0) && (iRawlen != 4)) MNG_ERROR (pData, MNG_INVALIDLENGTH); } #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_sbitp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); if (iRawlen) { #ifdef MNG_INCLUDE_JNG if (pData->bHasJHDR) ((mng_sbitp)*ppChunk)->iType = pData->iJHDRcolortype; else #endif if (pData->bHasIHDR) ((mng_sbitp)*ppChunk)->iType = pData->iColortype; else /* global ! */ ((mng_sbitp)*ppChunk)->iType = 6; if (iRawlen > 0) ((mng_sbitp)*ppChunk)->aBits [0] = *pRawdata; if (iRawlen > 1) ((mng_sbitp)*ppChunk)->aBits [1] = *(pRawdata+1); if (iRawlen > 2) ((mng_sbitp)*ppChunk)->aBits [2] = *(pRawdata+2); if (iRawlen > 3) ((mng_sbitp)*ppChunk)->aBits [3] = *(pRawdata+3); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SBIT, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_sPLT READ_CHUNK (mng_read_splt) { mng_uint8p pTemp; mng_uint32 iNamelen; mng_uint8 iSampledepth; mng_uint32 iRemain; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SPLT, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (pData->bHasIDAT) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen) { pTemp = find_null (pRawdata); /* find null-separator */ /* not found inside input-data ? */ if ((pTemp - pRawdata) > (mng_int32)iRawlen) MNG_ERROR (pData, MNG_NULLNOTFOUND); iNamelen = (mng_uint32)(pTemp - pRawdata); iSampledepth = *(pTemp+1); iRemain = (iRawlen - 2 - iNamelen); if ((iSampledepth != 1) && (iSampledepth != 2)) MNG_ERROR (pData, MNG_INVSAMPLEDEPTH); /* check remaining length */ if ( ((iSampledepth == 1) && (iRemain % 6 != 0)) || ((iSampledepth == 2) && (iRemain % 10 != 0)) ) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else { pTemp = MNG_NULL; iNamelen = 0; iSampledepth = 0; iRemain = 0; } #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_spltp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); if (iRawlen) { ((mng_spltp)*ppChunk)->iNamesize = iNamelen; ((mng_spltp)*ppChunk)->iSampledepth = iSampledepth; if (iSampledepth == 1) ((mng_spltp)*ppChunk)->iEntrycount = iRemain / 6; else ((mng_spltp)*ppChunk)->iEntrycount = iRemain / 10; if (iNamelen) { MNG_ALLOC (pData, ((mng_spltp)*ppChunk)->zName, iNamelen+1); MNG_COPY (((mng_spltp)*ppChunk)->zName, pRawdata, iNamelen); } if (iRemain) { MNG_ALLOC (pData, ((mng_spltp)*ppChunk)->pEntries, iRemain); MNG_COPY (((mng_spltp)*ppChunk)->pEntries, pTemp+2, iRemain); } } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SPLT, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_hIST READ_CHUNK (mng_read_hist) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_HIST, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) MNG_ERROR (pData, MNG_SEQUENCEERROR); if ((!pData->bHasPLTE) || (pData->bHasIDAT)) MNG_ERROR (pData, MNG_SEQUENCEERROR); /* length oke ? */ if ( ((iRawlen & 0x01) != 0) || ((iRawlen >> 1) != pData->iPLTEcount) ) MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { mng_uint32 iX; /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_histp)*ppChunk)->iEntrycount = iRawlen >> 1; for (iX = 0; iX < (iRawlen >> 1); iX++) { ((mng_histp)*ppChunk)->aEntries [iX] = mng_get_uint16 (pRawdata); pRawdata += 2; } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_HIST, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_tIME READ_CHUNK (mng_read_time) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_TIME, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen != 7) /* length must be exactly 7 */ MNG_ERROR (pData, MNG_INVALIDLENGTH); /* if (pData->fProcesstime) */ /* inform the application ? */ /* { pData->fProcesstime ((mng_handle)pData, ); } */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_timep)*ppChunk)->iYear = mng_get_uint16 (pRawdata); ((mng_timep)*ppChunk)->iMonth = *(pRawdata+2); ((mng_timep)*ppChunk)->iDay = *(pRawdata+3); ((mng_timep)*ppChunk)->iHour = *(pRawdata+4); ((mng_timep)*ppChunk)->iMinute = *(pRawdata+5); ((mng_timep)*ppChunk)->iSecond = *(pRawdata+6); } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_TIME, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER READ_CHUNK (mng_read_mhdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_MHDR, MNG_LC_START); #endif if (pData->eSigtype != mng_it_mng) /* sequence checks */ MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); if (pData->bHasheader) /* can only be the first chunk! */ MNG_ERROR (pData, MNG_SEQUENCEERROR); /* correct length ? */ #ifndef MNG_NO_OLD_VERSIONS if ((iRawlen != 28) && (iRawlen != 12)) #else if ((iRawlen != 28)) #endif MNG_ERROR (pData, MNG_INVALIDLENGTH); pData->bHasMHDR = MNG_TRUE; /* oh boy, a real MNG */ pData->bHasheader = MNG_TRUE; /* we've got a header */ pData->eImagetype = mng_it_mng; /* fill header fields */ pData->iWidth = mng_get_uint32 (pRawdata); pData->iHeight = mng_get_uint32 (pRawdata+4); pData->iTicks = mng_get_uint32 (pRawdata+8); #ifndef MNG_NO_OLD_VERSIONS if (iRawlen == 28) /* proper MHDR ? */ { #endif pData->iLayercount = mng_get_uint32 (pRawdata+12); pData->iFramecount = mng_get_uint32 (pRawdata+16); pData->iPlaytime = mng_get_uint32 (pRawdata+20); pData->iSimplicity = mng_get_uint32 (pRawdata+24); #ifndef MNG_NO_OLD_VERSIONS pData->bPreDraft48 = MNG_FALSE; } else /* probably pre-draft48 then */ { pData->iLayercount = 0; pData->iFramecount = 0; pData->iPlaytime = 0; pData->iSimplicity = 0; pData->bPreDraft48 = MNG_TRUE; } #endif /* predict alpha-depth */ if ((pData->iSimplicity & 0x00000001) == 0) #ifndef MNG_NO_16BIT_SUPPORT pData->iAlphadepth = 16; /* no indicators = assume the worst */ #else pData->iAlphadepth = 8; /* anything else = assume the worst */ #endif else if ((pData->iSimplicity & 0x00000008) == 0) pData->iAlphadepth = 0; /* no transparency at all */ else if ((pData->iSimplicity & 0x00000140) == 0x00000040) pData->iAlphadepth = 1; /* no semi-transparency guaranteed */ else #ifndef MNG_NO_16BIT_SUPPORT pData->iAlphadepth = 16; /* anything else = assume the worst */ #else pData->iAlphadepth = 8; /* anything else = assume the worst */ #endif #ifdef MNG_INCLUDE_JNG /* can we handle the complexity ? */ if (pData->iSimplicity & 0x0000FC00) #else if (pData->iSimplicity & 0x0000FC10) #endif MNG_ERROR (pData, MNG_MNGTOOCOMPLEX); /* fits on maximum canvas ? */ if ((pData->iWidth > pData->iMaxwidth) || (pData->iHeight > pData->iMaxheight)) MNG_WARNING (pData, MNG_IMAGETOOLARGE); if (pData->fProcessheader) /* inform the app ? */ if (!pData->fProcessheader (((mng_handle)pData), pData->iWidth, pData->iHeight)) MNG_ERROR (pData, MNG_APPMISCERROR); pData->iImagelevel++; /* one level deeper */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_mhdrp)*ppChunk)->iWidth = pData->iWidth; ((mng_mhdrp)*ppChunk)->iHeight = pData->iHeight; ((mng_mhdrp)*ppChunk)->iTicks = pData->iTicks; ((mng_mhdrp)*ppChunk)->iLayercount = pData->iLayercount; ((mng_mhdrp)*ppChunk)->iFramecount = pData->iFramecount; ((mng_mhdrp)*ppChunk)->iPlaytime = pData->iPlaytime; ((mng_mhdrp)*ppChunk)->iSimplicity = pData->iSimplicity; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_MHDR, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER READ_CHUNK (mng_read_mend) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_MEND, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen > 0) /* must not contain data! */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { /* do something */ mng_retcode iRetcode = mng_process_display_mend (pData); if (iRetcode) /* on error bail out */ return iRetcode; if (!pData->iTotalframes) /* save totals */ pData->iTotalframes = pData->iFrameseq; if (!pData->iTotallayers) pData->iTotallayers = pData->iLayerseq; if (!pData->iTotalplaytime) pData->iTotalplaytime = pData->iFrametime; } #endif /* MNG_SUPPORT_DISPLAY */ pData->bHasMHDR = MNG_FALSE; /* end of the line, bro! */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_MEND, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_LOOP READ_CHUNK (mng_read_loop) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_LOOP, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); if (!pData->bCacheplayback) /* must store playback info to work!! */ MNG_ERROR (pData, MNG_LOOPWITHCACHEOFF); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen >= 5) /* length checks */ { if (iRawlen >= 6) { if ((iRawlen - 6) % 4 != 0) MNG_ERROR (pData, MNG_INVALIDLENGTH); } } else MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { mng_uint8 iLevel; mng_uint32 iRepeat; mng_uint8 iTermination = 0; mng_uint32 iItermin = 1; mng_uint32 iItermax = 0x7fffffffL; mng_retcode iRetcode; pData->bHasLOOP = MNG_TRUE; /* indicate we're inside a loop */ iLevel = *pRawdata; /* determine the fields for processing */ #ifndef MNG_NO_OLD_VERSIONS if (pData->bPreDraft48) { iTermination = *(pRawdata+1); iRepeat = mng_get_uint32 (pRawdata+2); } else #endif iRepeat = mng_get_uint32 (pRawdata+1); if (iRawlen >= 6) { #ifndef MNG_NO_OLD_VERSIONS if (!pData->bPreDraft48) #endif iTermination = *(pRawdata+5); if (iRawlen >= 10) { iItermin = mng_get_uint32 (pRawdata+6); if (iRawlen >= 14) { iItermax = mng_get_uint32 (pRawdata+10); /* TODO: process signals */ } } } /* create the LOOP ani-object */ iRetcode = mng_create_ani_loop (pData, iLevel, iRepeat, iTermination, iItermin, iItermax, 0, 0); if (iRetcode) /* on error bail out */ return iRetcode; /* skip till matching ENDL if iteration=0 */ if ((!pData->bSkipping) && (iRepeat == 0)) pData->bSkipping = MNG_TRUE; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; if (iRawlen >= 5) /* store the fields */ { ((mng_loopp)*ppChunk)->iLevel = *pRawdata; #ifndef MNG_NO_OLD_VERSIONS if (pData->bPreDraft48) { ((mng_loopp)*ppChunk)->iTermination = *(pRawdata+1); ((mng_loopp)*ppChunk)->iRepeat = mng_get_uint32 (pRawdata+2); } else #endif { ((mng_loopp)*ppChunk)->iRepeat = mng_get_uint32 (pRawdata+1); } if (iRawlen >= 6) { #ifndef MNG_NO_OLD_VERSIONS if (!pData->bPreDraft48) #endif ((mng_loopp)*ppChunk)->iTermination = *(pRawdata+5); if (iRawlen >= 10) { ((mng_loopp)*ppChunk)->iItermin = mng_get_uint32 (pRawdata+6); #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED if (iRawlen >= 14) { ((mng_loopp)*ppChunk)->iItermax = mng_get_uint32 (pRawdata+10); ((mng_loopp)*ppChunk)->iCount = (iRawlen - 14) / 4; if (((mng_loopp)*ppChunk)->iCount) { MNG_ALLOC (pData, ((mng_loopp)*ppChunk)->pSignals, ((mng_loopp)*ppChunk)->iCount << 2); #ifndef MNG_BIGENDIAN_SUPPORTED { mng_uint32 iX; mng_uint8p pIn = pRawdata + 14; mng_uint32p pOut = (mng_uint32p)((mng_loopp)*ppChunk)->pSignals; for (iX = 0; iX < ((mng_loopp)*ppChunk)->iCount; iX++) { *pOut++ = mng_get_uint32 (pIn); pIn += 4; } } #else MNG_COPY (((mng_loopp)*ppChunk)->pSignals, pRawdata + 14, ((mng_loopp)*ppChunk)->iCount << 2); #endif /* !MNG_BIGENDIAN_SUPPORTED */ } } #endif } } } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_LOOP, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_LOOP READ_CHUNK (mng_read_endl) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_ENDL, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen != 1) /* length must be exactly 1 */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { if (pData->bHasLOOP) /* are we really processing a loop ? */ { mng_uint8 iLevel = *pRawdata; /* get the nest level */ /* create an ENDL animation object */ mng_retcode iRetcode = mng_create_ani_endl (pData, iLevel); if (iRetcode) /* on error bail out */ return iRetcode; /* { mng_ani_endlp pENDL = (mng_ani_endlp)pData->pLastaniobj; iRetcode = pENDL->sHeader.fProcess (pData, pENDL); if (iRetcode) return iRetcode; } */ } else MNG_ERROR (pData, MNG_NOMATCHINGLOOP); } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_endlp)*ppChunk)->iLevel = *pRawdata; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_ENDL, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_DEFI READ_CHUNK (mng_read_defi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DEFI, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* check the length */ if ((iRawlen != 2) && (iRawlen != 3) && (iRawlen != 4) && (iRawlen != 12) && (iRawlen != 28)) MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode; pData->iDEFIobjectid = mng_get_uint16 (pRawdata); if (iRawlen > 2) { pData->bDEFIhasdonotshow = MNG_TRUE; pData->iDEFIdonotshow = *(pRawdata+2); } else { pData->bDEFIhasdonotshow = MNG_FALSE; pData->iDEFIdonotshow = 0; } if (iRawlen > 3) { pData->bDEFIhasconcrete = MNG_TRUE; pData->iDEFIconcrete = *(pRawdata+3); } else { pData->bDEFIhasconcrete = MNG_FALSE; pData->iDEFIconcrete = 0; } if (iRawlen > 4) { pData->bDEFIhasloca = MNG_TRUE; pData->iDEFIlocax = mng_get_int32 (pRawdata+4); pData->iDEFIlocay = mng_get_int32 (pRawdata+8); } else { pData->bDEFIhasloca = MNG_FALSE; pData->iDEFIlocax = 0; pData->iDEFIlocay = 0; } if (iRawlen > 12) { pData->bDEFIhasclip = MNG_TRUE; pData->iDEFIclipl = mng_get_int32 (pRawdata+12); pData->iDEFIclipr = mng_get_int32 (pRawdata+16); pData->iDEFIclipt = mng_get_int32 (pRawdata+20); pData->iDEFIclipb = mng_get_int32 (pRawdata+24); } else { pData->bDEFIhasclip = MNG_FALSE; pData->iDEFIclipl = 0; pData->iDEFIclipr = 0; pData->iDEFIclipt = 0; pData->iDEFIclipb = 0; } /* create an animation object */ iRetcode = mng_create_ani_defi (pData); if (!iRetcode) /* do display processing */ iRetcode = mng_process_display_defi (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_defip)*ppChunk)->iObjectid = mng_get_uint16 (pRawdata); if (iRawlen > 2) { ((mng_defip)*ppChunk)->bHasdonotshow = MNG_TRUE; ((mng_defip)*ppChunk)->iDonotshow = *(pRawdata+2); } else ((mng_defip)*ppChunk)->bHasdonotshow = MNG_FALSE; if (iRawlen > 3) { ((mng_defip)*ppChunk)->bHasconcrete = MNG_TRUE; ((mng_defip)*ppChunk)->iConcrete = *(pRawdata+3); } else ((mng_defip)*ppChunk)->bHasconcrete = MNG_FALSE; if (iRawlen > 4) { ((mng_defip)*ppChunk)->bHasloca = MNG_TRUE; ((mng_defip)*ppChunk)->iXlocation = mng_get_int32 (pRawdata+4); ((mng_defip)*ppChunk)->iYlocation = mng_get_int32 (pRawdata+8); } else ((mng_defip)*ppChunk)->bHasloca = MNG_FALSE; if (iRawlen > 12) { ((mng_defip)*ppChunk)->bHasclip = MNG_TRUE; ((mng_defip)*ppChunk)->iLeftcb = mng_get_int32 (pRawdata+12); ((mng_defip)*ppChunk)->iRightcb = mng_get_int32 (pRawdata+16); ((mng_defip)*ppChunk)->iTopcb = mng_get_int32 (pRawdata+20); ((mng_defip)*ppChunk)->iBottomcb = mng_get_int32 (pRawdata+24); } else ((mng_defip)*ppChunk)->bHasclip = MNG_FALSE; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DEFI, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_BASI READ_CHUNK (mng_read_basi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_BASI, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* check the length */ if ((iRawlen != 13) && (iRawlen != 19) && (iRawlen != 21) && (iRawlen != 22)) MNG_ERROR (pData, MNG_INVALIDLENGTH); pData->bHasBASI = MNG_TRUE; /* inside a BASI-IEND block now */ /* store interesting fields */ pData->iDatawidth = mng_get_uint32 (pRawdata); pData->iDataheight = mng_get_uint32 (pRawdata+4); pData->iBitdepth = *(pRawdata+8); pData->iColortype = *(pRawdata+9); pData->iCompression = *(pRawdata+10); pData->iFilter = *(pRawdata+11); pData->iInterlace = *(pRawdata+12); #if defined(MNG_NO_1_2_4BIT_SUPPORT) || defined(MNG_NO_16BIT_SUPPORT) pData->iPNGmult = 1; pData->iPNGdepth = pData->iBitdepth; #endif #ifdef MNG_NO_1_2_4BIT_SUPPORT if (pData->iBitdepth < 8) pData->iBitdepth = 8; #endif #ifdef MNG_NO_16BIT_SUPPORT if (pData->iBitdepth > 8) { pData->iBitdepth = 8; pData->iPNGmult = 2; } #endif if ((pData->iBitdepth != 8) /* parameter validity checks */ #ifndef MNG_NO_1_2_4BIT_SUPPORT && (pData->iBitdepth != 1) && (pData->iBitdepth != 2) && (pData->iBitdepth != 4) #endif #ifndef MNG_NO_16BIT_SUPPORT && (pData->iBitdepth != 16) #endif ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if ((pData->iColortype != MNG_COLORTYPE_GRAY ) && (pData->iColortype != MNG_COLORTYPE_RGB ) && (pData->iColortype != MNG_COLORTYPE_INDEXED) && (pData->iColortype != MNG_COLORTYPE_GRAYA ) && (pData->iColortype != MNG_COLORTYPE_RGBA ) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); if ((pData->iColortype == MNG_COLORTYPE_INDEXED) && (pData->iBitdepth > 8)) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if (((pData->iColortype == MNG_COLORTYPE_RGB ) || (pData->iColortype == MNG_COLORTYPE_GRAYA ) || (pData->iColortype == MNG_COLORTYPE_RGBA ) ) && (pData->iBitdepth < 8 ) ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if (pData->iCompression != MNG_COMPRESSION_DEFLATE) MNG_ERROR (pData, MNG_INVALIDCOMPRESS); #if defined(FILTER192) || defined(FILTER193) if ((pData->iFilter != MNG_FILTER_ADAPTIVE ) && #if defined(FILTER192) && defined(FILTER193) (pData->iFilter != MNG_FILTER_DIFFERING) && (pData->iFilter != MNG_FILTER_NOFILTER ) ) #else #ifdef FILTER192 (pData->iFilter != MNG_FILTER_DIFFERING) ) #else (pData->iFilter != MNG_FILTER_NOFILTER ) ) #endif #endif MNG_ERROR (pData, MNG_INVALIDFILTER); #else if (pData->iFilter) MNG_ERROR (pData, MNG_INVALIDFILTER); #endif if ((pData->iInterlace != MNG_INTERLACE_NONE ) && (pData->iInterlace != MNG_INTERLACE_ADAM7) ) MNG_ERROR (pData, MNG_INVALIDINTERLACE); pData->iImagelevel++; /* one level deeper */ #ifdef MNG_SUPPORT_DISPLAY { mng_uint16 iRed = 0; mng_uint16 iGreen = 0; mng_uint16 iBlue = 0; mng_bool bHasalpha = MNG_FALSE; mng_uint16 iAlpha = 0xFFFF; mng_uint8 iViewable = 0; mng_retcode iRetcode; if (iRawlen > 13) /* get remaining fields, if any */ { iRed = mng_get_uint16 (pRawdata+13); iGreen = mng_get_uint16 (pRawdata+15); iBlue = mng_get_uint16 (pRawdata+17); } if (iRawlen > 19) { bHasalpha = MNG_TRUE; iAlpha = mng_get_uint16 (pRawdata+19); } if (iRawlen > 21) iViewable = *(pRawdata+21); /* create an animation object */ iRetcode = mng_create_ani_basi (pData, iRed, iGreen, iBlue, bHasalpha, iAlpha, iViewable); /* if (!iRetcode) iRetcode = mng_process_display_basi (pData, iRed, iGreen, iBlue, bHasalpha, iAlpha, iViewable); */ if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_basip)*ppChunk)->iWidth = mng_get_uint32 (pRawdata); ((mng_basip)*ppChunk)->iHeight = mng_get_uint32 (pRawdata+4); #ifdef MNG_NO_16BIT_SUPPORT if (*(pRawdata+8) > 8) ((mng_basip)*ppChunk)->iBitdepth = 8; else #endif ((mng_basip)*ppChunk)->iBitdepth = *(pRawdata+8); ((mng_basip)*ppChunk)->iColortype = *(pRawdata+9); ((mng_basip)*ppChunk)->iCompression = *(pRawdata+10); ((mng_basip)*ppChunk)->iFilter = *(pRawdata+11); ((mng_basip)*ppChunk)->iInterlace = *(pRawdata+12); if (iRawlen > 13) { ((mng_basip)*ppChunk)->iRed = mng_get_uint16 (pRawdata+13); ((mng_basip)*ppChunk)->iGreen = mng_get_uint16 (pRawdata+15); ((mng_basip)*ppChunk)->iBlue = mng_get_uint16 (pRawdata+17); } if (iRawlen > 19) ((mng_basip)*ppChunk)->iAlpha = mng_get_uint16 (pRawdata+19); if (iRawlen > 21) ((mng_basip)*ppChunk)->iViewable = *(pRawdata+21); } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_BASI, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_CLON READ_CHUNK (mng_read_clon) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_CLON, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* check the length */ if ((iRawlen != 4) && (iRawlen != 5) && (iRawlen != 6) && (iRawlen != 7) && (iRawlen != 16)) MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { mng_uint16 iSourceid, iCloneid; mng_uint8 iClonetype = 0; mng_bool bHasdonotshow = MNG_FALSE; mng_uint8 iDonotshow = 0; mng_uint8 iConcrete = 0; mng_bool bHasloca = MNG_FALSE; mng_uint8 iLocationtype = 0; mng_int32 iLocationx = 0; mng_int32 iLocationy = 0; mng_retcode iRetcode; iSourceid = mng_get_uint16 (pRawdata); iCloneid = mng_get_uint16 (pRawdata+2); if (iRawlen > 4) iClonetype = *(pRawdata+4); if (iRawlen > 5) { bHasdonotshow = MNG_TRUE; iDonotshow = *(pRawdata+5); } if (iRawlen > 6) iConcrete = *(pRawdata+6); if (iRawlen > 7) { bHasloca = MNG_TRUE; iLocationtype = *(pRawdata+7); iLocationx = mng_get_int32 (pRawdata+8); iLocationy = mng_get_int32 (pRawdata+12); } iRetcode = mng_create_ani_clon (pData, iSourceid, iCloneid, iClonetype, bHasdonotshow, iDonotshow, iConcrete, bHasloca, iLocationtype, iLocationx, iLocationy); /* if (!iRetcode) iRetcode = mng_process_display_clon (pData, iSourceid, iCloneid, iClonetype, bHasdonotshow, iDonotshow, iConcrete, bHasloca, iLocationtype, iLocationx, iLocationy); */ if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_clonp)*ppChunk)->iSourceid = mng_get_uint16 (pRawdata); ((mng_clonp)*ppChunk)->iCloneid = mng_get_uint16 (pRawdata+2); if (iRawlen > 4) ((mng_clonp)*ppChunk)->iClonetype = *(pRawdata+4); if (iRawlen > 5) ((mng_clonp)*ppChunk)->iDonotshow = *(pRawdata+5); if (iRawlen > 6) ((mng_clonp)*ppChunk)->iConcrete = *(pRawdata+6); if (iRawlen > 7) { ((mng_clonp)*ppChunk)->bHasloca = MNG_TRUE; ((mng_clonp)*ppChunk)->iLocationtype = *(pRawdata+7); ((mng_clonp)*ppChunk)->iLocationx = mng_get_int32 (pRawdata+8); ((mng_clonp)*ppChunk)->iLocationy = mng_get_int32 (pRawdata+12); } else { ((mng_clonp)*ppChunk)->bHasloca = MNG_FALSE; } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_CLON, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_PAST READ_CHUNK (mng_read_past) { #if defined(MNG_STORE_CHUNKS) || defined(MNG_SUPPORT_DISPLAY) mng_retcode iRetcode; mng_uint16 iTargetid; mng_uint8 iTargettype; mng_int32 iTargetx; mng_int32 iTargety; mng_uint32 iCount; mng_uint32 iSize; mng_ptr pSources; mng_uint32 iX; mng_past_sourcep pSource; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PAST, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* check the length */ if ((iRawlen < 41) || (((iRawlen - 11) % 30) != 0)) MNG_ERROR (pData, MNG_INVALIDLENGTH); #if defined(MNG_STORE_CHUNKS) || defined(MNG_SUPPORT_DISPLAY) iTargetid = mng_get_uint16 (pRawdata); iTargettype = *(pRawdata+2); iTargetx = mng_get_int32 (pRawdata+3); iTargety = mng_get_int32 (pRawdata+7); iCount = ((iRawlen - 11) / 30); /* how many entries again? */ iSize = iCount * sizeof (mng_past_source); pRawdata += 11; /* get a buffer for all the source blocks */ MNG_ALLOC (pData, pSources, iSize); pSource = (mng_past_sourcep)pSources; for (iX = 0; iX < iCount; iX++) /* now copy the source blocks */ { pSource->iSourceid = mng_get_uint16 (pRawdata); pSource->iComposition = *(pRawdata+2); pSource->iOrientation = *(pRawdata+3); pSource->iOffsettype = *(pRawdata+4); pSource->iOffsetx = mng_get_int32 (pRawdata+5); pSource->iOffsety = mng_get_int32 (pRawdata+9); pSource->iBoundarytype = *(pRawdata+13); pSource->iBoundaryl = mng_get_int32 (pRawdata+14); pSource->iBoundaryr = mng_get_int32 (pRawdata+18); pSource->iBoundaryt = mng_get_int32 (pRawdata+22); pSource->iBoundaryb = mng_get_int32 (pRawdata+26); pSource++; pRawdata += 30; } #endif #ifdef MNG_SUPPORT_DISPLAY { /* create playback object */ iRetcode = mng_create_ani_past (pData, iTargetid, iTargettype, iTargetx, iTargety, iCount, pSources); /* if (!iRetcode) iRetcode = mng_process_display_past (pData, iTargetid, iTargettype, iTargetx, iTargety, iCount, pSources); */ if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pSources, iSize); return iRetcode; } } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pSources, iSize); return iRetcode; } /* store the fields */ ((mng_pastp)*ppChunk)->iDestid = iTargetid; ((mng_pastp)*ppChunk)->iTargettype = iTargettype; ((mng_pastp)*ppChunk)->iTargetx = iTargetx; ((mng_pastp)*ppChunk)->iTargety = iTargety; ((mng_pastp)*ppChunk)->iCount = iCount; /* get a buffer & copy the source blocks */ MNG_ALLOC (pData, ((mng_pastp)*ppChunk)->pSources, iSize); MNG_COPY (((mng_pastp)*ppChunk)->pSources, pSources, iSize); } #endif /* MNG_STORE_CHUNKS */ #if defined(MNG_STORE_CHUNKS) || defined(MNG_SUPPORT_DISPLAY) /* free the source block buffer */ MNG_FREEX (pData, pSources, iSize); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PAST, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_DISC READ_CHUNK (mng_read_disc) { #if defined(MNG_SUPPORT_DISPLAY) || defined(MNG_STORE_CHUNKS) mng_uint32 iCount; mng_uint16p pIds = MNG_NULL; mng_retcode iRetcode; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DISC, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if ((iRawlen % 2) != 0) /* check the length */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #if defined(MNG_SUPPORT_DISPLAY) || defined(MNG_STORE_CHUNKS) iCount = (iRawlen / sizeof (mng_uint16)); if (iCount) { MNG_ALLOC (pData, pIds, iRawlen); #ifndef MNG_BIGENDIAN_SUPPORTED { mng_uint32 iX; mng_uint8p pIn = pRawdata; mng_uint16p pOut = pIds; for (iX = 0; iX < iCount; iX++) { *pOut++ = mng_get_uint16 (pIn); pIn += 2; } } #else MNG_COPY (pIds, pRawdata, iRawlen); #endif /* !MNG_BIGENDIAN_SUPPORTED */ } #endif #ifdef MNG_SUPPORT_DISPLAY { /* create playback object */ iRetcode = mng_create_ani_disc (pData, iCount, pIds); /* if (!iRetcode) iRetcode = mng_process_display_disc (pData, iCount, pIds); */ if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_discp)*ppChunk)->iCount = iCount; if (iRawlen) { MNG_ALLOC (pData, ((mng_discp)*ppChunk)->pObjectids, iRawlen); MNG_COPY (((mng_discp)*ppChunk)->pObjectids, pIds, iRawlen); } } #endif /* MNG_STORE_CHUNKS */ #if defined(MNG_SUPPORT_DISPLAY) || defined(MNG_STORE_CHUNKS) if (iRawlen) MNG_FREEX (pData, pIds, iRawlen); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DISC, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_BACK READ_CHUNK (mng_read_back) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_BACK, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* check the length */ if ((iRawlen != 6) && (iRawlen != 7) && (iRawlen != 9) && (iRawlen != 10)) MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode; /* retrieve the fields */ pData->bHasBACK = MNG_TRUE; pData->iBACKred = mng_get_uint16 (pRawdata); pData->iBACKgreen = mng_get_uint16 (pRawdata+2); pData->iBACKblue = mng_get_uint16 (pRawdata+4); if (iRawlen > 6) pData->iBACKmandatory = *(pRawdata+6); else pData->iBACKmandatory = 0; if (iRawlen > 7) pData->iBACKimageid = mng_get_uint16 (pRawdata+7); else pData->iBACKimageid = 0; if (iRawlen > 9) pData->iBACKtile = *(pRawdata+9); else pData->iBACKtile = 0; iRetcode = mng_create_ani_back (pData, pData->iBACKred, pData->iBACKgreen, pData->iBACKblue, pData->iBACKmandatory, pData->iBACKimageid, pData->iBACKtile); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_backp)*ppChunk)->iRed = mng_get_uint16 (pRawdata); ((mng_backp)*ppChunk)->iGreen = mng_get_uint16 (pRawdata+2); ((mng_backp)*ppChunk)->iBlue = mng_get_uint16 (pRawdata+4); if (iRawlen > 6) ((mng_backp)*ppChunk)->iMandatory = *(pRawdata+6); if (iRawlen > 7) ((mng_backp)*ppChunk)->iImageid = mng_get_uint16 (pRawdata+7); if (iRawlen > 9) ((mng_backp)*ppChunk)->iTile = *(pRawdata+9); } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_BACK, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_FRAM READ_CHUNK (mng_read_fram) { mng_uint8p pTemp; #ifdef MNG_STORE_CHUNKS mng_uint32 iNamelen; #endif mng_uint32 iRemain; mng_uint32 iRequired = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_FRAM, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen <= 1) /* only framing-mode ? */ { #ifdef MNG_STORE_CHUNKS iNamelen = 0; /* indicate so */ #endif iRemain = 0; pTemp = MNG_NULL; } else { pTemp = find_null (pRawdata+1); /* find null-separator */ /* not found inside input-data ? */ if ((pTemp - pRawdata) > (mng_int32)iRawlen) pTemp = pRawdata + iRawlen; /* than remainder is name */ #ifdef MNG_STORE_CHUNKS iNamelen = (mng_uint32)((pTemp - pRawdata) - 1); #endif iRemain = (mng_uint32)(iRawlen - (pTemp - pRawdata)); if (iRemain) /* if there is remaining data it's less 1 byte */ iRemain--; if ((iRemain) && (iRemain < 4)) /* remains must be empty or at least 4 bytes */ MNG_ERROR (pData, MNG_INVALIDLENGTH); if (iRemain) { iRequired = 4; /* calculate and check required remaining length */ if (*(pTemp+1)) { iRequired += 4; } if (*(pTemp+2)) { iRequired += 4; } if (*(pTemp+3)) { iRequired += 17; } if (*(pTemp+4)) { if ((iRemain - iRequired) % 4 != 0) MNG_ERROR (pData, MNG_INVALIDLENGTH); } else { if (iRemain != iRequired) MNG_ERROR (pData, MNG_INVALIDLENGTH); } } } #ifdef MNG_SUPPORT_DISPLAY { mng_uint8p pWork = pTemp; mng_uint8 iFramemode = 0; mng_uint8 iChangedelay = 0; mng_uint32 iDelay = 0; mng_uint8 iChangetimeout = 0; mng_uint32 iTimeout = 0; mng_uint8 iChangeclipping = 0; mng_uint8 iCliptype = 0; mng_int32 iClipl = 0; mng_int32 iClipr = 0; mng_int32 iClipt = 0; mng_int32 iClipb = 0; mng_retcode iRetcode; if (iRawlen) /* any data specified ? */ { if (*(pRawdata)) /* save the new framing mode ? */ { iFramemode = *(pRawdata); #ifndef MNG_NO_OLD_VERSIONS if (pData->bPreDraft48) /* old style input-stream ? */ { switch (iFramemode) { case 0: { break; } case 1: { iFramemode = 3; break; } case 2: { iFramemode = 4; break; } case 3: { iFramemode = 1; break; } case 4: { iFramemode = 1; break; } case 5: { iFramemode = 2; break; } default: { iFramemode = 1; break; } } } #endif } if (iRemain) { iChangedelay = *(pWork+1); iChangetimeout = *(pWork+2); iChangeclipping = *(pWork+3); pWork += 5; if (iChangedelay) /* delay changed ? */ { iDelay = mng_get_uint32 (pWork); pWork += 4; } if (iChangetimeout) /* timeout changed ? */ { iTimeout = mng_get_uint32 (pWork); pWork += 4; } if (iChangeclipping) /* clipping changed ? */ { iCliptype = *pWork; iClipl = mng_get_int32 (pWork+1); iClipr = mng_get_int32 (pWork+5); iClipt = mng_get_int32 (pWork+9); iClipb = mng_get_int32 (pWork+13); } } } iRetcode = mng_create_ani_fram (pData, iFramemode, iChangedelay, iDelay, iChangetimeout, iTimeout, iChangeclipping, iCliptype, iClipl, iClipr, iClipt, iClipb); /* if (!iRetcode) iRetcode = mng_process_display_fram (pData, iFramemode, iChangedelay, iDelay, iChangetimeout, iTimeout, iChangeclipping, iCliptype, iClipl, iClipr, iClipt, iClipb); */ if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_framp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); if (iRawlen) { mng_uint8 iFramemode = *(pRawdata); #ifndef MNG_NO_OLD_VERSIONS if (pData->bPreDraft48) /* old style input-stream ? */ { switch (iFramemode) { case 1: { iFramemode = 3; break; } case 2: { iFramemode = 4; break; } case 3: { iFramemode = 5; break; } /* TODO: provision for mode=5 ??? */ case 4: { iFramemode = 1; break; } case 5: { iFramemode = 2; break; } default: { iFramemode = 1; break; } } } #endif ((mng_framp)*ppChunk)->iMode = iFramemode; ((mng_framp)*ppChunk)->iNamesize = iNamelen; if (iNamelen) { MNG_ALLOC (pData, ((mng_framp)*ppChunk)->zName, iNamelen+1); MNG_COPY (((mng_framp)*ppChunk)->zName, pRawdata+1, iNamelen); } if (iRemain) { ((mng_framp)*ppChunk)->iChangedelay = *(pTemp+1); ((mng_framp)*ppChunk)->iChangetimeout = *(pTemp+2); ((mng_framp)*ppChunk)->iChangeclipping = *(pTemp+3); ((mng_framp)*ppChunk)->iChangesyncid = *(pTemp+4); pTemp += 5; if (((mng_framp)*ppChunk)->iChangedelay) { ((mng_framp)*ppChunk)->iDelay = mng_get_uint32 (pTemp); pTemp += 4; } if (((mng_framp)*ppChunk)->iChangetimeout) { ((mng_framp)*ppChunk)->iTimeout = mng_get_uint32 (pTemp); pTemp += 4; } if (((mng_framp)*ppChunk)->iChangeclipping) { ((mng_framp)*ppChunk)->iBoundarytype = *pTemp; ((mng_framp)*ppChunk)->iBoundaryl = mng_get_int32 (pTemp+1); ((mng_framp)*ppChunk)->iBoundaryr = mng_get_int32 (pTemp+5); ((mng_framp)*ppChunk)->iBoundaryt = mng_get_int32 (pTemp+9); ((mng_framp)*ppChunk)->iBoundaryb = mng_get_int32 (pTemp+13); pTemp += 17; } if (((mng_framp)*ppChunk)->iChangesyncid) { ((mng_framp)*ppChunk)->iCount = (iRemain - iRequired) / 4; if (((mng_framp)*ppChunk)->iCount) { MNG_ALLOC (pData, ((mng_framp)*ppChunk)->pSyncids, ((mng_framp)*ppChunk)->iCount * 4); #ifndef MNG_BIGENDIAN_SUPPORTED { mng_uint32 iX; mng_uint32p pOut = ((mng_framp)*ppChunk)->pSyncids; for (iX = 0; iX < ((mng_framp)*ppChunk)->iCount; iX++) { *pOut++ = mng_get_uint32 (pTemp); pTemp += 4; } } #else MNG_COPY (((mng_framp)*ppChunk)->pSyncids, pTemp, ((mng_framp)*ppChunk)->iCount * 4); #endif /* !MNG_BIGENDIAN_SUPPORTED */ } } } } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_FRAM, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_MOVE READ_CHUNK (mng_read_move) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_MOVE, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen != 13) /* check the length */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode; /* create a MOVE animation object */ iRetcode = mng_create_ani_move (pData, mng_get_uint16 (pRawdata), mng_get_uint16 (pRawdata+2), *(pRawdata+4), mng_get_int32 (pRawdata+5), mng_get_int32 (pRawdata+9)); /* if (!iRetcode) iRetcode = mng_process_display_move (pData, mng_get_uint16 (pRawdata), mng_get_uint16 (pRawdata+2), *(pRawdata+4), mng_get_int32 (pRawdata+5), mng_get_int32 (pRawdata+9)); */ if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_movep)*ppChunk)->iFirstid = mng_get_uint16 (pRawdata); ((mng_movep)*ppChunk)->iLastid = mng_get_uint16 (pRawdata+2); ((mng_movep)*ppChunk)->iMovetype = *(pRawdata+4); ((mng_movep)*ppChunk)->iMovex = mng_get_int32 (pRawdata+5); ((mng_movep)*ppChunk)->iMovey = mng_get_int32 (pRawdata+9); } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_MOVE, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_CLIP READ_CHUNK (mng_read_clip) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_CLIP, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen != 21) /* check the length */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode; /* create a CLIP animation object */ iRetcode = mng_create_ani_clip (pData, mng_get_uint16 (pRawdata), mng_get_uint16 (pRawdata+2), *(pRawdata+4), mng_get_int32 (pRawdata+5), mng_get_int32 (pRawdata+9), mng_get_int32 (pRawdata+13), mng_get_int32 (pRawdata+17)); /* if (!iRetcode) iRetcode = mng_process_display_clip (pData, mng_get_uint16 (pRawdata), mng_get_uint16 (pRawdata+2), *(pRawdata+4), mng_get_int32 (pRawdata+5), mng_get_int32 (pRawdata+9), mng_get_int32 (pRawdata+13), mng_get_int32 (pRawdata+17)); */ if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_clipp)*ppChunk)->iFirstid = mng_get_uint16 (pRawdata); ((mng_clipp)*ppChunk)->iLastid = mng_get_uint16 (pRawdata+2); ((mng_clipp)*ppChunk)->iCliptype = *(pRawdata+4); ((mng_clipp)*ppChunk)->iClipl = mng_get_int32 (pRawdata+5); ((mng_clipp)*ppChunk)->iClipr = mng_get_int32 (pRawdata+9); ((mng_clipp)*ppChunk)->iClipt = mng_get_int32 (pRawdata+13); ((mng_clipp)*ppChunk)->iClipb = mng_get_int32 (pRawdata+17); } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_CLIP, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_SHOW READ_CHUNK (mng_read_show) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SHOW, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* check the length */ if ((iRawlen != 0) && (iRawlen != 2) && (iRawlen != 4) && (iRawlen != 5)) MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode; if (iRawlen) /* determine parameters if any */ { pData->iSHOWfromid = mng_get_uint16 (pRawdata); if (iRawlen > 2) pData->iSHOWtoid = mng_get_uint16 (pRawdata+2); else pData->iSHOWtoid = pData->iSHOWfromid; if (iRawlen > 4) pData->iSHOWmode = *(pRawdata+4); else pData->iSHOWmode = 0; } else /* use defaults then */ { pData->iSHOWmode = 2; pData->iSHOWfromid = 1; pData->iSHOWtoid = 65535; } /* create a SHOW animation object */ iRetcode = mng_create_ani_show (pData, pData->iSHOWfromid, pData->iSHOWtoid, pData->iSHOWmode); if (!iRetcode) iRetcode = mng_process_display_show (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_showp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); if (iRawlen) { ((mng_showp)*ppChunk)->iFirstid = mng_get_uint16 (pRawdata); if (iRawlen > 2) ((mng_showp)*ppChunk)->iLastid = mng_get_uint16 (pRawdata+2); else ((mng_showp)*ppChunk)->iLastid = ((mng_showp)*ppChunk)->iFirstid; if (iRawlen > 4) ((mng_showp)*ppChunk)->iMode = *(pRawdata+4); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SHOW, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_TERM READ_CHUNK (mng_read_term) { mng_uint8 iTermaction; mng_uint8 iIteraction = 0; mng_uint32 iDelay = 0; mng_uint32 iItermax = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_TERM, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* should be behind MHDR or SAVE !! */ if ((!pData->bHasSAVE) && (pData->iChunkseq > 2)) { pData->bMisplacedTERM = MNG_TRUE; /* indicate we found a misplaced TERM */ /* and send a warning signal!!! */ MNG_WARNING (pData, MNG_SEQUENCEERROR); } if (pData->bHasLOOP) /* no way, jose! */ MNG_ERROR (pData, MNG_SEQUENCEERROR); if (pData->bHasTERM) /* only 1 allowed! */ MNG_ERROR (pData, MNG_MULTIPLEERROR); /* check the length */ if ((iRawlen != 1) && (iRawlen != 10)) MNG_ERROR (pData, MNG_INVALIDLENGTH); pData->bHasTERM = MNG_TRUE; iTermaction = *pRawdata; /* get the fields */ if (iRawlen > 1) { iIteraction = *(pRawdata+1); iDelay = mng_get_uint32 (pRawdata+2); iItermax = mng_get_uint32 (pRawdata+6); } if (pData->fProcessterm) /* inform the app ? */ if (!pData->fProcessterm (((mng_handle)pData), iTermaction, iIteraction, iDelay, iItermax)) MNG_ERROR (pData, MNG_APPMISCERROR); #ifdef MNG_SUPPORT_DISPLAY { /* create the TERM ani-object */ mng_retcode iRetcode = mng_create_ani_term (pData, iTermaction, iIteraction, iDelay, iItermax); if (iRetcode) /* on error bail out */ return iRetcode; /* save for future reference */ pData->pTermaniobj = pData->pLastaniobj; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_termp)*ppChunk)->iTermaction = iTermaction; ((mng_termp)*ppChunk)->iIteraction = iIteraction; ((mng_termp)*ppChunk)->iDelay = iDelay; ((mng_termp)*ppChunk)->iItermax = iItermax; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_TERM, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_SAVE READ_CHUNK (mng_read_save) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SAVE, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) || (pData->bHasSAVE)) MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); pData->bHasSAVE = MNG_TRUE; if (pData->fProcesssave) /* inform the application ? */ { mng_bool bOke = pData->fProcesssave ((mng_handle)pData); if (!bOke) MNG_ERROR (pData, MNG_APPMISCERROR); } #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode; /* TODO: something with the parameters */ /* create a SAVE animation object */ iRetcode = mng_create_ani_save (pData); if (!iRetcode) iRetcode = mng_process_display_save (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_savep)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); if (iRawlen) /* not empty ? */ { mng_uint8 iOtype = *pRawdata; mng_uint8 iEtype; mng_uint32 iCount = 0; mng_uint8p pTemp; mng_uint8p pNull; mng_uint32 iLen; mng_uint32 iOffset[2]; mng_uint32 iStarttime[2]; mng_uint32 iFramenr; mng_uint32 iLayernr; mng_uint32 iX; mng_save_entryp pEntry = MNG_NULL; mng_uint32 iNamesize; if ((iOtype != 4) && (iOtype != 8)) MNG_ERROR (pData, MNG_INVOFFSETSIZE); ((mng_savep)*ppChunk)->iOffsettype = iOtype; for (iX = 0; iX < 2; iX++) /* do this twice to get the count first ! */ { pTemp = pRawdata + 1; iLen = iRawlen - 1; if (iX) /* second run ? */ { MNG_ALLOC (pData, pEntry, (iCount * sizeof (mng_save_entry))); ((mng_savep)*ppChunk)->iCount = iCount; ((mng_savep)*ppChunk)->pEntries = pEntry; } while (iLen) /* anything left ? */ { iEtype = *pTemp; /* entrytype */ if ((iEtype != 0) && (iEtype != 1) && (iEtype != 2) && (iEtype != 3)) MNG_ERROR (pData, MNG_INVENTRYTYPE); pTemp++; if (iEtype > 1) { iOffset [0] = 0; iOffset [1] = 0; iStarttime [0] = 0; iStarttime [1] = 0; iLayernr = 0; iFramenr = 0; } else { if (iOtype == 4) { iOffset [0] = 0; iOffset [1] = mng_get_uint32 (pTemp); pTemp += 4; } else { iOffset [0] = mng_get_uint32 (pTemp); iOffset [1] = mng_get_uint32 (pTemp+4); pTemp += 8; } if (iEtype > 0) { iStarttime [0] = 0; iStarttime [1] = 0; iLayernr = 0; iFramenr = 0; } else { if (iOtype == 4) { iStarttime [0] = 0; iStarttime [1] = mng_get_uint32 (pTemp+0); iLayernr = mng_get_uint32 (pTemp+4); iFramenr = mng_get_uint32 (pTemp+8); pTemp += 12; } else { iStarttime [0] = mng_get_uint32 (pTemp+0); iStarttime [1] = mng_get_uint32 (pTemp+4); iLayernr = mng_get_uint32 (pTemp+8); iFramenr = mng_get_uint32 (pTemp+12); pTemp += 16; } } } pNull = find_null (pTemp); /* get the name length */ if ((pNull - pRawdata) > (mng_int32)iRawlen) { iNamesize = iLen; /* no null found; so end of SAVE */ iLen = 0; } else { iNamesize = pNull - pTemp; /* should be another entry */ iLen -= iNamesize; if (!iLen) /* must not end with a null ! */ MNG_ERROR (pData, MNG_ENDWITHNULL); } if (!pEntry) { iCount++; } else { pEntry->iEntrytype = iEtype; pEntry->iOffset [0] = iOffset [0]; pEntry->iOffset [1] = iOffset [1]; pEntry->iStarttime [0] = iStarttime [0]; pEntry->iStarttime [1] = iStarttime [1]; pEntry->iLayernr = iLayernr; pEntry->iFramenr = iFramenr; pEntry->iNamesize = iNamesize; if (iNamesize) { MNG_ALLOC (pData, pEntry->zName, iNamesize+1); MNG_COPY (pEntry->zName, pTemp, iNamesize); } pEntry++; } pTemp += iNamesize; } } } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SAVE, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_SEEK READ_CHUNK (mng_read_seek) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SEEK, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) || (!pData->bHasSAVE)) MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_SUPPORT_DISPLAY /* create a SEEK animation object */ iRetcode = mng_create_ani_seek (pData, iRawlen, (mng_pchar)pRawdata); if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_SUPPORT_DISPLAY */ if (pData->fProcessseek) /* inform the app ? */ { mng_bool bOke; mng_pchar zName; MNG_ALLOC (pData, zName, iRawlen + 1); if (iRawlen) MNG_COPY (zName, pRawdata, iRawlen); bOke = pData->fProcessseek ((mng_handle)pData, zName); MNG_FREEX (pData, zName, iRawlen + 1); if (!bOke) MNG_ERROR (pData, MNG_APPMISCERROR); } #ifdef MNG_SUPPORT_DISPLAY /* do display processing of the SEEK */ iRetcode = mng_process_display_seek (pData); if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_seekp)*ppChunk)->iNamesize = iRawlen; if (iRawlen) { MNG_ALLOC (pData, ((mng_seekp)*ppChunk)->zName, iRawlen+1); MNG_COPY (((mng_seekp)*ppChunk)->zName, pRawdata, iRawlen); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_SEEK, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_eXPI READ_CHUNK (mng_read_expi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_EXPI, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen < 3) /* check the length */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_expip)*ppChunk)->iSnapshotid = mng_get_uint16 (pRawdata); ((mng_expip)*ppChunk)->iNamesize = iRawlen - 2; if (((mng_expip)*ppChunk)->iNamesize) { MNG_ALLOC (pData, ((mng_expip)*ppChunk)->zName, ((mng_expip)*ppChunk)->iNamesize + 1); MNG_COPY (((mng_expip)*ppChunk)->zName, pRawdata+2, ((mng_expip)*ppChunk)->iNamesize); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_EXPI, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_fPRI READ_CHUNK (mng_read_fpri) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_FPRI, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen != 2) /* must be two bytes long */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_fprip)*ppChunk)->iDeltatype = *pRawdata; ((mng_fprip)*ppChunk)->iPriority = *(pRawdata+1); } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_FPRI, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_nEED MNG_LOCAL mng_bool CheckKeyword (mng_datap pData, mng_uint8p pKeyword) { mng_chunkid handled_chunks [] = { MNG_UINT_BACK, /* keep it sorted !!!! */ MNG_UINT_BASI, MNG_UINT_CLIP, MNG_UINT_CLON, #ifndef MNG_NO_DELTA_PNG /* TODO: MNG_UINT_DBYK, */ #endif MNG_UINT_DEFI, #ifndef MNG_NO_DELTA_PNG MNG_UINT_DHDR, #endif MNG_UINT_DISC, #ifndef MNG_NO_DELTA_PNG /* TODO: MNG_UINT_DROP, */ #endif MNG_UINT_ENDL, MNG_UINT_FRAM, MNG_UINT_IDAT, MNG_UINT_IEND, MNG_UINT_IHDR, #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG MNG_UINT_IJNG, #endif MNG_UINT_IPNG, #endif #ifdef MNG_INCLUDE_JNG MNG_UINT_JDAA, MNG_UINT_JDAT, MNG_UINT_JHDR, /* TODO: MNG_UINT_JSEP, */ MNG_UINT_JdAA, #endif MNG_UINT_LOOP, MNG_UINT_MAGN, MNG_UINT_MEND, MNG_UINT_MHDR, MNG_UINT_MOVE, /* TODO: MNG_UINT_ORDR, */ MNG_UINT_PAST, MNG_UINT_PLTE, #ifndef MNG_NO_DELTA_PNG MNG_UINT_PPLT, MNG_UINT_PROM, #endif MNG_UINT_SAVE, MNG_UINT_SEEK, MNG_UINT_SHOW, MNG_UINT_TERM, #ifdef MNG_INCLUDE_ANG_PROPOSAL MNG_UINT_adAT, MNG_UINT_ahDR, #endif MNG_UINT_bKGD, MNG_UINT_cHRM, /* TODO: MNG_UINT_eXPI, */ MNG_UINT_evNT, /* TODO: MNG_UINT_fPRI, */ MNG_UINT_gAMA, /* TODO: MNG_UINT_hIST, */ MNG_UINT_iCCP, MNG_UINT_iTXt, #ifdef MNG_INCLUDE_MPNG_PROPOSAL MNG_UINT_mpNG, #endif MNG_UINT_nEED, /* TODO: MNG_UINT_oFFs, */ /* TODO: MNG_UINT_pCAL, */ /* TODO: MNG_UINT_pHYg, */ /* TODO: MNG_UINT_pHYs, */ /* TODO: MNG_UINT_sBIT, */ /* TODO: MNG_UINT_sCAL, */ /* TODO: MNG_UINT_sPLT, */ MNG_UINT_sRGB, MNG_UINT_tEXt, MNG_UINT_tIME, MNG_UINT_tRNS, MNG_UINT_zTXt, }; mng_bool bOke = MNG_FALSE; if (pData->fProcessneed) /* does the app handle it ? */ bOke = pData->fProcessneed ((mng_handle)pData, (mng_pchar)pKeyword); if (!bOke) { /* find the keyword length */ mng_uint8p pNull = find_null (pKeyword); if (pNull - pKeyword == 4) /* test a chunk ? */ { /* get the chunk-id */ mng_chunkid iChunkid = (*pKeyword << 24) + (*(pKeyword+1) << 16) + (*(pKeyword+2) << 8) + (*(pKeyword+3) ); /* binary search variables */ mng_int32 iTop, iLower, iUpper, iMiddle; /* determine max index of table */ iTop = (sizeof (handled_chunks) / sizeof (handled_chunks [0])) - 1; /* binary search; with 52 chunks, worst-case is 7 comparisons */ iLower = 0; iMiddle = iTop >> 1; iUpper = iTop; do /* the binary search itself */ { if (handled_chunks [iMiddle] < iChunkid) iLower = iMiddle + 1; else if (handled_chunks [iMiddle] > iChunkid) iUpper = iMiddle - 1; else { bOke = MNG_TRUE; break; } iMiddle = (iLower + iUpper) >> 1; } while (iLower <= iUpper); } /* test draft ? */ if ((!bOke) && (pNull - pKeyword == 8) && (*pKeyword == 'd') && (*(pKeyword+1) == 'r') && (*(pKeyword+2) == 'a') && (*(pKeyword+3) == 'f') && (*(pKeyword+4) == 't') && (*(pKeyword+5) == ' ')) { mng_uint32 iDraft; iDraft = (*(pKeyword+6) - '0') * 10 + (*(pKeyword+7) - '0'); bOke = (mng_bool)(iDraft <= MNG_MNG_DRAFT); } /* test MNG 1.0/1.1 ? */ if ((!bOke) && (pNull - pKeyword == 7) && (*pKeyword == 'M') && (*(pKeyword+1) == 'N') && (*(pKeyword+2) == 'G') && (*(pKeyword+3) == '-') && (*(pKeyword+4) == '1') && (*(pKeyword+5) == '.') && ((*(pKeyword+6) == '0') || (*(pKeyword+6) == '1'))) bOke = MNG_TRUE; /* test CACHEOFF ? */ if ((!bOke) && (pNull - pKeyword == 8) && (*pKeyword == 'C') && (*(pKeyword+1) == 'A') && (*(pKeyword+2) == 'C') && (*(pKeyword+3) == 'H') && (*(pKeyword+4) == 'E') && (*(pKeyword+5) == 'O') && (*(pKeyword+6) == 'F') && (*(pKeyword+7) == 'F')) { if (!pData->pFirstaniobj) /* only if caching hasn't started yet ! */ { bOke = MNG_TRUE; pData->bCacheplayback = MNG_FALSE; pData->bStorechunks = MNG_FALSE; } } } return bOke; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_nEED READ_CHUNK (mng_read_need) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_NEED, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen < 1) /* check the length */ MNG_ERROR (pData, MNG_INVALIDLENGTH); { /* let's check it */ mng_bool bOke = MNG_TRUE; mng_pchar zKeywords; mng_uint8p pNull, pTemp; MNG_ALLOC (pData, zKeywords, iRawlen + 1); if (iRawlen) MNG_COPY (zKeywords, pRawdata, iRawlen); pTemp = (mng_uint8p)zKeywords; pNull = find_null (pTemp); while ((bOke) && (pNull < (mng_uint8p)zKeywords + iRawlen)) { bOke = CheckKeyword (pData, pTemp); pTemp = pNull + 1; pNull = find_null (pTemp); } if (bOke) bOke = CheckKeyword (pData, pTemp); MNG_FREEX (pData, zKeywords, iRawlen + 1); if (!bOke) MNG_ERROR (pData, MNG_UNSUPPORTEDNEED); } #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_needp)*ppChunk)->iKeywordssize = iRawlen; if (iRawlen) { MNG_ALLOC (pData, ((mng_needp)*ppChunk)->zKeywords, iRawlen+1); MNG_COPY (((mng_needp)*ppChunk)->zKeywords, pRawdata, iRawlen); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_NEED, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_pHYg READ_CHUNK (mng_read_phyg) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PHYG, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* it's 9 bytes or empty; no more, no less! */ if ((iRawlen != 9) && (iRawlen != 0)) MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_phygp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); if (iRawlen) { ((mng_phygp)*ppChunk)->iSizex = mng_get_uint32 (pRawdata); ((mng_phygp)*ppChunk)->iSizey = mng_get_uint32 (pRawdata+4); ((mng_phygp)*ppChunk)->iUnit = *(pRawdata+8); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PHYG, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_INCLUDE_JNG READ_CHUNK (mng_read_jhdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_JHDR, MNG_LC_START); #endif /* sequence checks */ if ((pData->eSigtype != mng_it_jng) && (pData->eSigtype != mng_it_mng)) MNG_ERROR (pData, MNG_CHUNKNOTALLOWED); if ((pData->eSigtype == mng_it_jng) && (pData->iChunkseq > 1)) MNG_ERROR (pData, MNG_SEQUENCEERROR); if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen != 16) /* length oke ? */ MNG_ERROR (pData, MNG_INVALIDLENGTH); /* inside a JHDR-IEND block now */ pData->bHasJHDR = MNG_TRUE; /* and store interesting fields */ pData->iDatawidth = mng_get_uint32 (pRawdata); pData->iDataheight = mng_get_uint32 (pRawdata+4); pData->iJHDRcolortype = *(pRawdata+8); pData->iJHDRimgbitdepth = *(pRawdata+9); pData->iJHDRimgcompression = *(pRawdata+10); pData->iJHDRimginterlace = *(pRawdata+11); pData->iJHDRalphabitdepth = *(pRawdata+12); pData->iJHDRalphacompression = *(pRawdata+13); pData->iJHDRalphafilter = *(pRawdata+14); pData->iJHDRalphainterlace = *(pRawdata+15); #if defined(MNG_NO_1_2_4BIT_SUPPORT) || defined(MNG_NO_16BIT_SUPPORT) pData->iPNGmult = 1; pData->iPNGdepth = pData->iJHDRalphabitdepth; #endif #ifdef MNG_NO_1_2_4BIT_SUPPORT if (pData->iJHDRalphabitdepth < 8) pData->iJHDRalphabitdepth = 8; #endif #ifdef MNG_NO_16BIT_SUPPORT if (pData->iJHDRalphabitdepth > 8) { pData->iPNGmult = 2; pData->iJHDRalphabitdepth = 8; } #endif /* parameter validity checks */ if ((pData->iJHDRcolortype != MNG_COLORTYPE_JPEGGRAY ) && (pData->iJHDRcolortype != MNG_COLORTYPE_JPEGCOLOR ) && (pData->iJHDRcolortype != MNG_COLORTYPE_JPEGGRAYA ) && (pData->iJHDRcolortype != MNG_COLORTYPE_JPEGCOLORA) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); if ((pData->iJHDRimgbitdepth != MNG_BITDEPTH_JPEG8 ) && (pData->iJHDRimgbitdepth != MNG_BITDEPTH_JPEG12 ) && (pData->iJHDRimgbitdepth != MNG_BITDEPTH_JPEG8AND12) ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if (pData->iJHDRimgcompression != MNG_COMPRESSION_BASELINEJPEG) MNG_ERROR (pData, MNG_INVALIDCOMPRESS); if ((pData->iJHDRimginterlace != MNG_INTERLACE_SEQUENTIAL ) && (pData->iJHDRimginterlace != MNG_INTERLACE_PROGRESSIVE) ) MNG_ERROR (pData, MNG_INVALIDINTERLACE); if ((pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAYA ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLORA) ) { if ((pData->iJHDRalphabitdepth != MNG_BITDEPTH_8 ) #ifndef MNG_NO_1_2_4BIT_SUPPORT && (pData->iJHDRalphabitdepth != MNG_BITDEPTH_1 ) && (pData->iJHDRalphabitdepth != MNG_BITDEPTH_2 ) && (pData->iJHDRalphabitdepth != MNG_BITDEPTH_4 ) #endif #ifndef MNG_NO_16BIT_SUPPORT && (pData->iJHDRalphabitdepth != MNG_BITDEPTH_16) #endif ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if ((pData->iJHDRalphacompression != MNG_COMPRESSION_DEFLATE ) && (pData->iJHDRalphacompression != MNG_COMPRESSION_BASELINEJPEG) ) MNG_ERROR (pData, MNG_INVALIDCOMPRESS); if ((pData->iJHDRalphacompression == MNG_COMPRESSION_BASELINEJPEG) && (pData->iJHDRalphabitdepth != MNG_BITDEPTH_8 ) ) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); #if defined(FILTER192) || defined(FILTER193) if ((pData->iJHDRalphafilter != MNG_FILTER_ADAPTIVE ) && #if defined(FILTER192) && defined(FILTER193) (pData->iJHDRalphafilter != MNG_FILTER_DIFFERING) && (pData->iJHDRalphafilter != MNG_FILTER_NOFILTER ) ) #else #ifdef FILTER192 (pData->iJHDRalphafilter != MNG_FILTER_DIFFERING) ) #else (pData->iJHDRalphafilter != MNG_FILTER_NOFILTER ) ) #endif #endif MNG_ERROR (pData, MNG_INVALIDFILTER); #else if (pData->iJHDRalphafilter) MNG_ERROR (pData, MNG_INVALIDFILTER); #endif if ((pData->iJHDRalphainterlace != MNG_INTERLACE_NONE ) && (pData->iJHDRalphainterlace != MNG_INTERLACE_ADAM7) ) MNG_ERROR (pData, MNG_INVALIDINTERLACE); } else { if (pData->iJHDRalphabitdepth) MNG_ERROR (pData, MNG_INVALIDBITDEPTH); if (pData->iJHDRalphacompression) MNG_ERROR (pData, MNG_INVALIDCOMPRESS); if (pData->iJHDRalphafilter) MNG_ERROR (pData, MNG_INVALIDFILTER); if (pData->iJHDRalphainterlace) MNG_ERROR (pData, MNG_INVALIDINTERLACE); } if (!pData->bHasheader) /* first chunk ? */ { pData->bHasheader = MNG_TRUE; /* we've got a header */ pData->eImagetype = mng_it_jng; /* then this must be a JNG */ pData->iWidth = mng_get_uint32 (pRawdata); pData->iHeight = mng_get_uint32 (pRawdata+4); /* predict alpha-depth ! */ if ((pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAYA ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLORA) ) pData->iAlphadepth = pData->iJHDRalphabitdepth; else pData->iAlphadepth = 0; /* fits on maximum canvas ? */ if ((pData->iWidth > pData->iMaxwidth) || (pData->iHeight > pData->iMaxheight)) MNG_WARNING (pData, MNG_IMAGETOOLARGE); if (pData->fProcessheader) /* inform the app ? */ if (!pData->fProcessheader (((mng_handle)pData), pData->iWidth, pData->iHeight)) MNG_ERROR (pData, MNG_APPMISCERROR); } pData->iColortype = 0; /* fake grayscale for other routines */ pData->iImagelevel++; /* one level deeper */ #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode = mng_process_display_jhdr (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_jhdrp)*ppChunk)->iWidth = mng_get_uint32 (pRawdata); ((mng_jhdrp)*ppChunk)->iHeight = mng_get_uint32 (pRawdata+4); ((mng_jhdrp)*ppChunk)->iColortype = *(pRawdata+8); ((mng_jhdrp)*ppChunk)->iImagesampledepth = *(pRawdata+9); ((mng_jhdrp)*ppChunk)->iImagecompression = *(pRawdata+10); ((mng_jhdrp)*ppChunk)->iImageinterlace = *(pRawdata+11); ((mng_jhdrp)*ppChunk)->iAlphasampledepth = *(pRawdata+12); #ifdef MNG_NO_16BIT_SUPPORT if (*(pRawdata+12) > 8) ((mng_jhdrp)*ppChunk)->iAlphasampledepth = 8; #endif ((mng_jhdrp)*ppChunk)->iAlphacompression = *(pRawdata+13); ((mng_jhdrp)*ppChunk)->iAlphafilter = *(pRawdata+14); ((mng_jhdrp)*ppChunk)->iAlphainterlace = *(pRawdata+15); } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_JHDR, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #else #define read_jhdr 0 #endif /* MNG_INCLUDE_JNG */ #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_INCLUDE_JNG READ_CHUNK (mng_read_jdaa) { #if defined(MNG_SUPPORT_DISPLAY) || defined(MNG_STORE_CHUNKS) volatile mng_retcode iRetcode; iRetcode=MNG_NOERROR; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_JDAA, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasJHDR) && (!pData->bHasDHDR)) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (pData->bHasJSEP) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (pData->iJHDRalphacompression != MNG_COMPRESSION_BASELINEJPEG) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen == 0) /* can never be empty */ MNG_ERROR (pData, MNG_INVALIDLENGTH); pData->bHasJDAA = MNG_TRUE; /* got some JDAA now, don't we */ #ifdef MNG_SUPPORT_DISPLAY iRetcode = mng_process_display_jdaa (pData, iRawlen, pRawdata); if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_jdaap)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); ((mng_jdaap)*ppChunk)->iDatasize = iRawlen; if (iRawlen != 0) /* is there any data ? */ { MNG_ALLOC (pData, ((mng_jdaap)*ppChunk)->pData, iRawlen); MNG_COPY (((mng_jdaap)*ppChunk)->pData, pRawdata, iRawlen); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_JDAA, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #else #define read_jdaa 0 #endif /* MNG_INCLUDE_JNG */ #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_INCLUDE_JNG READ_CHUNK (mng_read_jdat) { #if defined(MNG_SUPPORT_DISPLAY) || defined(MNG_STORE_CHUNKS) volatile mng_retcode iRetcode; iRetcode=MNG_NOERROR; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_JDAT, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasJHDR) && (!pData->bHasDHDR)) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen == 0) /* can never be empty */ MNG_ERROR (pData, MNG_INVALIDLENGTH); pData->bHasJDAT = MNG_TRUE; /* got some JDAT now, don't we */ #ifdef MNG_SUPPORT_DISPLAY iRetcode = mng_process_display_jdat (pData, iRawlen, pRawdata); if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_jdatp)*ppChunk)->bEmpty = (mng_bool)(iRawlen == 0); ((mng_jdatp)*ppChunk)->iDatasize = iRawlen; if (iRawlen != 0) /* is there any data ? */ { MNG_ALLOC (pData, ((mng_jdatp)*ppChunk)->pData, iRawlen); MNG_COPY (((mng_jdatp)*ppChunk)->pData, pRawdata, iRawlen); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_JDAT, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #else #define read_jdat 0 #endif /* MNG_INCLUDE_JNG */ #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_INCLUDE_JNG READ_CHUNK (mng_read_jsep) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_JSEP, MNG_LC_START); #endif if (!pData->bHasJHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen != 0) /* must be empty ! */ MNG_ERROR (pData, MNG_INVALIDLENGTH); pData->bHasJSEP = MNG_TRUE; /* indicate we've had the 8-/12-bit separator */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_JSEP, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #else #define read_jsep 0 #endif /* MNG_INCLUDE_JNG */ #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_NO_DELTA_PNG READ_CHUNK (mng_read_dhdr) { mng_uint8 iImagetype, iDeltatype; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DHDR, MNG_LC_START); #endif if (!pData->bHasMHDR) /* sequence checks */ MNG_ERROR (pData, MNG_SEQUENCEERROR); #ifdef MNG_INCLUDE_JNG if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* check for valid length */ if ((iRawlen != 4) && (iRawlen != 12) && (iRawlen != 20)) MNG_ERROR (pData, MNG_INVALIDLENGTH); iImagetype = *(pRawdata+2); /* check fields for validity */ iDeltatype = *(pRawdata+3); if (iImagetype > MNG_IMAGETYPE_JNG) MNG_ERROR (pData, MNG_INVIMAGETYPE); if (iDeltatype > MNG_DELTATYPE_NOCHANGE) MNG_ERROR (pData, MNG_INVDELTATYPE); if ((iDeltatype == MNG_DELTATYPE_REPLACE) && (iRawlen > 12)) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((iDeltatype == MNG_DELTATYPE_NOCHANGE) && (iRawlen > 4)) MNG_ERROR (pData, MNG_INVALIDLENGTH); pData->bHasDHDR = MNG_TRUE; /* inside a DHDR-IEND block now */ pData->iDeltatype = iDeltatype; pData->iImagelevel++; /* one level deeper */ #ifdef MNG_SUPPORT_DISPLAY { mng_uint16 iObjectid = mng_get_uint16 (pRawdata); mng_uint32 iBlockwidth = 0; mng_uint32 iBlockheight = 0; mng_uint32 iBlockx = 0; mng_uint32 iBlocky = 0; mng_retcode iRetcode; if (iRawlen > 4) { iBlockwidth = mng_get_uint32 (pRawdata+4); iBlockheight = mng_get_uint32 (pRawdata+8); } if (iRawlen > 12) { iBlockx = mng_get_uint32 (pRawdata+12); iBlocky = mng_get_uint32 (pRawdata+16); } iRetcode = mng_create_ani_dhdr (pData, iObjectid, iImagetype, iDeltatype, iBlockwidth, iBlockheight, iBlockx, iBlocky); /* if (!iRetcode) iRetcode = mng_process_display_dhdr (pData, iObjectid, iImagetype, iDeltatype, iBlockwidth, iBlockheight, iBlockx, iBlocky); */ if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_dhdrp)*ppChunk)->iObjectid = mng_get_uint16 (pRawdata); ((mng_dhdrp)*ppChunk)->iImagetype = iImagetype; ((mng_dhdrp)*ppChunk)->iDeltatype = iDeltatype; if (iRawlen > 4) { ((mng_dhdrp)*ppChunk)->iBlockwidth = mng_get_uint32 (pRawdata+4); ((mng_dhdrp)*ppChunk)->iBlockheight = mng_get_uint32 (pRawdata+8); } if (iRawlen > 12) { ((mng_dhdrp)*ppChunk)->iBlockx = mng_get_uint32 (pRawdata+12); ((mng_dhdrp)*ppChunk)->iBlocky = mng_get_uint32 (pRawdata+16); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DHDR, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_NO_DELTA_PNG READ_CHUNK (mng_read_prom) { mng_uint8 iColortype; mng_uint8 iSampledepth; mng_uint8 iFilltype; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PROM, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) || (!pData->bHasDHDR)) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen != 3) /* gotta be exactly 3 bytes */ MNG_ERROR (pData, MNG_INVALIDLENGTH); iColortype = *pRawdata; /* check fields for validity */ iSampledepth = *(pRawdata+1); iFilltype = *(pRawdata+2); if ((iColortype != MNG_COLORTYPE_GRAY ) && (iColortype != MNG_COLORTYPE_RGB ) && (iColortype != MNG_COLORTYPE_INDEXED) && (iColortype != MNG_COLORTYPE_GRAYA ) && (iColortype != MNG_COLORTYPE_RGBA ) ) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); #ifdef MNG_NO_16BIT_SUPPORT if (iSampledepth == MNG_BITDEPTH_16 ) iSampledepth = MNG_BITDEPTH_8; #endif if ((iSampledepth != MNG_BITDEPTH_1 ) && (iSampledepth != MNG_BITDEPTH_2 ) && (iSampledepth != MNG_BITDEPTH_4 ) && (iSampledepth != MNG_BITDEPTH_8 ) #ifndef MNG_NO_16BIT_SUPPORT && (iSampledepth != MNG_BITDEPTH_16) #endif ) MNG_ERROR (pData, MNG_INVSAMPLEDEPTH); if ((iFilltype != MNG_FILLMETHOD_LEFTBITREPLICATE) && (iFilltype != MNG_FILLMETHOD_ZEROFILL ) ) MNG_ERROR (pData, MNG_INVFILLMETHOD); #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode = mng_create_ani_prom (pData, iSampledepth, iColortype, iFilltype); /* if (!iRetcode) iRetcode = mng_process_display_prom (pData, iSampledepth, iColortype, iFilltype); */ if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_promp)*ppChunk)->iColortype = iColortype; ((mng_promp)*ppChunk)->iSampledepth = iSampledepth; ((mng_promp)*ppChunk)->iFilltype = iFilltype; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PROM, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_NO_DELTA_PNG READ_CHUNK (mng_read_ipng) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_IPNG, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) || (!pData->bHasDHDR)) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen != 0) /* gotta be empty */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode = mng_create_ani_ipng (pData); if (!iRetcode) iRetcode = mng_process_display_ipng (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_IPNG, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_NO_DELTA_PNG READ_CHUNK (mng_read_pplt) { mng_uint8 iDeltatype; mng_uint8p pTemp; mng_uint32 iLen; mng_uint8 iX, iM; mng_uint32 iY; mng_uint32 iMax; mng_rgbpaltab aIndexentries; mng_uint8arr aAlphaentries; mng_uint8arr aUsedentries; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PPLT, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) && (!pData->bHasDHDR)) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen < 1) /* must have at least 1 byte */ MNG_ERROR (pData, MNG_INVALIDLENGTH); iDeltatype = *pRawdata; /* valid ? */ if (iDeltatype > MNG_DELTATYPE_DELTARGBA) MNG_ERROR (pData, MNG_INVDELTATYPE); /* must be indexed color ! */ if (pData->iColortype != MNG_COLORTYPE_INDEXED) MNG_ERROR (pData, MNG_INVALIDCOLORTYPE); pTemp = pRawdata + 1; iLen = iRawlen - 1; iMax = 0; for (iY = 0; iY < 256; iY++) /* reset arrays */ { aIndexentries [iY].iRed = 0; aIndexentries [iY].iGreen = 0; aIndexentries [iY].iBlue = 0; aAlphaentries [iY] = 255; aUsedentries [iY] = 0; } while (iLen) /* as long as there are entries left ... */ { mng_uint32 iDiff; if (iLen < 2) MNG_ERROR (pData, MNG_INVALIDLENGTH); iX = *pTemp; /* get start and end index */ iM = *(pTemp+1); if (iM < iX) MNG_ERROR (pData, MNG_INVALIDINDEX); if ((mng_uint32)iM >= iMax) /* determine highest used index */ iMax = (mng_uint32)iM + 1; pTemp += 2; iLen -= 2; iDiff = (iM - iX + 1); if ((iDeltatype == MNG_DELTATYPE_REPLACERGB ) || (iDeltatype == MNG_DELTATYPE_DELTARGB ) ) iDiff = iDiff * 3; else if ((iDeltatype == MNG_DELTATYPE_REPLACERGBA) || (iDeltatype == MNG_DELTATYPE_DELTARGBA ) ) iDiff = iDiff * 4; if (iLen < iDiff) MNG_ERROR (pData, MNG_INVALIDLENGTH); if ((iDeltatype == MNG_DELTATYPE_REPLACERGB ) || (iDeltatype == MNG_DELTATYPE_DELTARGB ) ) { for (iY = (mng_uint32)iX; iY <= (mng_uint32)iM; iY++) { aIndexentries [iY].iRed = *pTemp; aIndexentries [iY].iGreen = *(pTemp+1); aIndexentries [iY].iBlue = *(pTemp+2); aUsedentries [iY] = 1; pTemp += 3; iLen -= 3; } } else if ((iDeltatype == MNG_DELTATYPE_REPLACEALPHA) || (iDeltatype == MNG_DELTATYPE_DELTAALPHA ) ) { for (iY = (mng_uint32)iX; iY <= (mng_uint32)iM; iY++) { aAlphaentries [iY] = *pTemp; aUsedentries [iY] = 1; pTemp++; iLen--; } } else { for (iY = (mng_uint32)iX; iY <= (mng_uint32)iM; iY++) { aIndexentries [iY].iRed = *pTemp; aIndexentries [iY].iGreen = *(pTemp+1); aIndexentries [iY].iBlue = *(pTemp+2); aAlphaentries [iY] = *(pTemp+3); aUsedentries [iY] = 1; pTemp += 4; iLen -= 4; } } } switch (pData->iBitdepth) /* check maximum allowed entries for bitdepth */ { case MNG_BITDEPTH_1 : { if (iMax > 2) MNG_ERROR (pData, MNG_INVALIDINDEX); break; } case MNG_BITDEPTH_2 : { if (iMax > 4) MNG_ERROR (pData, MNG_INVALIDINDEX); break; } case MNG_BITDEPTH_4 : { if (iMax > 16) MNG_ERROR (pData, MNG_INVALIDINDEX); break; } } #ifdef MNG_SUPPORT_DISPLAY { /* create animation object */ mng_retcode iRetcode = mng_create_ani_pplt (pData, iDeltatype, iMax, aIndexentries, aAlphaentries, aUsedentries); /* if (!iRetcode) iRetcode = mng_process_display_pplt (pData, iDeltatype, iMax, aIndexentries, aAlphaentries, aUsedentries); */ if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_ppltp)*ppChunk)->iDeltatype = iDeltatype; ((mng_ppltp)*ppChunk)->iCount = iMax; for (iY = 0; iY < 256; iY++) { ((mng_ppltp)*ppChunk)->aEntries [iY].iRed = aIndexentries [iY].iRed; ((mng_ppltp)*ppChunk)->aEntries [iY].iGreen = aIndexentries [iY].iGreen; ((mng_ppltp)*ppChunk)->aEntries [iY].iBlue = aIndexentries [iY].iBlue; ((mng_ppltp)*ppChunk)->aEntries [iY].iAlpha = aAlphaentries [iY]; ((mng_ppltp)*ppChunk)->aEntries [iY].bUsed = (mng_bool)(aUsedentries [iY]); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_PPLT, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG READ_CHUNK (mng_read_ijng) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_IJNG, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) || (!pData->bHasDHDR)) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen != 0) /* gotta be empty */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode = mng_create_ani_ijng (pData); if (!iRetcode) iRetcode = mng_process_display_ijng (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_IJNG, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_NO_DELTA_PNG READ_CHUNK (mng_read_drop) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DROP, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) || (!pData->bHasDHDR)) MNG_ERROR (pData, MNG_SEQUENCEERROR); /* check length */ if ((iRawlen < 4) || ((iRawlen % 4) != 0)) MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_dropp)*ppChunk)->iCount = iRawlen / 4; if (iRawlen) { mng_uint32 iX; mng_uint8p pTemp = pRawdata; mng_uint32p pEntry; MNG_ALLOC (pData, pEntry, iRawlen); ((mng_dropp)*ppChunk)->pChunknames = (mng_ptr)pEntry; for (iX = 0; iX < iRawlen / 4; iX++) { *pEntry = mng_get_uint32 (pTemp); pTemp += 4; pEntry++; } } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DROP, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK READ_CHUNK (mng_read_dbyk) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DBYK, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) || (!pData->bHasDHDR)) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen < 6) /* must be at least 6 long */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_dbykp)*ppChunk)->iChunkname = mng_get_uint32 (pRawdata); ((mng_dbykp)*ppChunk)->iPolarity = *(pRawdata+4); ((mng_dbykp)*ppChunk)->iKeywordssize = iRawlen - 5; if (iRawlen > 5) { MNG_ALLOC (pData, ((mng_dbykp)*ppChunk)->zKeywords, iRawlen-4); MNG_COPY (((mng_dbykp)*ppChunk)->zKeywords, pRawdata+5, iRawlen-5); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DBYK, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR READ_CHUNK (mng_read_ordr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_ORDR, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) || (!pData->bHasDHDR)) MNG_ERROR (pData, MNG_SEQUENCEERROR); /* check length */ if ((iRawlen < 5) || ((iRawlen % 5) != 0)) MNG_ERROR (pData, MNG_INVALIDLENGTH); #ifdef MNG_SUPPORT_DISPLAY { /* TODO: something !!! */ } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_ordrp)*ppChunk)->iCount = iRawlen / 5; if (iRawlen) { mng_uint32 iX; mng_ordr_entryp pEntry; mng_uint8p pTemp = pRawdata; MNG_ALLOC (pData, pEntry, iRawlen); ((mng_ordrp)*ppChunk)->pEntries = pEntry; for (iX = 0; iX < iRawlen / 5; iX++) { pEntry->iChunkname = mng_get_uint32 (pTemp); pEntry->iOrdertype = *(pTemp+4); pTemp += 5; pEntry++; } } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_ORDR, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_MAGN READ_CHUNK (mng_read_magn) { mng_uint16 iFirstid, iLastid; mng_uint8 iMethodX, iMethodY; mng_uint16 iMX, iMY, iML, iMR, iMT, iMB; mng_bool bFaulty; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_MAGN, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_SUPPORT_JNG if ((!pData->bHasMHDR) || (pData->bHasIHDR) || (pData->bHasDHDR) || (pData->bHasJHDR)) #else if ((!pData->bHasMHDR) || (pData->bHasIHDR) || (pData->bHasDHDR)) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* check length */ if (iRawlen > 20) MNG_ERROR (pData, MNG_INVALIDLENGTH); /* following is an ugly hack to allow faulty layout caused by previous versions of libmng and MNGeye, which wrote MAGN with a 16-bit MethodX/MethodY (as opposed to the proper 8-bit as defined in the spec!) */ if ((iRawlen == 6) || (iRawlen == 8) || (iRawlen == 10) || (iRawlen == 12) || (iRawlen == 14) || (iRawlen == 16) || (iRawlen == 20)) bFaulty = MNG_TRUE; /* these lengths are all wrong */ else /* length 18 can be right or wrong !!! */ if ((iRawlen == 18) && (mng_get_uint16 (pRawdata+4) <= 5) && (mng_get_uint16 (pRawdata+6) < 256) && (mng_get_uint16 (pRawdata+8) < 256) && (mng_get_uint16 (pRawdata+10) < 256) && (mng_get_uint16 (pRawdata+12) < 256) && (mng_get_uint16 (pRawdata+14) < 256) && (mng_get_uint16 (pRawdata+16) < 256)) bFaulty = MNG_TRUE; /* this is very likely the wrong layout */ else bFaulty = MNG_FALSE; /* all other cases are handled as right */ if (bFaulty) /* wrong layout ? */ { if (iRawlen > 0) /* get the fields */ iFirstid = mng_get_uint16 (pRawdata); else iFirstid = 0; if (iRawlen > 2) iLastid = mng_get_uint16 (pRawdata+2); else iLastid = iFirstid; if (iRawlen > 4) iMethodX = (mng_uint8)(mng_get_uint16 (pRawdata+4)); else iMethodX = 0; if (iRawlen > 6) iMX = mng_get_uint16 (pRawdata+6); else iMX = 1; if (iRawlen > 8) iMY = mng_get_uint16 (pRawdata+8); else iMY = iMX; if (iRawlen > 10) iML = mng_get_uint16 (pRawdata+10); else iML = iMX; if (iRawlen > 12) iMR = mng_get_uint16 (pRawdata+12); else iMR = iMX; if (iRawlen > 14) iMT = mng_get_uint16 (pRawdata+14); else iMT = iMY; if (iRawlen > 16) iMB = mng_get_uint16 (pRawdata+16); else iMB = iMY; if (iRawlen > 18) iMethodY = (mng_uint8)(mng_get_uint16 (pRawdata+18)); else iMethodY = iMethodX; } else /* proper layout !!!! */ { if (iRawlen > 0) /* get the fields */ iFirstid = mng_get_uint16 (pRawdata); else iFirstid = 0; if (iRawlen > 2) iLastid = mng_get_uint16 (pRawdata+2); else iLastid = iFirstid; if (iRawlen > 4) iMethodX = *(pRawdata+4); else iMethodX = 0; if (iRawlen > 5) iMX = mng_get_uint16 (pRawdata+5); else iMX = 1; if (iRawlen > 7) iMY = mng_get_uint16 (pRawdata+7); else iMY = iMX; if (iRawlen > 9) iML = mng_get_uint16 (pRawdata+9); else iML = iMX; if (iRawlen > 11) iMR = mng_get_uint16 (pRawdata+11); else iMR = iMX; if (iRawlen > 13) iMT = mng_get_uint16 (pRawdata+13); else iMT = iMY; if (iRawlen > 15) iMB = mng_get_uint16 (pRawdata+15); else iMB = iMY; if (iRawlen > 17) iMethodY = *(pRawdata+17); else iMethodY = iMethodX; } /* check field validity */ if ((iMethodX > 5) || (iMethodY > 5)) MNG_ERROR (pData, MNG_INVALIDMETHOD); #ifdef MNG_SUPPORT_DISPLAY { mng_retcode iRetcode; iRetcode = mng_create_ani_magn (pData, iFirstid, iLastid, iMethodX, iMX, iMY, iML, iMR, iMT, iMB, iMethodY); /* if (!iRetcode) iRetcode = mng_process_display_magn (pData, iFirstid, iLastid, iMethodX, iMX, iMY, iML, iMR, iMT, iMB, iMethodY); */ if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_magnp)*ppChunk)->iFirstid = iFirstid; ((mng_magnp)*ppChunk)->iLastid = iLastid; ((mng_magnp)*ppChunk)->iMethodX = iMethodX; ((mng_magnp)*ppChunk)->iMX = iMX; ((mng_magnp)*ppChunk)->iMY = iMY; ((mng_magnp)*ppChunk)->iML = iML; ((mng_magnp)*ppChunk)->iMR = iMR; ((mng_magnp)*ppChunk)->iMT = iMT; ((mng_magnp)*ppChunk)->iMB = iMB; ((mng_magnp)*ppChunk)->iMethodY = iMethodY; } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_MAGN, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifdef MNG_INCLUDE_MPNG_PROPOSAL READ_CHUNK (mng_read_mpng) { mng_uint32 iFramewidth; mng_uint32 iFrameheight; mng_uint16 iTickspersec; mng_uint32 iFramessize; mng_uint32 iCompressedsize; #if defined(MNG_SUPPORT_DISPLAY) || defined(MNG_STORE_CHUNKS) mng_retcode iRetcode; mng_uint16 iNumplays; mng_uint32 iBufsize; mng_uint8p pBuf = 0; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_MPNG, MNG_LC_START); #endif /* sequence checks */ if (!pData->bHasIHDR) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen < 41) /* length must be at least 41 */ MNG_ERROR (pData, MNG_INVALIDLENGTH); iFramewidth = mng_get_int32 (pRawdata); if (iFramewidth == 0) /* frame_width must not be zero */ MNG_ERROR (pData, MNG_INVALIDWIDTH); iFrameheight = mng_get_int32 (pRawdata+4); if (iFrameheight == 0) /* frame_height must not be zero */ MNG_ERROR (pData, MNG_INVALIDHEIGHT); iTickspersec = mng_get_uint16 (pRawdata+10); if (iTickspersec == 0) /* delay_den must not be zero */ MNG_ERROR (pData, MNG_INVALIDFIELDVAL); if (*(pRawdata+12) != 0) /* only deflate compression-method allowed */ MNG_ERROR (pData, MNG_INVALIDCOMPRESS); #if defined(MNG_SUPPORT_DISPLAY) || defined(MNG_STORE_CHUNKS) iNumplays = mng_get_uint16 (pRawdata+8); iCompressedsize = (mng_uint32)(iRawlen - 13); #endif #ifdef MNG_SUPPORT_DISPLAY { iRetcode = mng_inflate_buffer (pData, pRawdata+13, iCompressedsize, &pBuf, &iBufsize, &iFramessize); if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } if (iFramessize % 26) { MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, MNG_INVALIDLENGTH); } iRetcode = mng_create_mpng_obj (pData, iFramewidth, iFrameheight, iNumplays, iTickspersec, iFramessize, pBuf); if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } } #endif /* MNG_SUPPORT_DISPLAY */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the fields */ ((mng_mpngp)*ppChunk)->iFramewidth = iFramewidth; ((mng_mpngp)*ppChunk)->iFrameheight = iFrameheight; ((mng_mpngp)*ppChunk)->iNumplays = iNumplays; ((mng_mpngp)*ppChunk)->iTickspersec = iTickspersec; ((mng_mpngp)*ppChunk)->iCompressionmethod = *(pRawdata+14); #ifndef MNG_SUPPORT_DISPLAY iRetcode = mng_inflate_buffer (pData, pRawdata+13, iCompressedsize, &pBuf, &iBufsize, &iFramessize); if (iRetcode) /* on error bail out */ { MNG_FREEX (pData, pBuf, iBufsize); return iRetcode; } if (iFramessize % 26) { MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, MNG_INVALIDLENGTH); } #endif if (iFramessize) { MNG_ALLOCX (pData, ((mng_mpngp)*ppChunk)->pFrames, iFramessize); if (((mng_mpngp)*ppChunk)->pFrames == 0) { MNG_FREEX (pData, pBuf, iBufsize); MNG_ERROR (pData, MNG_OUTOFMEMORY); } ((mng_mpngp)*ppChunk)->iFramessize = iFramessize; MNG_COPY (((mng_mpngp)*ppChunk)->pFrames, pBuf, iFramessize); } } #endif /* MNG_STORE_CHUNKS */ #if defined(MNG_SUPPORT_DISPLAY) || defined(MNG_STORE_CHUNKS) MNG_FREEX (pData, pBuf, iBufsize); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_MPNG, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER #ifndef MNG_SKIPCHUNK_evNT READ_CHUNK (mng_read_evnt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_EVNT, MNG_LC_START); #endif /* sequence checks */ if ((!pData->bHasMHDR) || (pData->bHasSAVE)) MNG_ERROR (pData, MNG_SEQUENCEERROR); if (iRawlen < 2) /* must have at least 1 entry ! */ MNG_ERROR (pData, MNG_INVALIDLENGTH); #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_SUPPORT_DYNAMICMNG) { if (iRawlen) /* not empty ? */ { mng_retcode iRetcode; mng_uint8p pTemp; mng_uint8p pNull; mng_uint32 iLen; mng_uint8 iEventtype; mng_uint8 iMasktype; mng_int32 iLeft; mng_int32 iRight; mng_int32 iTop; mng_int32 iBottom; mng_uint16 iObjectid; mng_uint8 iIndex; mng_uint32 iNamesize; pTemp = pRawdata; iLen = iRawlen; while (iLen) /* anything left ? */ { iEventtype = *pTemp; /* eventtype */ if (iEventtype > 5) MNG_ERROR (pData, MNG_INVALIDEVENT); pTemp++; iMasktype = *pTemp; /* masktype */ if (iMasktype > 5) MNG_ERROR (pData, MNG_INVALIDMASK); pTemp++; iLen -= 2; iLeft = 0; iRight = 0; iTop = 0; iBottom = 0; iObjectid = 0; iIndex = 0; switch (iMasktype) { case 1 : { if (iLen > 16) { iLeft = mng_get_int32 (pTemp); iRight = mng_get_int32 (pTemp+4); iTop = mng_get_int32 (pTemp+8); iBottom = mng_get_int32 (pTemp+12); pTemp += 16; iLen -= 16; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 2 : { if (iLen > 2) { iObjectid = mng_get_uint16 (pTemp); pTemp += 2; iLen -= 2; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 3 : { if (iLen > 3) { iObjectid = mng_get_uint16 (pTemp); iIndex = *(pTemp+2); pTemp += 3; iLen -= 3; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 4 : { if (iLen > 18) { iLeft = mng_get_int32 (pTemp); iRight = mng_get_int32 (pTemp+4); iTop = mng_get_int32 (pTemp+8); iBottom = mng_get_int32 (pTemp+12); iObjectid = mng_get_uint16 (pTemp+16); pTemp += 18; iLen -= 18; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 5 : { if (iLen > 19) { iLeft = mng_get_int32 (pTemp); iRight = mng_get_int32 (pTemp+4); iTop = mng_get_int32 (pTemp+8); iBottom = mng_get_int32 (pTemp+12); iObjectid = mng_get_uint16 (pTemp+16); iIndex = *(pTemp+18); pTemp += 19; iLen -= 19; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } } pNull = find_null (pTemp); /* get the name length */ if ((pNull - pTemp) > (mng_int32)iLen) { iNamesize = iLen; /* no null found; so end of evNT */ iLen = 0; } else { iNamesize = pNull - pTemp; /* should be another entry */ iLen = iLen - iNamesize - 1; if (!iLen) /* must not end with a null ! */ MNG_ERROR (pData, MNG_ENDWITHNULL); } iRetcode = mng_create_event (pData, iEventtype, iMasktype, iLeft, iRight, iTop, iBottom, iObjectid, iIndex, iNamesize, (mng_pchar)pTemp); if (iRetcode) /* on error bail out */ return iRetcode; pTemp = pTemp + iNamesize + 1; } } } #endif /* MNG_SUPPORT_DISPLAY && MNG_SUPPORT_DYNAMICMNG */ #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; if (iRawlen) /* not empty ? */ { mng_uint32 iX; mng_uint32 iCount = 0; mng_uint8p pTemp; mng_uint8p pNull; mng_uint32 iLen; mng_uint8 iEventtype; mng_uint8 iMasktype; mng_int32 iLeft; mng_int32 iRight; mng_int32 iTop; mng_int32 iBottom; mng_uint16 iObjectid; mng_uint8 iIndex; mng_uint32 iNamesize; mng_evnt_entryp pEntry = MNG_NULL; for (iX = 0; iX < 2; iX++) /* do this twice to get the count first ! */ { pTemp = pRawdata; iLen = iRawlen; if (iX) /* second run ? */ { MNG_ALLOC (pData, pEntry, (iCount * sizeof (mng_evnt_entry))); ((mng_evntp)*ppChunk)->iCount = iCount; ((mng_evntp)*ppChunk)->pEntries = pEntry; } while (iLen) /* anything left ? */ { iEventtype = *pTemp; /* eventtype */ if (iEventtype > 5) MNG_ERROR (pData, MNG_INVALIDEVENT); pTemp++; iMasktype = *pTemp; /* masktype */ if (iMasktype > 5) MNG_ERROR (pData, MNG_INVALIDMASK); pTemp++; iLen -= 2; iLeft = 0; iRight = 0; iTop = 0; iBottom = 0; iObjectid = 0; iIndex = 0; switch (iMasktype) { case 1 : { if (iLen > 16) { iLeft = mng_get_int32 (pTemp); iRight = mng_get_int32 (pTemp+4); iTop = mng_get_int32 (pTemp+8); iBottom = mng_get_int32 (pTemp+12); pTemp += 16; iLen -= 16; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 2 : { if (iLen > 2) { iObjectid = mng_get_uint16 (pTemp); pTemp += 2; iLen -= 2; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 3 : { if (iLen > 3) { iObjectid = mng_get_uint16 (pTemp); iIndex = *(pTemp+2); pTemp += 3; iLen -= 3; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 4 : { if (iLen > 18) { iLeft = mng_get_int32 (pTemp); iRight = mng_get_int32 (pTemp+4); iTop = mng_get_int32 (pTemp+8); iBottom = mng_get_int32 (pTemp+12); iObjectid = mng_get_uint16 (pTemp+16); pTemp += 18; iLen -= 18; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } case 5 : { if (iLen > 19) { iLeft = mng_get_int32 (pTemp); iRight = mng_get_int32 (pTemp+4); iTop = mng_get_int32 (pTemp+8); iBottom = mng_get_int32 (pTemp+12); iObjectid = mng_get_uint16 (pTemp+16); iIndex = *(pTemp+18); pTemp += 19; iLen -= 19; } else MNG_ERROR (pData, MNG_INVALIDLENGTH); break; } } pNull = find_null (pTemp); /* get the name length */ if ((pNull - pTemp) > (mng_int32)iLen) { iNamesize = iLen; /* no null found; so end of evNT */ iLen = 0; } else { iNamesize = pNull - pTemp; /* should be another entry */ iLen = iLen - iNamesize - 1; if (!iLen) /* must not end with a null ! */ MNG_ERROR (pData, MNG_ENDWITHNULL); } if (!iX) { iCount++; } else { pEntry->iEventtype = iEventtype; pEntry->iMasktype = iMasktype; pEntry->iLeft = iLeft; pEntry->iRight = iRight; pEntry->iTop = iTop; pEntry->iBottom = iBottom; pEntry->iObjectid = iObjectid; pEntry->iIndex = iIndex; pEntry->iSegmentnamesize = iNamesize; if (iNamesize) { MNG_ALLOC (pData, pEntry->zSegmentname, iNamesize+1); MNG_COPY (pEntry->zSegmentname, pTemp, iNamesize); } pEntry++; } pTemp = pTemp + iNamesize + 1; } } } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_EVNT, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKREADER READ_CHUNK (mng_read_unknown) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_UNKNOWN, MNG_LC_START); #endif /* sequence checks */ #ifdef MNG_INCLUDE_JNG if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) ) #endif MNG_ERROR (pData, MNG_SEQUENCEERROR); /* critical chunk ? */ if ((((mng_uint32)pData->iChunkname & 0x20000000) == 0) #ifdef MNG_SKIPCHUNK_SAVE && (pData->iChunkname != MNG_UINT_SAVE) #endif #ifdef MNG_SKIPCHUNK_SEEK && (pData->iChunkname != MNG_UINT_SEEK) #endif #ifdef MNG_SKIPCHUNK_DBYK && (pData->iChunkname != MNG_UINT_DBYK) #endif #ifdef MNG_SKIPCHUNK_ORDR && (pData->iChunkname != MNG_UINT_ORDR) #endif ) MNG_ERROR (pData, MNG_UNKNOWNCRITICAL); if (pData->fProcessunknown) /* let the app handle it ? */ { mng_bool bOke = pData->fProcessunknown ((mng_handle)pData, pData->iChunkname, iRawlen, (mng_ptr)pRawdata); if (!bOke) MNG_ERROR (pData, MNG_APPMISCERROR); } #ifdef MNG_STORE_CHUNKS if (pData->bStorechunks) { /* initialize storage */ mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk); if (iRetcode) /* on error bail out */ return iRetcode; /* store the length */ ((mng_chunk_headerp)*ppChunk)->iChunkname = pData->iChunkname; ((mng_unknown_chunkp)*ppChunk)->iDatasize = iRawlen; if (iRawlen == 0) /* any data at all ? */ ((mng_unknown_chunkp)*ppChunk)->pData = 0; else { /* then store it */ MNG_ALLOC (pData, ((mng_unknown_chunkp)*ppChunk)->pData, iRawlen); MNG_COPY (((mng_unknown_chunkp)*ppChunk)->pData, pRawdata, iRawlen); } } #endif /* MNG_STORE_CHUNKS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_UNKNOWN, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } #endif /* ************************************************************************** */ #endif /* MNG_INCLUDE_READ_PROCS */ /* ************************************************************************** */ /* * * */ /* * chunk write functions * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_WRITE_PROCS /* ************************************************************************** */ WRITE_CHUNK (mng_write_ihdr) { mng_ihdrp pIHDR; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_IHDR, MNG_LC_START); #endif pIHDR = (mng_ihdrp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 13; /* fill the output buffer */ mng_put_uint32 (pRawdata, pIHDR->iWidth); mng_put_uint32 (pRawdata+4, pIHDR->iHeight); *(pRawdata+8) = pIHDR->iBitdepth; *(pRawdata+9) = pIHDR->iColortype; *(pRawdata+10) = pIHDR->iCompression; *(pRawdata+11) = pIHDR->iFilter; *(pRawdata+12) = pIHDR->iInterlace; /* and write it */ iRetcode = write_raw_chunk (pData, pIHDR->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_IHDR, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_plte) { mng_pltep pPLTE; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint8p pTemp; mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PLTE, MNG_LC_START); #endif pPLTE = (mng_pltep)pChunk; /* address the proper chunk */ if (pPLTE->bEmpty) /* write empty chunk ? */ iRetcode = write_raw_chunk (pData, pPLTE->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = pPLTE->iEntrycount * 3; /* fill the output buffer */ pTemp = pRawdata; for (iX = 0; iX < pPLTE->iEntrycount; iX++) { *pTemp = pPLTE->aEntries [iX].iRed; *(pTemp+1) = pPLTE->aEntries [iX].iGreen; *(pTemp+2) = pPLTE->aEntries [iX].iBlue; pTemp += 3; } /* and write it */ iRetcode = write_raw_chunk (pData, pPLTE->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PLTE, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_idat) { mng_idatp pIDAT; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_IDAT, MNG_LC_START); #endif pIDAT = (mng_idatp)pChunk; /* address the proper chunk */ if (pIDAT->bEmpty) /* and write it */ iRetcode = write_raw_chunk (pData, pIDAT->sHeader.iChunkname, 0, 0); else iRetcode = write_raw_chunk (pData, pIDAT->sHeader.iChunkname, pIDAT->iDatasize, pIDAT->pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_IDAT, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_iend) { mng_iendp pIEND; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_IEND, MNG_LC_START); #endif pIEND = (mng_iendp)pChunk; /* address the proper chunk */ /* and write it */ iRetcode = write_raw_chunk (pData, pIEND->sHeader.iChunkname, 0, 0); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_IEND, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_trns) { mng_trnsp pTRNS; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint8p pTemp; mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_TRNS, MNG_LC_START); #endif pTRNS = (mng_trnsp)pChunk; /* address the proper chunk */ if (pTRNS->bEmpty) /* write empty chunk ? */ iRetcode = write_raw_chunk (pData, pTRNS->sHeader.iChunkname, 0, 0); else if (pTRNS->bGlobal) /* write global chunk ? */ iRetcode = write_raw_chunk (pData, pTRNS->sHeader.iChunkname, pTRNS->iRawlen, (mng_uint8p)pTRNS->aRawdata); else { pRawdata = pData->pWritebuf+8; /* init output buffer */ iRawlen = 0; /* and default size */ switch (pTRNS->iType) { case 0: { iRawlen = 2; /* fill the size & output buffer */ mng_put_uint16 (pRawdata, pTRNS->iGray); break; } case 2: { iRawlen = 6; /* fill the size & output buffer */ mng_put_uint16 (pRawdata, pTRNS->iRed); mng_put_uint16 (pRawdata+2, pTRNS->iGreen); mng_put_uint16 (pRawdata+4, pTRNS->iBlue); break; } case 3: { /* init output buffer size */ iRawlen = pTRNS->iCount; pTemp = pRawdata; /* fill the output buffer */ for (iX = 0; iX < pTRNS->iCount; iX++) { *pTemp = pTRNS->aEntries[iX]; pTemp++; } break; } } /* write the chunk */ iRetcode = write_raw_chunk (pData, pTRNS->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_TRNS, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_gama) { mng_gamap pGAMA; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_GAMA, MNG_LC_START); #endif pGAMA = (mng_gamap)pChunk; /* address the proper chunk */ if (pGAMA->bEmpty) /* write empty ? */ iRetcode = write_raw_chunk (pData, pGAMA->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 4; /* fill the buffer */ mng_put_uint32 (pRawdata, pGAMA->iGamma); /* and write it */ iRetcode = write_raw_chunk (pData, pGAMA->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_GAMA, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_cHRM WRITE_CHUNK (mng_write_chrm) { mng_chrmp pCHRM; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_CHRM, MNG_LC_START); #endif pCHRM = (mng_chrmp)pChunk; /* address the proper chunk */ if (pCHRM->bEmpty) /* write empty ? */ iRetcode = write_raw_chunk (pData, pCHRM->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 32; /* fill the buffer */ mng_put_uint32 (pRawdata, pCHRM->iWhitepointx); mng_put_uint32 (pRawdata+4, pCHRM->iWhitepointy); mng_put_uint32 (pRawdata+8, pCHRM->iRedx); mng_put_uint32 (pRawdata+12, pCHRM->iRedy); mng_put_uint32 (pRawdata+16, pCHRM->iGreenx); mng_put_uint32 (pRawdata+20, pCHRM->iGreeny); mng_put_uint32 (pRawdata+24, pCHRM->iBluex); mng_put_uint32 (pRawdata+28, pCHRM->iBluey); /* and write it */ iRetcode = write_raw_chunk (pData, pCHRM->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_CHRM, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ WRITE_CHUNK (mng_write_srgb) { mng_srgbp pSRGB; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SRGB, MNG_LC_START); #endif pSRGB = (mng_srgbp)pChunk; /* address the proper chunk */ if (pSRGB->bEmpty) /* write empty ? */ iRetcode = write_raw_chunk (pData, pSRGB->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 1; /* fill the buffer */ *pRawdata = pSRGB->iRenderingintent; /* and write it */ iRetcode = write_raw_chunk (pData, pSRGB->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SRGB, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iCCP WRITE_CHUNK (mng_write_iccp) { mng_iccpp pICCP; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint8p pTemp; mng_uint8p pBuf = 0; mng_uint32 iBuflen; mng_uint32 iReallen; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_ICCP, MNG_LC_START); #endif pICCP = (mng_iccpp)pChunk; /* address the proper chunk */ if (pICCP->bEmpty) /* write empty ? */ iRetcode = write_raw_chunk (pData, pICCP->sHeader.iChunkname, 0, 0); else { /* compress the profile */ iRetcode = deflate_buffer (pData, pICCP->pProfile, pICCP->iProfilesize, &pBuf, &iBuflen, &iReallen); if (!iRetcode) /* still oke ? */ { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = pICCP->iNamesize + 2 + iReallen; /* requires large buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_ALLOC (pData, pRawdata, iRawlen); pTemp = pRawdata; /* fill the buffer */ if (pICCP->iNamesize) { MNG_COPY (pTemp, pICCP->zName, pICCP->iNamesize); pTemp += pICCP->iNamesize; } *pTemp = 0; *(pTemp+1) = pICCP->iCompression; pTemp += 2; if (iReallen) MNG_COPY (pTemp, pBuf, iReallen); /* and write it */ iRetcode = write_raw_chunk (pData, pICCP->sHeader.iChunkname, iRawlen, pRawdata); /* drop the temp buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_FREEX (pData, pRawdata, iRawlen); } MNG_FREEX (pData, pBuf, iBuflen); /* always drop the extra buffer */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_ICCP, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tEXt WRITE_CHUNK (mng_write_text) { mng_textp pTEXT; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint8p pTemp; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_TEXT, MNG_LC_START); #endif pTEXT = (mng_textp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = pTEXT->iKeywordsize + 1 + pTEXT->iTextsize; /* requires large buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_ALLOC (pData, pRawdata, iRawlen); pTemp = pRawdata; /* fill the buffer */ if (pTEXT->iKeywordsize) { MNG_COPY (pTemp, pTEXT->zKeyword, pTEXT->iKeywordsize); pTemp += pTEXT->iKeywordsize; } *pTemp = 0; pTemp += 1; if (pTEXT->iTextsize) MNG_COPY (pTemp, pTEXT->zText, pTEXT->iTextsize); /* and write it */ iRetcode = write_raw_chunk (pData, pTEXT->sHeader.iChunkname, iRawlen, pRawdata); if (iRawlen > pData->iWritebufsize) /* drop the temp buffer ? */ MNG_FREEX (pData, pRawdata, iRawlen); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_TEXT, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_zTXt WRITE_CHUNK (mng_write_ztxt) { mng_ztxtp pZTXT; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint8p pTemp; mng_uint8p pBuf = 0; mng_uint32 iBuflen; mng_uint32 iReallen; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_ZTXT, MNG_LC_START); #endif pZTXT = (mng_ztxtp)pChunk; /* address the proper chunk */ /* compress the text */ iRetcode = deflate_buffer (pData, (mng_uint8p)pZTXT->zText, pZTXT->iTextsize, &pBuf, &iBuflen, &iReallen); if (!iRetcode) /* all ok ? */ { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = pZTXT->iKeywordsize + 2 + iReallen; /* requires large buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_ALLOC (pData, pRawdata, iRawlen); pTemp = pRawdata; /* fill the buffer */ if (pZTXT->iKeywordsize) { MNG_COPY (pTemp, pZTXT->zKeyword, pZTXT->iKeywordsize); pTemp += pZTXT->iKeywordsize; } *pTemp = 0; /* terminator zero */ pTemp++; *pTemp = 0; /* compression type */ pTemp++; if (iReallen) MNG_COPY (pTemp, pBuf, iReallen); /* and write it */ iRetcode = write_raw_chunk (pData, pZTXT->sHeader.iChunkname, iRawlen, pRawdata); /* drop the temp buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_FREEX (pData, pRawdata, iRawlen); } MNG_FREEX (pData, pBuf, iBuflen); /* always drop the compression buffer */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_ZTXT, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iTXt WRITE_CHUNK (mng_write_itxt) { mng_itxtp pITXT; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint8p pTemp; mng_uint8p pBuf = 0; mng_uint32 iBuflen; mng_uint32 iReallen; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_ITXT, MNG_LC_START); #endif pITXT = (mng_itxtp)pChunk; /* address the proper chunk */ if (pITXT->iCompressionflag) /* compress the text */ iRetcode = deflate_buffer (pData, (mng_uint8p)pITXT->zText, pITXT->iTextsize, &pBuf, &iBuflen, &iReallen); else iRetcode = MNG_NOERROR; if (!iRetcode) /* all ok ? */ { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = pITXT->iKeywordsize + pITXT->iLanguagesize + pITXT->iTranslationsize + 5; if (pITXT->iCompressionflag) iRawlen = iRawlen + iReallen; else iRawlen = iRawlen + pITXT->iTextsize; /* requires large buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_ALLOC (pData, pRawdata, iRawlen); pTemp = pRawdata; /* fill the buffer */ if (pITXT->iKeywordsize) { MNG_COPY (pTemp, pITXT->zKeyword, pITXT->iKeywordsize); pTemp += pITXT->iKeywordsize; } *pTemp = 0; pTemp++; *pTemp = pITXT->iCompressionflag; pTemp++; *pTemp = pITXT->iCompressionmethod; pTemp++; if (pITXT->iLanguagesize) { MNG_COPY (pTemp, pITXT->zLanguage, pITXT->iLanguagesize); pTemp += pITXT->iLanguagesize; } *pTemp = 0; pTemp++; if (pITXT->iTranslationsize) { MNG_COPY (pTemp, pITXT->zTranslation, pITXT->iTranslationsize); pTemp += pITXT->iTranslationsize; } *pTemp = 0; pTemp++; if (pITXT->iCompressionflag) { if (iReallen) MNG_COPY (pTemp, pBuf, iReallen); } else { if (pITXT->iTextsize) MNG_COPY (pTemp, pITXT->zText, pITXT->iTextsize); } /* and write it */ iRetcode = write_raw_chunk (pData, pITXT->sHeader.iChunkname, iRawlen, pRawdata); /* drop the temp buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_FREEX (pData, pRawdata, iRawlen); } MNG_FREEX (pData, pBuf, iBuflen); /* always drop the compression buffer */ if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_ITXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_bKGD WRITE_CHUNK (mng_write_bkgd) { mng_bkgdp pBKGD; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_BKGD, MNG_LC_START); #endif pBKGD = (mng_bkgdp)pChunk; /* address the proper chunk */ if (pBKGD->bEmpty) /* write empty ? */ iRetcode = write_raw_chunk (pData, pBKGD->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 0; /* and default size */ switch (pBKGD->iType) { case 0: { /* gray */ iRawlen = 2; /* fill the size & output buffer */ mng_put_uint16 (pRawdata, pBKGD->iGray); break; } case 2: { /* rgb */ iRawlen = 6; /* fill the size & output buffer */ mng_put_uint16 (pRawdata, pBKGD->iRed); mng_put_uint16 (pRawdata+2, pBKGD->iGreen); mng_put_uint16 (pRawdata+4, pBKGD->iBlue); break; } case 3: { /* indexed */ iRawlen = 1; /* fill the size & output buffer */ *pRawdata = pBKGD->iIndex; break; } } /* and write it */ iRetcode = write_raw_chunk (pData, pBKGD->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_BKGD, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYs WRITE_CHUNK (mng_write_phys) { mng_physp pPHYS; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PHYS, MNG_LC_START); #endif pPHYS = (mng_physp)pChunk; /* address the proper chunk */ if (pPHYS->bEmpty) /* write empty ? */ iRetcode = write_raw_chunk (pData, pPHYS->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 9; /* fill the output buffer */ mng_put_uint32 (pRawdata, pPHYS->iSizex); mng_put_uint32 (pRawdata+4, pPHYS->iSizey); *(pRawdata+8) = pPHYS->iUnit; /* and write it */ iRetcode = write_raw_chunk (pData, pPHYS->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PHYS, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sBIT WRITE_CHUNK (mng_write_sbit) { mng_sbitp pSBIT; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SBIT, MNG_LC_START); #endif pSBIT = (mng_sbitp)pChunk; /* address the proper chunk */ if (pSBIT->bEmpty) /* write empty ? */ iRetcode = write_raw_chunk (pData, pSBIT->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 0; /* and default size */ switch (pSBIT->iType) { case 0: { /* gray */ iRawlen = 1; /* fill the size & output buffer */ *pRawdata = pSBIT->aBits[0]; break; } case 2: { /* rgb */ iRawlen = 3; /* fill the size & output buffer */ *pRawdata = pSBIT->aBits[0]; *(pRawdata+1) = pSBIT->aBits[1]; *(pRawdata+2) = pSBIT->aBits[2]; break; } case 3: { /* indexed */ iRawlen = 3; /* fill the size & output buffer */ *pRawdata = pSBIT->aBits[0]; *pRawdata = pSBIT->aBits[1]; *pRawdata = pSBIT->aBits[2]; break; } case 4: { /* gray + alpha */ iRawlen = 2; /* fill the size & output buffer */ *pRawdata = pSBIT->aBits[0]; *(pRawdata+1) = pSBIT->aBits[1]; break; } case 6: { /* rgb + alpha */ iRawlen = 4; /* fill the size & output buffer */ *pRawdata = pSBIT->aBits[0]; *(pRawdata+1) = pSBIT->aBits[1]; *(pRawdata+2) = pSBIT->aBits[2]; *(pRawdata+3) = pSBIT->aBits[3]; break; } case 10: { /* jpeg gray */ iRawlen = 1; /* fill the size & output buffer */ *pRawdata = pSBIT->aBits[0]; break; } case 12: { /* jpeg rgb */ iRawlen = 3; /* fill the size & output buffer */ *pRawdata = pSBIT->aBits[0]; *(pRawdata+1) = pSBIT->aBits[1]; *(pRawdata+2) = pSBIT->aBits[2]; break; } case 14: { /* jpeg gray + alpha */ iRawlen = 2; /* fill the size & output buffer */ *pRawdata = pSBIT->aBits[0]; *(pRawdata+1) = pSBIT->aBits[1]; break; } case 16: { /* jpeg rgb + alpha */ iRawlen = 4; /* fill the size & output buffer */ *pRawdata = pSBIT->aBits[0]; *(pRawdata+1) = pSBIT->aBits[1]; *(pRawdata+2) = pSBIT->aBits[2]; *(pRawdata+3) = pSBIT->aBits[3]; break; } } /* and write it */ iRetcode = write_raw_chunk (pData, pSBIT->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SBIT, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sPLT WRITE_CHUNK (mng_write_splt) { mng_spltp pSPLT; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint32 iEntrieslen; mng_uint8p pTemp; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SPLT, MNG_LC_START); #endif pSPLT = (mng_spltp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iEntrieslen = ((pSPLT->iSampledepth >> 3) * 4 + 2) * pSPLT->iEntrycount; iRawlen = pSPLT->iNamesize + 2 + iEntrieslen; /* requires large buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_ALLOC (pData, pRawdata, iRawlen); pTemp = pRawdata; /* fill the buffer */ if (pSPLT->iNamesize) { MNG_COPY (pTemp, pSPLT->zName, pSPLT->iNamesize); pTemp += pSPLT->iNamesize; } *pTemp = 0; *(pTemp+1) = pSPLT->iSampledepth; pTemp += 2; if (pSPLT->iEntrycount) MNG_COPY (pTemp, pSPLT->pEntries, iEntrieslen); /* and write it */ iRetcode = write_raw_chunk (pData, pSPLT->sHeader.iChunkname, iRawlen, pRawdata); if (iRawlen > pData->iWritebufsize) /* drop the temp buffer ? */ MNG_FREEX (pData, pRawdata, iRawlen); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SPLT, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_hIST WRITE_CHUNK (mng_write_hist) { mng_histp pHIST; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint8p pTemp; mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_HIST, MNG_LC_START); #endif pHIST = (mng_histp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = pHIST->iEntrycount << 1; pTemp = pRawdata; /* fill the output buffer */ for (iX = 0; iX < pHIST->iEntrycount; iX++) { mng_put_uint16 (pTemp, pHIST->aEntries [iX]); pTemp += 2; } /* and write it */ iRetcode = write_raw_chunk (pData, pHIST->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_HIST, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tIME WRITE_CHUNK (mng_write_time) { mng_timep pTIME; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_TIME, MNG_LC_START); #endif pTIME = (mng_timep)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 7; /* fill the output buffer */ mng_put_uint16 (pRawdata, pTIME->iYear); *(pRawdata+2) = pTIME->iMonth; *(pRawdata+3) = pTIME->iDay; *(pRawdata+4) = pTIME->iHour; *(pRawdata+5) = pTIME->iMinute; *(pRawdata+6) = pTIME->iSecond; /* and write it */ iRetcode = write_raw_chunk (pData, pTIME->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_TIME, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ WRITE_CHUNK (mng_write_mhdr) { mng_mhdrp pMHDR; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_MHDR, MNG_LC_START); #endif pMHDR = (mng_mhdrp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 28; /* fill the output buffer */ mng_put_uint32 (pRawdata, pMHDR->iWidth); mng_put_uint32 (pRawdata+4, pMHDR->iHeight); mng_put_uint32 (pRawdata+8, pMHDR->iTicks); mng_put_uint32 (pRawdata+12, pMHDR->iLayercount); mng_put_uint32 (pRawdata+16, pMHDR->iFramecount); mng_put_uint32 (pRawdata+20, pMHDR->iPlaytime); mng_put_uint32 (pRawdata+24, pMHDR->iSimplicity); /* and write it */ iRetcode = write_raw_chunk (pData, pMHDR->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_MHDR, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_mend) { mng_mendp pMEND; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_MEND, MNG_LC_START); #endif pMEND = (mng_mendp)pChunk; /* address the proper chunk */ /* and write it */ iRetcode = write_raw_chunk (pData, pMEND->sHeader.iChunkname, 0, 0); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_MEND, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_loop) { mng_loopp pLOOP; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED mng_uint8p pTemp1; mng_uint32p pTemp2; mng_uint32 iX; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_LOOP, MNG_LC_START); #endif pLOOP = (mng_loopp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 5; /* fill the output buffer */ *pRawdata = pLOOP->iLevel; mng_put_uint32 (pRawdata+1, pLOOP->iRepeat); if (pLOOP->iTermination) { iRawlen++; *(pRawdata+5) = pLOOP->iTermination; if ((pLOOP->iCount) || (pLOOP->iItermin != 1) || (pLOOP->iItermax != 0x7FFFFFFFL)) { iRawlen += 8; mng_put_uint32 (pRawdata+6, pLOOP->iItermin); mng_put_uint32 (pRawdata+10, pLOOP->iItermax); #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED if (pLOOP->iCount) { iRawlen += pLOOP->iCount * 4; pTemp1 = pRawdata+14; pTemp2 = pLOOP->pSignals; for (iX = 0; iX < pLOOP->iCount; iX++) { mng_put_uint32 (pTemp1, *pTemp2); pTemp1 += 4; pTemp2++; } } #endif } } /* and write it */ iRetcode = write_raw_chunk (pData, pLOOP->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_LOOP, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_endl) { mng_endlp pENDL; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_ENDL, MNG_LC_START); #endif pENDL = (mng_endlp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 1; *pRawdata = pENDL->iLevel; /* fill the output buffer */ /* and write it */ iRetcode = write_raw_chunk (pData, pENDL->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_ENDL, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_defi) { mng_defip pDEFI; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_DEFI, MNG_LC_START); #endif pDEFI = (mng_defip)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 2; /* fill the output buffer */ mng_put_uint16 (pRawdata, pDEFI->iObjectid); if ((pDEFI->iDonotshow) || (pDEFI->iConcrete) || (pDEFI->bHasloca) || (pDEFI->bHasclip)) { iRawlen++; *(pRawdata+2) = pDEFI->iDonotshow; if ((pDEFI->iConcrete) || (pDEFI->bHasloca) || (pDEFI->bHasclip)) { iRawlen++; *(pRawdata+3) = pDEFI->iConcrete; if ((pDEFI->bHasloca) || (pDEFI->bHasclip)) { iRawlen += 8; mng_put_uint32 (pRawdata+4, pDEFI->iXlocation); mng_put_uint32 (pRawdata+8, pDEFI->iYlocation); if (pDEFI->bHasclip) { iRawlen += 16; mng_put_uint32 (pRawdata+12, pDEFI->iLeftcb); mng_put_uint32 (pRawdata+16, pDEFI->iRightcb); mng_put_uint32 (pRawdata+20, pDEFI->iTopcb); mng_put_uint32 (pRawdata+24, pDEFI->iBottomcb); } } } } /* and write it */ iRetcode = write_raw_chunk (pData, pDEFI->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_DEFI, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_basi) { mng_basip pBASI; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_bool bOpaque; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_BASI, MNG_LC_START); #endif pBASI = (mng_basip)pChunk; /* address the proper chunk */ #ifndef MNG_NO_16BIT_SUPPORT if (pBASI->iBitdepth <= 8) /* determine opacity alpha-field */ #endif bOpaque = (mng_bool)(pBASI->iAlpha == 0xFF); #ifndef MNG_NO_16BIT_SUPPORT else bOpaque = (mng_bool)(pBASI->iAlpha == 0xFFFF); #endif pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 13; /* fill the output buffer */ mng_put_uint32 (pRawdata, pBASI->iWidth); mng_put_uint32 (pRawdata+4, pBASI->iHeight); *(pRawdata+8) = pBASI->iBitdepth; *(pRawdata+9) = pBASI->iColortype; *(pRawdata+10) = pBASI->iCompression; *(pRawdata+11) = pBASI->iFilter; *(pRawdata+12) = pBASI->iInterlace; if ((pBASI->iRed) || (pBASI->iGreen) || (pBASI->iBlue) || (!bOpaque) || (pBASI->iViewable)) { iRawlen += 6; mng_put_uint16 (pRawdata+13, pBASI->iRed); mng_put_uint16 (pRawdata+15, pBASI->iGreen); mng_put_uint16 (pRawdata+17, pBASI->iBlue); if ((!bOpaque) || (pBASI->iViewable)) { iRawlen += 2; mng_put_uint16 (pRawdata+19, pBASI->iAlpha); if (pBASI->iViewable) { iRawlen++; *(pRawdata+21) = pBASI->iViewable; } } } /* and write it */ iRetcode = write_raw_chunk (pData, pBASI->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_BASI, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_clon) { mng_clonp pCLON; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_CLON, MNG_LC_START); #endif pCLON = (mng_clonp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 4; /* fill the output buffer */ mng_put_uint16 (pRawdata, pCLON->iSourceid); mng_put_uint16 (pRawdata+2, pCLON->iCloneid); if ((pCLON->iClonetype) || (pCLON->iDonotshow) || (pCLON->iConcrete) || (pCLON->bHasloca)) { iRawlen++; *(pRawdata+4) = pCLON->iClonetype; if ((pCLON->iDonotshow) || (pCLON->iConcrete) || (pCLON->bHasloca)) { iRawlen++; *(pRawdata+5) = pCLON->iDonotshow; if ((pCLON->iConcrete) || (pCLON->bHasloca)) { iRawlen++; *(pRawdata+6) = pCLON->iConcrete; if (pCLON->bHasloca) { iRawlen += 9; *(pRawdata+7) = pCLON->iLocationtype; mng_put_int32 (pRawdata+8, pCLON->iLocationx); mng_put_int32 (pRawdata+12, pCLON->iLocationy); } } } } /* and write it */ iRetcode = write_raw_chunk (pData, pCLON->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_CLON, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST WRITE_CHUNK (mng_write_past) { mng_pastp pPAST; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_past_sourcep pSource; mng_uint32 iX; mng_uint8p pTemp; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PAST, MNG_LC_START); #endif pPAST = (mng_pastp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 11 + (30 * pPAST->iCount); /* requires large buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_ALLOC (pData, pRawdata, iRawlen); /* fill the output buffer */ mng_put_uint16 (pRawdata, pPAST->iDestid); *(pRawdata+2) = pPAST->iTargettype; mng_put_int32 (pRawdata+3, pPAST->iTargetx); mng_put_int32 (pRawdata+7, pPAST->iTargety); pTemp = pRawdata+11; pSource = pPAST->pSources; for (iX = 0; iX < pPAST->iCount; iX++) { mng_put_uint16 (pTemp, pSource->iSourceid); *(pTemp+2) = pSource->iComposition; *(pTemp+3) = pSource->iOrientation; *(pTemp+4) = pSource->iOffsettype; mng_put_int32 (pTemp+5, pSource->iOffsetx); mng_put_int32 (pTemp+9, pSource->iOffsety); *(pTemp+13) = pSource->iBoundarytype; mng_put_int32 (pTemp+14, pSource->iBoundaryl); mng_put_int32 (pTemp+18, pSource->iBoundaryr); mng_put_int32 (pTemp+22, pSource->iBoundaryt); mng_put_int32 (pTemp+26, pSource->iBoundaryb); pSource++; pTemp += 30; } /* and write it */ iRetcode = write_raw_chunk (pData, pPAST->sHeader.iChunkname, iRawlen, pRawdata); /* free temporary buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_FREEX (pData, pRawdata, iRawlen); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PAST, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ WRITE_CHUNK (mng_write_disc) { mng_discp pDISC; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint32 iX; mng_uint8p pTemp1; mng_uint16p pTemp2; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_DISC, MNG_LC_START); #endif pDISC = (mng_discp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = pDISC->iCount << 1; pTemp1 = pRawdata; /* fill the output buffer */ pTemp2 = pDISC->pObjectids; for (iX = 0; iX < pDISC->iCount; iX++) { mng_put_uint16 (pTemp1, *pTemp2); pTemp2++; pTemp1 += 2; } /* and write it */ iRetcode = write_raw_chunk (pData, pDISC->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_DISC, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_back) { mng_backp pBACK; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_BACK, MNG_LC_START); #endif pBACK = (mng_backp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 6; /* fill the output buffer */ mng_put_uint16 (pRawdata, pBACK->iRed); mng_put_uint16 (pRawdata+2, pBACK->iGreen); mng_put_uint16 (pRawdata+4, pBACK->iBlue); if ((pBACK->iMandatory) || (pBACK->iImageid) || (pBACK->iTile)) { iRawlen++; *(pRawdata+6) = pBACK->iMandatory; if ((pBACK->iImageid) || (pBACK->iTile)) { iRawlen += 2; mng_put_uint16 (pRawdata+7, pBACK->iImageid); if (pBACK->iTile) { iRawlen++; *(pRawdata+9) = pBACK->iTile; } } } /* and write it */ iRetcode = write_raw_chunk (pData, pBACK->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_BACK, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_fram) { mng_framp pFRAM; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint8p pTemp; mng_uint32p pTemp2; mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_FRAM, MNG_LC_START); #endif pFRAM = (mng_framp)pChunk; /* address the proper chunk */ if (pFRAM->bEmpty) /* empty ? */ iRetcode = write_raw_chunk (pData, pFRAM->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 1; /* fill the output buffer */ *pRawdata = pFRAM->iMode; if ((pFRAM->iNamesize ) || (pFRAM->iChangedelay ) || (pFRAM->iChangetimeout) || (pFRAM->iChangeclipping) || (pFRAM->iChangesyncid ) ) { if (pFRAM->iNamesize) MNG_COPY (pRawdata+1, pFRAM->zName, pFRAM->iNamesize); iRawlen += pFRAM->iNamesize; pTemp = pRawdata + pFRAM->iNamesize + 1; if ((pFRAM->iChangedelay ) || (pFRAM->iChangetimeout) || (pFRAM->iChangeclipping) || (pFRAM->iChangesyncid ) ) { *pTemp = 0; *(pTemp+1) = pFRAM->iChangedelay; *(pTemp+2) = pFRAM->iChangetimeout; *(pTemp+3) = pFRAM->iChangeclipping; *(pTemp+4) = pFRAM->iChangesyncid; iRawlen += 5; pTemp += 5; if (pFRAM->iChangedelay) { mng_put_uint32 (pTemp, pFRAM->iDelay); iRawlen += 4; pTemp += 4; } if (pFRAM->iChangetimeout) { mng_put_uint32 (pTemp, pFRAM->iTimeout); iRawlen += 4; pTemp += 4; } if (pFRAM->iChangeclipping) { *pTemp = pFRAM->iBoundarytype; mng_put_uint32 (pTemp+1, pFRAM->iBoundaryl); mng_put_uint32 (pTemp+5, pFRAM->iBoundaryr); mng_put_uint32 (pTemp+9, pFRAM->iBoundaryt); mng_put_uint32 (pTemp+13, pFRAM->iBoundaryb); iRawlen += 17; pTemp += 17; } if (pFRAM->iChangesyncid) { iRawlen += pFRAM->iCount * 4; pTemp2 = pFRAM->pSyncids; for (iX = 0; iX < pFRAM->iCount; iX++) { mng_put_uint32 (pTemp, *pTemp2); pTemp2++; pTemp += 4; } } } } /* and write it */ iRetcode = write_raw_chunk (pData, pFRAM->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_FRAM, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_move) { mng_movep pMOVE; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_MOVE, MNG_LC_START); #endif pMOVE = (mng_movep)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 13; /* fill the output buffer */ mng_put_uint16 (pRawdata, pMOVE->iFirstid); mng_put_uint16 (pRawdata+2, pMOVE->iLastid); *(pRawdata+4) = pMOVE->iMovetype; mng_put_int32 (pRawdata+5, pMOVE->iMovex); mng_put_int32 (pRawdata+9, pMOVE->iMovey); /* and write it */ iRetcode = write_raw_chunk (pData, pMOVE->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_MOVE, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_clip) { mng_clipp pCLIP; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_CLIP, MNG_LC_START); #endif pCLIP = (mng_clipp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 21; /* fill the output buffer */ mng_put_uint16 (pRawdata, pCLIP->iFirstid); mng_put_uint16 (pRawdata+2, pCLIP->iLastid); *(pRawdata+4) = pCLIP->iCliptype; mng_put_int32 (pRawdata+5, pCLIP->iClipl); mng_put_int32 (pRawdata+9, pCLIP->iClipr); mng_put_int32 (pRawdata+13, pCLIP->iClipt); mng_put_int32 (pRawdata+17, pCLIP->iClipb); /* and write it */ iRetcode = write_raw_chunk (pData, pCLIP->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_CLIP, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_show) { mng_showp pSHOW; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SHOW, MNG_LC_START); #endif pSHOW = (mng_showp)pChunk; /* address the proper chunk */ if (pSHOW->bEmpty) /* empty ? */ iRetcode = write_raw_chunk (pData, pSHOW->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 2; /* fill the output buffer */ mng_put_uint16 (pRawdata, pSHOW->iFirstid); if ((pSHOW->iLastid != pSHOW->iFirstid) || (pSHOW->iMode)) { iRawlen += 2; mng_put_uint16 (pRawdata+2, pSHOW->iLastid); if (pSHOW->iMode) { iRawlen++; *(pRawdata+4) = pSHOW->iMode; } } /* and write it */ iRetcode = write_raw_chunk (pData, pSHOW->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SHOW, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ WRITE_CHUNK (mng_write_term) { mng_termp pTERM; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_TERM, MNG_LC_START); #endif pTERM = (mng_termp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 1; *pRawdata = pTERM->iTermaction; /* fill the output buffer */ if (pTERM->iTermaction == 3) { iRawlen = 10; *(pRawdata+1) = pTERM->iIteraction; mng_put_uint32 (pRawdata+2, pTERM->iDelay); mng_put_uint32 (pRawdata+6, pTERM->iItermax); } /* and write it */ iRetcode = write_raw_chunk (pData, pTERM->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_TERM, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE WRITE_CHUNK (mng_write_save) { mng_savep pSAVE; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_save_entryp pEntry; mng_uint32 iEntrysize; mng_uint8p pTemp; mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SAVE, MNG_LC_START); #endif pSAVE = (mng_savep)pChunk; /* address the proper chunk */ if (pSAVE->bEmpty) /* empty ? */ iRetcode = write_raw_chunk (pData, pSAVE->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 1; *pRawdata = pSAVE->iOffsettype; /* fill the output buffer */ if (pSAVE->iOffsettype == 16) iEntrysize = 25; else iEntrysize = 17; pTemp = pRawdata+1; pEntry = pSAVE->pEntries; for (iX = 0; iX < pSAVE->iCount; iX++) { if (iX) /* put separator null-byte, except the first */ { *pTemp = 0; pTemp++; iRawlen++; } iRawlen += iEntrysize + pEntry->iNamesize; *pTemp = pEntry->iEntrytype; if (pSAVE->iOffsettype == 16) { mng_put_uint32 (pTemp+1, pEntry->iOffset[0]); mng_put_uint32 (pTemp+5, pEntry->iOffset[1]); mng_put_uint32 (pTemp+9, pEntry->iStarttime[0]); mng_put_uint32 (pTemp+13, pEntry->iStarttime[1]); mng_put_uint32 (pTemp+17, pEntry->iLayernr); mng_put_uint32 (pTemp+21, pEntry->iFramenr); pTemp += 25; } else { mng_put_uint32 (pTemp+1, pEntry->iOffset[1]); mng_put_uint32 (pTemp+5, pEntry->iStarttime[1]); mng_put_uint32 (pTemp+9, pEntry->iLayernr); mng_put_uint32 (pTemp+13, pEntry->iFramenr); pTemp += 17; } if (pEntry->iNamesize) { MNG_COPY (pTemp, pEntry->zName, pEntry->iNamesize); pTemp += pEntry->iNamesize; } pEntry++; } /* and write it */ iRetcode = write_raw_chunk (pData, pSAVE->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SAVE, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SEEK WRITE_CHUNK (mng_write_seek) { mng_seekp pSEEK; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SEEK, MNG_LC_START); #endif pSEEK = (mng_seekp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = pSEEK->iNamesize; if (iRawlen) /* fill the output buffer */ MNG_COPY (pRawdata, pSEEK->zName, iRawlen); /* and write it */ iRetcode = write_raw_chunk (pData, pSEEK->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_SEEK, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_eXPI WRITE_CHUNK (mng_write_expi) { mng_expip pEXPI; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_EXPI, MNG_LC_START); #endif pEXPI = (mng_expip)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 2 + pEXPI->iNamesize; /* fill the output buffer */ mng_put_uint16 (pRawdata, pEXPI->iSnapshotid); if (pEXPI->iNamesize) MNG_COPY (pRawdata+2, pEXPI->zName, pEXPI->iNamesize); /* and write it */ iRetcode = write_raw_chunk (pData, pEXPI->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_EXPI, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_fPRI WRITE_CHUNK (mng_write_fpri) { mng_fprip pFPRI; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_FPRI, MNG_LC_START); #endif pFPRI = (mng_fprip)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 2; *pRawdata = pFPRI->iDeltatype; /* fill the output buffer */ *(pRawdata+1) = pFPRI->iPriority; /* and write it */ iRetcode = write_raw_chunk (pData, pFPRI->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_FPRI, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_nEED WRITE_CHUNK (mng_write_need) { mng_needp pNEED; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_NEED, MNG_LC_START); #endif pNEED = (mng_needp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = pNEED->iKeywordssize; /* fill the output buffer */ if (pNEED->iKeywordssize) MNG_COPY (pRawdata, pNEED->zKeywords, pNEED->iKeywordssize); /* and write it */ iRetcode = write_raw_chunk (pData, pNEED->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_NEED, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYg WRITE_CHUNK (mng_write_phyg) { mng_phygp pPHYG; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PHYG, MNG_LC_START); #endif pPHYG = (mng_phygp)pChunk; /* address the proper chunk */ if (pPHYG->bEmpty) /* write empty ? */ iRetcode = write_raw_chunk (pData, pPHYG->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 9; /* fill the output buffer */ mng_put_uint32 (pRawdata, pPHYG->iSizex); mng_put_uint32 (pRawdata+4, pPHYG->iSizey); *(pRawdata+8) = pPHYG->iUnit; /* and write it */ iRetcode = write_raw_chunk (pData, pPHYG->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PHYG, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ /* B004 */ #ifdef MNG_INCLUDE_JNG /* B004 */ WRITE_CHUNK (mng_write_jhdr) { mng_jhdrp pJHDR; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_JHDR, MNG_LC_START); #endif pJHDR = (mng_jhdrp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 16; /* fill the output buffer */ mng_put_uint32 (pRawdata, pJHDR->iWidth); mng_put_uint32 (pRawdata+4, pJHDR->iHeight); *(pRawdata+8) = pJHDR->iColortype; *(pRawdata+9) = pJHDR->iImagesampledepth; *(pRawdata+10) = pJHDR->iImagecompression; *(pRawdata+11) = pJHDR->iImageinterlace; *(pRawdata+12) = pJHDR->iAlphasampledepth; *(pRawdata+13) = pJHDR->iAlphacompression; *(pRawdata+14) = pJHDR->iAlphafilter; *(pRawdata+15) = pJHDR->iAlphainterlace; /* and write it */ iRetcode = write_raw_chunk (pData, pJHDR->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_JHDR, MNG_LC_END); #endif return iRetcode; } #else #define write_jhdr 0 /* B004 */ #endif /* MNG_INCLUDE_JNG */ /* B004 */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG WRITE_CHUNK (mng_write_jdaa) { mng_jdatp pJDAA; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_JDAA, MNG_LC_START); #endif pJDAA = (mng_jdaap)pChunk; /* address the proper chunk */ if (pJDAA->bEmpty) /* and write it */ iRetcode = write_raw_chunk (pData, pJDAA->sHeader.iChunkname, 0, 0); else iRetcode = write_raw_chunk (pData, pJDAA->sHeader.iChunkname, pJDAA->iDatasize, pJDAA->pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_JDAA, MNG_LC_END); #endif return iRetcode; } #else #define write_jdaa 0 #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ /* B004 */ #ifdef MNG_INCLUDE_JNG /* B004 */ WRITE_CHUNK (mng_write_jdat) { mng_jdatp pJDAT; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_JDAT, MNG_LC_START); #endif pJDAT = (mng_jdatp)pChunk; /* address the proper chunk */ if (pJDAT->bEmpty) /* and write it */ iRetcode = write_raw_chunk (pData, pJDAT->sHeader.iChunkname, 0, 0); else iRetcode = write_raw_chunk (pData, pJDAT->sHeader.iChunkname, pJDAT->iDatasize, pJDAT->pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_JDAT, MNG_LC_END); #endif return iRetcode; } #else #define write_jdat 0 /* B004 */ #endif /* MNG_INCLUDE_JNG */ /* B004 */ /* ************************************************************************** */ /* B004 */ #ifdef MNG_INCLUDE_JNG /* B004 */ WRITE_CHUNK (mng_write_jsep) { mng_jsepp pJSEP; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_JSEP, MNG_LC_START); #endif pJSEP = (mng_jsepp)pChunk; /* address the proper chunk */ /* and write it */ iRetcode = write_raw_chunk (pData, pJSEP->sHeader.iChunkname, 0, 0); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_JSEP, MNG_LC_END); #endif return iRetcode; } #else #define write_jsep 0 /* B004 */ #endif /* MNG_INCLUDE_JNG */ /* B004 */ /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG WRITE_CHUNK (mng_write_dhdr) { mng_dhdrp pDHDR; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_DHDR, MNG_LC_START); #endif pDHDR = (mng_dhdrp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 4; /* fill the output buffer */ mng_put_uint16 (pRawdata, pDHDR->iObjectid); *(pRawdata+2) = pDHDR->iImagetype; *(pRawdata+3) = pDHDR->iDeltatype; if (pDHDR->iDeltatype != 7) { iRawlen += 8; mng_put_uint32 (pRawdata+4, pDHDR->iBlockwidth); mng_put_uint32 (pRawdata+8, pDHDR->iBlockheight); if (pDHDR->iDeltatype != 0) { iRawlen += 8; mng_put_uint32 (pRawdata+12, pDHDR->iBlockx); mng_put_uint32 (pRawdata+16, pDHDR->iBlocky); } } /* and write it */ iRetcode = write_raw_chunk (pData, pDHDR->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_DHDR, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG WRITE_CHUNK (mng_write_prom) { mng_promp pPROM; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PROM, MNG_LC_START); #endif pPROM = (mng_promp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 3; *pRawdata = pPROM->iColortype; /* fill the output buffer */ *(pRawdata+1) = pPROM->iSampledepth; *(pRawdata+2) = pPROM->iFilltype; /* and write it */ iRetcode = write_raw_chunk (pData, pPROM->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PROM, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG WRITE_CHUNK (mng_write_ipng) { mng_ipngp pIPNG; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_IPNG, MNG_LC_START); #endif pIPNG = (mng_ipngp)pChunk; /* address the proper chunk */ /* and write it */ iRetcode = write_raw_chunk (pData, pIPNG->sHeader.iChunkname, 0, 0); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_IPNG, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG WRITE_CHUNK (mng_write_pplt) { mng_ppltp pPPLT; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_pplt_entryp pEntry; mng_uint8p pTemp; mng_uint32 iX; mng_bool bHasgroup; mng_uint8p pLastid = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PPLT, MNG_LC_START); #endif pPPLT = (mng_ppltp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 1; *pRawdata = pPPLT->iDeltatype; /* fill the output buffer */ pTemp = pRawdata+1; bHasgroup = MNG_FALSE; for (iX = 0; iX < pPPLT->iCount; iX++) { pEntry = &pPPLT->aEntries[iX]; if (pEntry->bUsed) /* valid entry ? */ { if (!bHasgroup) /* start a new group ? */ { bHasgroup = MNG_TRUE; pLastid = pTemp+1; *pTemp = (mng_uint8)iX; *(pTemp+1) = 0; pTemp += 2; iRawlen += 2; } switch (pPPLT->iDeltatype) /* add group-entry depending on type */ { case 0: ; case 1: { *pTemp = pEntry->iRed; *(pTemp+1) = pEntry->iGreen; *(pTemp+2) = pEntry->iBlue; pTemp += 3; iRawlen += 3; break; } case 2: ; case 3: { *pTemp = pEntry->iAlpha; pTemp++; iRawlen++; break; } case 4: ; case 5: { *pTemp = pEntry->iRed; *(pTemp+1) = pEntry->iGreen; *(pTemp+2) = pEntry->iBlue; *(pTemp+3) = pEntry->iAlpha; pTemp += 4; iRawlen += 4; break; } } } else { if (bHasgroup) /* finish off a group ? */ *pLastid = (mng_uint8)(iX-1); bHasgroup = MNG_FALSE; } } if (bHasgroup) /* last group unfinished ? */ *pLastid = (mng_uint8)(pPPLT->iCount-1); /* write the output buffer */ iRetcode = write_raw_chunk (pData, pPPLT->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_PPLT, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG WRITE_CHUNK (mng_write_ijng) { mng_ijngp pIJNG; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_IJNG, MNG_LC_START); #endif pIJNG = (mng_ijngp)pChunk; /* address the proper chunk */ /* and write it */ iRetcode = write_raw_chunk (pData, pIJNG->sHeader.iChunkname, 0, 0); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_IJNG, MNG_LC_END); #endif return iRetcode; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG WRITE_CHUNK (mng_write_drop) { mng_dropp pDROP; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint32 iX; mng_uint8p pTemp1; mng_chunkidp pTemp2; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_DROP, MNG_LC_START); #endif pDROP = (mng_dropp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = pDROP->iCount << 2; pTemp1 = pRawdata; /* fill the output buffer */ pTemp2 = pDROP->pChunknames; for (iX = 0; iX < pDROP->iCount; iX++) { mng_put_uint32 (pTemp1, (mng_uint32)*pTemp2); pTemp2++; pTemp1 += 4; } /* and write it */ iRetcode = write_raw_chunk (pData, pDROP->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_DROP, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK WRITE_CHUNK (mng_write_dbyk) { mng_dbykp pDBYK; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_DBYK, MNG_LC_START); #endif pDBYK = (mng_dbykp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 5 + pDBYK->iKeywordssize; /* fill the output buffer */ mng_put_uint32 (pRawdata, pDBYK->iChunkname); *(pRawdata+4) = pDBYK->iPolarity; if (pDBYK->iKeywordssize) MNG_COPY (pRawdata+5, pDBYK->zKeywords, pDBYK->iKeywordssize); /* and write it */ iRetcode = write_raw_chunk (pData, pDBYK->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_DBYK, MNG_LC_END); #endif return iRetcode; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR WRITE_CHUNK (mng_write_ordr) { mng_ordrp pORDR; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint8p pTemp; mng_ordr_entryp pEntry; mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_ORDR, MNG_LC_START); #endif pORDR = (mng_ordrp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = pORDR->iCount * 5; pTemp = pRawdata; /* fill the output buffer */ pEntry = pORDR->pEntries; for (iX = 0; iX < pORDR->iCount; iX++) { mng_put_uint32 (pTemp, pEntry->iChunkname); *(pTemp+4) = pEntry->iOrdertype; pTemp += 5; pEntry++; } /* and write it */ iRetcode = write_raw_chunk (pData, pORDR->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_ORDR, MNG_LC_END); #endif return iRetcode; } #endif #endif /* ************************************************************************** */ WRITE_CHUNK (mng_write_magn) { mng_magnp pMAGN; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_MAGN, MNG_LC_START); #endif pMAGN = (mng_magnp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 18; /* fill the output buffer */ mng_put_uint16 (pRawdata, pMAGN->iFirstid); mng_put_uint16 (pRawdata+2, pMAGN->iLastid); *(pRawdata+4) = pMAGN->iMethodX; mng_put_uint16 (pRawdata+5, pMAGN->iMX); mng_put_uint16 (pRawdata+7, pMAGN->iMY); mng_put_uint16 (pRawdata+9, pMAGN->iML); mng_put_uint16 (pRawdata+11, pMAGN->iMR); mng_put_uint16 (pRawdata+13, pMAGN->iMT); mng_put_uint16 (pRawdata+15, pMAGN->iMB); *(pRawdata+17) = pMAGN->iMethodY; /* optimize length */ if (pMAGN->iMethodY == pMAGN->iMethodX) { iRawlen--; if (pMAGN->iMB == pMAGN->iMY) { iRawlen -= 2; if (pMAGN->iMT == pMAGN->iMY) { iRawlen -= 2; if (pMAGN->iMR == pMAGN->iMX) { iRawlen -= 2; if (pMAGN->iML == pMAGN->iMX) { iRawlen -= 2; if (pMAGN->iMY == pMAGN->iMX) { iRawlen -= 2; if (pMAGN->iMX == 1) { iRawlen -= 2; if (pMAGN->iMethodX == 0) { iRawlen--; if (pMAGN->iLastid == pMAGN->iFirstid) { iRawlen -= 2; if (pMAGN->iFirstid == 0) iRawlen = 0; } } } } } } } } } /* and write it */ iRetcode = write_raw_chunk (pData, pMAGN->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_MAGN, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL WRITE_CHUNK (mng_write_mpng) { mng_mpngp pMPNG; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_uint8p pBuf = 0; mng_uint32 iBuflen; mng_uint32 iReallen; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_MPNG, MNG_LC_START); #endif pMPNG = (mng_mpngp)pChunk; /* address the proper chunk */ /* compress the frame structures */ iRetcode = deflate_buffer (pData, (mng_uint8p)pMPNG->pFrames, pMPNG->iFramessize, &pBuf, &iBuflen, &iReallen); if (!iRetcode) /* all ok ? */ { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 15 + iReallen; /* requires large buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_ALLOC (pData, pRawdata, iRawlen); /* fill the buffer */ mng_put_uint32 (pRawdata, pMPNG->iFramewidth); mng_put_uint32 (pRawdata+4, pMPNG->iFrameheight); mng_put_uint16 (pRawdata+8, pMPNG->iNumplays); mng_put_uint16 (pRawdata+10, pMPNG->iTickspersec); *(pRawdata+12) = pMPNG->iCompressionmethod; if (iReallen) MNG_COPY (pRawdata+13, pBuf, iReallen); /* and write it */ iRetcode = write_raw_chunk (pData, pMPNG->sHeader.iChunkname, iRawlen, pRawdata); /* drop the temp buffer ? */ if (iRawlen > pData->iWritebufsize) MNG_FREEX (pData, pRawdata, iRawlen); } MNG_FREEX (pData, pBuf, iBuflen); /* always drop the compression buffer */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_MPNG, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL WRITE_CHUNK (mng_write_ahdr) { mng_ahdrp pAHDR; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_AHDR, MNG_LC_START); #endif pAHDR = (mng_ahdrp)pChunk; /* address the proper chunk */ pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 22; /* fill the buffer */ mng_put_uint32 (pRawdata, pAHDR->iNumframes); mng_put_uint32 (pRawdata+4, pAHDR->iTickspersec); mng_put_uint32 (pRawdata+8, pAHDR->iNumplays); mng_put_uint32 (pRawdata+12, pAHDR->iTilewidth); mng_put_uint32 (pRawdata+16, pAHDR->iTileheight); *(pRawdata+20) = pAHDR->iInterlace; *(pRawdata+21) = pAHDR->iStillused; /* and write it */ iRetcode = write_raw_chunk (pData, pAHDR->sHeader.iChunkname, iRawlen, pRawdata); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_AHDR, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL WRITE_CHUNK (mng_write_adat) { /* TODO: something */ return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_evNT WRITE_CHUNK (mng_write_evnt) { mng_evntp pEVNT; mng_uint8p pRawdata; mng_uint32 iRawlen; mng_retcode iRetcode; mng_evnt_entryp pEntry; mng_uint8p pTemp; mng_uint32 iX; mng_uint32 iNamesize; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_EVNT, MNG_LC_START); #endif pEVNT = (mng_evntp)pChunk; /* address the proper chunk */ if (!pEVNT->iCount) /* empty ? */ iRetcode = write_raw_chunk (pData, pEVNT->sHeader.iChunkname, 0, 0); else { pRawdata = pData->pWritebuf+8; /* init output buffer & size */ iRawlen = 0; pTemp = pRawdata; pEntry = pEVNT->pEntries; for (iX = 0; iX < pEVNT->iCount; iX++) { if (iX) /* put separator null-byte, except the first */ { *pTemp = 0; pTemp++; iRawlen++; } *pTemp = pEntry->iEventtype; *(pTemp+1) = pEntry->iMasktype; pTemp += 2; iRawlen += 2; switch (pEntry->iMasktype) { case 1 : { mng_put_int32 (pTemp, pEntry->iLeft); mng_put_int32 (pTemp+4, pEntry->iRight); mng_put_int32 (pTemp+8, pEntry->iTop); mng_put_int32 (pTemp+12, pEntry->iBottom); pTemp += 16; iRawlen += 16; break; } case 2 : { mng_put_uint16 (pTemp, pEntry->iObjectid); pTemp += 2; iRawlen += 2; break; } case 3 : { mng_put_uint16 (pTemp, pEntry->iObjectid); *(pTemp+2) = pEntry->iIndex; pTemp += 3; iRawlen += 3; break; } case 4 : { mng_put_int32 (pTemp, pEntry->iLeft); mng_put_int32 (pTemp+4, pEntry->iRight); mng_put_int32 (pTemp+8, pEntry->iTop); mng_put_int32 (pTemp+12, pEntry->iBottom); mng_put_uint16 (pTemp+16, pEntry->iObjectid); pTemp += 18; iRawlen += 18; break; } case 5 : { mng_put_int32 (pTemp, pEntry->iLeft); mng_put_int32 (pTemp+4, pEntry->iRight); mng_put_int32 (pTemp+8, pEntry->iTop); mng_put_int32 (pTemp+12, pEntry->iBottom); mng_put_uint16 (pTemp+16, pEntry->iObjectid); *(pTemp+18) = pEntry->iIndex; pTemp += 19; iRawlen += 19; break; } } iNamesize = pEntry->iSegmentnamesize; if (iNamesize) { MNG_COPY (pTemp, pEntry->zSegmentname, iNamesize); pTemp += iNamesize; iRawlen += iNamesize; } pEntry++; } /* and write it */ iRetcode = write_raw_chunk (pData, pEVNT->sHeader.iChunkname, iRawlen, pRawdata); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_EVNT, MNG_LC_END); #endif return iRetcode; } #endif /* ************************************************************************** */ WRITE_CHUNK (mng_write_unknown) { mng_unknown_chunkp pUnknown; mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_UNKNOWN, MNG_LC_START); #endif /* address the proper chunk */ pUnknown = (mng_unknown_chunkp)pChunk; /* and write it */ iRetcode = write_raw_chunk (pData, pUnknown->sHeader.iChunkname, pUnknown->iDatasize, pUnknown->pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_WRITE_UNKNOWN, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ #endif /* MNG_INCLUDE_WRITE_PROCS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/config.h.cmake.in0000644000000000000000000001063712005307152014565 0ustar rootroot/* config.h.in. Generated from configure.in by autoheader. */ /* Define if building universal (internal helper macro) */ #cmakedefine AC_APPLE_UNIVERSAL_BUILD /* Define to 1 if you have the header file. */ #cmakedefine HAVE_DLFCN_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_INTTYPES_H 1 /* define if you want JPEG support */ #cmakedefine HAVE_LIBJPEG 1 /* define if you want lcms v1 support */ #cmakedefine HAVE_LIBLCMS1 1 /* define if you want lcms v2 support */ #cmakedefine HAVE_LIBLCMS2 1 /* Define to 1 if you have the `z' library (-lz). */ #cmakedefine HAVE_LIBZ 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_MEMORY_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_UNISTD_H 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #cmakedefine LT_OBJDIR /* define if you want chunk access support */ #cmakedefine MNG_ACCESS_CHUNKS 1 /* enable building standard shared object */ #cmakedefine MNG_BUILD_SO 1 /* enable verbose error text */ #cmakedefine MNG_ERROR_TELLTALE 1 /* define if you want full lcms support */ #cmakedefine MNG_FULL_CMS 1 /* enable support for accessing chunks */ #cmakedefine MNG_STORE_CHUNKS 1 /* define if you want display support */ #cmakedefine MNG_SUPPORT_DISPLAY 1 /* define if you want dynamic support */ #cmakedefine MNG_SUPPORT_DYNAMICMNG 1 /* define if you want full mng support */ #cmakedefine MNG_SUPPORT_FULL 1 /* define if you want read support */ #cmakedefine MNG_SUPPORT_READ 1 /* enable support for debug tracing */ #cmakedefine MNG_SUPPORT_TRACE 1 /* define if you want write support */ #cmakedefine MNG_SUPPORT_WRITE 1 /* enable support for debug messages */ #cmakedefine MNG_TRACE_TELLTALE 1 /* MAJOR number of version */ #define MNG_VERSION_MAJOR @MNG_VERSION_MAJOR@ /* MINOR number of version */ #define MNG_VERSION_MINOR @MNG_VERSION_MINOR@ /* PATCH number of version */ #define MNG_VERSION_RELEASE @MNG_VERSION_PATCH@ /* but: libmng.dll (!) */ #define MNG_VERSION_DLL @MNG_VERSION_MAJOR@ /* eg. libmng.so.1 */ #define MNG_VERSION_SO @MNG_VERSION_MAJOR@ /* Name of package */ #cmakedefine PACKAGE /* Define to the address where bug reports for this package should be sent. */ #cmakedefine PACKAGE_BUGREPORT /* Define to the full name of this package. */ #cmakedefine PACKAGE_NAME /* Define to the full name and version of this package. */ #cmakedefine PACKAGE_STRING /* Define to the one symbol short name of this package. */ #cmakedefine PACKAGE_TARNAME /* Define to the home page for this package. */ #cmakedefine PACKAGE_URL /* Define to the version of this package. */ #define PACKAGE_VERSION "@PACKAGE_VERSION@" /* Version number of package */ #define VERSION "@PACKAGE_VERSION@" /* Define to 1 if the C compiler supports function prototypes. */ #cmakedefine PROTOTYPES 1 /* Define to 1 if you have the ANSI C header files. */ #cmakedefine STDC_HEADERS 1 /* Number of bits in a file offset, on hosts where this is settable. */ #cmakedefine _FILE_OFFSET_BITS 1 /* Define for large files, on AIX-style hosts. */ #cmakedefine _LARGE_FILES 1 /* Define like PROTOTYPES; this can be used by system headers. */ #cmakedefine __PROTOTYPES 1 /* Define to empty if `const' does not conform to ANSI C. */ #cmakedefine const /*--------------------------------------------------------*/ @WORDS_BIGENDIAN_S@ /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD #if defined __BIG_ENDIAN__ #define WORDS_BIGENDIAN 1 #endif #else #ifndef WORDS_BIGENDIAN #cmakedefine WORDS_BIGENDIAN #endif #endif /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #ifndef inline #define inline __inline #endif #endif libmng-2.0.2/build-mng-cmake.sh0000755000000000000000000000020112005307505014742 0ustar rootroot#!/bin/sh cmake -DWITH_LCMS2:bool=on -DBUILD_MAN:bool=on -DBUILD_SHARED_LIBS:bool=on -DCMAKE_INSTALL_PREFIX:path="/usr/local" .. libmng-2.0.2/cmake-compile.bat0000644000000000000000000000035512005307152014655 0ustar rootrootcmake -DBUILD_SHARED_LIBS:bool=on -DCMAKE_INSTALL_PREFIX:path="C:/Users/Public" -DCMAKE_EXE_LINKER_FLAGS:string="/machine:x64 /Release" -DCMAKE_LIBRARY_PATH:path="C:/Users/Public" -DCMAKE_INCLUDE_PATH:path="C:/Users/Public/include" .. libmng-2.0.2/CHANGES0000644000000000000000000013021112076671455012467 0ustar rootroot2.0.1 (19.01.2013) --------------------------- [szukw000@arcor.de] There has been a change in JPEG version 9: added some code in libmng_types.h before #include 2.0.0 (dd.mm.2012) --------------------------- Allows lcms1/lcms2: ./configure --with-lcms2 cmake -DWITH_LCMS2:bool=on Cnf. the sample files 'Configure.libmng' and 'build-mng-cmake.sh' and 'cmake-compile.bat' resp. 'clean.bat' szukw000@arcor.de ----------------------------------------------------------- 1.0.10 (Jul 13th 2007) ---------------------- in short: intermediate CVS ------------------- bugfixes: core: - fixed some compiler-warnings - fixed display routines called twice for FULL_MNG support in mozlibmngconf.h - standard windows dll upgraded to zlib 1.2.3 - fixed problem with CLON object during readdisplay() (thanks Winfried!) - added typecast to appease the compiler (G R-P) - added more SKIPCHUNK conditionals (G R-P) - added MORE MNG_NO_1_2_4BIT_SUPPORT (G R-P) - added provisional support for anIM(mpNG) proposal - added provisional support for ANG proposal samples: - xmngview upgraded to 0.6 (thanks Winfried!) contrib: doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.9 (jan 30th 2005) --------------------- in short: New optimizations save over 20KB on footprint. Also a few bugfixes and several patches. Thanks to those sending in their additions and for testing! To turn on the optimizations do: #DEFINE MNG_OPTIMIZE_CHUNKINITFREE #DEFINE MNG_OPTIMIZE_OBJCLEANUP #DEFINE MNG_OPTIMIZE_CHUNKASSIGN #DEFINE MNG_OPTIMIZE_CHUNKREADER (eg. they're not on by default (yet) !) ------------------- bugfixes: - fixed chunk pushing mechanism - fixed bug in writing sBIT for indexed color - fixed PPLT getchunk/putchunk routines - fixed MNG_NO_1_2_4BIT_SUPPORT for TBBN1G04.PNG - cleaned up macro-invocations (thanks to D. Airlie) core: - added more SKIPCHUNK conditionals - replaced MNG_TWEAK_LARGE_FILES with permanent solution - improved handling of cheap transparency when 16-bit support is disabled - added some MNG_SUPPORT_WRITE conditionals - added function to retrieve current FRAM delay - added MNG_NO_1_2_4BIT_SUPPORT - added bgr565_a8 canvas-style (thanks to J. Elvander) - standard windows dll upgraded to zlib 1.2.2 - added LITTLEENDIAN/BIGENDIAN fixtures (thanks J.Stiles) - inclusion of zlib/lcms/ijgsrc6b with <> instead of "" - added conditional MNG_OPTIMIZE_CHUNKINITFREE - added conditional MNG_OPTIMIZE_OBJCLEANUP - added conditional MNG_OPTIMIZE_CHUNKASSIGN - added conditional MNG_OPTIMIZE_CHUNKREADER - fixed problem with global PLTE/tRNS samples: contrib: doc: - patched jng & mng manual pages (Thanks Peter Breitenlohner) makefiles: autoconf: - patched makefile.am & configure.in (Thanks Peter Breitenlohner) ----------------------------------------------------------- 1.0.8 (aug 5th 2004) -------------------- in short: added special data-pushing mechanisms and a few other tid-bits ------------------- bugfixes: - fixed problem with PAST usage where source > dest core: - added missing get-/put-chunk-jdaa - added CRC existence & checking flags - added data-push mechanisms for specialized decoders - some speed optimizations (thanks to John Stiles) - defend against using undefined closestream function - defend against using undefined openstream function - added check for extreme chunk-lengths - change worst-case iAlphadepth to 1 for standalone PNGs - added support for 3+byte pixelsize for JPEG's - added conditional to allow easier writing of large MNG's samples: contrib: doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.7 (March 21st 2004) ----------------------- in short: A bunch of new canvas-styles, some bug-fixes, upgraded to latest zlib/lcms and yet more work to please the Mozilla crowd. Releasing beta's doesn't seem very responsive, and this one's hardly changed much anyway. I just wanted to bump to a regular version for Mozilla re-integration. ------------------- bugfixes: - fixed inclusion of IJNG chunk for non-JNG use (J.S) - fixed bug in chunk-storage of SHOW chunk (where from == to) - fixed bug in promote_g8_g8 with 16bit support off core: - added CANVAS_RGB565 and CANVAS_BGR565 (big thanx to Raphael Assenat!!) - added CANVAS_RGBA565 and CANVAS_BGRA565 ( -- ditto -- ) - upgraded to zlib 1.2.1 - upgraded to lcms 1.11 - added premultiplied alpha canvas' for RGBA, ARGB, ABGR (thx to John Stiles) - more optimizations with 16bit support off - put conditionals around openstream/closestream callbacks. - fixed typo (MNG_SKIPCHUNK_SAVE -> MNG_SKIPCHUNK_nEED) - fixed some 64-bit platform compiler warnings samples: contrib: - fixed mngtree sample (Raphael) - added 5-6-5 canvas to SDL sample (Raphael) doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.6 (oct 19th 2003) --------------------- in short: Final release from beta1. No feedback is good feedback I presume, so here's 1.0.6-final! ------------------- bugfixes: core: samples: contrib: doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.6-beta1 (sep 14th 2003) --------------------------- in short: further footprint-reductions removing email-addresses 1.0.6 (final) will be out shortly ------------------- bugfixes: core: - added support for reducing the footprint of libmng by macros that optionally skip unused chunks, remove 16-bit sample support, remove Delta support, and remove JNG support, to accomodate Mozilla/Firebird. - further optional removal of unused functions - added MNG_NO_SUPPORT_FUNCQUERY conditional - added iPNGdepth member to pData structure - added conditionals around MAGN chunk support - added conditionals around non-VLC chunk support - added conditionals around "mng_display_go*" and other unused functions - added more conditionals around "promote" functions - removed email references as appropriate samples: contrib: doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.6-alpha1 (aug 2nd 2003) --------------------------- in short: This is mostly in the light of footprint-reduction to please the Mozilla crew with a leaner and meaner libmng. See bug 18574 if you're interested: http://bugzilla.mozilla.org/show_bug.cgi?id=18574 ------------------- bugfixes: - B719420 - fixed several MNG_APP_CMS problems core: - removed some compiler-warnings - hiding 12-bit JPEG stuff - fixed problem with infinite loops during readdisplay() - added size-optimiation COMPOSE routine usage - added conditionals around canvas update routines - added MNG_SKIPCHUNK_cHNK footprint optimizations - added conditionals around some JNG-supporting code - added conditionals around 16-bit supporting code - combined init functions into one function - replaced nested switches with simple init setup function - added conditionals zlib and jpeg property accessors - added size-optimization DIV255B8 routine usage - added conditionals around 8-bit magn routines - removed conditionals around 8-bit magn routines - added MNG_NO_16BIT_SUPPORT and MNG_NO_DELTA_PNG conditionals - reversed many loops to use decrementing counter - converted some switches to array references - removed some redundant checks for iRawlen==0 - optionally use zlib's crc32 function instead of local mng_update_crc - bugfix empty "if" statement when 16-bit code is enabled - restored two misplaced #else/#endif blocks - added conditionals around "mng_display_go*" and other unused functions - added MNG_NO_LOOP_SIGNALS_SUPPORTED conditional - fixed duplicate for-loop - fixed invalid test in promote_imageobject - added conditionals around PAST chunk support - fixed "FOOTPRINT_COMPOSEIV" typo (now "FOOTPRINT_DIV") samples: contrib: - updated xmngview - added MSVC project for creating delta-MNGs: makemng (thanks Alex!) - added MSVC lib-file for use with the standard libmng.dll (again thanks Alex) doc: - updated readme.contrib makefiles: autoconf: ----------------------------------------------------------- 1.0.5 (mar 1st 2003) -------------------- in short: Only a small fix for progressive jpeg suspension problem. This is the long-awaited final release containing the new 'dynamic MNG' feature and bringing MNG compliance to near 100%! ------------------- bugfixes: - B683152 - libjpeg suspension not always honored correctly core: samples: contrib: doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.5-rc3 (jan 20th 2003) ------------------------- in short: Third release-candidate for the upcoming 1.0.5 version. Minor bug-fixes and finalizing the accepted proposal (by official vote) for the TERM/frame_delay changes on mng-list (nov-dec/2002). ------------------- bugfixes: - B654627 - fixed SEGV when no gettickcount callback (thanks Adam!) - B664383 - fixed typo (thanks Dimitri) - B664911 - fixed buffer overflow during init (thanks Alex!) core: - finalized changes in TERM/final_delay to elected proposal (positive vote) samples: contrib: doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.5-rc2 (dec 9th 2002) ------------------------ in short: Second release-candidate for the upcoming 1.0.5 version. This contains fixes for a few minor details reported by the loyal testers. It fixes some issues with the goframe/golayer/gotime processing and related stuff. And it adds a way to disable playback-caching from within the MNG, which is very useful for streaming-MNG encoders (such as gserver!). ------------------- bugfixes: core: - fixed layer- & frame-counting during read() - changed FRAMECOUNT/LAYERCOUNT/PLAYTIME error to warning - fixed goframe/golayer/gotime processing - added support for nEED "MNG 1.1" - added support for nEED "CACHEOFF"; turn playback caching off for streaming MNG - fixed magnification bug with object 0 - added support to get totals for frames/layers/playtime after mng_read() - fixed some issues in init_app_cms() - fixed goxxxxx() support for zero values samples: contrib: doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.5-rc1 (nov 1st 2002) ------------------------ in short: First release-candidate for the upcoming 1.0.5 version. This fixes a few small problems and brings the TERM/MEND processing, with respect to interframe_delay as per the current discussion on MNG-list, up-to-date with the latest proposal. ------------------- bugfixes: core: - fixed initialization of pIds in dISC read routine (Thanks Winfried!) - fixed issue in freeing evNT chunk (Thanks Winfried!) - fixed clipping-problem with BACK tiling (Thanks Sakura!) - fixed processing for multiple objects in MAGN (Thanks Sakura!) - fixed display of visible target of PAST operation (Thanks Sakura!) - modified TERM/MEND processing for max(1, TERM_delay, interframe_delay) samples: contrib: - fixed typo in Makefile for gtk-mng-view sample doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.5-b3 (oct 15th 2002) ------------------------ in short: Fairly quick after beta2, since that introduced a couple of unfortunate booboo's and wasn't very workable. It also changes the standard configure script to build a standard shared object similar to what I intended. ------------------- bugfixes: core: - fixed support for condition=2 in TERM chunk - fixed trace-constants for PAST chunk - added mng_status_dynamic to supports function samples: contrib: doc: - small cosmetic changes in man/libmng.3 makefiles: autoconf: - fixed configure.in to build a 'standard' SO primarily ----------------------------------------------------------- 1.0.5-b2 (oct 9th 2002) ------------------------ in short: Second beta for next 1.0.5 release. This addresses some minor problems detected during testing. It adds the proposed change to the MNG spec as discussed on the "mng-list" recently; eg. Adam's option 4. And it adds a little function to check at run-time if the lib is a beta or not. ------------------- bugfixes: core: - fixed chunk-storage for evNT chunk - fixed dropping mix of frozen/unfrozen objects - fixed problem with cloned objects marked as invalid - fixed problem cloning frozen object_buffers - fixed DISC support - added proposed change in handling of TERM- & interframe-delay - added another fix for misplaced TERM chunk - added check for TERM placement during create/write - completed support for condition=2 in TERM chunk - added beta version function & constant samples: contrib: doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.5-b1 (sep 24th 2002) ------------------------ in short: First beta of a large maintenance release. This completes support of the MNG specification to nearly 100% (PAST, PROM, delta-images, BACK image+tile). It adds "dynamic" MNG and a few other neat routines as well as fixes several bugs reported through SourceForge or to me directly. ------------------- bugfixes: - B575832 - library has wrong patch version number - B578572 - remove in 1.0.0! - B578940 - some functions not implemented - B581625 - large chunks fail with suspension reads - B597134 - libmng pollutes the linker namespace core: - added sanity check for improbable chunklengths - removed eMNGma hack (thanks Dimitri!) - unimplemented functions return an errorcode now - added test-option for PNG filter method 192 (= levelling) - added test-option for PNG filter method 193 (= no filtering) (both are conditional and only for testing purposes!!!) - completed PROM support - completed delta-image support - completed MAGN support (16-bit functions) - added HLAPI function to copy a chunk from a read MNG to a newly created MNG - added option for soft-handling of errors (only for repair software!!!) - fixed some routine inclusion/exclusion for undefined conditionals - pre-fixed all internal routines with mng_ - added symbol MNG_LOCAL (= static) to really local functions - fixed reading of FRAM with just frame_mode and name - fixed read/write of MAGN chunk - added event handling for dynamic MNG - added 'supports' call to check function availability - fixed copyright notice in the headers of all libmng modules - fixed LOOP iteration=0 special case - re-compiled standard Windows dll with lcms-1.0.9 - added warning for too much IDAT data - warnings are ignored by default now - misplaced TERM is now treated as warning - fixed color-correction for restore-background handling - optimized restore-background for bKGD cases - cleaned up some old stuff - completed support for BACK image & tiling - completed support for PAST - added bgrx8 canvas (filler byte) - fixed reset_object_detail to clear old buffer - added in-memory color-correction of abstract images - added compose over/under routines for PAST processing - added flip & tile routines for PAST processing samples: - Added new BCB sample for fixing invalid JASC Animation Shop files (shows new copy_chunks function; use of MNG_SOFTERRORS & static linking) contrib: - added xmngview by Winfried Szukalski (Vielen dank!) - Updated the Delphi mngview sample to handle dynamic MNGs - Added Kylix example (simplified port of the Delphi mngview sample) doc: - added diff to add MNG&JNG to a systems 'magic' file (Thanks Winfried) - fixed docs about using mng_display_resume after display_reset (should read to use mng_display!) makefiles: - added makefile to build a libmng.dll for MingW (makefile.mingwdll - thanks to Frank Richter!) autoconf: - fixing libtool version-number to be in line with what it should be ----------------------------------------------------------- 1.0.4 (Jun 23rd 2002) --------------------- in short: Just some small fixes Standard dll now compiled with zlib 1.1.4 and lcms 1.0.8 ------------------- bugfixes: - B495442 - invalid returnvalue in mng_get_suspensionmode - B495443 - incorrect suspend check in read_databuffer - B526138 - returned IJGSRC6B calling convention to default for MSVC - B558212 - off by one error - B557677 - can't find lcms.h core: - fixed possible compile-problem in cleanup_rowproc - MNG subimage alpha composite wrong for rgba8 images samples: contrib: doc: makefiles: - fixed check for lcms.h in configure.in autoconf: ----------------------------------------------------------- 1.0.3 (Sep 18th 2001) --------------------- in short: Small cosmetic changes. Cleaning up the contributions. New makefile for mingw32, and new fbcon example. Major thanks to Greg for helping out with the *nix stuff! Note that there's also a separate download for ASM programmers now. Check http://www.libmng.com for details (download/ports&packages page). It may be a while for the next release. I'm "off duty" for the next 8 or so months... Gerard ------------------- bugfixes: - B459058 - wrong include for lcms headers core: - changed inclusion of lcms.h header for Linux platforms (suggested by Greg) - added get function for last processed BACK chunk samples: - replaced the gtk & sdl viewer apps with updates by Greg Roelofs contrib: doc: makefiles: - changed makefile.linux & makefile.unix as suggested by Greg Roelofs (makefile.linux now compiles with lcms by default) - added makefile.mingw for mingw32 by Benoit Blanchon (thanks Mate!) autoconf: ----------------------------------------------------------- 1.0.2 (Jul 7th 2001) -------------------- in short: Another maintenance release with a few added extra's. ------------------- bugfixes: - B421427 - writes wrong format in bKGD and tRNS - B434583 - compiler-warning if MNG_STORE_CHUNKS undefined core: - added optimization option for MNG-video playback - added processterm callback - added late binding errorcode (not used internally) - fixed memory-leak with delta-images (Thanks Michael!) - added option to turn off progressive refresh for large images samples: contrib: doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.1 (May 2nd 2001) -------------------- in short: Maintenance release. Fixed several memory-leaks with the help of Gregg Kelly, added/fixed some CMS handling, exported JPEG functions from standard DLL, and some other minor fixes. The CMS fix now makes libmng automagically work in MNG_FULL_CMS mode as a sRGB compliant system. YOU WILL NEED TO CHANGE THIS IF YOU ARE NOT ON AN sRGB COMPLIANT SYSTEM AND WANT TO USE CMS!!!! (look in libmng.h for the proper function-calls) ------------------- bugfixes: core: - added MEND processing callback - fixed first FRAM_MODE=4 timing problem - added handle status-copy function (use with care) - exported JPEG functions from standard DLL - added BGRA8 canvas with premultiplied alpha (contrib by Gregg Kelly) - fixed problem with display_reset/display_resume (Thanks Gregg!) - fixed several memory-leaks (Thanks Gregg!) - fixed reset_rundata to drop all objects (Thanks again, Gregg!) - fixed problem with cms profile being created multiple times when both iCCP & cHRM/gAMA are present (And again... Gregg) - moved mng_clear_cms to libmng_cms - added "default" sRGB generation (Thanks Marti!) samples: contrib: doc: makefiles: autoconf: ----------------------------------------------------------- 1.0.0 (Feb 6th 2001) -------------------- in short: First public release. Finally(!) This is the 0.9.5 CVS version, which will never be released, because I feel it is now ready for a public release. So apart from the version-numbers here and there, all other changes are listed under 0.9.5. This library will work with every MNG/JNG known and available to me. Note that there are still parts that need to be coded, and that MNG support is around 90-95% (JNG at 100%). It is however compliant with the latest and greatest MNG 1.0 specification. I hope to dedicate a bit more time this year to finish up full support and fill in the remaining blanks. But this is coming out of my spare time. And extra help is always appreciated. Please enjoy! Gerard ----------------------------------------------------------- 0.9.5 (no release) ------------------ in short: intermediate CVS ------------------- bugfixes: B129681 - fixed compiler warnings SGI/Irix (thanks Dimitri) core: - fixed compiler-warnings Mozilla (thanks Tim) - fixed timing-problem with switching framing_modes - fixed some small compiler warnings (thanks Nikki) samples: contrib: - fixed library-paths for MSVC DLL project (thanks Chad) doc: makefiles: - added makefile for DJGPP (thanks Silvio) autoconf: ----------------------------------------------------------- 0.9.4 (Jan 19th 2001) ---------------------- in short: Now that the MNG spec is at 1.0, this should be the last beta. There's a few small changes to make it inline with the spec, and a couple of bug-fixes. This is a serious release-candidate for libmng-1.0!! Please... test test test test!! ------------------- bugfixes: B123314 - fixed number of TERM related problems B123322 - fixed unwanted repetition in mng_readdisplay() B123443 - fixed by Ralph B124910 - fixed definition for WIN32_LEAN_AND_MEAN (thanks Chad) B125750 - fixed by Ralph B125756 - fixed mixup of data- & function-pointers (thanks Dimitri) B127517 - changed inclusion of the lcms header file for non-windows platforms core: - version numbers - fixed possible loop in display_resume() (Thanks Vova!) - fixed unwanted repetition in mng_readdisplay() - changed inclusion of the lcms header file for non-windows platforms - changed IHDR filter_method check for PNGs - moved restore of object 0 to libmng_display - added restore of object 0 to TERM processing (B123314) - fixed TERM delay processing (B123314) - fixed TERM end processing when count = 0 (B123314) - changed callback convention for MSVC (Thanks Chad) - fixed mixup of data- & function-pointers (thanks Dimitri) - added support for "nEED MNG-1.0" - added errorcode for MAGN methods - added errorchecking for MAGN methods - removed "old" MAGN methods 3 & 4 - added "new" MAGN methods 3, 4 & 5 - removed test filter-methods 1 & 65 - set default level-set for filtertype=64 to all zeroes samples: contrib: - added GTK mng-view example by Vova Babin - added MSVC MNGview sample by Nikolaus Brennig - updated Jason Summer's mngplg to version 0.9.2 (that's mngplg-0.9.2 based on libmng-0.9.3 !!!) - rearranged contrib directory slightly - added MSVC project to build libmng.dll by Chad Austin doc: - added README.dll - added README.config makefiles: - added a makefile for MS Visual C++ (Thanks to Atsushi Matsuda) autoconf: - fixed configure.in for lcms (FreeBSD port by Mikhail Teterin) - by default configure includes CMS support if lcms is present ----------------------------------------------------------- 0.9.3 (October 29th 2000) ------------------------- in short: Another beta release. The number of changes in the MNG specification have resulted in a lot of new code and some changed code. At the same time I saw no need to withhold some new functionality as it was pretty clear there was going to be another beta-round. If things go well, I'm going to try to release libmng 1.0.0 very shortly after this one. Many thanks to a lot of people for helping out, sending contributions, making suggestions and testing this little baby. This would get nowhere without YOU!!! - fixed bug 111300/117103 - added workaround for faulty PhotoShop iCCP chunk - added MAGN/JDAA chunks - added support for new filter_types - added PNG/MNG spec version indicators - added BCB mngview contribution by Andy Protano - added BCB mngdump; a GUI-based MNG dumping utility (Andy Protano) - implemented support for nEED "draft nn" - implemented app-defined support for bKGD for PNG images - removed trace-options from default SO/DLL builds (!!!) - raised initial maximum canvas size to 10000x10000 (!!!) (an App that wants to protect from overly large images should call mng_set_maxcanvassize() with appropriate values) - fixed other assorted stuff ------------------- bugfixes: B111300 - fixup for improved portability B117103 - fixed compilation errors on *nix with lcms (thanks Ralph!) core: - fixed compiler-warnings from Mozilla - added check for simplicity-bits in MHDR - added workaround for faulty PhotoShop iCCP chunk - fixed app-supplied background restore - fixed TERM processing delay of 0 msecs - fixed write-code for zTXt & iTXt - fixed read-code for iTXt - added MAGN chunk - fixed sRGB precedence for gamma_only corection - added support for new filter_types - fixed problem with no refresh after TERM - fixed DEFI behavior - fixed inclusion parameters to make the external libs work together - added export of zlib functions from windows dll - fixed timing & refresh behavior for single PNG/JNG - removed trace-options from default SO/DLL builds (!!!) - fixed MAGN rounding errors (thanks Matthias!) - fixed small timing problem when FRAM delay = 0 - fixed simplicity-check in compliance with draft 81/0.98a - fixed alpha-blending for all alpha-canvasstyles - added support for alpha-depth prediction - fixed processing of unknown critical chunks - removed test-MaGN - added PNG/MNG spec version indicators - implemented support for nEED - added support for JDAA - added functions to retrieve PNG/JNG specific header-info - added optional support for bKGD for PNG images - raised initial maximum canvas size to 10000x10000 - added support for delta-JNG - added callback to process non-critical unknown chunks - fixed support for delta-images during read() / display() - added closestream() processing for mng_cleanup() - fixed delta-processing behavior - added storage for pixel-/alpha-sampledepth for delta's - implemented delayed delta-processing - fixed putchunk_plte() to set bEmpty parameter (thanks Ben!) - added errorcode for delayed delta-processing - added get/set for bKGD preference setting - added get function for interlace/progressive display - fixed bug in empty PLTE handling - fixed seperate read() & display() processing - fixed tRNS processing for gray-image < 8-bits samples: - added BCB mngview contribution by Andy Protano contrib: - added BCB mngdump; a GUI-based MNG dumping utility (Andy Protano) doc: - updated RPM spec-file by MATSUURA Takanori - updated README.contrib makefiles: - fixed some stuff in automake/autoconf/libtool - fixed auto* for bug B117103 ----------------------------------------------------------- 0.9.2 (August 7th 2000) ----------------------- in short: Third beta release! Last one??? !!IMPORTANT!! All file-names are now prefixed with "libmng_" !!IMPORTANT!! Many thanks to Albert Chin-A-Young for his contribution of the autoconf/automake/libtool stuff and to Ralph Giles for helping me put it in the right places. There's a special README.autoconf so please read it! - fixed bug 110320/110546/110547/111096 - added several status retrieval functions - fixed other small bugs in display processing - fixed number of small problems and documentation typos - added autoconf/automake/libtool - added latest MNG plugin (0.9.0) by Jason Summers ------------------- bugfixes: B110320 - fixed GCC warning about mix-sized pointer math B110546 - fixed for improperly returning UNEXPECTEDEOF B110547 - fixed bug in interlace code B111096 - fixed large-buffer read-suspension core: - version numbers - fixed small bugs in display processing - removed Nextbackxxx fields (no longer used) - fixed problem with trace-functions improperly wrapped - put specific code in add_chunk() inside MNG_SUPPORT_WRITE wrapper - fixed documentation typos - fixed wrapping of suspension parameters - added status_xxxx functions - added trace-codes/-strings for status_xxxxx functions - changed file-prefixes - added function to set simplicity field - added trace-code/-string for updatemngsimplicity - fixed putchunk_unknown() function samples: contrib: - added latest MNG plugin (0.9.0) by Jason Summers doc: - version numbers - added autoconf readme - version numbers in RPM stuff makefiles: - fixed for new file-prefix - added autoconf/automake/libtool ----------------------------------------------------------- 0.9.1 (July 26th 2000) ---------------------- in short: Second beta release. Given the enormous amount of bug-reports (not ;-), this will most likely be one of the last betas. If things remain upright, the first public release (1.0.0) is fairly eminent in the weeks to come... - added SDL mng player by Ralph Giles to contributions - fixed timing and added internal buffering for I/O-suspension scenarios - added get routines for internal display-state variables (frame/layer/playtime) - changed read-processing for improved I/O-suspension (internal buffering) - fixed several problems with create- & write-support - added a load of documentation - lots of small stuff ------------------- bugfixes: core: - fixed mandatory BACK color to be opaque - changed mng_display_resume to allow to be called after a suspension return with MNG_NEEDMOREDATA - changed comments to indicate modified behavior for timer & suspension breaks - added variables for go_xxxx processing - implemented support for freeze/reset/resume & go_xxxx - added trace-codes/-strings for special display processing - added variables for improved timing support - added support for improved timing - added get routines for internal display variables - added get/set routines for suspensionmode variable - added trace-code/-string for get/set suspensionmode - added trace-codes/-strings for get/set display variables - added support for improved I/O-suspension - changed read-processing for improved I/O-suspension - added trace-code/-string for read_databuffer (I/O-suspension) - added suspendbuffer constants - changed EOF processing behavior - fixed TERM delay processing - changed pre-draft48 frame_mode=3 to frame_mode=1 - added callbacks for SAVE/SEEK processing - added trace-codes/-strings for SAVE/SEEK callbacks - added variable for NEEDSECTIONWAIT breaks - added trace-codes/-strings for get/set sectionbreaks - added NEEDSECTIONWAIT error-code/-string - added macro + routine to set returncode without calling error callback - added trace-code/-string for special error routine - changed default readbuffer size from 1024 to 4200 - added variable for freeze & reset processing - fixed storage of images during mng_read() - fixed support for mng_display() after mng_read() - added error cleanup processing - fixed support for mng_display_reset() - fixed suspension-buffering for 32K+ chunks - added function to set frame-/layer-count & playtime - added trace-code/-string for updatemngheader - added error-code/-string for updatemngheader if not a MNG - fixed creation-code - fixed writing of signature - fixed several chunk-writing routines samples: - fixed the libmng.pas module in line with libmng.h contrib: - added the SDL based mngplay viewer by Ralph Giles doc: - extended the RPM contribution by MATSUURA Takanori - added libmng.txt, a full description of the library and its usage - added man-pages for mng(5), jng(5) and libmng(3) makefiles: ----------------------------------------------------------- 0.9.0 (June 30th 2000) ---------------------- in short: This is the first beta!!! Yippee!!! Thanks to all the people who helped to guide me in the right direction. You know who you are! A special thanks to the guys with early implementations, who stood by and put up with my whims :-) changes over 0.5.3: - updated mngplg to 0.4.1 (the latest & greatest) - changed refresh parameters to 'x,y,width,height' ----------------------------------------------------------- 0.5.3 (never released) ---------------------- in short: This is a working version only; the next release will be 0.9.0 (first Beta!) There are a few incompatible changes with previous versions. The userdata variable has been changed from mng_uint32 to mng_ptr to accomodate 64-bit systems. For the same reason memory allocation size parameters have been changed to a mng_size_t type which is a typedef of size_t. Thanks to Aleks Jakulin for helping to iron out some 64-bit platform issues! - implemented the update-region parameters of the refresh callback - added support for most common delta-image options - added an animation-speed modifier - added an image-level parameter for the processtext callback - updated mngplg to 0.4.0 (supports JNG, full CMS, and other enhancements!) - fixed a lot of small things - added support for PPLT chunk - fixed to support 64-bit platforms ------------------- bugfixes: core: - added processing of color-info on delta-image - fixed handling of empty SAVE chunk - fixed display of stored JNG images - fixed problem with BASI-IEND as object 0 - changed the version parameters (obviously) - added update-region parms for refresh calback - added Needrefresh parameter - added initialization of update-region for refresh - added initialization of Needrefresh parameter - changed progressive-display processing - added tracecodes for tracing JPEG progression - added tracing of JPEG calls - added Deltaimmediate parm for faster delta-processing - added extra checks for delta-images - many changes to support delta-images - optimized some store_xxx routines - fixed some small things (as precaution) - fixed possible trouble if IEND display-processing got broken up - fixed nasty bug with embedded PNG after delta-image - added processing of PLTE & tRNS for delta-images - added processing of PLTE/tRNS & color-info for delta-images in the ani_objects chain - fixed problem with color-correction for stored images - added get/set for speedtype to facilitate testing - added trace-codes & -strings for get/set speedtype - added speed-modifier to timing routine - added get-routine of imagelevel for processtext callback - added trace-code & -string for get imagelevel - added administration of imagelevel parameter - added support for PPLT chunk - added trace-codes & -strings for PPLT chunk processing - fixed problem with incorrect gamma-correction - fixed inclusion of IJG read/write code - fixed problem with 16-bit GA format - fixed problem with cheap transparency for 4-bit gray - fixed display_xxxx routines for interlaced images - added precaution against faulty iCCP chunks from PS - changed userdata variable to mng_ptr - added typedef for mng_size_t - changed size parameter for memory allocation to mng_size_t - fixed compiler-warning for non-initialized iB variable - changed definition for 32-bit ints (64-bit platforms) - changed definition for mng_handle (64-bit platforms) - swapped refresh parameters - fixed initialization routine for new mng_handle type - added inclusion of stdlib.h for abs() - fixed some 64-bit warnings - fixed incompatible return-types samples: contrib: - updated mngplg to 0.3.0 (supports JNG & full color-correction!) - updated mngplg to 0.4.0 (Jason is picking up the pace ;-) doc: - added rpm directory with rpm spec-file (contributed by MATSUURA Takanori) makefiles: - changed makefile.linux to reflect versionnr for shared-lib - changed makefile.linux to depend on mng_conf.h & mng_types.h ----------------------------------------------------------- 0.5.2 (June 10th 2000) ---------------------- in short: This is the third release for developers Another milestone since JNG is now fully supported The next release will most likely be numbered 0.9.0 as the first Beta!! Fixed bug 106017 & 106019 Added many constants regarding chunk-property values Implemented full JNG support Added all the error- & trace-strings Added get/set routines for default ZLIB/IJG parameters Added a generic makefile for Unix platforms (contributed by Tim Rowley) Added canvasstyle for separate RGB + A canvas (eg. mozilla-style) Separated configuration-options into a separate file: "mng_conf.h" Fixed stuff for generic Unix compilation (contributed by Tim Rowley) Upgraded to lcms1.0.6 (now supports 16-bit endian-peculiarities) Added a makefile for Linux ELF & fixed some code-issues to go along with gcc Added support for suspended input-buffer processing Implemented the display-routines for RGBA/ARGB/BGRA/ABGR canvasstyles Implemented the application background-restore functionality Fixed & tested the mngtree Unix-sample (runs on Linux-RH6.2 with libmng.so) Upgraded mngplg to v0.2.2 (based on the latest code including JNG) Fixed a lot of other assorted stuff ------------------- bugfixes: B003(106017) - fixed problem with being proprietary to BCB B004(106019) - fixed problem when MNG_SUPPORT_WRITE not defined core: - bumped version-numbers up to 0.5.2 (yeah, really) - fixed support for IJGSRC6B - cleaned up some code regarding mixed support-options - complemented constants for chunk-property values - fixed MNG_UINT_pHYg value - implemented JNG support - fixed problem with DEFI clipping - added error telltale strings & support - added trace telltale strings & support - added support for global color-chunks inside TERM/LOOP - added support for global PLTE,tRNS,bKGD inside TERM/LOOP - added default IJG compression parameters and such - moved init of default zlib parms to "mng_hlapi.c" - added init of default IJG parms - added support for get/set of zlib/IJG default parms - added tracestrings for global animation color-chunks - added tracestrings for get/set of default ZLIB/IJG parms - added tracestrings for global PLTE,tRNS,bKGD - added framenr/layernr/playtime to object header - added initialization of framenr/layernr/playtime - changed ani_create calls not returning object pointer - create ani objects always (not just inside TERM/LOOP) - fixed inconsistancy with freeing global iCCP profile - fixed minor bugs 16-bit pixel-handling - added object promotion routine (PROM handling) - added trace-codes & -strings for image-object promotion - added trace-codes & -strings for delta-image processing - added error-codes & -strings for delta-image processing - added support for delta-image processing - added ani-object routines for delta-image processing - added delta-image fields - added compression/filter/interlace fields to object-buffer for delta-image processing - added delta-image row-processing routines - fixed up punctuation in several files (contributed by Tim Rowley) - removed useless definition in "mng_chunks.h" (contributed by Tim Rowley) - fixed pointer confusion in "mng_display.c" (contributed by Tim Rowley) - fixed inclusion for memcpy (contributed by Tim Rowley) - added mng_int32p (contributed by Tim Rowley) - added internal delta-image processing callbacks - separated configuration-options into "mng_conf.h" - changed to most likely configuration - added RGB8_A8 canvasstyle - added getalphaline callback for RGB8_A8 canvasstyle - fixed some makeup for Linux gcc compile - implemented app bkgd restore routines - implemented RGBA8, ARGB8, BGRA8 & ABGR8 display routines - added support for RGB8_A8 canvasstyle - added support for suspended input-buffer processing - added mng_read_resume HLAPI function to support read-suspension - fixed timer-handling to run with Mozilla (Tim Rowley) - fixed alpha-handling for alpha canvasstyles - fixed some compilation-warnings (contrib Jason Morris) samples: - fixed mngview(delphi) to work with the new core - synchronized libmng.pas(delphi) with the new libmng.h header - removed the error- & trace-strings from libmng.pas(delphi) - fixed mngtree(Unix) to compile on Linux (runs with libmng.so) - added makefile.linux for mngtree(Unix) (tested on RedHat6.2) contrib: - updated mngplg to 0.2.2 (based on latest code; supports JNG!) doc: - this file obviously - added Tim Rowley as contributing author - changed the examples.readme doc - updated the design-schematics in line with the current code makefiles: - changed the directory to "makefiles" to avoid name-conflicts - added generic Unix makefile (thanks to Tim Rowley) - added Linux ELF makefile (tested on RedHat6.2) ----------------------------------------------------------- 0.5.1 May 16th 2000 ------------------- in short: This is the second release for developers It's a bit of a milestone since all the chunk functionality is in place and functioning (read, examine, create & write) This version is incompatible with 0.5.0 since some of the callback prototypes have changed (should be the last time that happens!) There are a few more samples and even a real contribution! Fixed bug 105795 & 105797 Fixed a mis-alignment in animation-timing Added chunk-access functions Finished all chunk-storage routine-bits Finished all chunk-write routines Changed the callback prototypes to allow error-reporting back to the library Fixed some routines to allow for callback error-reporting Added version-control functions & constants Added two functions to set display- & sRGB-profile from memory Moved CRC table to dynamic structure (for improved thread-safety) Added SAVE & SEEK save&restore functionality Finished the application-based CMS-callbacks Fixed a few BCB specifics Changed the Win32 DLL and samples to use __stdcall Did some more assorted little changes Added 2 BCB samples Added 1 Unix sample Added the MNG plugin by Jason Summers in the contrib section Changed some documents to reflect these changes ------------------- bugfixes: B001(105795) - fixed wrong lcms call & memory-leak for gammatables B002(105797) - fixed problem with missing sRGB profile core: - changed chunk iteration function - added chunk access functions - added version control constants & functions - changed strict-ANSI stuff - added set_outputprofile2 & set_srgbprofile2 - added empty-chunk put-routines - added version_dll & VERSION_DLL (for consistency) - added version control explanatory text & samples - added iteratechunk callback definition - improved definitions for DLL support - added 8-bit palette definition - added general array definitions - added MNG_NULL definition - changed most callback prototypes to allow the app to report errors during callback processing - added CRC table to main structure (for thread-safety) - added iPLTEentries for checking hIST-length - changed palette definition to exported palette-type - removed frozen indicator - added create/write indicators - added eMNGma hack (will be removed in 1.0.0 !!!) - added TERM animation object pointer (easier reference) - added saved-data structure for SAVE/SEEK processing - added some errorcodes - added application errorcodes (used with callbacks) - moved chunk-access errorcodes to severity 5 - added chunk-access function trace-codes - changed trace to macro for callback error-reporting - added save_state & restore_state trace-codes - put in some extra comments - fixed layout for sBIT, PPLT - changed write callback definition - fixed layout for PPLT again (missed deltatype ?!?) - cleaned up left-over teststuff in the BACK chunk routine - changed CRC initialization to use dynamic structure (wasn't thread-safe the old way !) - filled in many missing sequence&length checks - filled in many missing chunk-store snippets - added checks for running animations - filled remaining write routines - fixed read_pplt with regard to deltatype - added callback error-reporting support - added pre-draft48 support (short MHDR, frame_mode, LOOP) - fixed chunk-storage bit in several routines - supplemented the SAVE & SEEK display processing - added init of iPLTEcount - changed calling-convention definition - changed status-handling of display-routines - added versioning-control routines - filled the write routine - fixed frame_delay misalignment - added sanity check for frozen status - changed display_mend to reset state to initial or SAVE - added save_state and restore_state for SAVE/SEEK/TERM processing - added process_save & process_seek routines - changed and filled iterate-chunk function - added getchunk functions - added putchunk functions - added empty-chunk put-routines - filled application-based color-management routines - added creatememprofile - filled the deflatedata routine - added cleanup of saved-data (SAVE/SEEK processing) - moved the actual write_graphic functionality from mng_hlapi.c to it's appropriate function in the mng_write.c module - moved standard header includes into mng_types.h (stdlib/mem for mem-mngmt & math for fp gamma-calc) - added getimgdata & putimgdata functions samples: - fixed mngview(delphi) to work with the new core - synchronized libmng.pas(delphi) with the new libmng.h header - added mngtree(bcb) sample - added bogus(bcb) sample - added mngtree(unix) sample contrib: - added mngplg 0.1.0 / a MNG plugin for Win32 by Jason Summers doc: - added this changes.readme file - changed the samples.readme doc accordingly - changed the contrib.readme doc accordingly ----------------------------------------------------------- 0.5.0 May 1st 2000 ------------------ in short: This is the first developers release. It's roughly about 60% done. libmng-2.0.2/libtool0000755000000000000000000107361212115373261013066 0ustar rootroot#! /bin/sh # libtool - Provide generalized library-building support services. # Generated automatically by config.status (libmng-2.0.2) 2.0.2 # Libtool was configured on host mary: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010 Free Software Foundation, # Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=2.4 macro_revision=1.3293 # Whether or not to build shared libraries. build_libtool_libs=yes # Whether or not to build static libraries. build_old_libs=yes # What type of objects to build. pic_mode=default # Whether or not to optimize for fast installation. fast_install=yes # Shell to use when invoking shell scripts. SHELL="/bin/sh" # An echo program that protects backslashes. ECHO="printf %s\\n" # The host system. host_alias= host=x86_64-unknown-linux-gnu host_os=linux-gnu # The build system. build_alias= build=x86_64-unknown-linux-gnu build_os=linux-gnu # A sed program that does not truncate output. SED="/usr/bin/sed" # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e 1s/^X//" # A grep program that handles long lines. GREP="/usr/bin/grep" # An ERE matcher. EGREP="/usr/bin/grep -E" # A literal string matcher. FGREP="/usr/bin/grep -F" # A BSD- or MS-compatible name lister. NM="/usr/bin/nm -B" # Whether we need soft or hard links. LN_S="ln -s" # What is the maximum length of a command? max_cmd_len=1572864 # Object file suffix (normally "o"). objext=o # Executable file suffix (normally ""). exeext= # whether the shell understands "unset". lt_unset=unset # turn spaces into newlines. SP2NL="tr \\040 \\012" # turn newlines into spaces. NL2SP="tr \\015\\012 \\040\\040" # convert $build file names to $host format. to_host_file_cmd=func_convert_file_noop # convert $build files to toolchain format. to_tool_file_cmd=func_convert_file_noop # An object symbol dumper. OBJDUMP="objdump" # Method to check whether dependent libraries are shared objects. deplibs_check_method="pass_all" # Command to use when deplibs_check_method = "file_magic". file_magic_cmd="\$MAGIC_CMD" # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob="" # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob="no" # DLL creation program. DLLTOOL="dlltool" # Command to associate shared and link libraries. sharedlib_from_linklib_cmd="printf %s\\n" # The archiver. AR="ar" # Flags to create an archive. AR_FLAGS="cru" # How to feed a file listing to the archiver. archiver_list_spec="@" # A symbol stripping program. STRIP="strip" # Commands used to install an old-style archive. RANLIB="ranlib" old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib" old_postuninstall_cmds="" # Whether to use a lock for old archive extraction. lock_old_archive_extraction=no # A C compiler. LTCC="gcc" # LTCC compiler flags. LTCFLAGS="-g -O2" # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p' | sed '/ __gnu_lto/d'" # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[ABCDGIRSTW]* .* \\(.*\\)\$/extern char \\1;/p'" # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\)[ ]*\$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p'" # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\([^ ]*\\)[ ]*\$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\(lib[^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"lib\\2\", (void *) \\&\\2},/p'" # Specify filename containing input files for $NM. nm_file_list_spec="@" # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot= # The name of the directory that contains temporary libtool files. objdir=.libs # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=file # Must we lock files when doing compilation? need_locks="no" # Manifest tool. MANIFEST_TOOL=":" # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL="" # Tool to change global to local symbols on Mac OS X. NMEDIT="" # Tool to manipulate fat objects and archives on Mac OS X. LIPO="" # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL="" # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64="" # Old archive suffix (normally "a"). libext=a # Shared library suffix (normally ".so"). shrext_cmds=".so" # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds="" # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" # Do we need the "lib" prefix for modules? need_lib_prefix=no # Do we need a version for libraries? need_version=no # Library versioning type. version_type=linux # Shared library runtime path variable. runpath_var=LD_RUN_PATH # Shared library path variable. shlibpath_var=LD_LIBRARY_PATH # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=no # Format of library name prefix. libname_spec="lib\$name" # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}" # The coded name of the library, if different from the real name. soname_spec="\${libname}\${release}\${shared_ext}\$major" # Permission mode override for installation of shared libraries. install_override_mode="" # Command to use after installation of a shared archive. postinstall_cmds="" # Command to use after uninstallation of a shared archive. postuninstall_cmds="" # Commands used to finish a libtool library installation in a directory. finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir" # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval="" # Whether we should hardcode library paths into libraries. hardcode_into_libs=yes # Compile-time system search path for libraries. sys_lib_search_path_spec="/usr/lib64/gcc/x86_64-slackware-linux/4.7.2 /usr/lib64 /lib64 /usr/x86_64-slackware-linux/lib " # Run-time system search path for libraries. sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/local/lib /usr/x86_64-slackware-linux/lib /usr/lib64/seamonkey /usr/local/lib64 /usr/local/ogle/lib /usr/local/lib/ogle /usr/local/fltk11/lib /usr/local/fltk13/lib /usr/local/fltk2/lib /usr/local/fltk3/lib /usr/local/opj2/lib /usr/local/opj1/lib /usr/local/webkitgtk/lib /usr/local/lesstif/lib /usr/local/openmotif/lib " # Whether dlopen is supported. dlopen_support=unknown # Whether dlopen of programs is supported. dlopen_self=unknown # Whether dlopen of statically linked programs is supported. dlopen_self_static=unknown # Commands to strip libraries. old_striplib="strip --strip-debug" striplib="strip --strip-unneeded" # Assembler program. AS="as" # The linker used to build libraries. LD="/usr/x86_64-slackware-linux/bin/ld -m elf_x86_64" # How to create reloadable object files. reload_flag=" -r" reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" # Commands used to build an old-style archive. old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" # A language specific compiler. CC="gcc" # Is the compiler the GNU compiler? with_gcc=yes # Compiler flag to turn off builtin functions. no_builtin_flag=" -fno-builtin" # Additional compiler flags for building library objects. pic_flag=" -fPIC -DPIC" # How to pass a linker flag through the compiler. wl="-Wl," # Compiler flag to prevent dynamic linking. link_static_flag="-static" # Does compiler simultaneously support -c and -o options? compiler_c_o="yes" # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=no # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=no # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec="\${wl}--export-dynamic" # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" # Whether the compiler copes with passing no objects directly. compiler_needs_object="no" # Create an old-style archive from a shared archive. old_archive_from_new_cmds="" # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds="" # Commands used to build a shared archive. archive_cmds="\$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" archive_expsym_cmds="echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~ cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$output_objdir/\$libname.ver~ echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~ \$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-version-script \${wl}\$output_objdir/\$libname.ver -o \$lib" # Commands used to build a loadable module if different from building # a shared archive. module_cmds="" module_expsym_cmds="" # Whether we are building with GNU ld or not. with_gnu_ld="yes" # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag="" # Flag that enforces no undefined symbols. no_undefined_flag="" # Flag to hardcode $libdir into a binary during linking. # This must work even if $libdir does not exist hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" # If ld is used when linking, flag to hardcode $libdir into a binary # during linking. This must work even if $libdir does not exist. hardcode_libdir_flag_spec_ld="" # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator="" # Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=no # Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting ${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=no # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=no # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=unsupported # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=no # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=no # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=unknown # Set to "yes" if exported symbols are required. always_export_symbols=no # The commands to list exported symbols. export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" # Symbols that should not be listed in the preloaded symbols. exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" # Symbols that must always be exported. include_expsyms="" # Commands necessary for linking programs (against libraries) with templates. prelink_cmds="" # Commands necessary for finishing linking programs. postlink_cmds="" # Specify filename containing input files. file_list_spec="" # How to hardcode a shared library path into an executable. hardcode_action=immediate # ### END LIBTOOL CONFIG # libtool (GNU libtool) 2.4 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4 TIMESTAMP="" package_revision=1.3293 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${EGREP="grep -E"} : ${FGREP="grep -F"} : ${GREP="grep"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SED="sed"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # Extended-shell func_dirname implementation # func_basename file func_basename () { func_basename_result="${1##*/}" } # Extended-shell func_basename implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # Extended-shell func_dirname_and_basename implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # Extended-shell func_stripname implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=: for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} } # Extended-shell func_split_short_opt implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=} } # Extended-shell func_split_long_opt implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}+=\${2}" } # Extended-shell func_append implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}+=\\ \$func_quote_for_eval_result" } # Extended-shell func_append_quoted implementation # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # Extended-shell func_arith implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } # Extended-shell func_len implementation # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # Extended-shell func_lo2o implementation # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # Extended-shell func_xform implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false preserve_args+=" $opt" ;; --no-verbose) opt_verbose=false preserve_args+=" $opt" ;; --silent|--quiet) opt_silent=: preserve_args+=" $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: preserve_args+=" $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" preserve_args+=" $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || preserve_args+=" --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_to_host_path_result+="$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) pie_flag+=" $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) later+=" $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. base_compile+=" $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi removelist+=" $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist+=" $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir command+=" -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then command+=" -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command+="$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then dir+="/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then libdirs+=" $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then libs+=" $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || admincmds+=" $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" install_prog+="$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then files+=" $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog+=" $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi install_shared_prog+=" $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" install_shared_prog+=" -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs+=" $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs+=" $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs+=" $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir+="$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && staticlibs+=" $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) symtab_cflags+=" $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -e 's/\([\\"]\)/\\\1/g' \ -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result libtool_args+=" $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command+=" @OUTPUT@" finalize_command+=" @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command+=" @SYMFILE@" finalize_command+=" @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles+=" $arg" else dlprefiles+=" $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) deplibs+=" $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # moreargs+=" $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles+=" $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles+=" $pic_object" prev= fi # A PIC object. libobjs+=" $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects+=" $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects+=" $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result libobjs+=" $pic_object" non_pic_objects+=" $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath+=" $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath+=" $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs+=" $arg" prev= continue ;; xcclinker) linker_flags+=" $qarg" compiler_flags+=" $qarg" prev= compile_command+=" $qarg" finalize_command+=" $qarg" continue ;; xcompiler) compiler_flags+=" $qarg" prev= compile_command+=" $qarg" finalize_command+=" $qarg" continue ;; xlinker) linker_flags+=" $qarg" compiler_flags+=" $wl$qarg" prev= compile_command+=" $wl$qarg" finalize_command+=" $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. compile_command+=" $link_static_flag" finalize_command+=" $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command+=" $arg" finalize_command+=" $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) deplibs+=" $arg" ;; *) deplibs+=" -L$dir" ;; esac lib_search_path+=" $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath+=":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath+=":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs+=" System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs+=" $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) compiler_flags+=" $arg" compile_command+=" $arg" finalize_command+=" $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags+=" $arg" compile_command+=" $arg" finalize_command+=" $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags+=" $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath+=" $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg+=" $func_quote_for_eval_result" compiler_flags+=" $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg+=" $wl$func_quote_for_eval_result" compiler_flags+=" $wl$func_quote_for_eval_result" linker_flags+=" $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" compile_command+=" $arg" finalize_command+=" $arg" compiler_flags+=" $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs+=" $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles+=" $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles+=" $pic_object" prev= fi # A PIC object. libobjs+=" $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects+=" $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects+=" $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result libobjs+=" $pic_object" non_pic_objects+=" $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. deplibs+=" $arg" old_deplibs+=" $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles+=" $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles+=" $func_resolve_sysroot_result" prev= else deplibs+=" $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command+=" $arg" finalize_command+=" $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command+=" $arg" finalize_command+=" $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) specialdeplibs+=" $deplib" ;; esac fi libs+=" $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs+=" $pre_post_deps" ;; esac pre_post_deps+=" $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs+=" $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags+=" $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags+=" $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags+=" $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" newlib_search_path+=" $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" newlib_search_path+=" $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath+=" $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles+=" $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles+=" $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) new_inherited_linker_flags+=" $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles+=" $dlopen" test -n "$dlpreopen" && dlprefiles+=" $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. convenience+=" $ladir/$objdir/$old_library" old_convenience+=" $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs+=" $deplib" ;; esac fi tmp_libs+=" $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles+=" $lib $dependency_libs" else newdlfiles+=" $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then #func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path+=" $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path+=" $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" newdlprefiles+=" $dir/$linklib" else newdlprefiles+=" $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs+=" $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles+=" $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs+=" $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles+=" $dir/$dlname" else newdlprefiles+=" $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path+=" $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" newlib_search_path+=" $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs+=" $deplib" ;; esac fi tmp_libs+=" $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) temp_rpath+="$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath+=" $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded notinst_deplibs+=" $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs+=" $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath+=" $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir+=" -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath+="$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath+="$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath+="$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir+=" -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath+=" $temp_xrpath";; esac;; *) temp_deplibs+=" $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path+=" $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) specialdeplibs+=" $func_resolve_sysroot_result" ;; esac fi tmp_libs+=" $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi compiler_flags+=" ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags+=" -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" #test "$absdir" != "$libdir" && \ # func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path+=" $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs+=" $deplib" ;; esac ;; *) tmp_libs+=" $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs+=" $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs+="$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" libobjs+=" $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring+=":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" libobjs+=" $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist+=" $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs+=" $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" temp_xrpath+=" -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles+=" $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles+=" $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs+=" System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs+=" -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs+=" $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs+=" $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs+=" $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs+=" $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs+=" $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs+=" -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs+=" $deplib" ;; esac ;; *) new_libs+=" $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs+="$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath+=" $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_apped perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath+="$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames+=" $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" delfiles+=" $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result delfiles+=" $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles+=" $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs+=" $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $convenience libobjs+=" $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags+=" $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output delfiles+=" $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done delfiles+=" $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then objlist+=" $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles+=" $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles+=" $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $dlprefiles libobjs+=" $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" generated+=" $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) compile_command+=" ${wl}-bind_at_load" finalize_command+=" ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs+=" -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs+=" $deplib" ;; esac ;; *) new_libs+=" $deplib" ;; esac done compile_deplibs="$new_libs" compile_command+=" $compile_deplibs" finalize_command+=" $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs+="$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath+=" $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath+=" $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) dllsearchpath+=":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath+=":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs+="$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath+=" $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath+=" $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath+="$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath+="$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then oldobjs+=" $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $addlibs oldobjs+=" $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $dlprefiles oldobjs+=" $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" oldobjs+=" $gentop/$newobj" ;; *) oldobjs+=" $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result objlist+=" $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" newdependency_libs+=" ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" newdependency_libs+=" -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" newdependency_libs+=" -R$func_replace_sysroot_result" ;; *) newdependency_libs+=" $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlfiles+=" ${lt_sysroot:+=}$libdir/$name" ;; *) newdlfiles+=" $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlprefiles+=" ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles+=" $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles+=" $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) RM+=" $arg"; rmforce=yes ;; -*) RM+=" $arg" ;; *) files+=" $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) rmdirs+=" $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles+=" $odir/$n" done test -n "$old_library" && rmfiles+=" $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && rmfiles+=" $odir/$dlname" ;; esac test -n "$libdir" && rmfiles+=" $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then rmfiles+=" $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then rmfiles+=" $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles+=" $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result rmfiles+=" $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles+=" $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles+=" $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles+=" $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 libmng-2.0.2/libmng.h0000644000000000000000000053303412115351576013120 0ustar rootroot/* ************************************************************************** */ /* * * */ /* * COPYRIGHT NOTICE: * */ /* * * */ /* * Copyright (c) 2000-2007 Gerard Juyn * */ /* * [You may insert additional notices after this sentence if you modify * */ /* * this source] * */ /* * * */ /* * For the purposes of this copyright and license, "Contributing Authors" * */ /* * is defined as the following set of individuals: * */ /* * * */ /* * Gerard Juyn - gjuyn :at: users.sourceforge.net * */ /* * Glenn Randers-Pehrson - glennrp :at: users.sourceforge.net * */ /* * Raphael Assenat - raph :at: raphnet.net * */ /* * John Stiles - * */ /* * * */ /* * The MNG Library is supplied "AS IS". The Contributing Authors * */ /* * disclaim all warranties, expressed or implied, including, without * */ /* * limitation, the warranties of merchantability and of fitness for any * */ /* * purpose. The Contributing Authors assume no liability for direct, * */ /* * indirect, incidental, special, exemplary, or consequential damages, * */ /* * which may result from the use of the MNG Library, even if advised of * */ /* * the possibility of such damage. * */ /* * * */ /* * Permission is hereby granted to use, copy, modify, and distribute this * */ /* * source code, or portions hereof, for any purpose, without fee, subject * */ /* * to the following restrictions: * */ /* * * */ /* * 1. The origin of this source code must not be misrepresented; * */ /* * you must not claim that you wrote the original software. * */ /* * * */ /* * 2. Altered versions must be plainly marked as such and must not be * */ /* * misrepresented as being the original source. * */ /* * * */ /* * 3. This Copyright notice may not be removed or altered from any source * */ /* * or altered source distribution. * */ /* * * */ /* * The Contributing Authors specifically permit, without fee, and * */ /* * encourage the use of this source code as a component to supporting * */ /* * the MNG and JNG file format in commercial products. If you use this * */ /* * source code in a product, acknowledgment would be highly appreciated. * */ /* * * */ /* ************************************************************************** */ /* * * */ /* * Parts of this software have been adapted from the libpng package. * */ /* * Although this library supports all features from the PNG specification * */ /* * (as MNG descends from it) it does not require the libpng package. * */ /* * It does require the zlib library and optionally the IJG jpeg library, * */ /* * and/or the "little-cms" library by Marti Maria (depending on the * */ /* * inclusion of support for JNG and Full-Color-Management respectively. * */ /* * * */ /* * This library's function is primarily to read and display MNG * */ /* * animations. It is not meant as a full-featured image-editing * */ /* * component! It does however offer creation and editing functionality * */ /* * at the chunk level. * */ /* * (future modifications may include some more support for creation * */ /* * and or editing) * */ /* * * */ /* ************************************************************************** */ /* ************************************************************************** */ /* * * */ /* * Version numbering * */ /* * * */ /* * X.Y.Z : X = release (0 = initial build) * */ /* * Y = major version (uneven = test; even = production) * */ /* * Z = minor version (bugfixes; 2 is older than 10) * */ /* * * */ /* * production versions only appear when a test-version is extensively * */ /* * tested and found stable or for intermediate bug-fixes (recognized by * */ /* * a change in the Z number) * */ /* * * */ /* * x.1.x = test version * */ /* * x.2.x = production version * */ /* * x.3.x = test version * */ /* * x.4.x = production version * */ /* * etc. * */ /* * * */ /* ************************************************************************** */ /* * * */ /* * Identifier naming conventions throughout this library * */ /* * * */ /* * iXxxx = an integer * */ /* * dXxxx = a float * */ /* * pXxxx = a pointer * */ /* * bXxxx = a boolean * */ /* * eXxxx = an enumeration * */ /* * hXxxx = a handle * */ /* * zXxxx = a zero-terminated string (pchar) * */ /* * fXxxx = a pointer to a function (callback) * */ /* * aXxxx = an array * */ /* * sXxxx = a structure * */ /* * * */ /* * Macros & defines are in all uppercase. * */ /* * Functions & typedefs in all lowercase. * */ /* * Exported stuff is prefixed with MNG_ or mng_ respectively. * */ /* * * */ /* * (I may have missed a couple; don't hesitate to let me know!) * */ /* * * */ /* ************************************************************************** */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng.h copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : main application interface * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : The main application interface. An application should not * */ /* * need access to any of the other modules! * */ /* * * */ /* * changes : 0.5.1 - 05/06/2000 - G.Juyn * */ /* * - changed chunk iteration function * */ /* * 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - added chunk access functions * */ /* * - added version control constants & functions * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - added set_outputprofile2 & set_srgbprofile2 * */ /* * - added empty-chunk put-routines * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - added version_dll & VERSION_DLL (for consistency) * */ /* * - added version control explanatory text & samples * */ /* * 0.5.1 - 05/15/2000 - G.Juyn * */ /* * - added getimgdata & putimgdata functions * */ /* * * */ /* * 0.5.2 - 05/16/2000 - G.Juyn * */ /* * - changed the version parameters (obviously) * */ /* * 0.5.2 - 05/18/2000 - G.Juyn * */ /* * - complimented constants for chunk-property values * */ /* * 0.5.2 - 05/23/2000 - G.Juyn * */ /* * - fixed MNG_UINT_pHYg value * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - added support for get/set default zlib/IJG parms * */ /* * 0.5.2 - 06/02/2000 - G.Juyn * */ /* * - added MNG_BIGENDIAN_SUPPORT (contributed by Tim Rowley) * */ /* * - separated configuration-options into "mng_conf.h" * */ /* * - added RGB8_A8 canvasstyle * */ /* * - added getalphaline callback for RGB8_A8 canvasstyle * */ /* * 0.5.2 - 06/06/2000 - G.Juyn * */ /* * - moved errorcodes from "mng_error.h" * */ /* * - added mng_read_resume function to support * */ /* * read-suspension * */ /* * * */ /* * 0.5.3 - 06/16/2000 - G.Juyn * */ /* * - changed the version parameters (obviously) * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - added get/set for speedtype to facilitate testing * */ /* * - added get for imagelevel during processtext callback * */ /* * 0.5.3 - 06/24/2000 - G.Juyn * */ /* * - fixed inclusion of IJG read/write code * */ /* * 0.5.3 - 06/26/2000 - G.Juyn * */ /* * - changed userdata variable to mng_ptr * */ /* * * */ /* * 0.9.0 - 06/30/2000 - G.Juyn * */ /* * - changed refresh parameters to 'x,y,width,height' * */ /* * * */ /* * 0.9.1 - 07/06/2000 - G.Juyn * */ /* * - added MNG_NEEDTIMERWAIT errorcode * */ /* * - changed comments to indicate modified behavior for * */ /* * timer & suspension breaks * */ /* * 0.9.1 - 07/08/2000 - G.Juyn * */ /* * - added get routines for internal display variables * */ /* * - added get/set routines for suspensionmode variable * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - added callbacks for SAVE/SEEK processing * */ /* * - added get/set routines for sectionbreak variable * */ /* * - added NEEDSECTIONWAIT errorcode * */ /* * 0.9.1 - 07/19/2000 - G.Juyn * */ /* * - added function to set frame-/layer-count & playtime * */ /* * - added errorcode for updatemngheader if not a MNG * */ /* * * */ /* * 0.9.2 - 07/31/2000 - G.Juyn * */ /* * - fixed problem with trace-functions improperly wrapped * */ /* * - added status_xxxx functions * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * - added function to set simplicity field * */ /* * * */ /* * 0.9.3 - 08/09/2000 - G.Juyn * */ /* * - added check for simplicity-bits in MHDR * */ /* * 0.9.3 - 08/12/2000 - G.Juyn * */ /* * - added workaround for faulty PhotoShop iCCP chunk * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 09/07/2000 - G.Juyn * */ /* * - added support for new filter_types * */ /* * 0.9.3 - 10/10/2000 - G.Juyn * */ /* * - added support for alpha-depth prediction * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - fixed processing of unknown critical chunks * */ /* * - removed test-MaGN * */ /* * - added PNG/MNG spec version indicators * */ /* * - added support for nEED * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added functions to retrieve PNG/JNG specific header-info * */ /* * - added JDAA chunk * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - added callback to process non-critical unknown chunks * */ /* * 0.9.3 - 10/20/2000 - G.Juyn * */ /* * - added errocode for delayed delta-processing * */ /* * - added get/set for bKGD preference setting * */ /* * 0.9.3 - 10/21/2000 - G.Juyn * */ /* * - added get function for interlace/progressive display * */ /* * * */ /* * 0.9.4 - 01/18/2001 - G.Juyn * */ /* * - added errorcode for MAGN methods * */ /* * - removed test filter-methods 1 & 65 * */ /* * * */ /* * 1.0.0 - 02/05/2001 - G.Juyn * */ /* * - version numbers (obviously) * */ /* * * */ /* * 1.0.1 - 02/08/2001 - G.Juyn * */ /* * - added MEND processing callback * */ /* * 1.0.1 - 04/21/2001 - G.Juyn (code by G.Kelly) * */ /* * - added BGRA8 canvas with premultiplied alpha * */ /* * 1.0.1 - 05/02/2001 - G.Juyn * */ /* * - added "default" sRGB generation (Thanks Marti!) * */ /* * * */ /* * 1.0.2 - 06/23/2001 - G.Juyn * */ /* * - added optimization option for MNG-video playback * */ /* * - added processterm callback * */ /* * 1.0.2 - 06/25/2001 - G.Juyn * */ /* * - added late binding errorcode (not used internally) * */ /* * - added option to turn off progressive refresh * */ /* * * */ /* * 1.0.3 - 08/06/2001 - G.Juyn * */ /* * - added get function for last processed BACK chunk * */ /* * * */ /* * 1.0.5 - 07/04/2002 - G.Juyn * */ /* * - added errorcode for extreme chunk-sizes * */ /* * 1.0.5 - 08/07/2002 - G.Juyn * */ /* * - added test-option for PNG filter method 193 (=no filter) * */ /* * 1.0.5 - 08/15/2002 - G.Juyn * */ /* * - completed PROM support * */ /* * - completed delta-image support * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - added HLAPI function to copy chunks * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * - added 'supports' call to check function availability * */ /* * 1.0.5 - 09/15/2002 - G.Juyn * */ /* * - fixed LOOP iteration=0 special case * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - added support for PAST * */ /* * 1.0.5 - 09/22/2002 - G.Juyn * */ /* * - added bgrx8 canvas (filler byte) * */ /* * 1.0.5 - 10/07/2002 - G.Juyn * */ /* * - added check for TERM placement during create/write * */ /* * - added beta version function & constant * */ /* * 1.0.5 - 11/07/2002 - G.Juyn * */ /* * - added support to get totals after mng_read() * */ /* * * */ /* * 1.0.6 - 07/07/2003 - G. Randers-Pehrson * */ /* * - added support for reducing the footprint of libmng * */ /* * by macros that optionally skip unused chunks, remove * */ /* * 16-bit sample support, remove Delta support, and * */ /* * remove JNG support, to accomodate Mozilla/Firebird. * */ /* * 1.0.6 - 07/14/2003 - G. Randers-Pehrson * */ /* * - further optional removal of unused functions * */ /* * * */ /* * 1.0.7 - 11/27/2003 - R.A * */ /* * - added CANVAS_RGB565 and CANVAS_BGR565 * */ /* * 1.0.7 - 12/06/2003 - R.A * */ /* * - added CANVAS_RGBA565 and CANVAS_BGRA565 * */ /* * 1.0.7 - 01/25/2004 - J.S * */ /* * - added premultiplied alpha canvas' for RGBA, ARGB, ABGR * */ /* * 1.0.7 - 03/07/2004 - G. Randers-Pehrson * */ /* * - put gamma, cms-related declarations inside #ifdef * */ /* * 1.0.7 - 03/10/2004 - G.R-P * */ /* * - added conditionals around openstream/closestream * */ /* * * */ /* * 1.0.8 - 04/02/2004 - G.Juyn * */ /* * - added CRC existence & checking flags * */ /* * 1.0.8 - 04/12/2004 - G.Juyn * */ /* * - added data-push mechanisms for specialized decoders * */ /* * 1.0.8 - 06/05/2004 - G.R-P * */ /* * - define MNG_INCLUDE_ZLIB when MNG_USE_ZLIB_CRC is defined * */ /* * * */ /* * 1.0.9 - 10/03/2004 - G.Juyn * */ /* * - added function to retrieve current FRAM delay * */ /* * 1.0.9 - 10/14/2004 - G.Juyn * */ /* * - added bgr565_a8 canvas-style (thanks to J. Elvander) * */ /* * 1.0.9 - 10/17/2004 - G.Juyn * */ /* * - fixed PPLT getchunk/putchunk routines * */ /* * * */ /* * 1.0.10 - 03/07/2006 - (thanks to W. Manthey) * */ /* * - added CANVAS_RGB555 and CANVAS_BGR555 * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_h_ #define _libmng_h_ /* ************************************************************************** */ #include "libmng_conf.h" /* user-specific configuration options */ /* ************************************************************************** */ #define MNG_CHECK_BAD_ICCP /* let's catch that sucker !!! */ #ifdef MNG_SUPPORT_READ /* dependencies based on user-configuration */ #define MNG_INCLUDE_READ_PROCS #endif #ifdef MNG_SUPPORT_WRITE #define MNG_INCLUDE_WRITE_PROCS #endif #ifdef MNG_USE_ZLIB_CRC #define MNG_INCLUDE_ZLIB #endif #ifdef MNG_SUPPORT_DISPLAY #define MNG_INCLUDE_FILTERS #define MNG_INCLUDE_INTERLACE #define MNG_INCLUDE_OBJECTS #define MNG_INCLUDE_DISPLAY_PROCS #define MNG_INCLUDE_TIMING_PROCS #define MNG_INCLUDE_ZLIB #endif #ifdef MNG_STORE_CHUNKS #define MNG_INCLUDE_ZLIB #endif #ifdef MNG_SUPPORT_IJG6B #define MNG_INCLUDE_JNG #define MNG_INCLUDE_IJG6B #define MNG_USE_SETJMP #endif #ifdef MNG_INCLUDE_JNG #if defined(MNG_SUPPORT_DISPLAY) || defined(MNG_ACCESS_CHUNKS) #define MNG_INCLUDE_JNG_READ #endif #if defined(MNG_SUPPORT_WRITE) || defined(MNG_ACCESS_CHUNKS) #define MNG_INCLUDE_JNG_WRITE #endif #endif #ifdef MNG_FULL_CMS #define MNG_INCLUDE_LCMS #endif #ifdef MNG_AUTO_DITHER #define MNG_INCLUDE_DITHERING #endif #ifdef MNG_SUPPORT_TRACE #define MNG_INCLUDE_TRACE_PROCS #ifdef MNG_TRACE_TELLTALE #define MNG_INCLUDE_TRACE_STRINGS #endif #endif #ifdef MNG_ERROR_TELLTALE #define MNG_INCLUDE_ERROR_STRINGS #endif #ifdef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_OPTIMIZE_CHUNKACCESS #define MNG_OPTIMIZE_CHUNKACCESS #endif #else #ifdef MNG_OPTIMIZE_CHUNKACCESS #undef MNG_OPTIMIZE_CHUNKACCESS #endif #endif /* ************************************************************************** */ #include "libmng_types.h" /* platform-specific definitions and other assorted stuff */ /* ************************************************************************** */ #ifdef __cplusplus extern "C" { #endif /* ************************************************************************** */ /* * * */ /* * Versioning control * */ /* * * */ /* * version_so and version_dll will NOT reflect version_major; * */ /* * these will only change for binary incompatible changes (which will * */ /* * hopefully never occur) * */ /* * note: they will be set to 1 on the first public release !!! * */ /* * * */ /* * first public release: * */ /* * #define MNG_VERSION_TEXT "1.0.0" * */ /* * #define MNG_VERSION_SO 1 eg. libmng.so.1 * */ /* * #define MNG_VERSION_DLL 1 eg. libmng.dll * */ /* * #define MNG_VERSION_MAJOR 1 * */ /* * #define MNG_VERSION_MINOR 0 * */ /* * #define MNG_VERSION_RELEASE 0 * */ /* * * */ /* * bug fix & cosmetics : * */ /* * #define MNG_VERSION_TEXT "1.0.1" * */ /* * #define MNG_VERSION_SO 1 eg. libmng.so.1 * */ /* * #define MNG_VERSION_DLL 1 eg. libmng.dll * */ /* * #define MNG_VERSION_MAJOR 1 * */ /* * #define MNG_VERSION_MINOR 0 * */ /* * #define MNG_VERSION_RELEASE 1 * */ /* * * */ /* * feature change : * */ /* * #define MNG_VERSION_TEXT "1.2.0" * */ /* * #define MNG_VERSION_SO 1 eg. libmng.so.1 * */ /* * #define MNG_VERSION_DLL 1 eg. libmng.dll * */ /* * #define MNG_VERSION_MAJOR 1 * */ /* * #define MNG_VERSION_MINOR 2 * */ /* * #define MNG_VERSION_RELEASE 0 * */ /* * * */ /* * major rewrite (still binary compatible) : * */ /* * #define MNG_VERSION_TEXT "2.0.0" * */ /* * #define MNG_VERSION_SO 1 eg. libmng.so.1 * */ /* * #define MNG_VERSION_DLL 1 eg. libmng.dll * */ /* * #define MNG_VERSION_MAJOR 2 * */ /* * #define MNG_VERSION_MINOR 0 * */ /* * #define MNG_VERSION_RELEASE 0 * */ /* * * */ /* * binary incompatible change: * */ /* * #define MNG_VERSION_TEXT "13.0.0" * */ /* * #define MNG_VERSION_SO 2 eg. libmng.so.2 * */ /* * #define MNG_VERSION_DLL 2 eg. libmng2.dll * */ /* * #define MNG_VERSION_MAJOR 13 * */ /* * #define MNG_VERSION_MINOR 0 * */ /* * #define MNG_VERSION_RELEASE 0 * */ /* * * */ /* * note that version_so & version_dll will always remain equal so it * */ /* * doesn't matter which one is called to do version-checking; they are * */ /* * just provided for their target platform * */ /* * * */ /* ************************************************************************** */ #define MNG_VERSION_TEXT "2.0.2" #define MNG_VERSION_BETA MNG_FALSE MNG_EXT mng_pchar MNG_DECL mng_version_text (void); MNG_EXT mng_uint8 MNG_DECL mng_version_so (void); MNG_EXT mng_uint8 MNG_DECL mng_version_dll (void); MNG_EXT mng_uint8 MNG_DECL mng_version_major (void); MNG_EXT mng_uint8 MNG_DECL mng_version_minor (void); MNG_EXT mng_uint8 MNG_DECL mng_version_release (void); MNG_EXT mng_bool MNG_DECL mng_version_beta (void); /* use the following call to check wether the version of libmng your app is using supports the given function; this is useful in apps that dynamically load the library to make sure a certain function will work; the result will be MNG_TRUE if the given function is implemented in this version of the library; Major/Minor/Version indicate the version the function became available; (if these fields are zero the function is not yet implemented!) */ #ifdef MNG_SUPPORT_FUNCQUERY MNG_EXT mng_bool MNG_DECL mng_supports_func (mng_pchar zFunction, mng_uint8* iMajor, mng_uint8* iMinor, mng_uint8* iRelease); #endif /* ************************************************************************** */ /* * * */ /* * MNG/PNG specification level conformance * */ /* * * */ /* ************************************************************************** */ #define MNG_PNG_VERSION "1.2" #define MNG_PNG_VERSION_MAJ 1 #define MNG_PNG_VERSION_MIN 2 #define MNG_MNG_VERSION "1.1" #define MNG_MNG_VERSION_MAJ 1 #define MNG_MNG_VERSION_MIN 1 #define MNG_MNG_DRAFT 99 /* deprecated; only used for nEED "MNG DRAFT nn" */ /* ************************************************************************** */ /* * * */ /* * High-level application functions * */ /* * * */ /* ************************************************************************** */ /* library initialization function */ /* must be the first called before anything can be done at all */ /* initializes internal datastructure(s) */ MNG_EXT mng_handle MNG_DECL mng_initialize (mng_ptr pUserdata, mng_memalloc fMemalloc, mng_memfree fMemfree, mng_traceproc fTraceproc); /* library reset function */ /* can be used to re-initialize the library, so another image can be processed. there's absolutely no harm in calling it, even when it's not really necessary */ MNG_EXT mng_retcode MNG_DECL mng_reset (mng_handle hHandle); /* library cleanup function */ /* must be the last called to clean up internal datastructure(s) */ MNG_EXT mng_retcode MNG_DECL mng_cleanup (mng_handle* hHandle); /* high-level read functions */ /* use mng_read if you simply want to read a Network Graphic */ /* mng_read_resume is used in I/O-read-suspension scenarios, where the "readdata" callback may return FALSE & length=0 indicating its buffer is depleted or too short to supply the required bytes, and the buffer needs to be refilled; libmng will return the errorcode MNG_NEEDMOREDATA telling the app to refill its read-buffer after which it must call mng_read_resume (or mng_display_resume if it also displaying the image simultaneously) */ #ifdef MNG_SUPPORT_READ MNG_EXT mng_retcode MNG_DECL mng_read (mng_handle hHandle); MNG_EXT mng_retcode MNG_DECL mng_read_resume (mng_handle hHandle); #endif /* high-level "data push" functions */ /* these functions can be used in situations where data is streaming into the application and needs to be buffered by libmng before it is actually requested by libmng itself. the pushing complements the normal reading mechanism, but applications can decide to always return "0 bytes read" to make libmng go into suspension mode with the returncode MNG_NEEDMOREDATA */ /* mng_read_pushdata can be used to push blobs of data of arbitrary size; mng_read_pushsig and mng_read_pushchunk can be used if the application has already done some low-level decoding (eg. at the chunk level) */ /* the data being pushed into libmng with mng_read_pushdata *must* contain the regular 4-byte chunklength, but *must not* contain it with mng_read_pushchunk!!! */ /* mng_read_pushsig is used to prevent libmng from trying to parse the regular PNG/JNG/MNG signature bytes; the application must have done this itself and *must* indicate the proper type in the function call or things will go amiss!! also you *must* call this first, so pretty much right after mng_initialize and certainly before any call to mng_read or mng_readdisplay !!!! */ /* IMPORTANT!!! data can only be safely pushed when libmng is in a "wait" state; eg. during MNG_NEEDTIMERWAIT, MNG_NEEDSECTIONWAIT or MNG_NEEDMOREDATA !!! this just means you can't have one thread displaying and another thread pushing data !!! */ /* if bOwnership = MNG_TRUE, libmng will retain the supplied pointer and *will* expect the buffer to remain available until libmng is finished with it; what happens then depends on whether or not you have set the releasedata() callback; if this is set than the supplied buffer will be returned through this callback and your application can take care of cleaning it up, otherwise libmng will use its internal freeing mechanism (which, depending on compile-options, will be the standard C free() call, or the memfree() callback */ /* if bOwnership = MNG_FALSE, libmng will just copy the data into its own buffers and dispose of it in the normal way */ #ifdef MNG_SUPPORT_READ MNG_EXT mng_retcode MNG_DECL mng_read_pushdata (mng_handle hHandle, mng_ptr pData, mng_size_t iLength, mng_bool bTakeownership); MNG_EXT mng_retcode MNG_DECL mng_read_pushsig (mng_handle hHandle, mng_imgtype eSigtype); MNG_EXT mng_retcode MNG_DECL mng_read_pushchunk (mng_handle hHandle, mng_ptr pChunk, mng_size_t iLength, mng_bool bTakeownership); #endif /* high-level write & create functions */ /* use this if you want to write a previously read Network Graphic or if you want to create a new graphic and write it */ /* to write a previously read graphic you must have defined MNG_STORE_CHUNKS */ /* to create a new graphic you'll also need access to the chunks (eg. #define MNG_ACCESS_CHUNKS !) */ #ifdef MNG_SUPPORT_WRITE MNG_EXT mng_retcode MNG_DECL mng_write (mng_handle hHandle); MNG_EXT mng_retcode MNG_DECL mng_create (mng_handle hHandle); #endif /* high-level display functions */ /* use these to display a previously read or created graphic or to read & display a graphic simultaneously */ /* mng_display_resume should be called after a timer-interval expires that was set through the settimer-callback, after a read suspension-break, or, to resume an animation after a call to mng_display_freeze/mng_display_reset */ /* mng_display_freeze thru mng_display_gotime can be used to influence the display of an image, BUT ONLY if it has been completely read! */ #ifdef MNG_SUPPORT_DISPLAY #ifdef MNG_SUPPORT_READ MNG_EXT mng_retcode MNG_DECL mng_readdisplay (mng_handle hHandle); #endif MNG_EXT mng_retcode MNG_DECL mng_display (mng_handle hHandle); MNG_EXT mng_retcode MNG_DECL mng_display_resume (mng_handle hHandle); MNG_EXT mng_retcode MNG_DECL mng_display_freeze (mng_handle hHandle); MNG_EXT mng_retcode MNG_DECL mng_display_reset (mng_handle hHandle); #ifndef MNG_NO_DISPLAY_GO_SUPPORTED MNG_EXT mng_retcode MNG_DECL mng_display_goframe (mng_handle hHandle, mng_uint32 iFramenr); MNG_EXT mng_retcode MNG_DECL mng_display_golayer (mng_handle hHandle, mng_uint32 iLayernr); MNG_EXT mng_retcode MNG_DECL mng_display_gotime (mng_handle hHandle, mng_uint32 iPlaytime); #endif #endif /* MNG_SUPPORT_DISPLAY */ /* event processing function */ /* this needs to be called by the app when dynamic MNG is enabled and a specific event occurs in the user-interface */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_SUPPORT_DYNAMICMNG) MNG_EXT mng_retcode MNG_DECL mng_trapevent (mng_handle hHandle, mng_uint8 iEventtype, mng_int32 iX, mng_int32 iY); #endif /* error reporting function */ /* use this if you need more detailed info on the last error */ /* iExtra1 & iExtra2 may contain errorcodes from zlib, jpeg, etc... */ /* zErrortext will only be filled if you #define MNG_ERROR_TELLTALE */ MNG_EXT mng_retcode MNG_DECL mng_getlasterror (mng_handle hHandle, mng_int8* iSeverity, mng_chunkid* iChunkname, mng_uint32* iChunkseq, mng_int32* iExtra1, mng_int32* iExtra2, mng_pchar* zErrortext); /* ************************************************************************** */ /* * * */ /* * Callback set functions * */ /* * * */ /* ************************************************************************** */ /* memory callbacks */ /* called to allocate and release internal datastructures */ #ifndef MNG_INTERNAL_MEMMNGMT MNG_EXT mng_retcode MNG_DECL mng_setcb_memalloc (mng_handle hHandle, mng_memalloc fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_memfree (mng_handle hHandle, mng_memfree fProc); #endif /* MNG_INTERNAL_MEMMNGMT */ /* open- & close-stream callbacks */ /* called to open & close streams for input or output */ #if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) #ifndef MNG_NO_OPEN_CLOSE_STREAM MNG_EXT mng_retcode MNG_DECL mng_setcb_openstream (mng_handle hHandle, mng_openstream fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_closestream (mng_handle hHandle, mng_closestream fProc); #endif #endif /* read callback */ /* called to get data from the inputstream */ #ifdef MNG_SUPPORT_READ MNG_EXT mng_retcode MNG_DECL mng_setcb_readdata (mng_handle hHandle, mng_readdata fProc); #endif /* write callback */ /* called to put data into the outputstream */ #ifdef MNG_SUPPORT_WRITE MNG_EXT mng_retcode MNG_DECL mng_setcb_writedata (mng_handle hHandle, mng_writedata fProc); #endif /* error callback */ /* called when an error occurs */ /* the application can determine if the error is recoverable, and may inform the library by setting specific returncodes */ MNG_EXT mng_retcode MNG_DECL mng_setcb_errorproc (mng_handle hHandle, mng_errorproc fProc); /* trace callback */ /* called to show the currently executing function */ #ifdef MNG_SUPPORT_TRACE MNG_EXT mng_retcode MNG_DECL mng_setcb_traceproc (mng_handle hHandle, mng_traceproc fProc); #endif /* callbacks for read processing */ /* processheader is called when all header information has been gathered from the inputstream */ /* processtext is called for every tEXt, zTXt and iTXt chunk in the inputstream (iType=0 for tEXt, 1 for zTXt and 2 for iTXt); you can call get_imagelevel to check at what nesting-level the chunk is encountered (eg. tEXt inside an embedded image inside a MNG -> level == 2; in most other case -> level == 1) */ /* processsave & processseek are called for SAVE/SEEK chunks */ /* processneed is called for the nEED chunk; you should specify a callback for this as the default behavior will be to abort processing, unless the requirement is one of: - a supported chunk - the text "draft nn" where nn is a numeric value - the text "MNG-1.0" or "MNG-1.1" - the text "CACHEOFF" */ /* processmend is called at the very end of the animation-stream; note that this may not be the end of the animation though! */ /* processterm is called when a TERM chunk is encountered; there can be only 1 in the stream (or none) */ /* processunknown is called after reading each non-critical unknown chunk */ #ifdef MNG_SUPPORT_READ MNG_EXT mng_retcode MNG_DECL mng_setcb_processheader (mng_handle hHandle, mng_processheader fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_processtext (mng_handle hHandle, mng_processtext fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_processsave (mng_handle hHandle, mng_processsave fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_processseek (mng_handle hHandle, mng_processseek fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_processneed (mng_handle hHandle, mng_processneed fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_processmend (mng_handle hHandle, mng_processmend fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_processterm (mng_handle hHandle, mng_processterm fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_processunknown(mng_handle hHandle, mng_processunknown fProc); #endif /* callbacks for display processing */ /* getcanvasline is called to get an access-pointer to a line on the drawing-canvas */ /* getbkgdline is called to get an access-pointer to a line from the background-canvas */ /* refresh is called to inform the GUI to redraw the current canvas onto its output device (eg. in Win32 this would mean sending an invalidate message for the specified region */ /* NOTE that the update-region is specified as x,y,width,height; eg. the invalidate message for Windows requires left,top,right,bottom parameters where the bottom-right is exclusive of the region!! to get these correctly is as simple as: left = x; top = y; right = x + width; bottom = y + height; if your implementation requires inclusive points, simply subtract 1 from both the right & bottom values calculated above. */ #ifdef MNG_SUPPORT_DISPLAY MNG_EXT mng_retcode MNG_DECL mng_setcb_getcanvasline (mng_handle hHandle, mng_getcanvasline fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_getbkgdline (mng_handle hHandle, mng_getbkgdline fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_getalphaline (mng_handle hHandle, mng_getalphaline fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_refresh (mng_handle hHandle, mng_refresh fProc); /* timing callbacks */ /* gettickcount is called to get the system tickcount (milliseconds); this is used to determine the remaining interval between frames */ /* settimer is called to inform the application that it should set a timer; when the timer is triggered the app must call mng_display_resume */ MNG_EXT mng_retcode MNG_DECL mng_setcb_gettickcount (mng_handle hHandle, mng_gettickcount fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_settimer (mng_handle hHandle, mng_settimer fProc); /* color management callbacks */ /* called to transmit color management information to the application */ /* these are only used when you #define MNG_APP_CMS */ #ifdef MNG_APP_CMS MNG_EXT mng_retcode MNG_DECL mng_setcb_processgamma (mng_handle hHandle, mng_processgamma fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_processchroma (mng_handle hHandle, mng_processchroma fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_processsrgb (mng_handle hHandle, mng_processsrgb fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_processiccp (mng_handle hHandle, mng_processiccp fProc); MNG_EXT mng_retcode MNG_DECL mng_setcb_processarow (mng_handle hHandle, mng_processarow fProc); #endif /* MNG_APP_CMS */ #endif /* MNG_SUPPORT_DISPLAY */ /* release push data callback */ /* used when the app pushes data into libmng (as opposed to libmng pulling it) and relinquishes ownership of the pushed data-buffer, but *does* want to release (free) the buffer itself once libmng has finished processing it */ #ifdef MNG_SUPPORT_READ MNG_EXT mng_retcode MNG_DECL mng_setcb_releasedata (mng_handle hHandle, mng_releasedata fProc); #endif /* ************************************************************************** */ /* * * */ /* * Callback get functions * */ /* * * */ /* ************************************************************************** */ /* see _setcb_ */ #ifndef MNG_INTERNAL_MEMMNGMT MNG_EXT mng_memalloc MNG_DECL mng_getcb_memalloc (mng_handle hHandle); MNG_EXT mng_memfree MNG_DECL mng_getcb_memfree (mng_handle hHandle); #endif /* see _setcb_ */ #ifdef MNG_SUPPORT_READ MNG_EXT mng_releasedata MNG_DECL mng_getcb_releasedata (mng_handle hHandle); #endif /* see _setcb_ */ #if defined(MNG_SUPPORT_READ) || defined(MNG_WRITE_SUPPORT) #ifndef MNG_NO_OPEN_CLOSE_STREAM MNG_EXT mng_openstream MNG_DECL mng_getcb_openstream (mng_handle hHandle); MNG_EXT mng_closestream MNG_DECL mng_getcb_closestream (mng_handle hHandle); #endif #endif /* see _setcb_ */ #ifdef MNG_SUPPORT_READ MNG_EXT mng_readdata MNG_DECL mng_getcb_readdata (mng_handle hHandle); #endif /* see _setcb_ */ #ifdef MNG_SUPPORT_WRITE MNG_EXT mng_writedata MNG_DECL mng_getcb_writedata (mng_handle hHandle); #endif /* see _setcb_ */ MNG_EXT mng_errorproc MNG_DECL mng_getcb_errorproc (mng_handle hHandle); /* see _setcb_ */ #ifdef MNG_SUPPORT_TRACE MNG_EXT mng_traceproc MNG_DECL mng_getcb_traceproc (mng_handle hHandle); #endif /* see _setcb_ */ #ifdef MNG_SUPPORT_READ MNG_EXT mng_processheader MNG_DECL mng_getcb_processheader (mng_handle hHandle); MNG_EXT mng_processtext MNG_DECL mng_getcb_processtext (mng_handle hHandle); MNG_EXT mng_processsave MNG_DECL mng_getcb_processsave (mng_handle hHandle); MNG_EXT mng_processseek MNG_DECL mng_getcb_processseek (mng_handle hHandle); MNG_EXT mng_processneed MNG_DECL mng_getcb_processneed (mng_handle hHandle); MNG_EXT mng_processunknown MNG_DECL mng_getcb_processunknown (mng_handle hHandle); MNG_EXT mng_processterm MNG_DECL mng_getcb_processterm (mng_handle hHandle); #endif /* see _setcb_ */ #ifdef MNG_SUPPORT_DISPLAY MNG_EXT mng_getcanvasline MNG_DECL mng_getcb_getcanvasline (mng_handle hHandle); MNG_EXT mng_getbkgdline MNG_DECL mng_getcb_getbkgdline (mng_handle hHandle); MNG_EXT mng_getalphaline MNG_DECL mng_getcb_getalphaline (mng_handle hHandle); MNG_EXT mng_refresh MNG_DECL mng_getcb_refresh (mng_handle hHandle); /* see _setcb_ */ MNG_EXT mng_gettickcount MNG_DECL mng_getcb_gettickcount (mng_handle hHandle); MNG_EXT mng_settimer MNG_DECL mng_getcb_settimer (mng_handle hHandle); /* see _setcb_ */ #ifdef MNG_APP_CMS MNG_EXT mng_processgamma MNG_DECL mng_getcb_processgamma (mng_handle hHandle); MNG_EXT mng_processchroma MNG_DECL mng_getcb_processchroma (mng_handle hHandle); MNG_EXT mng_processsrgb MNG_DECL mng_getcb_processsrgb (mng_handle hHandle); MNG_EXT mng_processiccp MNG_DECL mng_getcb_processiccp (mng_handle hHandle); MNG_EXT mng_processarow MNG_DECL mng_getcb_processarow (mng_handle hHandle); #endif /* MNG_APP_CMS */ #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ /* * * */ /* * Property set functions * */ /* * * */ /* ************************************************************************** */ /* Application data pointer */ /* provided for application use; not used by the library */ MNG_EXT mng_retcode MNG_DECL mng_set_userdata (mng_handle hHandle, mng_ptr pUserdata); /* The style of the drawing- & background-canvas */ /* only used for displaying images */ /* both are initially set to 24-bit RGB (eg. 8-bit per channel) */ MNG_EXT mng_retcode MNG_DECL mng_set_canvasstyle (mng_handle hHandle, mng_uint32 iStyle); MNG_EXT mng_retcode MNG_DECL mng_set_bkgdstyle (mng_handle hHandle, mng_uint32 iStyle); /* The default background color */ /* only used if the getbkgdline callback is not defined */ /* for initially painting the canvas and restoring (part of) the background */ MNG_EXT mng_retcode MNG_DECL mng_set_bgcolor (mng_handle hHandle, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue); /* Indicates preferred use of the bKGD chunk for PNG images */ MNG_EXT mng_retcode MNG_DECL mng_set_usebkgd (mng_handle hHandle, mng_bool bUseBKGD); /* Indicates storage of read chunks */ /* only useful if you #define mng_store_chunks */ /* can be used to dynamically change storage management */ MNG_EXT mng_retcode MNG_DECL mng_set_storechunks (mng_handle hHandle, mng_bool bStorechunks); /* Indicates breaks requested when processing SAVE/SEEK */ /* set this to let the app handle section breaks; the library will return MNG_NEEDSECTIONWAIT return-codes for each SEEK chunk */ MNG_EXT mng_retcode MNG_DECL mng_set_sectionbreaks (mng_handle hHandle, mng_bool bSectionbreaks); /* Indicates storage of playback info (ON by default!) */ /* can be used to turn off caching of playback info; this is useful to specifically optimize MNG-video playback; note that if caching is turned off LOOP chunks will be flagged as errors! TERM chunks will be ignored and only passed to the processterm() callback if it is defined by the app; also, this feature can only be used with mng_readdisplay(); mng_read(), mng_display_reset() and mng_display_goxxxx() will return an error; once this option is turned off it can't be turned on for the same stream!!! */ MNG_EXT mng_retcode MNG_DECL mng_set_cacheplayback (mng_handle hHandle, mng_bool bCacheplayback); /* Indicates automatic progressive refreshes for large images (ON by default!) */ /* turn this off if you do not want intermittent painting while a large image is being read. useful if the input-stream comes from a fast medium, such as a local harddisk */ MNG_EXT mng_retcode MNG_DECL mng_set_doprogressive (mng_handle hHandle, mng_bool bDoProgressive); /* Indicates existence and required checking of the CRC in input streams, and generation in output streams */ /* !!!! Use this ONLY if you know what you are doing !!!! */ /* The value is a combination of the following flags: 0x0000001 = CRC is present in the input stream 0x0000002 = CRC must be generated in the output stream 0x0000010 = CRC should be checked for ancillary chunks 0x0000020 = a faulty CRC for ancillary chunks generates a warning only 0x0000040 = a faulty CRC for ancillary chunks generates an error 0x0000100 = CRC should be checked for critical chunks 0x0000200 = a faulty CRC for critical chunks generates a warning only 0x0000400 = a faulty CRC for critical chunks generates an error The default is 0x00000533 = CRC present in input streams; should be checked; warning for ancillary chunks; error for critical chunks; generate CRC for output streams Note that some combinations are meaningless; eg. if the CRC is not present it won't do any good to turn the checking flags on; if a checking flag is off, it doesn't do any good to ask for generation of warnings or errors. Also libmng will generate either an error or a warning, not both, so if you specify both the default will be to generate an error! The only useful combinations for input are 331, 551, 351, 531, 0, 301, 501 and optionally 031 and 051, but only checking ancillary chunks and not critical chunks is generally not a very good idea!!! If you've also writing these values should be combined with 0x02 if CRC's are required in the output stream */ MNG_EXT mng_retcode MNG_DECL mng_set_crcmode (mng_handle hHandle, mng_uint32 iCrcmode); /* Color-management necessaries */ /* ************************************************************************* !!!!!!!! THIS NEXT BIT IS IMPORTANT !!!!!!!!! ************************************************************************* If you have defined MNG_FULL_CMS (and are using lcms), you will have to think hard about the following routines. lcms requires 2 profiles to work off the differences in the input-image and the output-device. The ICC profile for the input-image will be embedded within it to reflect its color-characteristics, but the output profile depends on the output-device, which is something only *YOU* know about. sRGB (standard RGB) is common for x86 compatible environments (eg. Windows, Linux and some others) If you are compiling for a sRGB compliant system you probably won't have to do anything special. (unless you want to of course) If you are compiling for a non-sRGB compliant system (eg. SGI, Mac, Next, others...) you *MUST* define a proper ICC profile for the generic output-device associated with that platform. In either event, you may also want to offer an option to your users to set the profile manually, or, if you know how, set it from a system-defined default. TO RECAP: for sRGB systems (Windows, Linux) no action required! for non-sRGB systems (SGI, Mac, Next) ACTION REQUIRED! Please visit http://www.srgb.com, http://www.color.org and http://www.littlecms.com for more info. ************************************************************************* !!!!!!!! THE BIT ABOVE IS IMPORTANT !!!!!!!!! ************************************************************************* */ /* mng_set_srgb tells libmng if it's running on a sRGB compliant system or not the default is already set to MNG_TRUE */ /* mng_set_outputprofile, mng_set_outputprofile2, mng_set_outputsrgb are used to set the default profile describing the output-device by default it is already initialized with an sRGB profile */ /* mng_set_srgbprofile, mng_set_srgbprofile2, mng_set_srgbimplicit are used to set the default profile describing a standard sRGB device this is used when the input-image is tagged only as being sRGB, but the output-device is defined as not being sRGB compliant by default it is already initialized with a standard sRGB profile */ #if defined(MNG_SUPPORT_DISPLAY) MNG_EXT mng_retcode MNG_DECL mng_set_srgb (mng_handle hHandle, mng_bool bIssRGB); MNG_EXT mng_retcode MNG_DECL mng_set_outputprofile (mng_handle hHandle, mng_pchar zFilename); MNG_EXT mng_retcode MNG_DECL mng_set_outputprofile2 (mng_handle hHandle, mng_uint32 iProfilesize, mng_ptr pProfile); MNG_EXT mng_retcode MNG_DECL mng_set_outputsrgb (mng_handle hHandle); MNG_EXT mng_retcode MNG_DECL mng_set_srgbprofile (mng_handle hHandle, mng_pchar zFilename); MNG_EXT mng_retcode MNG_DECL mng_set_srgbprofile2 (mng_handle hHandle, mng_uint32 iProfilesize, mng_ptr pProfile); MNG_EXT mng_retcode MNG_DECL mng_set_srgbimplicit (mng_handle hHandle); #endif #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) /* Gamma settings */ /* ... blabla (explain gamma processing a little; eg. formula & stuff) ... */ MNG_EXT mng_retcode MNG_DECL mng_set_viewgamma (mng_handle hHandle, mng_float dGamma); MNG_EXT mng_retcode MNG_DECL mng_set_displaygamma (mng_handle hHandle, mng_float dGamma); MNG_EXT mng_retcode MNG_DECL mng_set_dfltimggamma (mng_handle hHandle, mng_float dGamma); MNG_EXT mng_retcode MNG_DECL mng_set_viewgammaint (mng_handle hHandle, mng_uint32 iGamma); MNG_EXT mng_retcode MNG_DECL mng_set_displaygammaint (mng_handle hHandle, mng_uint32 iGamma); MNG_EXT mng_retcode MNG_DECL mng_set_dfltimggammaint (mng_handle hHandle, mng_uint32 iGamma); #endif #ifndef MNG_SKIP_MAXCANVAS /* Ultimate clipping size */ /* used to limit extreme graphics from overloading the system */ /* if a graphic exceeds these limits a warning is issued, which can be ignored by the app (using the errorproc callback). in that case the library will use these settings to clip the input graphic, and the app's canvas must account for this */ MNG_EXT mng_retcode MNG_DECL mng_set_maxcanvaswidth (mng_handle hHandle, mng_uint32 iMaxwidth); MNG_EXT mng_retcode MNG_DECL mng_set_maxcanvasheight (mng_handle hHandle, mng_uint32 iMaxheight); MNG_EXT mng_retcode MNG_DECL mng_set_maxcanvassize (mng_handle hHandle, mng_uint32 iMaxwidth, mng_uint32 iMaxheight); #endif /* ZLIB default compression parameters */ /* these are used when writing out chunks */ /* they are also used when compressing PNG image-data or JNG alpha-data; in this case you can set them just before calling mng_putimgdata_ihdr */ /* set to your liking; usually the defaults will suffice though! */ /* check the documentation for ZLIB for details on these parameters */ #ifdef MNG_INCLUDE_ZLIB MNG_EXT mng_retcode MNG_DECL mng_set_zlib_level (mng_handle hHandle, mng_int32 iZlevel); MNG_EXT mng_retcode MNG_DECL mng_set_zlib_method (mng_handle hHandle, mng_int32 iZmethod); MNG_EXT mng_retcode MNG_DECL mng_set_zlib_windowbits (mng_handle hHandle, mng_int32 iZwindowbits); MNG_EXT mng_retcode MNG_DECL mng_set_zlib_memlevel (mng_handle hHandle, mng_int32 iZmemlevel); MNG_EXT mng_retcode MNG_DECL mng_set_zlib_strategy (mng_handle hHandle, mng_int32 iZstrategy); MNG_EXT mng_retcode MNG_DECL mng_set_zlib_maxidat (mng_handle hHandle, mng_uint32 iMaxIDAT); #endif /* MNG_INCLUDE_ZLIB */ /* JNG default compression parameters (based on IJG code) */ /* these are used when compressing JNG image-data; so you can set them just before calling mng_putimgdata_jhdr */ /* set to your liking; usually the defaults will suffice though! */ /* check the documentation for IJGSRC6B for details on these parameters */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_INCLUDE_IJG6B MNG_EXT mng_retcode MNG_DECL mng_set_jpeg_dctmethod (mng_handle hHandle, mngjpeg_dctmethod eJPEGdctmethod); #endif MNG_EXT mng_retcode MNG_DECL mng_set_jpeg_quality (mng_handle hHandle, mng_int32 iJPEGquality); MNG_EXT mng_retcode MNG_DECL mng_set_jpeg_smoothing (mng_handle hHandle, mng_int32 iJPEGsmoothing); MNG_EXT mng_retcode MNG_DECL mng_set_jpeg_progressive(mng_handle hHandle, mng_bool bJPEGprogressive); MNG_EXT mng_retcode MNG_DECL mng_set_jpeg_optimized (mng_handle hHandle, mng_bool bJPEGoptimized); MNG_EXT mng_retcode MNG_DECL mng_set_jpeg_maxjdat (mng_handle hHandle, mng_uint32 iMaxJDAT); #endif /* MNG_INCLUDE_JNG */ /* Suspension-mode setting */ /* use this to activate the internal suspension-buffer to improve read-suspension processing */ /* TODO: write-suspension ??? */ #if defined(MNG_SUPPORT_READ) MNG_EXT mng_retcode MNG_DECL mng_set_suspensionmode (mng_handle hHandle, mng_bool bSuspensionmode); #endif /* Speed setting */ /* use this to influence the display-speed of animations */ #if defined(MNG_SUPPORT_DISPLAY) MNG_EXT mng_retcode MNG_DECL mng_set_speed (mng_handle hHandle, mng_speedtype iSpeed); #endif /* ************************************************************************** */ /* * * */ /* * Property get functions * */ /* * * */ /* ************************************************************************** */ /* see _set_ */ MNG_EXT mng_ptr MNG_DECL mng_get_userdata (mng_handle hHandle); /* Network Graphic header details */ /* these get filled once the graphics header is processed, so they are available in the processheader callback; before that they are zeroed out and imagetype is set to it_unknown */ /* this might be a good point for the app to initialize the drawing-canvas! */ /* note that some fields are only set for the first(!) header-chunk: MNG/MHDR (imagetype = mng_it_mng) - ticks thru simplicity PNG/IHDR (imagetype = mng_it_png) - bitdepth thru interlace JNG/JHDR (imagetype = mng_it_jng) - bitdepth thru compression & interlace thru alphainterlace */ MNG_EXT mng_imgtype MNG_DECL mng_get_sigtype (mng_handle hHandle); MNG_EXT mng_imgtype MNG_DECL mng_get_imagetype (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_imagewidth (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_imageheight (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_ticks (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_framecount (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_layercount (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_playtime (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_simplicity (mng_handle hHandle); MNG_EXT mng_uint8 MNG_DECL mng_get_bitdepth (mng_handle hHandle); MNG_EXT mng_uint8 MNG_DECL mng_get_colortype (mng_handle hHandle); MNG_EXT mng_uint8 MNG_DECL mng_get_compression (mng_handle hHandle); MNG_EXT mng_uint8 MNG_DECL mng_get_filter (mng_handle hHandle); MNG_EXT mng_uint8 MNG_DECL mng_get_interlace (mng_handle hHandle); MNG_EXT mng_uint8 MNG_DECL mng_get_alphabitdepth (mng_handle hHandle); MNG_EXT mng_uint8 MNG_DECL mng_get_alphacompression(mng_handle hHandle); MNG_EXT mng_uint8 MNG_DECL mng_get_alphafilter (mng_handle hHandle); MNG_EXT mng_uint8 MNG_DECL mng_get_alphainterlace (mng_handle hHandle); /* indicates the predicted alpha-depth required to properly display the image */ /* gets set once the graphics header is processed and is available in the processheader callback for any type of input-image (PNG, JNG or MNG) */ /* possible values are 0,1,2,4,8,16 0 = no transparency required 1 = on/off transparency required (alpha-values are 0 or 2^bit_depth-1) 2+ = semi-transparency required (values will be scaled to the bitdepth of the canvasstyle supplied by the application) */ MNG_EXT mng_uint8 MNG_DECL mng_get_alphadepth (mng_handle hHandle); /* defines whether a refresh() callback is called for an interlace pass (PNG) or progressive scan (JNG) */ /* returns the interlace pass number for PNG or a fabricated pass number for JNG; returns 0 in all other cases */ /* only useful if the image_type = mng_it_png or mng_it_jng and if the image is actually interlaced (PNG) or progressive (JNG) */ #ifdef MNG_SUPPORT_DISPLAY MNG_EXT mng_uint8 MNG_DECL mng_get_refreshpass (mng_handle hHandle); #endif /* see _set_ */ MNG_EXT mng_uint32 MNG_DECL mng_get_canvasstyle (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_bkgdstyle (mng_handle hHandle); /* see _set_ */ MNG_EXT mng_retcode MNG_DECL mng_get_bgcolor (mng_handle hHandle, mng_uint16* iRed, mng_uint16* iGreen, mng_uint16* iBlue); /* see _set_ */ MNG_EXT mng_bool MNG_DECL mng_get_usebkgd (mng_handle hHandle); /* see _set_ */ MNG_EXT mng_bool MNG_DECL mng_get_storechunks (mng_handle hHandle); /* see _set_ */ MNG_EXT mng_bool MNG_DECL mng_get_sectionbreaks (mng_handle hHandle); /* see _set_ */ MNG_EXT mng_bool MNG_DECL mng_get_cacheplayback (mng_handle hHandle); /* see _set_ */ MNG_EXT mng_bool MNG_DECL mng_get_doprogressive (mng_handle hHandle); /* see _set_ */ MNG_EXT mng_uint32 MNG_DECL mng_get_crcmode (mng_handle hHandle); /* see _set_ */ #if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_FULL_CMS) MNG_EXT mng_bool MNG_DECL mng_get_srgb (mng_handle hHandle); #endif /* see _set_ */ MNG_EXT mng_float MNG_DECL mng_get_viewgamma (mng_handle hHandle); MNG_EXT mng_float MNG_DECL mng_get_displaygamma (mng_handle hHandle); MNG_EXT mng_float MNG_DECL mng_get_dfltimggamma (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_viewgammaint (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_displaygammaint (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_dfltimggammaint (mng_handle hHandle); #ifndef MNG_SKIP_MAXCANVAS /* see _set_ */ MNG_EXT mng_uint32 MNG_DECL mng_get_maxcanvaswidth (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_maxcanvasheight (mng_handle hHandle); #endif /* see _set_ */ #ifdef MNG_INCLUDE_ZLIB MNG_EXT mng_int32 MNG_DECL mng_get_zlib_level (mng_handle hHandle); MNG_EXT mng_int32 MNG_DECL mng_get_zlib_method (mng_handle hHandle); MNG_EXT mng_int32 MNG_DECL mng_get_zlib_windowbits (mng_handle hHandle); MNG_EXT mng_int32 MNG_DECL mng_get_zlib_memlevel (mng_handle hHandle); MNG_EXT mng_int32 MNG_DECL mng_get_zlib_strategy (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_zlib_maxidat (mng_handle hHandle); #endif /* MNG_INCLUDE_ZLIB */ /* see _set_ */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_INCLUDE_IJG6B MNG_EXT mngjpeg_dctmethod MNG_DECL mng_get_jpeg_dctmethod (mng_handle hHandle); #endif MNG_EXT mng_int32 MNG_DECL mng_get_jpeg_quality (mng_handle hHandle); MNG_EXT mng_int32 MNG_DECL mng_get_jpeg_smoothing (mng_handle hHandle); MNG_EXT mng_bool MNG_DECL mng_get_jpeg_progressive(mng_handle hHandle); MNG_EXT mng_bool MNG_DECL mng_get_jpeg_optimized (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_jpeg_maxjdat (mng_handle hHandle); #endif /* MNG_INCLUDE_JNG */ /* see _set_ */ #if defined(MNG_SUPPORT_READ) MNG_EXT mng_bool MNG_DECL mng_get_suspensionmode (mng_handle hHandle); #endif /* see _set_ */ #if defined(MNG_SUPPORT_DISPLAY) MNG_EXT mng_speedtype MNG_DECL mng_get_speed (mng_handle hHandle); #endif /* Image-level */ /* this can be used inside the processtext callback to determine the level of text of the image being processed; the value 1 is returned for top-level texts, and the value 2 for a text inside an embedded image inside a MNG */ MNG_EXT mng_uint32 MNG_DECL mng_get_imagelevel (mng_handle hHandle); /* BACK info */ /* can be used to retrieve the color & mandatory values for the last processed BACK chunk of a MNG (will fail for other image-types); if no BACK chunk was processed yet, it will return all zeroes */ #ifdef MNG_SUPPORT_DISPLAY MNG_EXT mng_retcode MNG_DECL mng_get_lastbackchunk (mng_handle hHandle, mng_uint16* iRed, mng_uint16* iGreen, mng_uint16* iBlue, mng_uint8* iMandatory); #endif /* SEEK info */ /* can be used to retrieve the segmentname of the last processed SEEK chunk; if no SEEK chunk was processed or its segmentname was empty, the function will return an empty string; the provided buffer must be at least 80 bytes!! */ #ifdef MNG_SUPPORT_DISPLAY MNG_EXT mng_retcode MNG_DECL mng_get_lastseekname (mng_handle hHandle, mng_pchar zSegmentname); #endif /* FRAM info */ /* can be used to retrieve the current FRAM delay; this may be useful when retrieving a stream of frames with their corresponding delays by "fake" reading and displaying the file */ #ifdef MNG_SUPPORT_DISPLAY MNG_EXT mng_uint32 MNG_DECL mng_get_currframdelay (mng_handle hHandle); #endif /* Display status variables */ /* these get filled & updated during display processing */ /* starttime is the tickcount at the start of displaying the animation */ /* runtime is the actual number of millisecs since the start of the animation */ /* currentframe, currentlayer & currentplaytime indicate the current frame/layer/playtime(msecs) in the animation (these keep increasing; even after the animation loops back to the TERM chunk) */ /* totalframes, totallayers & totalplaytime are filled after a complete run of an animation (eg. at MEND); they are also valid after just reading the MNG */ #ifdef MNG_SUPPORT_DISPLAY MNG_EXT mng_uint32 MNG_DECL mng_get_starttime (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_runtime (mng_handle hHandle); #ifndef MNG_NO_CURRENT_INFO MNG_EXT mng_uint32 MNG_DECL mng_get_currentframe (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_currentlayer (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_currentplaytime (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_totalframes (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_totallayers (mng_handle hHandle); MNG_EXT mng_uint32 MNG_DECL mng_get_totalplaytime (mng_handle hHandle); #endif #endif /* Status variables */ /* these indicate the internal state of the library */ /* most indicate exactly what you would expect - status_error: true if the last function call returned an errorcode status_reading: true if the library is (still) reading an image status_suspendbreak: true if the library has suspended for "I/O" status_creating: true if the library is in the middle of creating an image status_writing: true if the library is in the middle of writing an image status_displaying: true if the library is displaying an image status_running: true if display processing is active (eg. not frozen or reset) status_timerbreak: true if the library has suspended for a "timer-break" status_dynamic: true if the library encountered an evNT chunk in the MNG status_runningevent: true if the library is processing an external event */ /* eg. mng_readdisplay() will turn the reading, displaying and running status on; when EOF is reached the reading status will be turned off */ MNG_EXT mng_bool MNG_DECL mng_status_error (mng_handle hHandle); #ifdef MNG_SUPPORT_READ MNG_EXT mng_bool MNG_DECL mng_status_reading (mng_handle hHandle); MNG_EXT mng_bool MNG_DECL mng_status_suspendbreak (mng_handle hHandle); #endif #ifdef MNG_SUPPORT_WRITE MNG_EXT mng_bool MNG_DECL mng_status_creating (mng_handle hHandle); MNG_EXT mng_bool MNG_DECL mng_status_writing (mng_handle hHandle); #endif #ifdef MNG_SUPPORT_DISPLAY MNG_EXT mng_bool MNG_DECL mng_status_displaying (mng_handle hHandle); MNG_EXT mng_bool MNG_DECL mng_status_running (mng_handle hHandle); MNG_EXT mng_bool MNG_DECL mng_status_timerbreak (mng_handle hHandle); #endif #ifdef MNG_SUPPORT_DYNAMICMNG MNG_EXT mng_bool MNG_DECL mng_status_dynamic (mng_handle hHandle); MNG_EXT mng_bool MNG_DECL mng_status_runningevent (mng_handle hHandle); #endif /* ************************************************************************** */ /* * * */ /* * Chunk access functions * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_ACCESS_CHUNKS /* ************************************************************************** */ /* use this to iterate the stored chunks */ /* requires MNG_ACCESS_CHUNKS & MNG_STORE_CHUNKS */ /* starts from the supplied chunk-index-nr; the first chunk has index 0!! */ MNG_EXT mng_retcode MNG_DECL mng_iterate_chunks (mng_handle hHandle, mng_uint32 iChunkseq, mng_iteratechunk fProc); /* use the next function inside your 'iteratechunk' callback to copy the given chunk to a new mng you are creating */ /* the 'out' handle should be in 'create' status! */ #ifdef MNG_SUPPORT_WRITE MNG_EXT mng_retcode MNG_DECL mng_copy_chunk (mng_handle hHandle, mng_handle hChunk, mng_handle hHandleOut); #endif /* ************************************************************************** */ /* use these to get chunk data from within the callback in iterate_chunks */ MNG_EXT mng_retcode MNG_DECL mng_getchunk_ihdr (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iWidth, mng_uint32 *iHeight, mng_uint8 *iBitdepth, mng_uint8 *iColortype, mng_uint8 *iCompression, mng_uint8 *iFilter, mng_uint8 *iInterlace); MNG_EXT mng_retcode MNG_DECL mng_getchunk_plte (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iCount, mng_palette8 *aPalette); MNG_EXT mng_retcode MNG_DECL mng_getchunk_idat (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iRawlen, mng_ptr *pRawdata); MNG_EXT mng_retcode MNG_DECL mng_getchunk_trns (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_bool *bGlobal, mng_uint8 *iType, mng_uint32 *iCount, mng_uint8arr *aAlphas, mng_uint16 *iGray, mng_uint16 *iRed, mng_uint16 *iGreen, mng_uint16 *iBlue, mng_uint32 *iRawlen, mng_uint8arr *aRawdata); MNG_EXT mng_retcode MNG_DECL mng_getchunk_gama (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iGamma); MNG_EXT mng_retcode MNG_DECL mng_getchunk_chrm (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iWhitepointx, mng_uint32 *iWhitepointy, mng_uint32 *iRedx, mng_uint32 *iRedy, mng_uint32 *iGreenx, mng_uint32 *iGreeny, mng_uint32 *iBluex, mng_uint32 *iBluey); MNG_EXT mng_retcode MNG_DECL mng_getchunk_srgb (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint8 *iRenderingintent); MNG_EXT mng_retcode MNG_DECL mng_getchunk_iccp (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iNamesize, mng_pchar *zName, mng_uint8 *iCompression, mng_uint32 *iProfilesize, mng_ptr *pProfile); MNG_EXT mng_retcode MNG_DECL mng_getchunk_text (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iKeywordsize, mng_pchar *zKeyword, mng_uint32 *iTextsize, mng_pchar *zText); MNG_EXT mng_retcode MNG_DECL mng_getchunk_ztxt (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iKeywordsize, mng_pchar *zKeyword, mng_uint8 *iCompression, mng_uint32 *iTextsize, mng_pchar *zText); MNG_EXT mng_retcode MNG_DECL mng_getchunk_itxt (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iKeywordsize, mng_pchar *zKeyword, mng_uint8 *iCompressionflag, mng_uint8 *iCompressionmethod, mng_uint32 *iLanguagesize, mng_pchar *zLanguage, mng_uint32 *iTranslationsize, mng_pchar *zTranslation, mng_uint32 *iTextsize, mng_pchar *zText); MNG_EXT mng_retcode MNG_DECL mng_getchunk_bkgd (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint8 *iType, mng_uint8 *iIndex, mng_uint16 *iGray, mng_uint16 *iRed, mng_uint16 *iGreen, mng_uint16 *iBlue); MNG_EXT mng_retcode MNG_DECL mng_getchunk_phys (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iSizex, mng_uint32 *iSizey, mng_uint8 *iUnit); MNG_EXT mng_retcode MNG_DECL mng_getchunk_sbit (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint8 *iType, mng_uint8arr4 *aBits); MNG_EXT mng_retcode MNG_DECL mng_getchunk_splt (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iNamesize, mng_pchar *zName, mng_uint8 *iSampledepth, mng_uint32 *iEntrycount, mng_ptr *pEntries); MNG_EXT mng_retcode MNG_DECL mng_getchunk_hist (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iEntrycount, mng_uint16arr *aEntries); MNG_EXT mng_retcode MNG_DECL mng_getchunk_time (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iYear, mng_uint8 *iMonth, mng_uint8 *iDay, mng_uint8 *iHour, mng_uint8 *iMinute, mng_uint8 *iSecond); MNG_EXT mng_retcode MNG_DECL mng_getchunk_mhdr (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iWidth, mng_uint32 *iHeight, mng_uint32 *iTicks, mng_uint32 *iLayercount, mng_uint32 *iFramecount, mng_uint32 *iPlaytime, mng_uint32 *iSimplicity); MNG_EXT mng_retcode MNG_DECL mng_getchunk_loop (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iLevel, mng_uint32 *iRepeat, mng_uint8 *iTermination, mng_uint32 *iItermin, mng_uint32 *iItermax, mng_uint32 *iCount, mng_uint32p *pSignals); MNG_EXT mng_retcode MNG_DECL mng_getchunk_endl (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iLevel); MNG_EXT mng_retcode MNG_DECL mng_getchunk_defi (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iObjectid, mng_uint8 *iDonotshow, mng_uint8 *iConcrete, mng_bool *bHasloca, mng_int32 *iXlocation, mng_int32 *iYlocation, mng_bool *bHasclip, mng_int32 *iLeftcb, mng_int32 *iRightcb, mng_int32 *iTopcb, mng_int32 *iBottomcb); MNG_EXT mng_retcode MNG_DECL mng_getchunk_basi (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iWidth, mng_uint32 *iHeight, mng_uint8 *iBitdepth, mng_uint8 *iColortype, mng_uint8 *iCompression, mng_uint8 *iFilter, mng_uint8 *iInterlace, mng_uint16 *iRed, mng_uint16 *iGreen, mng_uint16 *iBlue, mng_uint16 *iAlpha, mng_uint8 *iViewable); MNG_EXT mng_retcode MNG_DECL mng_getchunk_clon (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iSourceid, mng_uint16 *iCloneid, mng_uint8 *iClonetype, mng_uint8 *iDonotshow, mng_uint8 *iConcrete, mng_bool *bHasloca, mng_uint8 *iLocationtype, mng_int32 *iLocationx, mng_int32 *iLocationy); #ifndef MNG_SKIPCHUNK_PAST MNG_EXT mng_retcode MNG_DECL mng_getchunk_past (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iDestid, mng_uint8 *iTargettype, mng_int32 *iTargetx, mng_int32 *iTargety, mng_uint32 *iCount); MNG_EXT mng_retcode MNG_DECL mng_getchunk_past_src (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_uint16 *iSourceid, mng_uint8 *iComposition, mng_uint8 *iOrientation, mng_uint8 *iOffsettype, mng_int32 *iOffsetx, mng_int32 *iOffsety, mng_uint8 *iBoundarytype, mng_int32 *iBoundaryl, mng_int32 *iBoundaryr, mng_int32 *iBoundaryt, mng_int32 *iBoundaryb); #endif MNG_EXT mng_retcode MNG_DECL mng_getchunk_disc (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iCount, mng_uint16p *pObjectids); MNG_EXT mng_retcode MNG_DECL mng_getchunk_back (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iRed, mng_uint16 *iGreen, mng_uint16 *iBlue, mng_uint8 *iMandatory, mng_uint16 *iImageid, mng_uint8 *iTile); MNG_EXT mng_retcode MNG_DECL mng_getchunk_fram (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint8 *iMode, mng_uint32 *iNamesize, mng_pchar *zName, mng_uint8 *iChangedelay, mng_uint8 *iChangetimeout, mng_uint8 *iChangeclipping, mng_uint8 *iChangesyncid, mng_uint32 *iDelay, mng_uint32 *iTimeout, mng_uint8 *iBoundarytype, mng_int32 *iBoundaryl, mng_int32 *iBoundaryr, mng_int32 *iBoundaryt, mng_int32 *iBoundaryb, mng_uint32 *iCount, mng_uint32p *pSyncids); MNG_EXT mng_retcode MNG_DECL mng_getchunk_move (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iFirstid, mng_uint16 *iLastid, mng_uint8 *iMovetype, mng_int32 *iMovex, mng_int32 *iMovey); MNG_EXT mng_retcode MNG_DECL mng_getchunk_clip (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iFirstid, mng_uint16 *iLastid, mng_uint8 *iCliptype, mng_int32 *iClipl, mng_int32 *iClipr, mng_int32 *iClipt, mng_int32 *iClipb); MNG_EXT mng_retcode MNG_DECL mng_getchunk_show (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint16 *iFirstid, mng_uint16 *iLastid, mng_uint8 *iMode); MNG_EXT mng_retcode MNG_DECL mng_getchunk_term (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iTermaction, mng_uint8 *iIteraction, mng_uint32 *iDelay, mng_uint32 *iItermax); MNG_EXT mng_retcode MNG_DECL mng_getchunk_save (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint8 *iOffsettype, mng_uint32 *iCount); MNG_EXT mng_retcode MNG_DECL mng_getchunk_save_entry (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_uint8 *iEntrytype, mng_uint32arr2 *iOffset, mng_uint32arr2 *iStarttime, mng_uint32 *iLayernr, mng_uint32 *iFramenr, mng_uint32 *iNamesize, mng_pchar *zName); MNG_EXT mng_retcode MNG_DECL mng_getchunk_seek (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iNamesize, mng_pchar *zName); MNG_EXT mng_retcode MNG_DECL mng_getchunk_expi (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iSnapshotid, mng_uint32 *iNamesize, mng_pchar *zName); MNG_EXT mng_retcode MNG_DECL mng_getchunk_fpri (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iDeltatype, mng_uint8 *iPriority); MNG_EXT mng_retcode MNG_DECL mng_getchunk_need (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iKeywordssize, mng_pchar *zKeywords); MNG_EXT mng_retcode MNG_DECL mng_getchunk_phyg (mng_handle hHandle, mng_handle hChunk, mng_bool *bEmpty, mng_uint32 *iSizex, mng_uint32 *iSizey, mng_uint8 *iUnit); MNG_EXT mng_retcode MNG_DECL mng_getchunk_jhdr (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iWidth, mng_uint32 *iHeight, mng_uint8 *iColortype, mng_uint8 *iImagesampledepth, mng_uint8 *iImagecompression, mng_uint8 *iImageinterlace, mng_uint8 *iAlphasampledepth, mng_uint8 *iAlphacompression, mng_uint8 *iAlphafilter, mng_uint8 *iAlphainterlace); MNG_EXT mng_retcode MNG_DECL mng_getchunk_jdat (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iRawlen, mng_ptr *pRawdata); MNG_EXT mng_retcode MNG_DECL mng_getchunk_jdaa (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iRawlen, mng_ptr *pRawdata); MNG_EXT mng_retcode MNG_DECL mng_getchunk_dhdr (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iObjectid, mng_uint8 *iImagetype, mng_uint8 *iDeltatype, mng_uint32 *iBlockwidth, mng_uint32 *iBlockheight, mng_uint32 *iBlockx, mng_uint32 *iBlocky); MNG_EXT mng_retcode MNG_DECL mng_getchunk_prom (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iColortype, mng_uint8 *iSampledepth, mng_uint8 *iFilltype); MNG_EXT mng_retcode MNG_DECL mng_getchunk_pplt (mng_handle hHandle, mng_handle hChunk, mng_uint8 *iDeltatype, mng_uint32 *iCount); MNG_EXT mng_retcode MNG_DECL mng_getchunk_pplt_entry (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_uint16 *iRed, mng_uint16 *iGreen, mng_uint16 *iBlue, mng_uint16 *iAlpha, mng_bool *bUsed); MNG_EXT mng_retcode MNG_DECL mng_getchunk_drop (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iCount, mng_chunkidp *pChunknames); MNG_EXT mng_retcode MNG_DECL mng_getchunk_dbyk (mng_handle hHandle, mng_handle hChunk, mng_chunkid *iChunkname, mng_uint8 *iPolarity, mng_uint32 *iKeywordssize, mng_pchar *zKeywords); MNG_EXT mng_retcode MNG_DECL mng_getchunk_ordr (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iCount); MNG_EXT mng_retcode MNG_DECL mng_getchunk_ordr_entry (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_chunkid *iChunkname, mng_uint8 *iOrdertype); MNG_EXT mng_retcode MNG_DECL mng_getchunk_magn (mng_handle hHandle, mng_handle hChunk, mng_uint16 *iFirstid, mng_uint16 *iLastid, mng_uint16 *iMethodX, mng_uint16 *iMX, mng_uint16 *iMY, mng_uint16 *iML, mng_uint16 *iMR, mng_uint16 *iMT, mng_uint16 *iMB, mng_uint16 *iMethodY); #ifdef MNG_INCLUDE_MPNG_PROPOSAL MNG_EXT mng_retcode MNG_DECL mng_getchunk_mpng (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iFramewidth, mng_uint32 *iFrameheight, mng_uint16 *iNumplays, mng_uint16 *iTickspersec, mng_uint8 *iCompressionmethod, mng_uint32 *iCount); MNG_EXT mng_retcode MNG_DECL mng_getchunk_mpng_frame (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_uint32 *iX, mng_uint32 *iY, mng_uint32 *iWidth, mng_uint32 *iHeight, mng_int32 *iXoffset, mng_int32 *iYoffset, mng_uint16 *iTicks); #endif MNG_EXT mng_retcode MNG_DECL mng_getchunk_evnt (mng_handle hHandle, mng_handle hChunk, mng_uint32 *iCount); MNG_EXT mng_retcode MNG_DECL mng_getchunk_evnt_entry (mng_handle hHandle, mng_handle hChunk, mng_uint32 iEntry, mng_uint8 *iEventtype, mng_uint8 *iMasktype, mng_int32 *iLeft, mng_int32 *iRight, mng_int32 *iTop, mng_int32 *iBottom, mng_uint16 *iObjectid, mng_uint8 *iIndex, mng_uint32 *iSegmentnamesize, mng_pchar *zSegmentname); MNG_EXT mng_retcode MNG_DECL mng_getchunk_unknown (mng_handle hHandle, mng_handle hChunk, mng_chunkid *iChunkname, mng_uint32 *iRawlen, mng_ptr *pRawdata); /* ************************************************************************** */ #ifdef MNG_INCLUDE_WRITE_PROCS /* use these to create new chunks at the end of the chunk-list */ /* requires at least MNG_ACCESS_CHUNKS (MNG_SUPPORT_WRITE may be nice too) */ MNG_EXT mng_retcode MNG_DECL mng_putchunk_ihdr (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace); MNG_EXT mng_retcode MNG_DECL mng_putchunk_plte (mng_handle hHandle, mng_uint32 iCount, mng_palette8 aPalette); MNG_EXT mng_retcode MNG_DECL mng_putchunk_idat (mng_handle hHandle, mng_uint32 iRawlen, mng_ptr pRawdata); MNG_EXT mng_retcode MNG_DECL mng_putchunk_iend (mng_handle hHandle); MNG_EXT mng_retcode MNG_DECL mng_putchunk_trns (mng_handle hHandle, mng_bool bEmpty, mng_bool bGlobal, mng_uint8 iType, mng_uint32 iCount, mng_uint8arr aAlphas, mng_uint16 iGray, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_uint32 iRawlen, mng_uint8arr aRawdata); MNG_EXT mng_retcode MNG_DECL mng_putchunk_gama (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iGamma); MNG_EXT mng_retcode MNG_DECL mng_putchunk_chrm (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iWhitepointx, mng_uint32 iWhitepointy, mng_uint32 iRedx, mng_uint32 iRedy, mng_uint32 iGreenx, mng_uint32 iGreeny, mng_uint32 iBluex, mng_uint32 iBluey); MNG_EXT mng_retcode MNG_DECL mng_putchunk_srgb (mng_handle hHandle, mng_bool bEmpty, mng_uint8 iRenderingintent); MNG_EXT mng_retcode MNG_DECL mng_putchunk_iccp (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iNamesize, mng_pchar zName, mng_uint8 iCompression, mng_uint32 iProfilesize, mng_ptr pProfile); MNG_EXT mng_retcode MNG_DECL mng_putchunk_text (mng_handle hHandle, mng_uint32 iKeywordsize, mng_pchar zKeyword, mng_uint32 iTextsize, mng_pchar zText); MNG_EXT mng_retcode MNG_DECL mng_putchunk_ztxt (mng_handle hHandle, mng_uint32 iKeywordsize, mng_pchar zKeyword, mng_uint8 iCompression, mng_uint32 iTextsize, mng_pchar zText); MNG_EXT mng_retcode MNG_DECL mng_putchunk_itxt (mng_handle hHandle, mng_uint32 iKeywordsize, mng_pchar zKeyword, mng_uint8 iCompressionflag, mng_uint8 iCompressionmethod, mng_uint32 iLanguagesize, mng_pchar zLanguage, mng_uint32 iTranslationsize, mng_pchar zTranslation, mng_uint32 iTextsize, mng_pchar zText); MNG_EXT mng_retcode MNG_DECL mng_putchunk_bkgd (mng_handle hHandle, mng_bool bEmpty, mng_uint8 iType, mng_uint8 iIndex, mng_uint16 iGray, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue); MNG_EXT mng_retcode MNG_DECL mng_putchunk_phys (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iSizex, mng_uint32 iSizey, mng_uint8 iUnit); MNG_EXT mng_retcode MNG_DECL mng_putchunk_sbit (mng_handle hHandle, mng_bool bEmpty, mng_uint8 iType, mng_uint8arr4 aBits); MNG_EXT mng_retcode MNG_DECL mng_putchunk_splt (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iNamesize, mng_pchar zName, mng_uint8 iSampledepth, mng_uint32 iEntrycount, mng_ptr pEntries); MNG_EXT mng_retcode MNG_DECL mng_putchunk_hist (mng_handle hHandle, mng_uint32 iEntrycount, mng_uint16arr aEntries); MNG_EXT mng_retcode MNG_DECL mng_putchunk_time (mng_handle hHandle, mng_uint16 iYear, mng_uint8 iMonth, mng_uint8 iDay, mng_uint8 iHour, mng_uint8 iMinute, mng_uint8 iSecond); MNG_EXT mng_retcode MNG_DECL mng_putchunk_mhdr (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint32 iTicks, mng_uint32 iLayercount, mng_uint32 iFramecount, mng_uint32 iPlaytime, mng_uint32 iSimplicity); MNG_EXT mng_retcode MNG_DECL mng_putchunk_mend (mng_handle hHandle); MNG_EXT mng_retcode MNG_DECL mng_putchunk_loop (mng_handle hHandle, mng_uint8 iLevel, mng_uint32 iRepeat, mng_uint8 iTermination, mng_uint32 iItermin, mng_uint32 iItermax, mng_uint32 iCount, mng_uint32p pSignals); MNG_EXT mng_retcode MNG_DECL mng_putchunk_endl (mng_handle hHandle, mng_uint8 iLevel); MNG_EXT mng_retcode MNG_DECL mng_putchunk_defi (mng_handle hHandle, mng_uint16 iObjectid, mng_uint8 iDonotshow, mng_uint8 iConcrete, mng_bool bHasloca, mng_int32 iXlocation, mng_int32 iYlocation, mng_bool bHasclip, mng_int32 iLeftcb, mng_int32 iRightcb, mng_int32 iTopcb, mng_int32 iBottomcb); MNG_EXT mng_retcode MNG_DECL mng_putchunk_basi (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_uint16 iAlpha, mng_uint8 iViewable); MNG_EXT mng_retcode MNG_DECL mng_putchunk_clon (mng_handle hHandle, mng_uint16 iSourceid, mng_uint16 iCloneid, mng_uint8 iClonetype, mng_uint8 iDonotshow, mng_uint8 iConcrete, mng_bool bHasloca, mng_uint8 iLocationtype, mng_int32 iLocationx, mng_int32 iLocationy); #ifndef MNG_SKIPCHUNK_PAST MNG_EXT mng_retcode MNG_DECL mng_putchunk_past (mng_handle hHandle, mng_uint16 iDestid, mng_uint8 iTargettype, mng_int32 iTargetx, mng_int32 iTargety, mng_uint32 iCount); MNG_EXT mng_retcode MNG_DECL mng_putchunk_past_src (mng_handle hHandle, mng_uint32 iEntry, mng_uint16 iSourceid, mng_uint8 iComposition, mng_uint8 iOrientation, mng_uint8 iOffsettype, mng_int32 iOffsetx, mng_int32 iOffsety, mng_uint8 iBoundarytype, mng_int32 iBoundaryl, mng_int32 iBoundaryr, mng_int32 iBoundaryt, mng_int32 iBoundaryb); #endif MNG_EXT mng_retcode MNG_DECL mng_putchunk_disc (mng_handle hHandle, mng_uint32 iCount, mng_uint16p pObjectids); MNG_EXT mng_retcode MNG_DECL mng_putchunk_back (mng_handle hHandle, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_uint8 iMandatory, mng_uint16 iImageid, mng_uint8 iTile); MNG_EXT mng_retcode MNG_DECL mng_putchunk_fram (mng_handle hHandle, mng_bool bEmpty, mng_uint8 iMode, mng_uint32 iNamesize, mng_pchar zName, mng_uint8 iChangedelay, mng_uint8 iChangetimeout, mng_uint8 iChangeclipping, mng_uint8 iChangesyncid, mng_uint32 iDelay, mng_uint32 iTimeout, mng_uint8 iBoundarytype, mng_int32 iBoundaryl, mng_int32 iBoundaryr, mng_int32 iBoundaryt, mng_int32 iBoundaryb, mng_uint32 iCount, mng_uint32p pSyncids); MNG_EXT mng_retcode MNG_DECL mng_putchunk_move (mng_handle hHandle, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iMovetype, mng_int32 iMovex, mng_int32 iMovey); MNG_EXT mng_retcode MNG_DECL mng_putchunk_clip (mng_handle hHandle, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iCliptype, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb); MNG_EXT mng_retcode MNG_DECL mng_putchunk_show (mng_handle hHandle, mng_bool bEmpty, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iMode); MNG_EXT mng_retcode MNG_DECL mng_putchunk_term (mng_handle hHandle, mng_uint8 iTermaction, mng_uint8 iIteraction, mng_uint32 iDelay, mng_uint32 iItermax); MNG_EXT mng_retcode MNG_DECL mng_putchunk_save (mng_handle hHandle, mng_bool bEmpty, mng_uint8 iOffsettype, mng_uint32 iCount); MNG_EXT mng_retcode MNG_DECL mng_putchunk_save_entry (mng_handle hHandle, mng_uint32 iEntry, mng_uint8 iEntrytype, mng_uint32arr2 iOffset, mng_uint32arr2 iStarttime, mng_uint32 iLayernr, mng_uint32 iFramenr, mng_uint32 iNamesize, mng_pchar zName); MNG_EXT mng_retcode MNG_DECL mng_putchunk_seek (mng_handle hHandle, mng_uint32 iNamesize, mng_pchar zName); MNG_EXT mng_retcode MNG_DECL mng_putchunk_expi (mng_handle hHandle, mng_uint16 iSnapshotid, mng_uint32 iNamesize, mng_pchar zName); MNG_EXT mng_retcode MNG_DECL mng_putchunk_fpri (mng_handle hHandle, mng_uint8 iDeltatype, mng_uint8 iPriority); MNG_EXT mng_retcode MNG_DECL mng_putchunk_need (mng_handle hHandle, mng_uint32 iKeywordssize, mng_pchar zKeywords); MNG_EXT mng_retcode MNG_DECL mng_putchunk_phyg (mng_handle hHandle, mng_bool bEmpty, mng_uint32 iSizex, mng_uint32 iSizey, mng_uint8 iUnit); MNG_EXT mng_retcode MNG_DECL mng_putchunk_jhdr (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iColortype, mng_uint8 iImagesampledepth, mng_uint8 iImagecompression, mng_uint8 iImageinterlace, mng_uint8 iAlphasampledepth, mng_uint8 iAlphacompression, mng_uint8 iAlphafilter, mng_uint8 iAlphainterlace); MNG_EXT mng_retcode MNG_DECL mng_putchunk_jdat (mng_handle hHandle, mng_uint32 iRawlen, mng_ptr pRawdata); MNG_EXT mng_retcode MNG_DECL mng_putchunk_jdaa (mng_handle hHandle, mng_uint32 iRawlen, mng_ptr pRawdata); MNG_EXT mng_retcode MNG_DECL mng_putchunk_jsep (mng_handle hHandle); MNG_EXT mng_retcode MNG_DECL mng_putchunk_dhdr (mng_handle hHandle, mng_uint16 iObjectid, mng_uint8 iImagetype, mng_uint8 iDeltatype, mng_uint32 iBlockwidth, mng_uint32 iBlockheight, mng_uint32 iBlockx, mng_uint32 iBlocky); MNG_EXT mng_retcode MNG_DECL mng_putchunk_prom (mng_handle hHandle, mng_uint8 iColortype, mng_uint8 iSampledepth, mng_uint8 iFilltype); MNG_EXT mng_retcode MNG_DECL mng_putchunk_ipng (mng_handle hHandle); MNG_EXT mng_retcode MNG_DECL mng_putchunk_pplt (mng_handle hHandle, mng_uint8 iDeltatype, mng_uint32 iCount); MNG_EXT mng_retcode MNG_DECL mng_putchunk_pplt_entry (mng_handle hHandle, mng_uint32 iEntry, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_uint16 iAlpha); MNG_EXT mng_retcode MNG_DECL mng_putchunk_jpng (mng_handle hHandle); MNG_EXT mng_retcode MNG_DECL mng_putchunk_drop (mng_handle hHandle, mng_uint32 iCount, mng_chunkidp pChunknames); MNG_EXT mng_retcode MNG_DECL mng_putchunk_dbyk (mng_handle hHandle, mng_chunkid iChunkname, mng_uint8 iPolarity, mng_uint32 iKeywordssize, mng_pchar zKeywords); MNG_EXT mng_retcode MNG_DECL mng_putchunk_ordr (mng_handle hHandle, mng_uint32 iCount); MNG_EXT mng_retcode MNG_DECL mng_putchunk_ordr_entry (mng_handle hHandle, mng_uint32 iEntry, mng_chunkid iChunkname, mng_uint8 iOrdertype); MNG_EXT mng_retcode MNG_DECL mng_putchunk_magn (mng_handle hHandle, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint16 iMethodX, mng_uint16 iMX, mng_uint16 iMY, mng_uint16 iML, mng_uint16 iMR, mng_uint16 iMT, mng_uint16 iMB, mng_uint16 iMethodY); #ifdef MNG_INCLUDE_MPNG_PROPOSAL MNG_EXT mng_retcode MNG_DECL mng_putchunk_mpng (mng_handle hHandle, mng_uint32 iFramewidth, mng_uint32 iFrameheight, mng_uint16 iNumplays, mng_uint16 iTickspersec, mng_uint8 iCompressionmethod, mng_uint32 iCount); MNG_EXT mng_retcode MNG_DECL mng_putchunk_mpng_frame (mng_handle hHandle, mng_uint32 iEntry, mng_uint32 iX, mng_uint32 iY, mng_uint32 iWidth, mng_uint32 iHeight, mng_int32 iXoffset, mng_int32 iYoffset, mng_uint16 iTicks); #endif MNG_EXT mng_retcode MNG_DECL mng_putchunk_evnt (mng_handle hHandle, mng_uint32 iCount); MNG_EXT mng_retcode MNG_DECL mng_putchunk_evnt_entry (mng_handle hHandle, mng_uint32 iEntry, mng_uint8 iEventtype, mng_uint8 iMasktype, mng_int32 iLeft, mng_int32 iRight, mng_int32 iTop, mng_int32 iBottom, mng_uint16 iObjectid, mng_uint8 iIndex, mng_uint32 iSegmentnamesize, mng_pchar zSegmentname); MNG_EXT mng_retcode MNG_DECL mng_putchunk_unknown (mng_handle hHandle, mng_chunkid iChunkname, mng_uint32 iRawlen, mng_ptr pRawdata); #endif /* MNG_INCLUDE_WRITE_PROCS */ /* ************************************************************************** */ /* use these functions to access the actual image-data in stored chunks, as opposed to the IDAT/JDAT data */ /* to get accurate pixel-data the canvasstyle should seriously reflect the bitdepth/colortype combination of the preceding IHDR/JHDR/BASI/DHDR; all input can be converted to rgb(a)8 (rgb(a)16 for 16-bit images), but there are only limited conversions back (see below for putimgdata) */ /* call this function if you want to extract the nth image from the list; the first image is designated seqnr 0! */ /* this function finds the IHDR/JHDR/BASI/DHDR with the appropriate seqnr, starting from the beginning of the chunk-list; this may tend to get a little slow for animations with a large number of chunks for images near the end */ /* supplying a seqnr past the last image in the animation will return with an errorcode */ MNG_EXT mng_retcode MNG_DECL mng_getimgdata_seq (mng_handle hHandle, mng_uint32 iSeqnr, mng_uint32 iCanvasstyle, mng_getcanvasline fGetcanvasline); /* both the following functions will search forward to find the first IDAT/JDAT, and then traverse back to find the start of the image (IHDR,JHDR,DHDR,BASI); note that this is very fast compared to decoding the IDAT/JDAT, so there's not really a need for optimization; either can be called from the iterate_chunks callback when a IHDR/JHDR is encountered; for BASI/DHDR there may not be real image-data so it's wisest to keep iterating till the IEND, and then call either of these functions if necessary (remember the correct seqnr!) */ /* call this function if you want to extract the image starting at or after the nth position in the chunk-list; this number is returned in the iterate_chunks callback */ MNG_EXT mng_retcode MNG_DECL mng_getimgdata_chunkseq (mng_handle hHandle, mng_uint32 iSeqnr, mng_uint32 iCanvasstyle, mng_getcanvasline fGetcanvasline); /* call this function if you want to extract the image starting at or after the indicated chunk; the handle of a chunk is returned in the iterate_chunks callback */ MNG_EXT mng_retcode MNG_DECL mng_getimgdata_chunk (mng_handle hHandle, mng_handle hChunk, mng_uint32 iCanvasstyle, mng_getcanvasline fGetcanvasline); /* ************************************************************************** */ #ifdef MNG_INCLUDE_WRITE_PROCS /* use the following functions to add image-data to the list of stored chunks */ /* note that this only adds the IDAT or JDAT chunks and no others; you must call one of these functions after you 'put' the initial chunks of the image and before you 'put' the closing chunks */ /* the canvasstyle should seriously reflect the bitdepth/colortype combination; eg. bitdepth=16 would expect a 16-bit canvasstyle, colortype=g or ga would expect a gray or gray+alpha style respectively and so on, and so forth ... (nb. the number of conversions will be extremely limited for the moment!) */ MNG_EXT mng_retcode MNG_DECL mng_putimgdata_ihdr (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iColortype, mng_uint8 iBitdepth, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace, mng_uint32 iCanvasstyle, mng_getcanvasline fGetcanvasline); MNG_EXT mng_retcode MNG_DECL mng_putimgdata_jhdr (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iColortype, mng_uint8 iBitdepth, mng_uint8 iCompression, mng_uint8 iInterlace, mng_uint8 iAlphaBitdepth, mng_uint8 iAlphaCompression, mng_uint8 iAlphaFilter, mng_uint8 iAlphaInterlace, mng_uint32 iCanvasstyle, mng_getcanvasline fGetcanvasline); /* ************************************************************************** */ /* use the following functions to set the framecount/layercount/playtime or simplicity of an animation you are creating; this may be useful if these variables are calculated during the creation-process */ MNG_EXT mng_retcode MNG_DECL mng_updatemngheader (mng_handle hHandle, mng_uint32 iFramecount, mng_uint32 iLayercount, mng_uint32 iPlaytime); MNG_EXT mng_retcode MNG_DECL mng_updatemngsimplicity (mng_handle hHandle, mng_uint32 iSimplicity); /* ************************************************************************** */ #endif /* MNG_INCLUDE_WRITE_PROCS */ #endif /* MNG_ACCESS_CHUNKS */ /* ************************************************************************** */ /* * * */ /* * Error-code structure * */ /* * * */ /* * 0b0000 00xx xxxx xxxx - basic errors; severity 9 (environment) * */ /* * 0b0000 01xx xxxx xxxx - chunk errors; severity 9 (image induced) * */ /* * 0b0000 10xx xxxx xxxx - severity 5 errors (application induced) * */ /* * 0b0001 00xx xxxx xxxx - severity 2 warnings (recoverable) * */ /* * 0b0010 00xx xxxx xxxx - severity 1 warnings (recoverable) * */ /* * * */ /* ************************************************************************** */ #define MNG_NOERROR (mng_retcode)0 /* er.. indicates all's well */ #define MNG_OUTOFMEMORY (mng_retcode)1 /* oops, buy some megabytes! */ #define MNG_INVALIDHANDLE (mng_retcode)2 /* call mng_initialize first */ #define MNG_NOCALLBACK (mng_retcode)3 /* set the callbacks please */ #define MNG_UNEXPECTEDEOF (mng_retcode)4 /* what'd ya do with the data? */ #define MNG_ZLIBERROR (mng_retcode)5 /* zlib burped */ #define MNG_JPEGERROR (mng_retcode)6 /* jpglib complained */ #define MNG_LCMSERROR (mng_retcode)7 /* little cms stressed out */ #define MNG_NOOUTPUTPROFILE (mng_retcode)8 /* no output-profile defined */ #define MNG_NOSRGBPROFILE (mng_retcode)9 /* no sRGB-profile defined */ #define MNG_BUFOVERFLOW (mng_retcode)10 /* zlib output-buffer overflow */ #define MNG_FUNCTIONINVALID (mng_retcode)11 /* ay, totally inappropriate */ #define MNG_OUTPUTERROR (mng_retcode)12 /* disk full ? */ #define MNG_JPEGBUFTOOSMALL (mng_retcode)13 /* can't handle buffer overflow*/ #define MNG_NEEDMOREDATA (mng_retcode)14 /* I'm hungry, give me more */ #define MNG_NEEDTIMERWAIT (mng_retcode)15 /* Sleep a while then wake me */ #define MNG_NEEDSECTIONWAIT (mng_retcode)16 /* just processed a SEEK */ #define MNG_LOOPWITHCACHEOFF (mng_retcode)17 /* LOOP when playback info off */ #define MNG_DLLNOTLOADED (mng_retcode)99 /* late binding failed */ #define MNG_APPIOERROR (mng_retcode)901 /* application I/O error */ #define MNG_APPTIMERERROR (mng_retcode)902 /* application timing error */ #define MNG_APPCMSERROR (mng_retcode)903 /* application CMS error */ #define MNG_APPMISCERROR (mng_retcode)904 /* application other error */ #define MNG_APPTRACEABORT (mng_retcode)905 /* application aborts on trace */ #define MNG_INTERNALERROR (mng_retcode)999 /* internal inconsistancy */ #define MNG_INVALIDSIG (mng_retcode)1025 /* invalid graphics file */ #define MNG_INVALIDCRC (mng_retcode)1027 /* crc check failed */ #define MNG_INVALIDLENGTH (mng_retcode)1028 /* chunklength mystifies me */ #define MNG_SEQUENCEERROR (mng_retcode)1029 /* invalid chunk sequence */ #define MNG_CHUNKNOTALLOWED (mng_retcode)1030 /* completely out-of-place */ #define MNG_MULTIPLEERROR (mng_retcode)1031 /* only one occurence allowed */ #define MNG_PLTEMISSING (mng_retcode)1032 /* indexed-color requires PLTE */ #define MNG_IDATMISSING (mng_retcode)1033 /* IHDR-block requires IDAT */ #define MNG_CANNOTBEEMPTY (mng_retcode)1034 /* must contain some data */ #define MNG_GLOBALLENGTHERR (mng_retcode)1035 /* global data incorrect */ #define MNG_INVALIDBITDEPTH (mng_retcode)1036 /* bitdepth out-of-range */ #define MNG_INVALIDCOLORTYPE (mng_retcode)1037 /* colortype out-of-range */ #define MNG_INVALIDCOMPRESS (mng_retcode)1038 /* compression method invalid */ #define MNG_INVALIDFILTER (mng_retcode)1039 /* filter method invalid */ #define MNG_INVALIDINTERLACE (mng_retcode)1040 /* interlace method invalid */ #define MNG_NOTENOUGHIDAT (mng_retcode)1041 /* ran out of compressed data */ #define MNG_PLTEINDEXERROR (mng_retcode)1042 /* palette-index out-of-range */ #define MNG_NULLNOTFOUND (mng_retcode)1043 /* couldn't find null-separator*/ #define MNG_KEYWORDNULL (mng_retcode)1044 /* keyword cannot be empty */ #define MNG_OBJECTUNKNOWN (mng_retcode)1045 /* the object can't be found */ #define MNG_OBJECTEXISTS (mng_retcode)1046 /* the object already exists */ #define MNG_TOOMUCHIDAT (mng_retcode)1047 /* got too much compressed data*/ #define MNG_INVSAMPLEDEPTH (mng_retcode)1048 /* sampledepth out-of-range */ #define MNG_INVOFFSETSIZE (mng_retcode)1049 /* invalid offset-size */ #define MNG_INVENTRYTYPE (mng_retcode)1050 /* invalid entry-type */ #define MNG_ENDWITHNULL (mng_retcode)1051 /* may not end with NULL */ #define MNG_INVIMAGETYPE (mng_retcode)1052 /* invalid image_type */ #define MNG_INVDELTATYPE (mng_retcode)1053 /* invalid delta_type */ #define MNG_INVALIDINDEX (mng_retcode)1054 /* index-value invalid */ #define MNG_TOOMUCHJDAT (mng_retcode)1055 /* got too much compressed data*/ #define MNG_JPEGPARMSERR (mng_retcode)1056 /* JHDR/JPEG parms do not match*/ #define MNG_INVFILLMETHOD (mng_retcode)1057 /* invalid fill_method */ #define MNG_OBJNOTCONCRETE (mng_retcode)1058 /* object must be concrete */ #define MNG_TARGETNOALPHA (mng_retcode)1059 /* object has no alpha-channel */ #define MNG_MNGTOOCOMPLEX (mng_retcode)1060 /* can't handle complexity */ #define MNG_UNKNOWNCRITICAL (mng_retcode)1061 /* unknown critical chunk found*/ #define MNG_UNSUPPORTEDNEED (mng_retcode)1062 /* nEED requirement unsupported*/ #define MNG_INVALIDDELTA (mng_retcode)1063 /* Delta operation illegal */ #define MNG_INVALIDMETHOD (mng_retcode)1064 /* invalid MAGN method */ #define MNG_IMPROBABLELENGTH (mng_retcode)1065 /* impropable chunk length */ #define MNG_INVALIDBLOCK (mng_retcode)1066 /* invalid delta block */ #define MNG_INVALIDEVENT (mng_retcode)1067 /* invalid event_type */ #define MNG_INVALIDMASK (mng_retcode)1068 /* invalid mask_type */ #define MNG_NOMATCHINGLOOP (mng_retcode)1069 /* ENDL without matching LOOP */ #define MNG_SEEKNOTFOUND (mng_retcode)1070 /* EvNT points to unknown SEEK */ #define MNG_OBJNOTABSTRACT (mng_retcode)1071 /* object must be abstract */ #define MNG_TERMSEQERROR (mng_retcode)1072 /* TERM in wrong place */ #define MNG_INVALIDFIELDVAL (mng_retcode)1073 /* invalid fieldvalue (generic)*/ #define MNG_INVALIDWIDTH (mng_retcode)1074 /* invalid frame/image width */ #define MNG_INVALIDHEIGHT (mng_retcode)1075 /* invalid frame/image height */ #define MNG_INVALIDCNVSTYLE (mng_retcode)2049 /* can't make anything of this */ #define MNG_WRONGCHUNK (mng_retcode)2050 /* accessing the wrong chunk */ #define MNG_INVALIDENTRYIX (mng_retcode)2051 /* accessing the wrong entry */ #define MNG_NOHEADER (mng_retcode)2052 /* must have had header first */ #define MNG_NOCORRCHUNK (mng_retcode)2053 /* can't find parent chunk */ #define MNG_NOMHDR (mng_retcode)2054 /* no MNG header available */ #define MNG_IMAGETOOLARGE (mng_retcode)4097 /* input-image way too big */ #define MNG_NOTANANIMATION (mng_retcode)4098 /* file not a MNG */ #define MNG_FRAMENRTOOHIGH (mng_retcode)4099 /* frame-nr out-of-range */ #define MNG_LAYERNRTOOHIGH (mng_retcode)4100 /* layer-nr out-of-range */ #define MNG_PLAYTIMETOOHIGH (mng_retcode)4101 /* playtime out-of-range */ #define MNG_FNNOTIMPLEMENTED (mng_retcode)4102 /* function not yet available */ #define MNG_IMAGEFROZEN (mng_retcode)8193 /* stopped displaying */ #define MNG_LCMS_NOHANDLE 1 /* LCMS returned NULL handle */ #define MNG_LCMS_NOMEM 2 /* LCMS returned NULL gammatab */ #define MNG_LCMS_NOTRANS 3 /* LCMS returned NULL transform*/ /* ************************************************************************** */ /* * * */ /* * Canvas styles * */ /* * * */ /* * Note that the intentions are pretty darn good, but that the focus * */ /* * is currently on 8-bit color support * */ /* * * */ /* * The RGB8_A8 style is defined for apps that require a separate * */ /* * canvas for the color-planes and the alpha-plane (eg. mozilla) * */ /* * This requires for the app to supply the "getalphaline" callback!!! * */ /* * * */ /* ************************************************************************** */ #define MNG_CANVAS_RGB8 0x00000000L #define MNG_CANVAS_RGBA8 0x00001000L #define MNG_CANVAS_RGBA8_PM 0x00009000L #define MNG_CANVAS_ARGB8 0x00003000L #define MNG_CANVAS_ARGB8_PM 0x0000B000L #define MNG_CANVAS_RGB8_A8 0x00005000L #define MNG_CANVAS_BGR8 0x00000001L #define MNG_CANVAS_BGRX8 0x00010001L #define MNG_CANVAS_BGRA8 0x00001001L #define MNG_CANVAS_BGRA8PM 0x00009001L /* backward compatibility */ #define MNG_CANVAS_BGRA8_PM 0x00009001L #define MNG_CANVAS_ABGR8 0x00003001L #define MNG_CANVAS_ABGR8_PM 0x0000B001L #define MNG_CANVAS_RGB16 0x00000100L /* not supported yet */ #define MNG_CANVAS_RGBA16 0x00001100L /* not supported yet */ #define MNG_CANVAS_ARGB16 0x00003100L /* not supported yet */ #define MNG_CANVAS_BGR16 0x00000101L /* not supported yet */ #define MNG_CANVAS_BGRA16 0x00001101L /* not supported yet */ #define MNG_CANVAS_ABGR16 0x00003101L /* not supported yet */ #define MNG_CANVAS_GRAY8 0x00000002L /* not supported yet */ #define MNG_CANVAS_GRAY16 0x00000102L /* not supported yet */ #define MNG_CANVAS_GRAYA8 0x00001002L /* not supported yet */ #define MNG_CANVAS_GRAYA16 0x00001102L /* not supported yet */ #define MNG_CANVAS_AGRAY8 0x00003002L /* not supported yet */ #define MNG_CANVAS_AGRAY16 0x00003102L /* not supported yet */ #define MNG_CANVAS_DX15 0x00000003L /* not supported yet */ #define MNG_CANVAS_DX16 0x00000004L /* not supported yet */ #define MNG_CANVAS_RGB565 0x00000005L #define MNG_CANVAS_RGBA565 0x00001005L #define MNG_CANVAS_BGR565 0x00000006L #define MNG_CANVAS_BGRA565 0x00001006L #define MNG_CANVAS_BGR565_A8 0x00004006L #define MNG_CANVAS_RGB555 0x00000007L #define MNG_CANVAS_BGR555 0x00000008L #define MNG_CANVAS_PIXELTYPE(C) (C & 0x000000FFL) #define MNG_CANVAS_BITDEPTH(C) (C & 0x00000100L) #define MNG_CANVAS_HASALPHA(C) (C & 0x00001000L) #define MNG_CANVAS_ALPHAFIRST(C) (C & 0x00002000L) #define MNG_CANVAS_ALPHASEPD(C) (C & 0x00004000L) #define MNG_CANVAS_ALPHAPM(C) (C & 0x00008000L) #define MNG_CANVAS_HASFILLER(C) (C & 0x00010000L) #define MNG_CANVAS_RGB(C) (MNG_CANVAS_PIXELTYPE (C) == 0) #define MNG_CANVAS_BGR(C) (MNG_CANVAS_PIXELTYPE (C) == 1) #define MNG_CANVAS_GRAY(C) (MNG_CANVAS_PIXELTYPE (C) == 2) #define MNG_CANVAS_DIRECTX15(C) (MNG_CANVAS_PIXELTYPE (C) == 3) #define MNG_CANVAS_DIRECTX16(C) (MNG_CANVAS_PIXELTYPE (C) == 4) #define MNG_CANVAS_RGB_565(C) (MNG_CANVAS_PIXELTYPE (C) == 5) #define MNG_CANVAS_BGR_565(C) (MNG_CANVAS_PIXELTYPE (C) == 6) #define MNG_CANVAS_8BIT(C) (!MNG_CANVAS_BITDEPTH (C)) #define MNG_CANVAS_16BIT(C) (MNG_CANVAS_BITDEPTH (C)) #define MNG_CANVAS_PIXELFIRST(C) (!MNG_CANVAS_ALPHAFIRST (C)) /* ************************************************************************** */ /* * * */ /* * Chunk names (idea adapted from libpng 1.1.0 - png.h) * */ /* * * */ /* ************************************************************************** */ #define MNG_UINT_HUH 0x40404040L #define MNG_UINT_BACK 0x4241434bL #define MNG_UINT_BASI 0x42415349L #define MNG_UINT_CLIP 0x434c4950L #define MNG_UINT_CLON 0x434c4f4eL #define MNG_UINT_DBYK 0x4442594bL #define MNG_UINT_DEFI 0x44454649L #define MNG_UINT_DHDR 0x44484452L #define MNG_UINT_DISC 0x44495343L #define MNG_UINT_DROP 0x44524f50L #define MNG_UINT_ENDL 0x454e444cL #define MNG_UINT_FRAM 0x4652414dL #define MNG_UINT_IDAT 0x49444154L #define MNG_UINT_IEND 0x49454e44L #define MNG_UINT_IHDR 0x49484452L #define MNG_UINT_IJNG 0x494a4e47L #define MNG_UINT_IPNG 0x49504e47L #define MNG_UINT_JDAA 0x4a444141L #define MNG_UINT_JDAT 0x4a444154L #define MNG_UINT_JHDR 0x4a484452L #define MNG_UINT_JSEP 0x4a534550L #define MNG_UINT_JdAA 0x4a644141L #define MNG_UINT_LOOP 0x4c4f4f50L #define MNG_UINT_MAGN 0x4d41474eL #define MNG_UINT_MEND 0x4d454e44L #define MNG_UINT_MHDR 0x4d484452L #define MNG_UINT_MOVE 0x4d4f5645L #define MNG_UINT_ORDR 0x4f524452L #define MNG_UINT_PAST 0x50415354L #define MNG_UINT_PLTE 0x504c5445L #define MNG_UINT_PPLT 0x50504c54L #define MNG_UINT_PROM 0x50524f4dL #define MNG_UINT_SAVE 0x53415645L #define MNG_UINT_SEEK 0x5345454bL #define MNG_UINT_SHOW 0x53484f57L #define MNG_UINT_TERM 0x5445524dL #define MNG_UINT_adAT 0x61644154L #define MNG_UINT_ahDR 0x61684452L #define MNG_UINT_bKGD 0x624b4744L #define MNG_UINT_cHRM 0x6348524dL #define MNG_UINT_eXPI 0x65585049L #define MNG_UINT_evNT 0x65764e54L #define MNG_UINT_fPRI 0x66505249L #define MNG_UINT_gAMA 0x67414d41L #define MNG_UINT_hIST 0x68495354L #define MNG_UINT_iCCP 0x69434350L #define MNG_UINT_iTXt 0x69545874L #define MNG_UINT_mpNG 0x6d704e47L #define MNG_UINT_nEED 0x6e454544L #define MNG_UINT_oFFs 0x6f464673L #define MNG_UINT_pCAL 0x7043414cL #define MNG_UINT_pHYg 0x70444167L #define MNG_UINT_pHYs 0x70485973L #define MNG_UINT_sBIT 0x73424954L #define MNG_UINT_sCAL 0x7343414cL #define MNG_UINT_sPLT 0x73504c54L #define MNG_UINT_sRGB 0x73524742L #define MNG_UINT_tEXt 0x74455874L #define MNG_UINT_tIME 0x74494d45L #define MNG_UINT_tRNS 0x74524e53L #define MNG_UINT_zTXt 0x7a545874L /* ************************************************************************** */ /* * * */ /* * Chunk property values * */ /* * * */ /* ************************************************************************** */ #define MNG_BITDEPTH_1 1 /* IHDR, BASI, JHDR, PROM */ #define MNG_BITDEPTH_2 2 #define MNG_BITDEPTH_4 4 #define MNG_BITDEPTH_8 8 /* sPLT */ #define MNG_BITDEPTH_16 16 #define MNG_COLORTYPE_GRAY 0 /* IHDR, BASI, PROM */ #define MNG_COLORTYPE_RGB 2 #define MNG_COLORTYPE_INDEXED 3 #define MNG_COLORTYPE_GRAYA 4 #define MNG_COLORTYPE_RGBA 6 #define MNG_COMPRESSION_DEFLATE 0 /* IHDR, zTXt, iTXt, iCCP, BASI, JHDR */ #define MNG_FILTER_ADAPTIVE 0 /* IHDR, BASI, JHDR */ /* #define MNG_FILTER_NO_ADAPTIVE 1 #define MNG_FILTER_NO_DIFFERING 0 #define MNG_FILTER_DIFFERING 0x40 #define MNG_FILTER_MASK (MNG_FILTER_NO_ADAPTIVE | MNG_FILTER_DIFFERING) */ #ifdef FILTER192 #define MNG_FILTER_DIFFERING 0xC0 #endif #ifdef FILTER193 #define MNG_FILTER_NOFILTER 0xC1 #endif #define MNG_INTERLACE_NONE 0 /* IHDR, BASI, JHDR */ #define MNG_INTERLACE_ADAM7 1 #define MNG_FILTER_NONE 0 /* IDAT */ #define MNG_FILTER_SUB 1 #define MNG_FILTER_UP 2 #define MNG_FILTER_AVERAGE 3 #define MNG_FILTER_PAETH 4 #define MNG_INTENT_PERCEPTUAL 0 /* sRGB */ #define MNG_INTENT_RELATIVECOLORIMETRIC 1 #define MNG_INTENT_SATURATION 2 #define MNG_INTENT_ABSOLUTECOLORIMETRIC 3 /* tEXt, zTXt, iTXt */ #define MNG_TEXT_TITLE "Title" #define MNG_TEXT_AUTHOR "Author" #define MNG_TEXT_DESCRIPTION "Description" #define MNG_TEXT_COPYRIGHT "Copyright" #define MNG_TEXT_CREATIONTIME "Creation Time" #define MNG_TEXT_SOFTWARE "Software" #define MNG_TEXT_DISCLAIMER "Disclaimer" #define MNG_TEXT_WARNING "Warning" #define MNG_TEXT_SOURCE "Source" #define MNG_TEXT_COMMENT "Comment" #define MNG_FLAG_UNCOMPRESSED 0 /* iTXt */ #define MNG_FLAG_COMPRESSED 1 #define MNG_UNIT_UNKNOWN 0 /* pHYs, pHYg */ #define MNG_UNIT_METER 1 /* MHDR */ #define MNG_SIMPLICITY_VALID 0x00000001 #define MNG_SIMPLICITY_SIMPLEFEATURES 0x00000002 #define MNG_SIMPLICITY_COMPLEXFEATURES 0x00000004 #define MNG_SIMPLICITY_TRANSPARENCY 0x00000008 #define MNG_SIMPLICITY_JNG 0x00000010 #define MNG_SIMPLICITY_DELTAPNG 0x00000020 #define MNG_TERMINATION_DECODER_NC 0 /* LOOP */ #define MNG_TERMINATION_USER_NC 1 #define MNG_TERMINATION_EXTERNAL_NC 2 #define MNG_TERMINATION_DETERMINISTIC_NC 3 #define MNG_TERMINATION_DECODER_C 4 #define MNG_TERMINATION_USER_C 5 #define MNG_TERMINATION_EXTERNAL_C 6 #define MNG_TERMINATION_DETERMINISTIC_C 7 #define MNG_DONOTSHOW_VISIBLE 0 /* DEFI */ #define MNG_DONOTSHOW_NOTVISIBLE 1 #define MNG_ABSTRACT 0 /* DEFI */ #define MNG_CONCRETE 1 #define MNG_NOTVIEWABLE 0 /* BASI */ #define MNG_VIEWABLE 1 #define MNG_FULL_CLONE 0 /* CLON */ #define MNG_PARTIAL_CLONE 1 #define MNG_RENUMBER 2 #define MNG_CONCRETE_ASPARENT 0 /* CLON */ #define MNG_CONCRETE_MAKEABSTRACT 1 #define MNG_LOCATION_ABSOLUTE 0 /* CLON, MOVE */ #define MNG_LOCATION_RELATIVE 1 #ifndef MNG_SKIPCHUNK_PAST #define MNG_TARGET_ABSOLUTE 0 /* PAST */ #define MNG_TARGET_RELATIVE_SAMEPAST 1 #define MNG_TARGET_RELATIVE_PREVPAST 2 #define MNG_COMPOSITE_OVER 0 /* PAST */ #define MNG_COMPOSITE_REPLACE 1 #define MNG_COMPOSITE_UNDER 2 #define MNG_ORIENTATION_SAME 0 /* PAST */ #define MNG_ORIENTATION_180DEG 2 #define MNG_ORIENTATION_FLIPHORZ 4 #define MNG_ORIENTATION_FLIPVERT 6 #define MNG_ORIENTATION_TILED 8 #define MNG_OFFSET_ABSOLUTE 0 /* PAST */ #define MNG_OFFSET_RELATIVE 1 #endif #define MNG_BOUNDARY_ABSOLUTE 0 /* PAST, FRAM */ #define MNG_BOUNDARY_RELATIVE 1 #define MNG_BACKGROUNDCOLOR_MANDATORY 0x01 /* BACK */ #define MNG_BACKGROUNDIMAGE_MANDATORY 0x02 /* BACK */ #define MNG_BACKGROUNDIMAGE_NOTILE 0 /* BACK */ #define MNG_BACKGROUNDIMAGE_TILE 1 #define MNG_FRAMINGMODE_NOCHANGE 0 /* FRAM */ #define MNG_FRAMINGMODE_1 1 #define MNG_FRAMINGMODE_2 2 #define MNG_FRAMINGMODE_3 3 #define MNG_FRAMINGMODE_4 4 #define MNG_CHANGEDELAY_NO 0 /* FRAM */ #define MNG_CHANGEDELAY_NEXTSUBFRAME 1 #define MNG_CHANGEDELAY_DEFAULT 2 #define MNG_CHANGETIMOUT_NO 0 /* FRAM */ #define MNG_CHANGETIMOUT_DETERMINISTIC_1 1 #define MNG_CHANGETIMOUT_DETERMINISTIC_2 2 #define MNG_CHANGETIMOUT_DECODER_1 3 #define MNG_CHANGETIMOUT_DECODER_2 4 #define MNG_CHANGETIMOUT_USER_1 5 #define MNG_CHANGETIMOUT_USER_2 6 #define MNG_CHANGETIMOUT_EXTERNAL_1 7 #define MNG_CHANGETIMOUT_EXTERNAL_2 8 #define MNG_CHANGECLIPPING_NO 0 /* FRAM */ #define MNG_CHANGECLIPPING_NEXTSUBFRAME 1 #define MNG_CHANGECLIPPING_DEFAULT 2 #define MNG_CHANGESYNCID_NO 0 /* FRAM */ #define MNG_CHANGESYNCID_NEXTSUBFRAME 1 #define MNG_CHANGESYNCID_DEFAULT 2 #define MNG_CLIPPING_ABSOLUTE 0 /* CLIP */ #define MNG_CLIPPING_RELATIVE 1 #define MNG_SHOWMODE_0 0 /* SHOW */ #define MNG_SHOWMODE_1 1 #define MNG_SHOWMODE_2 2 #define MNG_SHOWMODE_3 3 #define MNG_SHOWMODE_4 4 #define MNG_SHOWMODE_5 5 #define MNG_SHOWMODE_6 6 #define MNG_SHOWMODE_7 7 #define MNG_TERMACTION_LASTFRAME 0 /* TERM */ #define MNG_TERMACTION_CLEAR 1 #define MNG_TERMACTION_FIRSTFRAME 2 #define MNG_TERMACTION_REPEAT 3 #define MNG_ITERACTION_LASTFRAME 0 /* TERM */ #define MNG_ITERACTION_CLEAR 1 #define MNG_ITERACTION_FIRSTFRAME 2 #define MNG_SAVEOFFSET_4BYTE 4 /* SAVE */ #define MNG_SAVEOFFSET_8BYTE 8 #define MNG_SAVEENTRY_SEGMENTFULL 0 /* SAVE */ #define MNG_SAVEENTRY_SEGMENT 1 #define MNG_SAVEENTRY_SUBFRAME 2 #define MNG_SAVEENTRY_EXPORTEDIMAGE 3 #define MNG_PRIORITY_ABSOLUTE 0 /* fPRI */ #define MNG_PRIORITY_RELATIVE 1 #ifdef MNG_INCLUDE_JNG #define MNG_COLORTYPE_JPEGGRAY 8 /* JHDR */ #define MNG_COLORTYPE_JPEGCOLOR 10 #define MNG_COLORTYPE_JPEGGRAYA 12 #define MNG_COLORTYPE_JPEGCOLORA 14 #define MNG_BITDEPTH_JPEG8 8 /* JHDR */ #define MNG_BITDEPTH_JPEG12 12 #define MNG_BITDEPTH_JPEG8AND12 20 #define MNG_COMPRESSION_BASELINEJPEG 8 /* JHDR */ #define MNG_INTERLACE_SEQUENTIAL 0 /* JHDR */ #define MNG_INTERLACE_PROGRESSIVE 8 #endif /* MNG_INCLUDE_JNG */ #define MNG_IMAGETYPE_UNKNOWN 0 /* DHDR */ #define MNG_IMAGETYPE_PNG 1 #define MNG_IMAGETYPE_JNG 2 #define MNG_DELTATYPE_REPLACE 0 /* DHDR */ #define MNG_DELTATYPE_BLOCKPIXELADD 1 #define MNG_DELTATYPE_BLOCKALPHAADD 2 #define MNG_DELTATYPE_BLOCKCOLORADD 3 #define MNG_DELTATYPE_BLOCKPIXELREPLACE 4 #define MNG_DELTATYPE_BLOCKALPHAREPLACE 5 #define MNG_DELTATYPE_BLOCKCOLORREPLACE 6 #define MNG_DELTATYPE_NOCHANGE 7 #define MNG_FILLMETHOD_LEFTBITREPLICATE 0 /* PROM */ #define MNG_FILLMETHOD_ZEROFILL 1 #define MNG_DELTATYPE_REPLACERGB 0 /* PPLT */ #define MNG_DELTATYPE_DELTARGB 1 #define MNG_DELTATYPE_REPLACEALPHA 2 #define MNG_DELTATYPE_DELTAALPHA 3 #define MNG_DELTATYPE_REPLACERGBA 4 #define MNG_DELTATYPE_DELTARGBA 5 #define MNG_POLARITY_ONLY 0 /* DBYK */ #define MNG_POLARITY_ALLBUT 1 #define MNG_EVENT_NONE 0 /* evNT */ #define MNG_EVENT_MOUSEENTER 1 #define MNG_EVENT_MOUSEMOVE 2 #define MNG_EVENT_MOUSEEXIT 3 #define MNG_EVENT_MOUSEDOWN 4 #define MNG_EVENT_MOUSEUP 5 #define MNG_MASK_NONE 0 /* evNT */ #define MNG_MASK_BOX 1 #define MNG_MASK_OBJECT 2 #define MNG_MASK_OBJECTIX 3 #define MNG_MASK_BOXOBJECT 4 #define MNG_MASK_BOXOBJECTIX 5 /* ************************************************************************** */ /* * * */ /* * Processtext callback types * */ /* * * */ /* ************************************************************************** */ #define MNG_TYPE_TEXT 0 #define MNG_TYPE_ZTXT 1 #define MNG_TYPE_ITXT 2 /* ************************************************************************** */ /* * * */ /* * CRC processing masks * */ /* * * */ /* ************************************************************************** */ #define MNG_CRC_INPUT 0x0000000f #define MNG_CRC_INPUT_NONE 0x00000000 #define MNG_CRC_INPUT_PRESENT 0x00000001 #define MNG_CRC_OUTPUT 0x000000f0 #define MNG_CRC_OUTPUT_NONE 0x00000000 #define MNG_CRC_OUTPUT_GENERATE 0x00000020 #define MNG_CRC_OUTPUT_DUMMY 0x00000040 #define MNG_CRC_ANCILLARY 0x00000f00 #define MNG_CRC_ANCILLARY_IGNORE 0x00000000 #define MNG_CRC_ANCILLARY_DISCARD 0x00000100 #define MNG_CRC_ANCILLARY_WARNING 0x00000200 #define MNG_CRC_ANCILLARY_ERROR 0x00000300 #define MNG_CRC_CRITICAL 0x0000f000 #define MNG_CRC_CRITICAL_IGNORE 0x00000000 #define MNG_CRC_CRITICAL_WARNING 0x00002000 #define MNG_CRC_CRITICAL_ERROR 0x00003000 #define MNG_CRC_DEFAULT 0x00002121 /* ************************************************************************** */ #ifdef __cplusplus } #endif #endif /* _libmng_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_pixels.h0000644000000000000000000016733012005307152014473 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_pixels.h copyright (c) 2000-2006 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Pixel-row management routines (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the pixel-row management routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.5.2 - 05/22/2000 - G.Juyn * */ /* * - added some JNG definitions * */ /* * - added delta-image row-processing routines * */ /* * 0.5.2 - 06/05/2000 - G.Juyn * */ /* * - added support for RGB8_A8 canvasstyle * */ /* * * */ /* * 0.5.3 - 06/16/2000 - G.Juyn * */ /* * - changed progressive-display processing * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN support * */ /* * 0.9.3 - 09/07/2000 - G.Juyn * */ /* * - added support for new filter_types * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added optional support for bKGD for PNG images * */ /* * - added support for JDAA * */ /* * 0.9.3 - 10/19/2000 - G.Juyn * */ /* * - implemented delayed delta-processing * */ /* * * */ /* * 0.9.4 - 1/18/2001 - G.Juyn * */ /* * - added "new" MAGN methods 3, 4 & 5 * */ /* * * */ /* * 1.0.1 - 04/21/2001 - G.Juyn (code by G.Kelly) * */ /* * - added BGRA8 canvas with premultiplied alpha * */ /* * * */ /* * 1.0.5 - 08/15/2002 - G.Juyn * */ /* * - completed PROM support * */ /* * - completed delta-image support * */ /* * 1.0.5 - 08/16/2002 - G.Juyn * */ /* * - completed MAGN support (16-bit functions) * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/22/2002 - G.Juyn * */ /* * - added bgrx8 canvas (filler byte) * */ /* * 1.0.5 - 09/23/2002 - G.Juyn * */ /* * - added compose over/under routines for PAST processing * */ /* * - added flip & tile routines for PAST processing * */ /* * * */ /* * 1.0.6 - 03/09/2003 - G.Juyn * */ /* * - hiding 12-bit JPEG stuff * */ /* * 1.0.6 - 05/11/2003 - G. Juyn * */ /* * - added conditionals around canvas update routines * */ /* * 1.0.6 - 06/09/2003 - G. R-P * */ /* * - added conditionals around 8-bit magn routines * */ /* * 1.0.6 - 07/07/2003 - G. R-P * */ /* * - removed conditionals around 8-bit magn routines * */ /* * - added conditionals around 16-bit and delta-PNG * */ /* * supporting code * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added SKIPCHUNK conditionals around PAST chunk support * */ /* * 1.0.6 - 08/18/2003 - G.R-P * */ /* * - added conditionals around 1, 2, and 4-bit prototypes * */ /* * * */ /* * 1.0.7 - 11/27/2003 - R.A * */ /* * - added CANVAS_RGB565 and CANVAS_BGR565 * */ /* * 1.0.7 - 12/06/2003 - R.A * */ /* * - added CANVAS_RGBA565 and CANVAS_BGRA565 * */ /* * 1.0.7 - 01/25/2004 - J.S * */ /* * - added premultiplied alpha canvas' for RGBA, ARGB, ABGR * */ /* * * */ /* * 1.0.9 - 10/10/2004 - G.R-P. * */ /* * - added MNG_NO_1_2_4BIT_SUPPORT * */ /* * 1.0.9 - 10/14/2004 - G.Juyn * */ /* * - added bgr565_a8 canvas-style (thanks to J. Elvander) * */ /* * * */ /* * 1.0.10 - 03/07/2006 - (thanks to W. Manthey) * */ /* * - added CANVAS_RGB555 and CANVAS_BGR555 * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_pixels_h_ #define _libmng_pixels_h_ /* ************************************************************************** */ /* * * */ /* * Progressive display check - checks to see if progressive display is * */ /* * in order & indicates so * */ /* * * */ /* * The routine is called after a call to one of the display_xxx routines * */ /* * if appropriate * */ /* * * */ /* * The refresh is warrented in the read_chunk routine (mng_read.c) * */ /* * and only during read&display processing, since there's not much point * */ /* * doing it from memory! * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_display_progressive_check (mng_datap pData); /* ************************************************************************** */ /* * * */ /* * Display routines - convert rowdata (which is already color-corrected) * */ /* * to the output canvas, respecting any transparency information * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_RGB8 mng_retcode mng_display_rgb8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_RGBA8 mng_retcode mng_display_rgba8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_RGBA8_PM mng_retcode mng_display_rgba8_pm (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_ARGB8 mng_retcode mng_display_argb8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_ARGB8_PM mng_retcode mng_display_argb8_pm (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_RGB8_A8 mng_retcode mng_display_rgb8_a8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_BGR8 mng_retcode mng_display_bgr8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_BGRX8 mng_retcode mng_display_bgrx8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_BGRA8 mng_retcode mng_display_bgra8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_BGRA8_PM mng_retcode mng_display_bgra8_pm (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_ABGR8 mng_retcode mng_display_abgr8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_ABGR8_PM mng_retcode mng_display_abgr8_pm (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_RGB565 mng_retcode mng_display_rgb565 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_RGBA565 mng_retcode mng_display_rgba565 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_BGR565 mng_retcode mng_display_bgr565 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_BGRA565 mng_retcode mng_display_bgra565 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_BGR565_A8 mng_retcode mng_display_bgr565_a8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_RGB555 mng_retcode mng_display_rgb555 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_BGR555 mng_retcode mng_display_bgr555 (mng_datap pData); #endif /* ************************************************************************** */ /* * * */ /* * Background restore routines - restore the background with info from * */ /* * the BACK and/or bKGD chunk and/or the app's background canvas * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_restore_bkgd_backimage (mng_datap pData); mng_retcode mng_restore_bkgd_backcolor (mng_datap pData); mng_retcode mng_restore_bkgd_bkgd (mng_datap pData); mng_retcode mng_restore_bkgd_bgcolor (mng_datap pData); #ifndef MNG_SKIPCANVAS_RGB8 mng_retcode mng_restore_bkgd_rgb8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_BGR8 mng_retcode mng_restore_bkgd_bgr8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_BGRX8 mng_retcode mng_restore_bkgd_bgrx8 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_RGB565 mng_retcode mng_restore_bkgd_rgb565 (mng_datap pData); #endif #ifndef MNG_SKIPCANVAS_BGR565 mng_retcode mng_restore_bkgd_bgr565 (mng_datap pData); #endif /* ************************************************************************** */ /* * * */ /* * Row retrieval routines - retrieve processed & uncompressed row-data * */ /* * from the current "object" * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_retrieve_g8 (mng_datap pData); mng_retcode mng_retrieve_rgb8 (mng_datap pData); mng_retcode mng_retrieve_idx8 (mng_datap pData); mng_retcode mng_retrieve_ga8 (mng_datap pData); mng_retcode mng_retrieve_rgba8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_retrieve_g16 (mng_datap pData); mng_retcode mng_retrieve_ga16 (mng_datap pData); mng_retcode mng_retrieve_rgb16 (mng_datap pData); mng_retcode mng_retrieve_rgba16 (mng_datap pData); #endif /* ************************************************************************** */ /* * * */ /* * Row storage routines - store processed & uncompressed row-data * */ /* * into the current "object" * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_store_g1 (mng_datap pData); mng_retcode mng_store_g2 (mng_datap pData); mng_retcode mng_store_g4 (mng_datap pData); mng_retcode mng_store_idx1 (mng_datap pData); mng_retcode mng_store_idx2 (mng_datap pData); mng_retcode mng_store_idx4 (mng_datap pData); #endif mng_retcode mng_store_idx8 (mng_datap pData); mng_retcode mng_store_rgb8 (mng_datap pData); mng_retcode mng_store_g8 (mng_datap pData); mng_retcode mng_store_ga8 (mng_datap pData); mng_retcode mng_store_rgba8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_g16 (mng_datap pData); mng_retcode mng_store_ga16 (mng_datap pData); mng_retcode mng_store_rgb16 (mng_datap pData); mng_retcode mng_store_rgba16 (mng_datap pData); #endif /* ************************************************************************** */ /* * * */ /* * Row storage routines (JPEG) - store processed & uncompressed row-data * */ /* * into the current "object" * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG mng_retcode mng_store_jpeg_g8 (mng_datap pData); mng_retcode mng_store_jpeg_rgb8 (mng_datap pData); mng_retcode mng_store_jpeg_ga8 (mng_datap pData); mng_retcode mng_store_jpeg_rgba8 (mng_datap pData); #ifdef MNG_SUPPORT_JPEG12 mng_retcode mng_store_jpeg_g12 (mng_datap pData); mng_retcode mng_store_jpeg_rgb12 (mng_datap pData); mng_retcode mng_store_jpeg_ga12 (mng_datap pData); mng_retcode mng_store_jpeg_rgba12 (mng_datap pData); #endif mng_retcode mng_store_jpeg_g8_alpha (mng_datap pData); mng_retcode mng_store_jpeg_rgb8_alpha (mng_datap pData); #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_store_jpeg_g8_a1 (mng_datap pData); mng_retcode mng_store_jpeg_g8_a2 (mng_datap pData); mng_retcode mng_store_jpeg_g8_a4 (mng_datap pData); #endif mng_retcode mng_store_jpeg_g8_a8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_jpeg_g8_a16 (mng_datap pData); #endif #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_store_jpeg_rgb8_a1 (mng_datap pData); mng_retcode mng_store_jpeg_rgb8_a2 (mng_datap pData); mng_retcode mng_store_jpeg_rgb8_a4 (mng_datap pData); #endif mng_retcode mng_store_jpeg_rgb8_a8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_jpeg_rgb8_a16 (mng_datap pData); #endif #ifdef MNG_SUPPORT_JPEG12 #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_store_jpeg_g12_a1 (mng_datap pData); mng_retcode mng_store_jpeg_g12_a2 (mng_datap pData); mng_retcode mng_store_jpeg_g12_a4 (mng_datap pData); #endif mng_retcode mng_store_jpeg_g12_a8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_jpeg_g12_a16 (mng_datap pData); #endif #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_store_jpeg_rgb12_a1 (mng_datap pData); mng_retcode mng_store_jpeg_rgb12_a2 (mng_datap pData); mng_retcode mng_store_jpeg_rgb12_a4 (mng_datap pData); #endif mng_retcode mng_store_jpeg_rgb12_a8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_jpeg_rgb12_a16 (mng_datap pData); #endif #endif #endif /* ************************************************************************** */ /* * * */ /* * Delta-image row routines - apply the processed & uncompressed row-data * */ /* * onto the target "object" * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_delta_g1 (mng_datap pData); mng_retcode mng_delta_g2 (mng_datap pData); mng_retcode mng_delta_g4 (mng_datap pData); #endif mng_retcode mng_delta_g8 (mng_datap pData); mng_retcode mng_delta_g16 (mng_datap pData); mng_retcode mng_delta_rgb8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_rgb16 (mng_datap pData); #endif #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_delta_idx1 (mng_datap pData); mng_retcode mng_delta_idx2 (mng_datap pData); mng_retcode mng_delta_idx4 (mng_datap pData); #endif mng_retcode mng_delta_idx8 (mng_datap pData); mng_retcode mng_delta_ga8 (mng_datap pData); mng_retcode mng_delta_rgba8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_ga16 (mng_datap pData); mng_retcode mng_delta_rgba16 (mng_datap pData); #endif /* ************************************************************************** */ /* * * */ /* * Delta-image row routines - apply the source row onto the target * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_delta_g1_g1 (mng_datap pData); mng_retcode mng_delta_g2_g2 (mng_datap pData); mng_retcode mng_delta_g4_g4 (mng_datap pData); #endif mng_retcode mng_delta_g8_g8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_g16_g16 (mng_datap pData); #endif mng_retcode mng_delta_ga8_ga8 (mng_datap pData); mng_retcode mng_delta_ga8_g8 (mng_datap pData); mng_retcode mng_delta_ga8_a8 (mng_datap pData); mng_retcode mng_delta_rgba8_rgb8 (mng_datap pData); mng_retcode mng_delta_rgba8_a8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_ga16_ga16 (mng_datap pData); mng_retcode mng_delta_ga16_g16 (mng_datap pData); mng_retcode mng_delta_ga16_a16 (mng_datap pData); mng_retcode mng_delta_rgba16_a16 (mng_datap pData); mng_retcode mng_delta_rgba16_rgb16 (mng_datap pData); #endif #endif /* MNG_NO_DELTA_PNG */ mng_retcode mng_delta_rgb8_rgb8 (mng_datap pData); /* Used for PAST */ mng_retcode mng_delta_rgba8_rgba8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_rgb16_rgb16 (mng_datap pData); mng_retcode mng_delta_rgba16_rgba16 (mng_datap pData); #endif #ifndef MNG_NO_DELTA_PNG /* ************************************************************************** */ /* * * */ /* * Delta-image row routines - scale the delta to bitdepth of target * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_scale_g1_g2 (mng_datap pData); mng_retcode mng_scale_g1_g4 (mng_datap pData); mng_retcode mng_scale_g1_g8 (mng_datap pData); mng_retcode mng_scale_g2_g4 (mng_datap pData); mng_retcode mng_scale_g2_g8 (mng_datap pData); mng_retcode mng_scale_g4_g8 (mng_datap pData); #endif #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_scale_g1_g16 (mng_datap pData); mng_retcode mng_scale_g2_g16 (mng_datap pData); mng_retcode mng_scale_g4_g16 (mng_datap pData); #endif mng_retcode mng_scale_g8_g16 (mng_datap pData); mng_retcode mng_scale_ga8_ga16 (mng_datap pData); mng_retcode mng_scale_rgb8_rgb16 (mng_datap pData); mng_retcode mng_scale_rgba8_rgba16 (mng_datap pData); #endif #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_scale_g2_g1 (mng_datap pData); mng_retcode mng_scale_g4_g1 (mng_datap pData); mng_retcode mng_scale_g8_g1 (mng_datap pData); mng_retcode mng_scale_g4_g2 (mng_datap pData); mng_retcode mng_scale_g8_g2 (mng_datap pData); mng_retcode mng_scale_g8_g4 (mng_datap pData); #endif #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_scale_g16_g1 (mng_datap pData); mng_retcode mng_scale_g16_g2 (mng_datap pData); mng_retcode mng_scale_g16_g4 (mng_datap pData); #endif mng_retcode mng_scale_g16_g8 (mng_datap pData); mng_retcode mng_scale_ga16_ga8 (mng_datap pData); mng_retcode mng_scale_rgb16_rgb8 (mng_datap pData); mng_retcode mng_scale_rgba16_rgba8 (mng_datap pData); #endif #endif /* MNG_NO_DELTA_PNG */ /* ************************************************************************** */ /* * * */ /* * Delta-image bit routines - promote bit_depth * */ /* * * */ /* ************************************************************************** */ mng_uint8 mng_promote_replicate_1_2 (mng_uint8 iB); mng_uint8 mng_promote_replicate_1_4 (mng_uint8 iB); mng_uint8 mng_promote_replicate_1_8 (mng_uint8 iB); mng_uint8 mng_promote_replicate_2_4 (mng_uint8 iB); mng_uint8 mng_promote_replicate_2_8 (mng_uint8 iB); mng_uint8 mng_promote_replicate_4_8 (mng_uint8 iB); #ifndef MNG_NO_16BIT_SUPPORT mng_uint16 mng_promote_replicate_1_16 (mng_uint8 iB); mng_uint16 mng_promote_replicate_2_16 (mng_uint8 iB); mng_uint16 mng_promote_replicate_4_16 (mng_uint8 iB); mng_uint16 mng_promote_replicate_8_16 (mng_uint8 iB); #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_uint8 mng_promote_zerofill_1_2 (mng_uint8 iB); mng_uint8 mng_promote_zerofill_1_4 (mng_uint8 iB); mng_uint8 mng_promote_zerofill_1_8 (mng_uint8 iB); mng_uint8 mng_promote_zerofill_2_4 (mng_uint8 iB); mng_uint8 mng_promote_zerofill_2_8 (mng_uint8 iB); mng_uint8 mng_promote_zerofill_4_8 (mng_uint8 iB); #ifndef MNG_NO_16BIT_SUPPORT mng_uint16 mng_promote_zerofill_1_16 (mng_uint8 iB); mng_uint16 mng_promote_zerofill_2_16 (mng_uint8 iB); mng_uint16 mng_promote_zerofill_4_16 (mng_uint8 iB); mng_uint16 mng_promote_zerofill_8_16 (mng_uint8 iB); #endif #endif /* MNG_NO_DELTA_PNG */ /* ************************************************************************** */ /* * * */ /* * Delta-image row routines - promote color_type * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_promote_g8_g8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_g8_g16 (mng_datap pData); mng_retcode mng_promote_g16_g16 (mng_datap pData); #endif mng_retcode mng_promote_g8_ga8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_g8_ga16 (mng_datap pData); mng_retcode mng_promote_g16_ga16 (mng_datap pData); #endif mng_retcode mng_promote_g8_rgb8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_g8_rgb16 (mng_datap pData); mng_retcode mng_promote_g16_rgb16 (mng_datap pData); #endif mng_retcode mng_promote_g8_rgba8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_g8_rgba16 (mng_datap pData); mng_retcode mng_promote_g16_rgba16 (mng_datap pData); mng_retcode mng_promote_ga8_ga16 (mng_datap pData); #endif mng_retcode mng_promote_ga8_rgba8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_ga8_rgba16 (mng_datap pData); mng_retcode mng_promote_ga16_rgba16 (mng_datap pData); #endif #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_rgb8_rgb16 (mng_datap pData); #endif mng_retcode mng_promote_rgb8_rgba8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_rgb8_rgba16 (mng_datap pData); mng_retcode mng_promote_rgb16_rgba16 (mng_datap pData); #endif mng_retcode mng_promote_idx8_rgb8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_idx8_rgb16 (mng_datap pData); #endif mng_retcode mng_promote_idx8_rgba8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_idx8_rgba16 (mng_datap pData); mng_retcode mng_promote_rgba8_rgba16 (mng_datap pData); #endif /* ************************************************************************** */ /* * * */ /* * Row processing routines - convert uncompressed data from zlib to * */ /* * managable row-data which serves as input to the color-management * */ /* * routines * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_process_g1 (mng_datap pData); mng_retcode mng_process_g2 (mng_datap pData); mng_retcode mng_process_g4 (mng_datap pData); #endif mng_retcode mng_process_g8 (mng_datap pData); mng_retcode mng_process_rgb8 (mng_datap pData); #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_process_idx1 (mng_datap pData); mng_retcode mng_process_idx2 (mng_datap pData); mng_retcode mng_process_idx4 (mng_datap pData); #endif mng_retcode mng_process_idx8 (mng_datap pData); mng_retcode mng_process_ga8 (mng_datap pData); mng_retcode mng_process_rgba8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_process_g16 (mng_datap pData); mng_retcode mng_process_ga16 (mng_datap pData); mng_retcode mng_process_rgb16 (mng_datap pData); mng_retcode mng_process_rgba16 (mng_datap pData); #endif /* ************************************************************************** */ /* * * */ /* * Row processing initialization routines - set up the variables needed * */ /* * to process uncompressed row-data * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_FOOTPRINT_INIT #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_init_g1_i (mng_datap pData); mng_retcode mng_init_g2_i (mng_datap pData); mng_retcode mng_init_g4_i (mng_datap pData); #endif mng_retcode mng_init_g8_i (mng_datap pData); mng_retcode mng_init_rgb8_i (mng_datap pData); #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_init_idx1_i (mng_datap pData); mng_retcode mng_init_idx2_i (mng_datap pData); mng_retcode mng_init_idx4_i (mng_datap pData); #endif mng_retcode mng_init_idx8_i (mng_datap pData); mng_retcode mng_init_ga8_i (mng_datap pData); mng_retcode mng_init_rgba8_i (mng_datap pData); #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_init_g1_ni (mng_datap pData); mng_retcode mng_init_g2_ni (mng_datap pData); mng_retcode mng_init_g4_ni (mng_datap pData); #endif mng_retcode mng_init_g8_ni (mng_datap pData); mng_retcode mng_init_rgb8_ni (mng_datap pData); #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_init_idx1_ni (mng_datap pData); mng_retcode mng_init_idx2_ni (mng_datap pData); mng_retcode mng_init_idx4_ni (mng_datap pData); #endif mng_retcode mng_init_idx8_ni (mng_datap pData); mng_retcode mng_init_ga8_ni (mng_datap pData); mng_retcode mng_init_rgba8_ni (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_init_g16_i (mng_datap pData); mng_retcode mng_init_rgb16_i (mng_datap pData); mng_retcode mng_init_ga16_i (mng_datap pData); mng_retcode mng_init_rgba16_i (mng_datap pData); mng_retcode mng_init_g16_ni (mng_datap pData); mng_retcode mng_init_rgb16_ni (mng_datap pData); mng_retcode mng_init_ga16_ni (mng_datap pData); mng_retcode mng_init_rgba16_ni (mng_datap pData); #endif #endif /* ************************************************************************** */ /* * * */ /* * Row processing initialization routines (JPEG) - set up the variables * */ /* * needed to process uncompressed row-data * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_FOOTPRINT_INIT #ifdef MNG_INCLUDE_JNG #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_init_jpeg_a1_ni (mng_datap pData); mng_retcode mng_init_jpeg_a2_ni (mng_datap pData); mng_retcode mng_init_jpeg_a4_ni (mng_datap pData); #endif mng_retcode mng_init_jpeg_a8_ni (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_init_jpeg_a16_ni (mng_datap pData); #endif #endif #endif /* ************************************************************************** */ /* * * */ /* * General row processing routines * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_init_rowproc (mng_datap pData); mng_retcode mng_next_row (mng_datap pData); #ifdef MNG_INCLUDE_JNG mng_retcode mng_next_jpeg_alpharow (mng_datap pData); mng_retcode mng_next_jpeg_row (mng_datap pData); #endif mng_retcode mng_cleanup_rowproc (mng_datap pData); /* ************************************************************************** */ /* * * */ /* * Magnification row routines - apply magnification transforms * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN mng_retcode mng_magnify_g8_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_g8_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_g8_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgb8_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgb8_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgb8_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_ga8_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_ga8_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_ga8_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_ga8_x4 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_ga8_x5 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); #endif mng_retcode mng_magnify_rgba8_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgba8_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgba8_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgba8_x4 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgba8_x5 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN mng_retcode mng_magnify_g8_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_g8_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_g8_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgb8_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgb8_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgb8_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_ga8_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_ga8_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_ga8_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_ga8_y4 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_ga8_y5 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); #endif mng_retcode mng_magnify_rgba8_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgba8_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgba8_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgba8_y4 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgba8_y5 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN mng_retcode mng_magnify_g16_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_g16_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_g16_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgb16_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgb16_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgb16_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_ga16_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_ga16_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_ga16_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_ga16_x4 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_ga16_x5 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgba16_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgba16_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgba16_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgba16_x4 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_rgba16_x5 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline); mng_retcode mng_magnify_g16_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_g16_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_g16_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgb16_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgb16_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgb16_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_ga16_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_ga16_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_ga16_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_ga16_y4 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_ga16_y5 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgba16_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgba16_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgba16_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgba16_y4 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); mng_retcode mng_magnify_rgba16_y5 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline); #endif #endif /* ************************************************************************** */ /* * * */ /* * PAST composition routines - compose over/under with a target object * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_composeover_rgba8 (mng_datap pData); #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_composeunder_rgba8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_composeover_rgba16 (mng_datap pData); mng_retcode mng_composeunder_rgba16 (mng_datap pData); #endif #endif /* ************************************************************************** */ /* * * */ /* * PAST flip & tile routines - flip or tile a row of pixels * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_flip_rgba8 (mng_datap pData); mng_retcode mng_tile_rgba8 (mng_datap pData); #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_flip_rgba16 (mng_datap pData); mng_retcode mng_tile_rgba16 (mng_datap pData); #endif #endif /* ************************************************************************** */ #endif /* _libmng_pixels_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_chunk_descr.h0000644000000000000000000001451112005307152015447 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_chunk_descr.h copyright (c) 2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Chunk descriptor functions (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : definition of the chunk- anf field-descriptor routines * */ /* * * */ /* * changes : 1.0.9 - 12/06/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKREADER * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_chunk_descr_h_ #define _libmng_chunk_descr_h_ /* ************************************************************************** */ #ifdef MNG_OPTIMIZE_CHUNKREADER #if defined(MNG_INCLUDE_READ_PROCS) || defined(MNG_INCLUDE_WRITE_PROCS) /* ************************************************************************** */ void mng_get_chunkheader (mng_chunkid iChunkname, mng_chunk_headerp pResult); /* ************************************************************************** */ #define MNG_F_SPECIALFUNC(n) mng_retcode n (mng_datap pData, \ mng_chunkp pChunk, \ mng_uint32* piRawlen, \ mng_uint8p* ppRawdata) MNG_F_SPECIALFUNC (mng_debunk_plte) ; MNG_F_SPECIALFUNC (mng_debunk_trns) ; MNG_F_SPECIALFUNC (mng_deflate_itxt) ; MNG_F_SPECIALFUNC (mng_splt_entries) ; MNG_F_SPECIALFUNC (mng_hist_entries) ; MNG_F_SPECIALFUNC (mng_debunk_loop) ; MNG_F_SPECIALFUNC (mng_debunk_past) ; MNG_F_SPECIALFUNC (mng_disc_entries) ; MNG_F_SPECIALFUNC (mng_fram_remainder) ; MNG_F_SPECIALFUNC (mng_save_entries) ; MNG_F_SPECIALFUNC (mng_pplt_entries) ; MNG_F_SPECIALFUNC (mng_drop_entries) ; MNG_F_SPECIALFUNC (mng_ordr_entries) ; MNG_F_SPECIALFUNC (mng_debunk_magn) ; MNG_F_SPECIALFUNC (mng_evnt_entries) ; MNG_F_SPECIALFUNC (mng_adat_tiles) ; /* ************************************************************************** */ #define MNG_C_SPECIALFUNC(n) mng_retcode n (mng_datap pData, \ mng_chunkp pChunk) MNG_C_SPECIALFUNC (mng_special_ihdr) ; MNG_C_SPECIALFUNC (mng_special_plte) ; MNG_C_SPECIALFUNC (mng_special_idat) ; MNG_C_SPECIALFUNC (mng_special_iend) ; MNG_C_SPECIALFUNC (mng_special_trns) ; MNG_C_SPECIALFUNC (mng_special_gama) ; MNG_C_SPECIALFUNC (mng_special_chrm) ; MNG_C_SPECIALFUNC (mng_special_srgb) ; MNG_C_SPECIALFUNC (mng_special_iccp) ; MNG_C_SPECIALFUNC (mng_special_text) ; MNG_C_SPECIALFUNC (mng_special_ztxt) ; MNG_C_SPECIALFUNC (mng_special_itxt) ; MNG_C_SPECIALFUNC (mng_special_bkgd) ; MNG_C_SPECIALFUNC (mng_special_phys) ; MNG_C_SPECIALFUNC (mng_special_sbit) ; MNG_C_SPECIALFUNC (mng_special_splt) ; MNG_C_SPECIALFUNC (mng_special_hist) ; MNG_C_SPECIALFUNC (mng_special_time) ; MNG_C_SPECIALFUNC (mng_special_jhdr) ; MNG_C_SPECIALFUNC (mng_special_jdaa) ; MNG_C_SPECIALFUNC (mng_special_jdat) ; MNG_C_SPECIALFUNC (mng_special_jsep) ; MNG_C_SPECIALFUNC (mng_special_mhdr) ; MNG_C_SPECIALFUNC (mng_special_mend) ; MNG_C_SPECIALFUNC (mng_special_loop) ; MNG_C_SPECIALFUNC (mng_special_endl) ; MNG_C_SPECIALFUNC (mng_special_defi) ; MNG_C_SPECIALFUNC (mng_special_basi) ; MNG_C_SPECIALFUNC (mng_special_clon) ; MNG_C_SPECIALFUNC (mng_special_past) ; MNG_C_SPECIALFUNC (mng_special_disc) ; MNG_C_SPECIALFUNC (mng_special_back) ; MNG_C_SPECIALFUNC (mng_special_fram) ; MNG_C_SPECIALFUNC (mng_special_move) ; MNG_C_SPECIALFUNC (mng_special_clip) ; MNG_C_SPECIALFUNC (mng_special_show) ; MNG_C_SPECIALFUNC (mng_special_term) ; MNG_C_SPECIALFUNC (mng_special_save) ; MNG_C_SPECIALFUNC (mng_special_seek) ; MNG_C_SPECIALFUNC (mng_special_expi) ; MNG_C_SPECIALFUNC (mng_special_fpri) ; MNG_C_SPECIALFUNC (mng_special_need) ; MNG_C_SPECIALFUNC (mng_special_phyg) ; MNG_C_SPECIALFUNC (mng_special_dhdr) ; MNG_C_SPECIALFUNC (mng_special_prom) ; MNG_C_SPECIALFUNC (mng_special_ipng) ; MNG_C_SPECIALFUNC (mng_special_pplt) ; MNG_C_SPECIALFUNC (mng_special_ijng) ; MNG_C_SPECIALFUNC (mng_special_drop) ; MNG_C_SPECIALFUNC (mng_special_dbyk) ; MNG_C_SPECIALFUNC (mng_special_ordr) ; MNG_C_SPECIALFUNC (mng_special_magn) ; MNG_C_SPECIALFUNC (mng_special_evnt) ; MNG_C_SPECIALFUNC (mng_special_mpng) ; MNG_C_SPECIALFUNC (mng_special_ahdr) ; MNG_C_SPECIALFUNC (mng_special_adat) ; MNG_C_SPECIALFUNC (mng_special_unknown) ; /* ************************************************************************** */ #endif /* MNG_INCLUDE_READ_PROCS) || MNG_INCLUDE_WRITE_PROCS */ #endif /* MNG_OPTIMIZE_CHUNKREADER */ /* ************************************************************************** */ #endif /* _libmng_chunk_descr_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/config.h.in0000644000000000000000000000720612115360516013511 0ustar rootroot/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* define if you want JPEG support */ #undef HAVE_LIBJPEG /* define if you want lcms v1 support */ #undef HAVE_LIBLCMS1 /* define if you want lcms v2 support */ #undef HAVE_LIBLCMS2 /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* define if you want chunk access support */ #undef MNG_ACCESS_CHUNKS /* enable building standard shared object */ #undef MNG_BUILD_SO /* enable verbose error text */ #undef MNG_ERROR_TELLTALE /* define if you want full lcms support */ #undef MNG_FULL_CMS /* enable support for accessing chunks */ #undef MNG_STORE_CHUNKS /* define if you want display support */ #undef MNG_SUPPORT_DISPLAY /* define if you want dynamic support */ #undef MNG_SUPPORT_DYNAMICMNG /* define if you want full mng support */ #undef MNG_SUPPORT_FULL /* define if you want read support */ #undef MNG_SUPPORT_READ /* enable support for debug tracing */ #undef MNG_SUPPORT_TRACE /* define if you want write support */ #undef MNG_SUPPORT_WRITE /* enable support for debug messages */ #undef MNG_TRACE_TELLTALE /* but: libmng.dll (!) */ #undef MNG_VERSION_DLL /* MAJOR number of version */ #undef MNG_VERSION_MAJOR /* MINOR number of version */ #undef MNG_VERSION_MINOR /* PATCH number of version */ #undef MNG_VERSION_RELEASE /* eg. libmng.so.1 */ #undef MNG_VERSION_SO /* 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 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to empty if `const' does not conform to ANSI C. */ #undef const libmng-2.0.2/libmng_dither.c0000644000000000000000000000572512005307152014440 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_dither.c copyright (c) 2000-2004 G.Juyn * */ /* * version : 1.0.9 * */ /* * * */ /* * purpose : Dithering routines (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the dithering routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_dither.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ mng_retcode mng_dither_a_row (mng_datap pData, mng_uint8p pRow) { return MNG_NOERROR; } /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/README.autoconf0000644000000000000000000002145412005307152014157 0ustar rootroot********************************************************************** ********************************************************************** ***** this is unmaintained ***** If you happen to find problems with autoconfiguration and building, I simply cannot help you. I'm looking for a maintainer that doesn't mind spending a few minutes every now and then on the next release to make sure things are still in working order. For the moment all autoconf stuff ahs been moved into unmaintained!! ********************************************************************** ********************************************************************** Configuration from CVS ====================== If you're using source checked out from CVS, rather than a source distribution tarball, please be aware that you can use ./autogen.sh in place of ./configure below. Because this is a cross-platform project, the source templates for the autoconf scripts are sequestered in the 'makefiles' directory. Running './autogen.sh' will copy them into their conventional places at the lop level. If you already see the files there, you don't need to worry about this step. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. libmng-2.0.2/config.log0000644000000000000000000007270212115373261013442 0ustar rootrootThis file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by libmng configure 2.0.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ ./configure --prefix=/usr --libdir=/usr/lib64 --with-lcms2 ## --------- ## ## Platform. ## ## --------- ## hostname = mary uname -m = x86_64 uname -r = 3.8.0 uname -s = Linux uname -v = #1 SMP Fri Feb 22 06:58:38 CET 2013 /usr/bin/uname -p = AMD FX(tm)-6100 Six-Core Processor /bin/uname -X = unknown /bin/arch = x86_64 /usr/bin/arch -k = unknown /usr/convex/getsysinfo = unknown /usr/bin/hostinfo = unknown /bin/machine = unknown /usr/bin/oslevel = unknown /bin/universe = unknown PATH: /usr/local/sbin PATH: /usr/sbin PATH: /sbin PATH: /usr/local/bin PATH: /usr/bin PATH: /bin PATH: /usr/games PATH: /usr/lib64/java/bin PATH: /usr/lib64/java/jre/bin PATH: /usr/lib64/java/bin PATH: /usr/lib64/kde4/libexec PATH: /usr/lib64/qt/bin PATH: /usr/share/texmf/bin PATH: /usr/local/fltk11/bin PATH: /usr/local/fltk13/bin PATH: /usr/local/fltk2/bin PATH: /usr/local/fltk3/bin PATH: /usr/local/sylpheed/bin PATH: /usr/local/valgrind/bin PATH: /usr/local/ogle/bin ## ----------- ## ## Core tests. ## ## ----------- ## configure:2295: checking for a BSD-compatible install configure:2363: result: /usr/bin/ginstall -c configure:2374: checking whether build environment is sane configure:2429: result: yes configure:2580: checking for a thread-safe mkdir -p configure:2619: result: /usr/bin/mkdir -p configure:2626: checking for gawk configure:2642: found /usr/bin/gawk configure:2653: result: gawk configure:2664: checking whether make sets $(MAKE) configure:2686: result: yes configure:2715: checking whether make supports nested variables configure:2732: result: yes configure:2878: checking for gcc configure:2894: found /usr/bin/gcc configure:2905: result: gcc configure:3134: checking for C compiler version configure:3143: gcc --version >&5 gcc (GCC) 4.7.2 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. configure:3154: $? = 0 configure:3143: gcc -v >&5 Reading specs from /usr/lib64/gcc/x86_64-slackware-linux/4.7.2/specs COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-slackware-linux/4.7.2/lto-wrapper Target: x86_64-slackware-linux Configured with: ../gcc-4.7.2/configure --prefix=/usr --libdir=/usr/lib64 --mandir=/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-languages=ada,c,c++,fortran,go,java,lto,objc --enable-threads=posix --enable-checking=release --enable-objc-gc --with-system-zlib --with-python-dir=/lib64/python2.7/site-packages --disable-libunwind-exceptions --enable-__cxa_atexit --enable-libssp --enable-lto --with-gnu-ld --verbose --enable-java-home --with-java-home=/usr/lib64/jvm/jre --with-jvm-root-dir=/usr/lib64/jvm --with-jvm-jar-dir=/usr/lib64/jvm/jvm-exports --with-arch-directory=amd64 --with-antlr-jar=/usr/local/src/GCC/SLACK/gcc/antlr-runtime-3.4.jar --enable-java-awt=gtk --disable-gtktest --disable-multilib --target=x86_64-slackware-linux --build=x86_64-slackware-linux --host=x86_64-slackware-linux Thread model: posix gcc version 4.7.2 (GCC) configure:3154: $? = 0 configure:3143: gcc -V >&5 gcc: error: unrecognized command line option '-V' gcc: fatal error: no input files compilation terminated. configure:3154: $? = 1 configure:3143: gcc -qversion >&5 gcc: error: unrecognized command line option '-qversion' gcc: fatal error: no input files compilation terminated. configure:3154: $? = 1 configure:3174: checking whether the C compiler works configure:3196: gcc conftest.c >&5 configure:3200: $? = 0 configure:3248: result: yes configure:3251: checking for C compiler default output file name configure:3253: result: a.out configure:3259: checking for suffix of executables configure:3266: gcc -o conftest conftest.c >&5 configure:3270: $? = 0 configure:3292: result: configure:3314: checking whether we are cross compiling configure:3322: gcc -o conftest conftest.c >&5 configure:3326: $? = 0 configure:3333: ./conftest configure:3337: $? = 0 configure:3352: result: no configure:3357: checking for suffix of object files configure:3379: gcc -c conftest.c >&5 configure:3383: $? = 0 configure:3404: result: o configure:3408: checking whether we are using the GNU C compiler configure:3427: gcc -c conftest.c >&5 configure:3427: $? = 0 configure:3436: result: yes configure:3445: checking whether gcc accepts -g configure:3465: gcc -c -g conftest.c >&5 configure:3465: $? = 0 configure:3506: result: yes configure:3523: checking for gcc option to accept ISO C89 configure:3586: gcc -c -g -O2 conftest.c >&5 configure:3586: $? = 0 configure:3599: result: none needed configure:3630: checking for style of include used by make configure:3658: result: GNU configure:3684: checking dependency style of gcc configure:3795: result: none configure:3811: checking for library containing strerror configure:3842: gcc -o conftest -g -O2 conftest.c >&5 configure:3842: $? = 0 configure:3859: result: none required configure:3896: checking build system type configure:3910: result: x86_64-unknown-linux-gnu configure:3930: checking host system type configure:3943: result: x86_64-unknown-linux-gnu configure:3984: checking how to print strings configure:4011: result: printf configure:4032: checking for a sed that does not truncate output configure:4096: result: /usr/bin/sed configure:4114: checking for grep that handles long lines and -e configure:4172: result: /usr/bin/grep configure:4177: checking for egrep configure:4239: result: /usr/bin/grep -E configure:4244: checking for fgrep configure:4306: result: /usr/bin/grep -F configure:4341: checking for ld used by gcc configure:4408: result: /usr/x86_64-slackware-linux/bin/ld configure:4415: checking if the linker (/usr/x86_64-slackware-linux/bin/ld) is GNU ld configure:4430: result: yes configure:4442: checking for BSD- or MS-compatible name lister (nm) configure:4491: result: /usr/bin/nm -B configure:4621: checking the name lister (/usr/bin/nm -B) interface configure:4628: gcc -c -g -O2 conftest.c >&5 configure:4631: /usr/bin/nm -B "conftest.o" configure:4634: output 0000000000000000 B some_variable configure:4641: result: BSD nm configure:4644: checking whether ln -s works configure:4648: result: yes configure:4656: checking the maximum length of command line arguments configure:4781: result: 1572864 configure:4798: checking whether the shell understands some XSI constructs configure:4808: result: yes configure:4812: checking whether the shell understands "+=" configure:4818: result: yes configure:4853: checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format configure:4893: result: func_convert_file_noop configure:4900: checking how to convert x86_64-unknown-linux-gnu file names to toolchain format configure:4920: result: func_convert_file_noop configure:4927: checking for /usr/x86_64-slackware-linux/bin/ld option to reload object files configure:4934: result: -r configure:5008: checking for objdump configure:5024: found /usr/bin/objdump configure:5035: result: objdump configure:5067: checking how to recognize dependent libraries configure:5269: result: pass_all configure:5354: checking for dlltool configure:5370: found /usr/bin/dlltool configure:5381: result: dlltool configure:5414: checking how to associate runtime and link libraries configure:5441: result: printf %s\n configure:5501: checking for ar configure:5517: found /usr/bin/ar configure:5528: result: ar configure:5565: checking for archiver @FILE support configure:5582: gcc -c -g -O2 conftest.c >&5 configure:5582: $? = 0 configure:5585: ar cru libconftest.a @conftest.lst >&5 configure:5588: $? = 0 configure:5593: ar cru libconftest.a @conftest.lst >&5 ar: conftest.o: No such file or directory configure:5596: $? = 1 configure:5608: result: @ configure:5666: checking for strip configure:5682: found /usr/bin/strip configure:5693: result: strip configure:5765: checking for ranlib configure:5781: found /usr/bin/ranlib configure:5792: result: ranlib configure:5894: checking command to parse /usr/bin/nm -B output from gcc object configure:6013: gcc -c -g -O2 conftest.c >&5 configure:6016: $? = 0 configure:6020: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm configure:6023: $? = 0 configure:6089: gcc -o conftest -g -O2 conftest.c conftstm.o >&5 configure:6092: $? = 0 configure:6130: result: ok configure:6167: checking for sysroot configure:6197: result: no configure:6274: gcc -c -g -O2 conftest.c >&5 configure:6277: $? = 0 configure:6440: checking for mt configure:6456: found /bin/mt configure:6467: result: mt configure:6490: checking if mt is a manifest tool configure:6496: mt '-?' usage: mt [-v] [--version] [-h] [ -f device ] command [ count ] configure:6504: result: no configure:7136: checking how to run the C preprocessor configure:7167: gcc -E conftest.c configure:7167: $? = 0 configure:7181: gcc -E conftest.c conftest.c:16:28: fatal error: ac_nonexistent.h: No such file or directory compilation terminated. configure:7181: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "libmng" | #define PACKAGE_TARNAME "libmng-2.0.2" | #define PACKAGE_VERSION "2.0.2" | #define PACKAGE_STRING "libmng 2.0.2" | #define PACKAGE_BUGREPORT "png-mng-implement@lists.sourceforge.net" | #define PACKAGE_URL "http://www.libmng.com/" | #define PACKAGE "libmng-2.0.2" | #define VERSION "2.0.2" | #define MNG_VERSION_MAJOR 2 | #define MNG_VERSION_MINOR 0 | #define MNG_VERSION_RELEASE 2 | #define MNG_VERSION_SO 2 | #define MNG_VERSION_DLL 2 | /* end confdefs.h. */ | #include configure:7206: result: gcc -E configure:7226: gcc -E conftest.c configure:7226: $? = 0 configure:7240: gcc -E conftest.c conftest.c:16:28: fatal error: ac_nonexistent.h: No such file or directory compilation terminated. configure:7240: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "libmng" | #define PACKAGE_TARNAME "libmng-2.0.2" | #define PACKAGE_VERSION "2.0.2" | #define PACKAGE_STRING "libmng 2.0.2" | #define PACKAGE_BUGREPORT "png-mng-implement@lists.sourceforge.net" | #define PACKAGE_URL "http://www.libmng.com/" | #define PACKAGE "libmng-2.0.2" | #define VERSION "2.0.2" | #define MNG_VERSION_MAJOR 2 | #define MNG_VERSION_MINOR 0 | #define MNG_VERSION_RELEASE 2 | #define MNG_VERSION_SO 2 | #define MNG_VERSION_DLL 2 | /* end confdefs.h. */ | #include configure:7269: checking for ANSI C header files configure:7289: gcc -c -g -O2 conftest.c >&5 configure:7289: $? = 0 configure:7362: gcc -o conftest -g -O2 conftest.c >&5 configure:7362: $? = 0 configure:7362: ./conftest configure:7362: $? = 0 configure:7373: result: yes configure:7386: checking for sys/types.h configure:7386: gcc -c -g -O2 conftest.c >&5 configure:7386: $? = 0 configure:7386: result: yes configure:7386: checking for sys/stat.h configure:7386: gcc -c -g -O2 conftest.c >&5 configure:7386: $? = 0 configure:7386: result: yes configure:7386: checking for stdlib.h configure:7386: gcc -c -g -O2 conftest.c >&5 configure:7386: $? = 0 configure:7386: result: yes configure:7386: checking for string.h configure:7386: gcc -c -g -O2 conftest.c >&5 configure:7386: $? = 0 configure:7386: result: yes configure:7386: checking for memory.h configure:7386: gcc -c -g -O2 conftest.c >&5 configure:7386: $? = 0 configure:7386: result: yes configure:7386: checking for strings.h configure:7386: gcc -c -g -O2 conftest.c >&5 configure:7386: $? = 0 configure:7386: result: yes configure:7386: checking for inttypes.h configure:7386: gcc -c -g -O2 conftest.c >&5 configure:7386: $? = 0 configure:7386: result: yes configure:7386: checking for stdint.h configure:7386: gcc -c -g -O2 conftest.c >&5 configure:7386: $? = 0 configure:7386: result: yes configure:7386: checking for unistd.h configure:7386: gcc -c -g -O2 conftest.c >&5 configure:7386: $? = 0 configure:7386: result: yes configure:7400: checking for dlfcn.h configure:7400: gcc -c -g -O2 conftest.c >&5 configure:7400: $? = 0 configure:7400: result: yes configure:7587: checking for objdir configure:7602: result: .libs configure:7873: checking if gcc supports -fno-rtti -fno-exceptions configure:7891: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C [enabled by default] configure:7895: $? = 0 configure:7908: result: no configure:8218: checking for gcc option to produce PIC configure:8225: result: -fPIC -DPIC configure:8233: checking if gcc PIC flag -fPIC -DPIC works configure:8251: gcc -c -g -O2 -fPIC -DPIC -DPIC conftest.c >&5 configure:8255: $? = 0 configure:8268: result: yes configure:8297: checking if gcc static flag -static works configure:8325: result: yes configure:8340: checking if gcc supports -c -o file.o configure:8361: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 configure:8365: $? = 0 configure:8387: result: yes configure:8395: checking if gcc supports -c -o file.o configure:8442: result: yes configure:8475: checking whether the gcc linker (/usr/x86_64-slackware-linux/bin/ld -m elf_x86_64) supports shared libraries configure:9633: result: yes configure:9670: checking whether -lc should be explicitly linked in configure:9678: gcc -c -g -O2 conftest.c >&5 configure:9681: $? = 0 configure:9696: gcc -shared -fPIC -DPIC conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /usr/bin/grep -lc \>/dev/null 2\>\&1 configure:9699: $? = 0 configure:9713: result: no configure:9878: checking dynamic linker characteristics configure:10392: gcc -o conftest -g -O2 -Wl,-rpath -Wl,/foo conftest.c >&5 configure:10392: $? = 0 configure:10614: result: GNU/Linux ld.so configure:10721: checking how to hardcode library paths into programs configure:10746: result: immediate configure:11286: checking whether stripping libraries is possible configure:11291: result: yes configure:11326: checking if libtool supports shared libraries configure:11328: result: yes configure:11331: checking whether to build shared libraries configure:11352: result: yes configure:11355: checking whether to build static libraries configure:11359: result: yes configure:11693: checking whether byte ordering is bigendian configure:11708: gcc -c -g -O2 conftest.c >&5 conftest.c:29:9: error: unknown type name 'not' conftest.c:29:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'universal' conftest.c:29:15: error: unknown type name 'universal' configure:11708: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "libmng" | #define PACKAGE_TARNAME "libmng-2.0.2" | #define PACKAGE_VERSION "2.0.2" | #define PACKAGE_STRING "libmng 2.0.2" | #define PACKAGE_BUGREPORT "png-mng-implement@lists.sourceforge.net" | #define PACKAGE_URL "http://www.libmng.com/" | #define PACKAGE "libmng-2.0.2" | #define VERSION "2.0.2" | #define MNG_VERSION_MAJOR 2 | #define MNG_VERSION_MINOR 0 | #define MNG_VERSION_RELEASE 2 | #define MNG_VERSION_SO 2 | #define MNG_VERSION_DLL 2 | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | /* end confdefs.h. */ | #ifndef __APPLE_CC__ | not a universal capable compiler | #endif | typedef int dummy; | configure:11753: gcc -c -g -O2 conftest.c >&5 configure:11753: $? = 0 configure:11771: gcc -c -g -O2 conftest.c >&5 conftest.c: In function 'main': conftest.c:35:4: error: unknown type name 'not' conftest.c:35:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'endian' configure:11771: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "libmng" | #define PACKAGE_TARNAME "libmng-2.0.2" | #define PACKAGE_VERSION "2.0.2" | #define PACKAGE_STRING "libmng 2.0.2" | #define PACKAGE_BUGREPORT "png-mng-implement@lists.sourceforge.net" | #define PACKAGE_URL "http://www.libmng.com/" | #define PACKAGE "libmng-2.0.2" | #define VERSION "2.0.2" | #define MNG_VERSION_MAJOR 2 | #define MNG_VERSION_MINOR 0 | #define MNG_VERSION_RELEASE 2 | #define MNG_VERSION_SO 2 | #define MNG_VERSION_DLL 2 | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | /* end confdefs.h. */ | #include | #include | | int | main () | { | #if BYTE_ORDER != BIG_ENDIAN | not big endian | #endif | | ; | return 0; | } configure:11899: result: no configure:11925: checking for special C compiler options needed for large files configure:11970: result: no configure:11976: checking for _FILE_OFFSET_BITS value needed for large files configure:12001: gcc -c -g -O2 conftest.c >&5 configure:12001: $? = 0 configure:12033: result: no configure:12119: checking for ANSI C header files configure:12223: result: yes configure:12232: checking for an ANSI C-conforming const configure:12298: gcc -c -g -O2 conftest.c >&5 configure:12298: $? = 0 configure:12305: result: yes configure:12314: checking for pow configure:12314: gcc -o conftest -g -O2 conftest.c >&5 conftest.c:52:6: warning: conflicting types for built-in function 'pow' [enabled by default] /tmp/cczAyzTf.o: In function `main': /sources/LIB/MNG/libmng-2.0.2/conftest.c:63: undefined reference to `pow' collect2: error: ld returned 1 exit status configure:12314: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "libmng" | #define PACKAGE_TARNAME "libmng-2.0.2" | #define PACKAGE_VERSION "2.0.2" | #define PACKAGE_STRING "libmng 2.0.2" | #define PACKAGE_BUGREPORT "png-mng-implement@lists.sourceforge.net" | #define PACKAGE_URL "http://www.libmng.com/" | #define PACKAGE "libmng-2.0.2" | #define VERSION "2.0.2" | #define MNG_VERSION_MAJOR 2 | #define MNG_VERSION_MINOR 0 | #define MNG_VERSION_RELEASE 2 | #define MNG_VERSION_SO 2 | #define MNG_VERSION_DLL 2 | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | #define STDC_HEADERS 1 | /* end confdefs.h. */ | /* Define pow to an innocuous variant, in case declares pow. | For example, HP-UX 11i declares gettimeofday. */ | #define pow innocuous_pow | | /* System header to define __stub macros and hopefully few prototypes, | which can conflict with char pow (); below. | Prefer to if __STDC__ is defined, since | exists even on freestanding compilers. */ | | #ifdef __STDC__ | # include | #else | # include | #endif | | #undef pow | | /* Override any GCC internal prototype to avoid an error. | Use char because int might match the return type of a GCC | builtin and then its argument prototype would still apply. */ | #ifdef __cplusplus | extern "C" | #endif | char pow (); | /* The GNU C library defines this for functions which it implements | to always fail with ENOSYS. Some functions are actually named | something starting with __ and the normal name is an alias. */ | #if defined __stub_pow || defined __stub___pow | choke me | #endif | | int | main () | { | return pow (); | ; | return 0; | } configure:12314: result: no configure:12318: checking for pow in -lm configure:12343: gcc -o conftest -g -O2 conftest.c -lm >&5 conftest.c:36:6: warning: conflicting types for built-in function 'pow' [enabled by default] configure:12343: $? = 0 configure:12352: result: yes configure:12475: checking zlib.h usability configure:12475: gcc -c -g -O2 conftest.c >&5 configure:12475: $? = 0 configure:12475: result: yes configure:12475: checking zlib.h presence configure:12475: gcc -E conftest.c configure:12475: $? = 0 configure:12475: result: yes configure:12475: checking for zlib.h configure:12475: result: yes configure:12477: checking for gzread in -lz configure:12502: gcc -o conftest -g -O2 conftest.c -lz -lm >&5 configure:12502: $? = 0 configure:12511: result: yes configure:12554: checking jpeglib.h usability configure:12554: gcc -c -g -O2 conftest.c >&5 configure:12554: $? = 0 configure:12554: result: yes configure:12554: checking jpeglib.h presence configure:12554: gcc -E conftest.c configure:12554: $? = 0 configure:12554: result: yes configure:12554: checking for jpeglib.h configure:12554: result: yes configure:12556: checking for jpeg_read_header in -ljpeg configure:12581: gcc -o conftest -g -O2 conftest.c -ljpeg -lz -lm >&5 configure:12581: $? = 0 configure:12590: result: yes configure:12639: checking lcms2.h usability configure:12639: gcc -c -g -O2 conftest.c >&5 configure:12639: $? = 0 configure:12639: result: yes configure:12639: checking lcms2.h presence configure:12639: gcc -E conftest.c configure:12639: $? = 0 configure:12639: result: yes configure:12639: checking for lcms2.h configure:12639: result: yes configure:12643: checking for cmsFreeToneCurve in -llcms2 configure:12668: gcc -o conftest -g -O2 conftest.c -llcms2 -lz -lm -ljpeg >&5 configure:12668: $? = 0 configure:12677: result: yes configure:12912: checking that generated files are newer than configure configure:12918: result: done configure:12942: creating ./config.status ## ---------------------- ## ## Running config.status. ## ## ---------------------- ## This file was extended by libmng config.status 2.0.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = CONFIG_HEADERS = CONFIG_LINKS = CONFIG_COMMANDS = $ ./config.status on mary config.status:1106: creating Makefile config.status:1106: creating libmng.pc config.status:1106: creating config.h config.status:1335: executing depfiles commands config.status:1335: executing libtool commands ## ---------------- ## ## Cache variables. ## ## ---------------- ## ac_cv_build=x86_64-unknown-linux-gnu ac_cv_c_bigendian=no ac_cv_c_compiler_gnu=yes ac_cv_c_const=yes ac_cv_env_CC_set= ac_cv_env_CC_value= ac_cv_env_CFLAGS_set= ac_cv_env_CFLAGS_value= ac_cv_env_CPPFLAGS_set= ac_cv_env_CPPFLAGS_value= ac_cv_env_CPP_set= ac_cv_env_CPP_value= ac_cv_env_LDFLAGS_set= ac_cv_env_LDFLAGS_value= ac_cv_env_LIBS_set= ac_cv_env_LIBS_value= ac_cv_env_build_alias_set= ac_cv_env_build_alias_value= ac_cv_env_host_alias_set= ac_cv_env_host_alias_value= ac_cv_env_target_alias_set= ac_cv_env_target_alias_value= ac_cv_func_pow=no ac_cv_header_dlfcn_h=yes ac_cv_header_inttypes_h=yes ac_cv_header_jpeglib_h=yes ac_cv_header_lcms2_h=yes ac_cv_header_memory_h=yes ac_cv_header_stdc=yes ac_cv_header_stdint_h=yes ac_cv_header_stdlib_h=yes ac_cv_header_string_h=yes ac_cv_header_strings_h=yes ac_cv_header_sys_stat_h=yes ac_cv_header_sys_types_h=yes ac_cv_header_unistd_h=yes ac_cv_header_zlib_h=yes ac_cv_host=x86_64-unknown-linux-gnu ac_cv_lib_jpeg_jpeg_read_header=yes ac_cv_lib_lcms2_cmsFreeToneCurve=yes ac_cv_lib_m_pow=yes ac_cv_lib_z_gzread=yes ac_cv_objext=o ac_cv_path_EGREP='/usr/bin/grep -E' ac_cv_path_FGREP='/usr/bin/grep -F' ac_cv_path_GREP=/usr/bin/grep ac_cv_path_SED=/usr/bin/sed ac_cv_path_install='/usr/bin/ginstall -c' ac_cv_path_mkdir=/usr/bin/mkdir ac_cv_prog_AWK=gawk ac_cv_prog_CPP='gcc -E' ac_cv_prog_ac_ct_AR=ar ac_cv_prog_ac_ct_CC=gcc ac_cv_prog_ac_ct_DLLTOOL=dlltool ac_cv_prog_ac_ct_MANIFEST_TOOL=mt ac_cv_prog_ac_ct_OBJDUMP=objdump ac_cv_prog_ac_ct_RANLIB=ranlib ac_cv_prog_ac_ct_STRIP=strip ac_cv_prog_cc_c89= ac_cv_prog_cc_g=yes ac_cv_prog_make_make_set=yes ac_cv_search_strerror='none required' ac_cv_sys_file_offset_bits=no ac_cv_sys_largefile_CC=no am_cv_CC_dependencies_compiler_type=none am_cv_make_support_nested_variables=yes lt_cv_ar_at_file=@ lt_cv_archive_cmds_need_lc=no lt_cv_deplibs_check_method=pass_all lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_ld_reload_flag=-r lt_cv_nm_interface='BSD nm' lt_cv_objdir=.libs lt_cv_path_LD=/usr/x86_64-slackware-linux/bin/ld lt_cv_path_NM='/usr/bin/nm -B' lt_cv_path_mainfest_tool=no lt_cv_prog_compiler_c_o=yes lt_cv_prog_compiler_pic='-fPIC -DPIC' lt_cv_prog_compiler_pic_works=yes lt_cv_prog_compiler_rtti_exceptions=no lt_cv_prog_compiler_static_works=yes lt_cv_prog_gnu_ld=yes lt_cv_sharedlib_from_linklib_cmd='printf %s\n' lt_cv_shlibpath_overrides_runpath=no lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' lt_cv_sys_max_cmd_len=1572864 lt_cv_to_host_file_cmd=func_convert_file_noop lt_cv_to_tool_file_cmd=func_convert_file_noop ## ----------------- ## ## Output variables. ## ## ----------------- ## ACLOCAL='${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing aclocal-1.13' AMDEPBACKSLASH='\' AMDEP_FALSE='#' AMDEP_TRUE='' AMTAR='$${TAR-tar}' AM_BACKSLASH='\' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' AM_DEFAULT_VERBOSITY='1' AM_V='$(V)' AR='ar' AS='as' AUTOCONF='${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing autoconf' AUTOHEADER='${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing autoheader' AUTOMAKE='${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing automake-1.13' AWK='gawk' CC='gcc' CCDEPMODE='depmode=none' CFLAGS='-g -O2' CPP='gcc -E' CPPFLAGS='' CYGPATH_W='echo' DEFS='-DHAVE_CONFIG_H' DEPDIR='.deps' DLLTOOL='dlltool' DSYMUTIL='' DUMPBIN='' ECHO_C='' ECHO_N='-n' ECHO_T='' EGREP='/usr/bin/grep -E' EXEEXT='' FGREP='/usr/bin/grep -F' GREP='/usr/bin/grep' INSTALL_DATA='${INSTALL} -m 644' INSTALL_PROGRAM='${INSTALL}' INSTALL_SCRIPT='${INSTALL}' INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' LD='/usr/x86_64-slackware-linux/bin/ld -m elf_x86_64' LDFLAGS='' LIBOBJS='' LIBS='-lz -lm -ljpeg -llcms2' LIBTOOL='$(SHELL) $(top_builddir)/libtool' LIPO='' LN_S='ln -s' LTLIBOBJS='' MAKEINFO='${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing makeinfo' MANIFEST_TOOL=':' MKDIR_P='/usr/bin/mkdir -p' MNG_MAJOR_NR='2' MNG_MINOR_NR='0' MNG_RELEASE_NR='2' NM='/usr/bin/nm -B' NMEDIT='' OBJDUMP='objdump' OBJEXT='o' OTOOL64='' OTOOL='' PACKAGE='libmng-2.0.2' PACKAGE_BUGREPORT='png-mng-implement@lists.sourceforge.net' PACKAGE_NAME='libmng' PACKAGE_STRING='libmng 2.0.2' PACKAGE_TARNAME='libmng-2.0.2' PACKAGE_URL='http://www.libmng.com/' PACKAGE_VERSION='2.0.2' PATH_SEPARATOR=':' RANLIB='ranlib' SED='/usr/bin/sed' SET_MAKE='' SHELL='/bin/sh' STRIP='strip' VERSION='2.0.2' ac_ct_AR='ar' ac_ct_CC='gcc' ac_ct_DUMPBIN='' am__EXEEXT_FALSE='' am__EXEEXT_TRUE='#' am__fastdepCC_FALSE='' am__fastdepCC_TRUE='#' am__include='include' am__isrc='' am__leading_dot='.' am__nodep='_no' am__quote='' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' bindir='${exec_prefix}/bin' build='x86_64-unknown-linux-gnu' build_alias='' build_cpu='x86_64' build_os='linux-gnu' build_vendor='unknown' datadir='${datarootdir}' datarootdir='${prefix}/share' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' dvidir='${docdir}' exec_prefix='${prefix}' host='x86_64-unknown-linux-gnu' host_alias='' host_cpu='x86_64' host_os='linux-gnu' host_vendor='unknown' htmldir='${docdir}' includedir='${prefix}/include' infodir='${datarootdir}/info' install_sh='${SHELL} /sources/LIB/MNG/libmng-2.0.2/install-sh' libdir='/usr/lib64' libexecdir='${exec_prefix}/libexec' localedir='${datarootdir}/locale' localstatedir='${prefix}/var' mandir='${datarootdir}/man' mkdir_p='$(MKDIR_P)' oldincludedir='/usr/include' pdfdir='${docdir}' prefix='/usr' program_transform_name='s,x,x,' psdir='${docdir}' sbindir='${exec_prefix}/sbin' sharedstatedir='${prefix}/com' sysconfdir='${prefix}/etc' target_alias='' ## ----------- ## ## confdefs.h. ## ## ----------- ## /* confdefs.h */ #define PACKAGE_NAME "libmng" #define PACKAGE_TARNAME "libmng-2.0.2" #define PACKAGE_VERSION "2.0.2" #define PACKAGE_STRING "libmng 2.0.2" #define PACKAGE_BUGREPORT "png-mng-implement@lists.sourceforge.net" #define PACKAGE_URL "http://www.libmng.com/" #define PACKAGE "libmng-2.0.2" #define VERSION "2.0.2" #define MNG_VERSION_MAJOR 2 #define MNG_VERSION_MINOR 0 #define MNG_VERSION_RELEASE 2 #define MNG_VERSION_SO 2 #define MNG_VERSION_DLL 2 #define STDC_HEADERS 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRING_H 1 #define HAVE_MEMORY_H 1 #define HAVE_STRINGS_H 1 #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 #define HAVE_UNISTD_H 1 #define HAVE_DLFCN_H 1 #define LT_OBJDIR ".libs/" #define STDC_HEADERS 1 #define MNG_BUILD_SO 1 #define MNG_SUPPORT_FULL 1 #define MNG_SUPPORT_READ 1 #define MNG_SUPPORT_WRITE 1 #define MNG_SUPPORT_DISPLAY 1 #define MNG_SUPPORT_DYNAMICMNG 1 #define MNG_ACCESS_CHUNKS 1 #define MNG_STORE_CHUNKS 1 #define MNG_ERROR_TELLTALE 1 #define HAVE_LIBZ 1 #define HAVE_LIBJPEG 1 #define HAVE_LIBLCMS2 1 #define MNG_FULL_CMS 1 configure: exit 0 libmng-2.0.2/README.examples0000644000000000000000000000363312005307152014156 0ustar rootrootThe samples are in platform-specific directories. !!! contributions are very welcome !!! bcb - Borland C++ Builder (3.0) (found under bcb/xxx) ----------------------------------------------------- win32dll - sample project to create a Windows dll. Requires zlib1.2.1, IJG jpgsrc6b and lcms1.0.14. The directories containing these libraries must be at the same level as the libmng directory. So if you're in the directory with this file and the libmng sources, they should be in ..\zlib , ..\jpgsrc6b and ..\lcms respectively. !!! To run the other Win32 samples you need to copy the libmng.dll file from here into the sample's directory !!! mngtree - sample project to create a little command-line tool that dumps the chunk-structure of a given file onto stdout. bogus - a completely bogus example on how to create a perfectly valid (though slightly biased) MNG. mngview - port of the Delphi mngview sample. contributed by Andy Protano. see also README.contrib mngrepair- an example on how to fix invalid MNG files uses the new mng_copy_chunks() function and MNG_SOFTERRORS to 'ignore' certain input-errors. This conditional *MUST* only be used for exactly this kind of software; eg. repair utilities. delphi - Borland Delphi (3.0+) (found under contrib/delphi/xxx) --------------------------------------------------------------- mngview - sample project for a simple mng-viewer. The general unit in the delphi directory was translated from libmng.h It can be used in other projects to access libmng.dll created with the win32dll example above. unix - Unix (found under contrib/gcc/xxx) ----------------------------------------- mngtree - basically a copy of the BCB sample. It includes a makefile for Linux and it's been tested on RedHat6.2 libmng-2.0.2/libmng_chunks.h0000644000000000000000000011277512005307152014465 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_chunks.h copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Chunk structures (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of known chunk structures * */ /* * * */ /* * changes : 0.5.1 - 05/04/2000 - G.Juyn * */ /* * - put in some extra comments * */ /* * 0.5.1 - 05/06/2000 - G.Juyn * */ /* * - fixed layout for sBIT, PPLT * */ /* * 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed write callback definition * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - fixed layout for PPLT again (missed deltatype ?!?) * */ /* * * */ /* * 0.5.2 - 05/31/2000 - G.Juyn * */ /* * - removed useless definition (contributed by Tim Rowley) * */ /* * 0.5.2 - 06/03/2000 - G.Juyn * */ /* * - fixed makeup for Linux gcc compile * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 09/10/2000 - G.Juyn * */ /* * - fixed DEFI behavior * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added JDAA chunk * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - added HLAPI function to copy chunks * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * 1.0.5 - 11/28/2002 - G.Juyn * */ /* * - fixed definition of iMethodX/Y for MAGN chunk * */ /* * * */ /* * 1.0.6 - 05/25/2003 - G.R-P * */ /* * added MNG_SKIPCHUNK_cHNK footprint optimizations * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditionals around PAST chunk support * */ /* * * */ /* * 1.0.7 - 03/24/2004 - G.R-P * */ /* * - added conditional around MNG_NO_DELTA_PNG support * */ /* * * */ /* * 1.0.9 - 12/05/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKINITFREE * */ /* * 1.0.9 - 12/06/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKREADER * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_chunks_h_ #define _libmng_chunks_h_ /* ************************************************************************** */ #ifdef MNG_SWAP_ENDIAN #define PNG_SIG 0x474e5089L #define JNG_SIG 0x474e4a8bL #define MNG_SIG 0x474e4d8aL #define POST_SIG 0x0a1a0a0dL #else #define PNG_SIG 0x89504e47L #define JNG_SIG 0x8b4a4e47L #define MNG_SIG 0x8a4d4e47L #define POST_SIG 0x0d0a1a0aL #endif /* ************************************************************************** */ #ifdef MNG_OPTIMIZE_CHUNKREADER typedef mng_retcode (*mng_f_specialfunc) (mng_datap pData, mng_chunkp pChunk, mng_uint32* piRawlen, mng_uint8p* ppRawdata); typedef mng_retcode (*mng_c_specialfunc) (mng_datap pData, mng_chunkp pChunk); #define MNG_FIELD_OPTIONAL 0x0001 #define MNG_FIELD_TERMINATOR 0x0002 #define MNG_FIELD_REPETITIVE 0x0004 #define MNG_FIELD_DEFLATED 0x0008 #define MNG_FIELD_IFIMGTYPES 0x01F0 /* image-type mask */ #define MNG_FIELD_IFIMGTYPE0 0x0010 #define MNG_FIELD_IFIMGTYPE2 0x0020 #define MNG_FIELD_IFIMGTYPE3 0x0040 #define MNG_FIELD_IFIMGTYPE4 0x0080 #define MNG_FIELD_IFIMGTYPE6 0x0100 #define MNG_FIELD_PUTIMGTYPE 0x0200 #define MNG_FIELD_NOHIGHBIT 0x0400 #define MNG_FIELD_GROUPMASK 0x7000 #define MNG_FIELD_GROUP1 0x1000 #define MNG_FIELD_GROUP2 0x2000 #define MNG_FIELD_GROUP3 0x3000 #define MNG_FIELD_GROUP4 0x4000 #define MNG_FIELD_GROUP5 0x5000 #define MNG_FIELD_GROUP6 0x6000 #define MNG_FIELD_GROUP7 0x7000 #define MNG_FIELD_INT 0x8000 typedef struct { /* chunk-field descriptor */ mng_f_specialfunc pSpecialfunc; mng_uint16 iFlags; mng_uint16 iMinvalue; mng_uint16 iMaxvalue; mng_uint16 iLengthmin; mng_uint16 iLengthmax; mng_uint16 iOffsetchunk; mng_uint16 iOffsetchunkind; mng_uint16 iOffsetchunklen; } mng_field_descriptor; typedef mng_field_descriptor * mng_field_descp; #define MNG_DESCR_GLOBAL 0x0001 #define MNG_DESCR_EMPTY 0x0002 #define MNG_DESCR_EMPTYEMBED 0x0006 #define MNG_DESCR_EMPTYGLOBAL 0x000A #define MNG_DESCR_GenHDR 0x0001 /* IHDR/JHDR/BASI/DHDR */ #define MNG_DESCR_JngHDR 0x0002 /* JHDR/DHDR */ #define MNG_DESCR_MHDR 0x0004 #define MNG_DESCR_IHDR 0x0008 #define MNG_DESCR_JHDR 0x0010 #define MNG_DESCR_DHDR 0x0020 #define MNG_DESCR_LOOP 0x0040 #define MNG_DESCR_PLTE 0x0080 #define MNG_DESCR_SAVE 0x0100 #define MNG_DESCR_NOIHDR 0x0001 #define MNG_DESCR_NOJHDR 0x0002 #define MNG_DESCR_NOBASI 0x0004 #define MNG_DESCR_NODHDR 0x0008 #define MNG_DESCR_NOIDAT 0x0010 #define MNG_DESCR_NOJDAT 0x0020 #define MNG_DESCR_NOJDAA 0x0040 #define MNG_DESCR_NOPLTE 0x0080 #define MNG_DESCR_NOJSEP 0x0100 #define MNG_DESCR_NOMHDR 0x0200 #define MNG_DESCR_NOTERM 0x0400 #define MNG_DESCR_NOLOOP 0x0800 #define MNG_DESCR_NOSAVE 0x1000 typedef struct { /* chunk descriptor */ mng_imgtype eImgtype; mng_createobjtype eCreateobject; mng_uint16 iObjsize; mng_uint16 iOffsetempty; mng_ptr pObjcleanup; mng_ptr pObjprocess; mng_c_specialfunc pSpecialfunc; mng_field_descp pFielddesc; mng_uint16 iFielddesc; mng_uint16 iAllowed; mng_uint16 iMusthaves; mng_uint16 iMustNOThaves; } mng_chunk_descriptor; typedef mng_chunk_descriptor * mng_chunk_descp; #endif /* MNG_OPTIMIZE_CHUNKREADER */ /* ************************************************************************** */ typedef mng_retcode (*mng_createchunk) (mng_datap pData, mng_chunkp pHeader, mng_chunkp* ppChunk); typedef mng_retcode (*mng_cleanupchunk) (mng_datap pData, mng_chunkp pHeader); typedef mng_retcode (*mng_readchunk) (mng_datap pData, mng_chunkp pHeader, mng_uint32 iRawlen, mng_uint8p pRawdata, mng_chunkp* pChunk); typedef mng_retcode (*mng_writechunk) (mng_datap pData, mng_chunkp pChunk); typedef mng_retcode (*mng_assignchunk) (mng_datap pData, mng_chunkp pChunkto, mng_chunkp pChunkfrom); /* ************************************************************************** */ typedef struct { /* generic header */ mng_chunkid iChunkname; mng_createchunk fCreate; mng_cleanupchunk fCleanup; mng_readchunk fRead; mng_writechunk fWrite; mng_assignchunk fAssign; mng_chunkp pNext; /* for double-linked list */ mng_chunkp pPrev; #ifdef MNG_OPTIMIZE_CHUNKINITFREE mng_size_t iChunksize; #endif #ifdef MNG_OPTIMIZE_CHUNKREADER mng_chunk_descp pChunkdescr; #endif } mng_chunk_header; typedef mng_chunk_header * mng_chunk_headerp; /* ************************************************************************** */ typedef struct { /* IHDR */ mng_chunk_header sHeader; mng_uint32 iWidth; mng_uint32 iHeight; mng_uint8 iBitdepth; mng_uint8 iColortype; mng_uint8 iCompression; mng_uint8 iFilter; mng_uint8 iInterlace; } mng_ihdr; typedef mng_ihdr * mng_ihdrp; /* ************************************************************************** */ typedef struct { /* PLTE */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint32 iEntrycount; mng_rgbpaltab aEntries; } mng_plte; typedef mng_plte * mng_pltep; /* ************************************************************************** */ typedef struct { /* IDAT */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint32 iDatasize; mng_ptr pData; } mng_idat; typedef mng_idat * mng_idatp; /* ************************************************************************** */ typedef struct { /* IEND */ mng_chunk_header sHeader; } mng_iend; typedef mng_iend * mng_iendp; /* ************************************************************************** */ typedef struct { /* tRNS */ mng_chunk_header sHeader; mng_bool bEmpty; mng_bool bGlobal; mng_uint8 iType; /* colortype (0,2,3) */ mng_uint32 iCount; mng_uint8arr aEntries; mng_uint16 iGray; mng_uint16 iRed; mng_uint16 iGreen; mng_uint16 iBlue; mng_uint32 iRawlen; mng_uint8arr aRawdata; } mng_trns; typedef mng_trns * mng_trnsp; /* ************************************************************************** */ typedef struct { /* gAMA */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint32 iGamma; } mng_gama; typedef mng_gama * mng_gamap; /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_cHRM typedef struct { /* cHRM */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint32 iWhitepointx; mng_uint32 iWhitepointy; mng_uint32 iRedx; mng_uint32 iRedy; mng_uint32 iGreenx; mng_uint32 iGreeny; mng_uint32 iBluex; mng_uint32 iBluey; } mng_chrm; typedef mng_chrm * mng_chrmp; #endif /* ************************************************************************** */ typedef struct { /* sRGB */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint8 iRenderingintent; } mng_srgb; typedef mng_srgb * mng_srgbp; /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iCCP typedef struct { /* iCCP */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint32 iNamesize; mng_pchar zName; mng_uint8 iCompression; mng_uint32 iProfilesize; mng_ptr pProfile; } mng_iccp; typedef mng_iccp * mng_iccpp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tEXt typedef struct { /* tEXt */ mng_chunk_header sHeader; mng_uint32 iKeywordsize; mng_pchar zKeyword; mng_uint32 iTextsize; mng_pchar zText; } mng_text; typedef mng_text * mng_textp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_zTXt typedef struct { /* zTXt */ mng_chunk_header sHeader; mng_uint32 iKeywordsize; mng_pchar zKeyword; mng_uint8 iCompression; mng_uint32 iTextsize; mng_pchar zText; } mng_ztxt; typedef mng_ztxt * mng_ztxtp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iTXt typedef struct { /* iTXt */ mng_chunk_header sHeader; mng_uint32 iKeywordsize; mng_pchar zKeyword; mng_uint8 iCompressionflag; mng_uint8 iCompressionmethod; mng_uint32 iLanguagesize; mng_pchar zLanguage; mng_uint32 iTranslationsize; mng_pchar zTranslation; mng_uint32 iTextsize; mng_pchar zText; } mng_itxt; typedef mng_itxt * mng_itxtp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_bKGD typedef struct { /* bKGD */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint8 iType; /* 3=indexed, 0=gray, 2=rgb */ mng_uint8 iIndex; mng_uint16 iGray; mng_uint16 iRed; mng_uint16 iGreen; mng_uint16 iBlue; } mng_bkgd; typedef mng_bkgd * mng_bkgdp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYs typedef struct { /* pHYs */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint32 iSizex; mng_uint32 iSizey; mng_uint8 iUnit; } mng_phys; typedef mng_phys * mng_physp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sBIT typedef struct { /* sBIT */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint8 iType; /* colortype (0,2,3,4,6,10,12,14,16) */ mng_uint8arr4 aBits; } mng_sbit; typedef mng_sbit * mng_sbitp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sPLT typedef struct { /* sPLT */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint32 iNamesize; mng_pchar zName; mng_uint8 iSampledepth; mng_uint32 iEntrycount; mng_ptr pEntries; } mng_splt; typedef mng_splt * mng_spltp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_hIST typedef struct { /* hIST */ mng_chunk_header sHeader; mng_uint32 iEntrycount; mng_uint16arr aEntries; } mng_hist; typedef mng_hist * mng_histp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tIME typedef struct { /* tIME */ mng_chunk_header sHeader; mng_uint16 iYear; mng_uint8 iMonth; mng_uint8 iDay; mng_uint8 iHour; mng_uint8 iMinute; mng_uint8 iSecond; } mng_time; typedef mng_time * mng_timep; #endif /* ************************************************************************** */ typedef struct { /* MHDR */ mng_chunk_header sHeader; mng_uint32 iWidth; mng_uint32 iHeight; mng_uint32 iTicks; mng_uint32 iLayercount; mng_uint32 iFramecount; mng_uint32 iPlaytime; mng_uint32 iSimplicity; } mng_mhdr; typedef mng_mhdr * mng_mhdrp; /* ************************************************************************** */ typedef struct { /* MEND */ mng_chunk_header sHeader; } mng_mend; typedef mng_mend * mng_mendp; /* ************************************************************************** */ typedef struct { /* LOOP */ mng_chunk_header sHeader; mng_uint8 iLevel; mng_uint32 iRepeat; mng_uint8 iTermination; mng_uint32 iItermin; mng_uint32 iItermax; mng_uint32 iCount; mng_uint32p pSignals; } mng_loop; typedef mng_loop * mng_loopp; /* ************************************************************************** */ typedef struct { /* ENDL */ mng_chunk_header sHeader; mng_uint8 iLevel; } mng_endl; typedef mng_endl * mng_endlp; /* ************************************************************************** */ typedef struct { /* DEFI */ mng_chunk_header sHeader; mng_uint16 iObjectid; mng_bool bHasdonotshow; mng_uint8 iDonotshow; mng_bool bHasconcrete; mng_uint8 iConcrete; mng_bool bHasloca; mng_int32 iXlocation; mng_int32 iYlocation; mng_bool bHasclip; mng_int32 iLeftcb; mng_int32 iRightcb; mng_int32 iTopcb; mng_int32 iBottomcb; } mng_defi; typedef mng_defi * mng_defip; /* ************************************************************************** */ typedef struct { /* BASI */ mng_chunk_header sHeader; mng_uint32 iWidth; mng_uint32 iHeight; mng_uint8 iBitdepth; mng_uint8 iColortype; mng_uint8 iCompression; mng_uint8 iFilter; mng_uint8 iInterlace; mng_uint16 iRed; mng_uint16 iGreen; mng_uint16 iBlue; #ifdef MNG_OPTIMIZE_CHUNKREADER mng_bool bHasalpha; #endif mng_uint16 iAlpha; mng_uint8 iViewable; } mng_basi; typedef mng_basi * mng_basip; /* ************************************************************************** */ typedef struct { /* CLON */ mng_chunk_header sHeader; mng_uint16 iSourceid; mng_uint16 iCloneid; mng_uint8 iClonetype; #ifdef MNG_OPTIMIZE_CHUNKREADER mng_bool bHasdonotshow; #endif mng_uint8 iDonotshow; mng_uint8 iConcrete; mng_bool bHasloca; mng_uint8 iLocationtype; mng_int32 iLocationx; mng_int32 iLocationy; } mng_clon; typedef mng_clon * mng_clonp; /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST typedef struct { /* PAST source */ mng_uint16 iSourceid; mng_uint8 iComposition; mng_uint8 iOrientation; mng_uint8 iOffsettype; mng_int32 iOffsetx; mng_int32 iOffsety; mng_uint8 iBoundarytype; mng_int32 iBoundaryl; mng_int32 iBoundaryr; mng_int32 iBoundaryt; mng_int32 iBoundaryb; } mng_past_source; typedef mng_past_source * mng_past_sourcep; typedef struct { /* PAST */ mng_chunk_header sHeader; mng_uint16 iDestid; mng_uint8 iTargettype; mng_int32 iTargetx; mng_int32 iTargety; mng_uint32 iCount; mng_past_sourcep pSources; } mng_past; typedef mng_past * mng_pastp; #endif /* ************************************************************************** */ typedef struct { /* DISC */ mng_chunk_header sHeader; mng_uint32 iCount; mng_uint16p pObjectids; } mng_disc; typedef mng_disc * mng_discp; /* ************************************************************************** */ typedef struct { /* BACK */ mng_chunk_header sHeader; mng_uint16 iRed; mng_uint16 iGreen; mng_uint16 iBlue; mng_uint8 iMandatory; mng_uint16 iImageid; mng_uint8 iTile; } mng_back; typedef mng_back * mng_backp; /* ************************************************************************** */ typedef struct { /* FRAM */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint8 iMode; mng_uint32 iNamesize; mng_pchar zName; mng_uint8 iChangedelay; mng_uint8 iChangetimeout; mng_uint8 iChangeclipping; mng_uint8 iChangesyncid; mng_uint32 iDelay; mng_uint32 iTimeout; mng_uint8 iBoundarytype; mng_int32 iBoundaryl; mng_int32 iBoundaryr; mng_int32 iBoundaryt; mng_int32 iBoundaryb; mng_uint32 iCount; mng_uint32p pSyncids; } mng_fram; typedef mng_fram * mng_framp; /* ************************************************************************** */ typedef struct { /* MOVE */ mng_chunk_header sHeader; mng_uint16 iFirstid; mng_uint16 iLastid; mng_uint8 iMovetype; mng_int32 iMovex; mng_int32 iMovey; } mng_move; typedef mng_move * mng_movep; /* ************************************************************************** */ typedef struct { /* CLIP */ mng_chunk_header sHeader; mng_uint16 iFirstid; mng_uint16 iLastid; mng_uint8 iCliptype; mng_int32 iClipl; mng_int32 iClipr; mng_int32 iClipt; mng_int32 iClipb; } mng_clip; typedef mng_clip * mng_clipp; /* ************************************************************************** */ typedef struct { /* SHOW */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint16 iFirstid; #ifdef MNG_OPTIMIZE_CHUNKREADER mng_bool bHaslastid; #endif mng_uint16 iLastid; mng_uint8 iMode; } mng_show; typedef mng_show * mng_showp; /* ************************************************************************** */ typedef struct { /* TERM */ mng_chunk_header sHeader; mng_uint8 iTermaction; mng_uint8 iIteraction; mng_uint32 iDelay; mng_uint32 iItermax; } mng_term; typedef mng_term * mng_termp; /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE typedef struct { /* SAVE entry */ mng_uint8 iEntrytype; mng_uint32arr2 iOffset; /* 0=MSI, 1=LSI */ mng_uint32arr2 iStarttime; /* 0=MSI, 1=LSI */ mng_uint32 iLayernr; mng_uint32 iFramenr; mng_uint32 iNamesize; mng_pchar zName; } mng_save_entry; typedef mng_save_entry * mng_save_entryp; typedef struct { /* SAVE */ mng_chunk_header sHeader; mng_bool bEmpty; mng_uint8 iOffsettype; mng_uint32 iCount; mng_save_entryp pEntries; } mng_save; typedef mng_save * mng_savep; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SEEK typedef struct { /* SEEK */ mng_chunk_header sHeader; mng_uint32 iNamesize; mng_pchar zName; } mng_seek; typedef mng_seek * mng_seekp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_eXPI typedef struct { /* eXPI */ mng_chunk_header sHeader; mng_uint16 iSnapshotid; mng_uint32 iNamesize; mng_pchar zName; } mng_expi; typedef mng_expi * mng_expip; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_fPRI typedef struct { /* fPRI */ mng_chunk_header sHeader; mng_uint8 iDeltatype; mng_uint8 iPriority; } mng_fpri; typedef mng_fpri * mng_fprip; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_nEED typedef struct { /* nEED */ mng_chunk_header sHeader; mng_uint32 iKeywordssize; mng_pchar zKeywords; } mng_need; typedef mng_need * mng_needp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYg typedef mng_phys mng_phyg; /* pHYg */ typedef mng_phyg * mng_phygp; #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG typedef struct { /* JHDR */ mng_chunk_header sHeader; mng_uint32 iWidth; mng_uint32 iHeight; mng_uint8 iColortype; mng_uint8 iImagesampledepth; mng_uint8 iImagecompression; mng_uint8 iImageinterlace; mng_uint8 iAlphasampledepth; mng_uint8 iAlphacompression; mng_uint8 iAlphafilter; mng_uint8 iAlphainterlace; } mng_jhdr; typedef mng_jhdr * mng_jhdrp; /* ************************************************************************** */ typedef mng_idat mng_jdaa; /* JDAA */ typedef mng_jdaa * mng_jdaap; /* ************************************************************************** */ typedef mng_idat mng_jdat; /* JDAT */ typedef mng_jdat * mng_jdatp; /* ************************************************************************** */ typedef struct { /* JSEP */ mng_chunk_header sHeader; } mng_jsep; typedef mng_jsep * mng_jsepp; #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG typedef struct { /* DHDR */ mng_chunk_header sHeader; mng_uint16 iObjectid; mng_uint8 iImagetype; mng_uint8 iDeltatype; #ifdef MNG_OPTIMIZE_CHUNKREADER mng_bool bHasblocksize; #endif mng_uint32 iBlockwidth; mng_uint32 iBlockheight; #ifdef MNG_OPTIMIZE_CHUNKREADER mng_bool bHasblockloc; #endif mng_uint32 iBlockx; mng_uint32 iBlocky; } mng_dhdr; typedef mng_dhdr * mng_dhdrp; /* ************************************************************************** */ typedef struct { /* PROM */ mng_chunk_header sHeader; mng_uint8 iColortype; mng_uint8 iSampledepth; mng_uint8 iFilltype; } mng_prom; typedef mng_prom * mng_promp; /* ************************************************************************** */ typedef struct { /* IPNG */ mng_chunk_header sHeader; } mng_ipng; typedef mng_ipng *mng_ipngp; /* ************************************************************************** */ typedef struct { /* PPLT entry */ mng_uint8 iRed; mng_uint8 iGreen; mng_uint8 iBlue; mng_uint8 iAlpha; mng_bool bUsed; } mng_pplt_entry; typedef mng_pplt_entry * mng_pplt_entryp; typedef struct { /* PPLT */ mng_chunk_header sHeader; mng_uint8 iDeltatype; mng_uint32 iCount; mng_pplt_entry aEntries [256]; } mng_pplt; typedef mng_pplt * mng_ppltp; /* ************************************************************************** */ typedef struct { /* IJNG */ mng_chunk_header sHeader; } mng_ijng; typedef mng_ijng *mng_ijngp; /* ************************************************************************** */ typedef struct { /* DROP */ mng_chunk_header sHeader; mng_uint32 iCount; mng_chunkidp pChunknames; } mng_drop; typedef mng_drop * mng_dropp; /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DBYK typedef struct { /* DBYK */ mng_chunk_header sHeader; mng_chunkid iChunkname; mng_uint8 iPolarity; mng_uint32 iKeywordssize; mng_pchar zKeywords; } mng_dbyk; typedef mng_dbyk * mng_dbykp; #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_ORDR typedef struct { /* ORDR entry */ mng_chunkid iChunkname; mng_uint8 iOrdertype; } mng_ordr_entry; typedef mng_ordr_entry * mng_ordr_entryp; typedef struct mng_ordr_struct { /* ORDR */ mng_chunk_header sHeader; mng_uint32 iCount; mng_ordr_entryp pEntries; } mng_ordr; typedef mng_ordr * mng_ordrp; #endif #endif /* MNG_NO_DELTA_PNG */ /* ************************************************************************** */ typedef struct { /* MAGN */ mng_chunk_header sHeader; mng_uint16 iFirstid; mng_uint16 iLastid; mng_uint8 iMethodX; mng_uint16 iMX; mng_uint16 iMY; mng_uint16 iML; mng_uint16 iMR; mng_uint16 iMT; mng_uint16 iMB; mng_uint8 iMethodY; } mng_magn; typedef mng_magn * mng_magnp; /* ************************************************************************** */ typedef struct { /* evNT entry */ mng_uint8 iEventtype; mng_uint8 iMasktype; mng_int32 iLeft; mng_int32 iRight; mng_int32 iTop; mng_int32 iBottom; mng_uint16 iObjectid; mng_uint8 iIndex; mng_uint32 iSegmentnamesize; mng_pchar zSegmentname; } mng_evnt_entry; typedef mng_evnt_entry * mng_evnt_entryp; typedef struct { /* evNT */ mng_chunk_header sHeader; mng_uint32 iCount; mng_evnt_entryp pEntries; } mng_evnt; typedef mng_evnt * mng_evntp; /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL typedef struct { /* mpNG frame */ mng_uint32 iX; mng_uint32 iY; mng_uint32 iWidth; mng_uint32 iHeight; mng_int32 iXoffset; mng_int32 iYoffset; mng_uint16 iTicks; } mng_mpng_frame; typedef mng_mpng_frame * mng_mpng_framep; typedef struct { /* mpNG */ mng_chunk_header sHeader; mng_uint32 iFramewidth; mng_uint32 iFrameheight; mng_uint16 iNumplays; mng_uint16 iTickspersec; mng_uint8 iCompressionmethod; mng_uint32 iFramessize; mng_mpng_framep pFrames; } mng_mpng; typedef mng_mpng * mng_mpngp; #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL typedef struct { /* ahDR */ mng_chunk_header sHeader; mng_uint32 iNumframes; mng_uint32 iTickspersec; mng_uint32 iNumplays; mng_uint32 iTilewidth; mng_uint32 iTileheight; mng_uint8 iInterlace; mng_uint8 iStillused; } mng_ahdr; typedef mng_ahdr * mng_ahdrp; typedef struct { /* adAT tile */ mng_uint32 iTicks; mng_int32 iXoffset; mng_int32 iYoffset; mng_uint8 iTilesource; } mng_adat_tile; typedef mng_adat_tile * mng_adat_tilep; typedef struct { /* adAT */ mng_chunk_header sHeader; mng_uint32 iTilessize; mng_adat_tilep pTiles; } mng_adat; typedef mng_adat * mng_adatp; #endif /* ************************************************************************** */ typedef struct { /* unknown chunk */ mng_chunk_header sHeader; mng_uint32 iDatasize; mng_ptr pData; } mng_unknown_chunk; typedef mng_unknown_chunk * mng_unknown_chunkp; /* ************************************************************************** */ #endif /* _libmng_chunks_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_jpeg.c0000644000000000000000000012667112005307152014112 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_jpeg.c copyright (c) 2000-2004 G.Juyn * */ /* * version : 1.0.9 * */ /* * * */ /* * purpose : JPEG library interface (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the JPEG library interface * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.5.2 - 05/22/2000 - G.Juyn * */ /* * - implemented all the JNG routines * */ /* * * */ /* * 0.5.3 - 06/17/2000 - G.Juyn * */ /* * - added tracing of JPEG calls * */ /* * 0.5.3 - 06/24/2000 - G.Juyn * */ /* * - fixed inclusion of IJG read/write code * */ /* * 0.5.3 - 06/29/2000 - G.Juyn * */ /* * - fixed some 64-bit warnings * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added support for JDAA * */ /* * * */ /* * 1.0.1 - 04/19/2001 - G.Juyn * */ /* * - added export of JPEG functions for DLL * */ /* * 1.0.1 - 04/22/2001 - G.Juyn * */ /* * - fixed memory-leaks (Thanks Gregg!) * */ /* * * */ /* * 1.0.4 - 06/22/2002 - G.Juyn * */ /* * - B526138 - returned IJGSRC6B calling convention to * */ /* * default for MSVC * */ /* * * */ /* * 1.0.5 - 24/02/2003 - G.Juyn * */ /* * - B683152 - libjpeg suspension not always honored correctly* */ /* * * */ /* * 1.0.6 - 03/04/2003 - G.Juyn * */ /* * - fixed some compiler-warnings * */ /* * * */ /* * 1.0.8 - 08/01/2004 - G.Juyn * */ /* * - added support for 3+byte pixelsize for JPEG's * */ /* * * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_memory.h" #include "libmng_pixels.h" #include "libmng_jpeg.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #if defined(MNG_INCLUDE_JNG) && defined(MNG_INCLUDE_DISPLAY_PROCS) /* ************************************************************************** */ /* * * */ /* * Local IJG callback routines (source-manager, error-manager and such) * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_IJG6B /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG_READ #ifdef MNG_DEFINE_JPEG_STDCALL void MNG_DECL mng_init_source (j_decompress_ptr cinfo) #else void mng_init_source (j_decompress_ptr cinfo) #endif { return; /* nothing needed */ } #endif /* MNG_INCLUDE_JNG_READ */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG_READ #ifdef MNG_DEFINE_JPEG_STDCALL boolean MNG_DECL mng_fill_input_buffer (j_decompress_ptr cinfo) #else boolean mng_fill_input_buffer (j_decompress_ptr cinfo) #endif { return FALSE; /* force IJG routine to return to caller */ } #endif /* MNG_INCLUDE_JNG_READ */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG_READ #ifdef MNG_DEFINE_JPEG_STDCALL void MNG_DECL mng_skip_input_data (j_decompress_ptr cinfo, long num_bytes) #else void mng_skip_input_data (j_decompress_ptr cinfo, long num_bytes) #endif { if (num_bytes > 0) /* ignore fony calls */ { /* address my generic structure */ mng_datap pData = (mng_datap)cinfo->client_data; /* address source manager */ mngjpeg_sourcep pSrc = pData->pJPEGdinfo->src; /* problem scenario ? */ if (pSrc->bytes_in_buffer < (size_t)num_bytes) { /* tell the boss we need to skip some data! */ pData->iJPEGtoskip = (mng_uint32)((size_t)num_bytes - pSrc->bytes_in_buffer); pSrc->bytes_in_buffer = 0; /* let the JPEG lib suspend */ pSrc->next_input_byte = MNG_NULL; } else { /* simply advance in the buffer */ pSrc->bytes_in_buffer -= num_bytes; pSrc->next_input_byte += num_bytes; } } return; } #endif /* MNG_INCLUDE_JNG_READ */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG_READ #ifdef MNG_DEFINE_JPEG_STDCALL void MNG_DECL mng_skip_input_data2 (j_decompress_ptr cinfo, long num_bytes) #else void mng_skip_input_data2 (j_decompress_ptr cinfo, long num_bytes) #endif { if (num_bytes > 0) /* ignore fony calls */ { /* address my generic structure */ mng_datap pData = (mng_datap)cinfo->client_data; /* address source manager */ mngjpeg_sourcep pSrc = pData->pJPEGdinfo2->src; /* problem scenario ? */ if (pSrc->bytes_in_buffer < (size_t)num_bytes) { /* tell the boss we need to skip some data! */ pData->iJPEGtoskip2 = (mng_uint32)((size_t)num_bytes - pSrc->bytes_in_buffer); pSrc->bytes_in_buffer = 0; /* let the JPEG lib suspend */ pSrc->next_input_byte = MNG_NULL; } else { /* simply advance in the buffer */ pSrc->bytes_in_buffer -= num_bytes; pSrc->next_input_byte += num_bytes; } } return; } #endif /* MNG_INCLUDE_JNG_READ */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG_READ #ifdef MNG_DEFINE_JPEG_STDCALL void MNG_DECL mng_term_source (j_decompress_ptr cinfo) #else void mng_term_source (j_decompress_ptr cinfo) #endif { return; /* nothing needed */ } #endif /* MNG_INCLUDE_JNG_READ */ /* ************************************************************************** */ #ifdef MNG_USE_SETJMP #ifdef MNG_DEFINE_JPEG_STDCALL void MNG_DECL mng_error_exit (j_common_ptr cinfo) #else void mng_error_exit (j_common_ptr cinfo) #endif { /* address my generic structure */ mng_datap pData = (mng_datap)cinfo->client_data; #ifdef MNG_ERROR_TELLTALE /* fill the message text ??? */ (*cinfo->err->output_message) (cinfo); #endif /* return to the point of no return... */ longjmp (pData->sErrorbuf, cinfo->err->msg_code); } #endif /* MNG_USE_SETJMP */ /* ************************************************************************** */ #ifdef MNG_USE_SETJMP #ifdef MNG_DEFINE_JPEG_STDCALL void MNG_DECL mng_output_message (j_common_ptr cinfo) #else void mng_output_message (j_common_ptr cinfo) #endif { return; /* just do nothing ! */ } #endif /* MNG_USE_SETJMP */ /* ************************************************************************** */ #endif /* MNG_INCLUDE_IJG6B */ /* ************************************************************************** */ /* * * */ /* * Global JPEG routines * */ /* * * */ /* ************************************************************************** */ mng_retcode mngjpeg_initialize (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_INITIALIZE, MNG_LC_START); #endif /* allocate space for JPEG structures if necessary */ #ifdef MNG_INCLUDE_JNG_READ if (pData->pJPEGderr == MNG_NULL) MNG_ALLOC (pData, pData->pJPEGderr, sizeof (mngjpeg_error )); if (pData->pJPEGdsrc == MNG_NULL) MNG_ALLOC (pData, pData->pJPEGdsrc, sizeof (mngjpeg_source)); if (pData->pJPEGdinfo == MNG_NULL) MNG_ALLOC (pData, pData->pJPEGdinfo, sizeof (mngjpeg_decomp)); /* enable reverse addressing */ pData->pJPEGdinfo->client_data = pData; if (pData->pJPEGderr2 == MNG_NULL) MNG_ALLOC (pData, pData->pJPEGderr2, sizeof (mngjpeg_error )); if (pData->pJPEGdsrc2 == MNG_NULL) MNG_ALLOC (pData, pData->pJPEGdsrc2, sizeof (mngjpeg_source)); if (pData->pJPEGdinfo2 == MNG_NULL) MNG_ALLOC (pData, pData->pJPEGdinfo2, sizeof (mngjpeg_decomp)); /* enable reverse addressing */ pData->pJPEGdinfo2->client_data = pData; #endif #ifdef MNG_INCLUDE_JNG_WRITE if (pData->pJPEGcerr == MNG_NULL) MNG_ALLOC (pData, pData->pJPEGcerr, sizeof (mngjpeg_error )); if (pData->pJPEGcinfo == MNG_NULL) MNG_ALLOC (pData, pData->pJPEGcinfo, sizeof (mngjpeg_comp )); /* enable reverse addressing */ pData->pJPEGcinfo->client_data = pData; #endif if (pData->pJPEGbuf == MNG_NULL) /* initialize temporary buffers */ { pData->iJPEGbufmax = MNG_JPEG_MAXBUF; MNG_ALLOC (pData, pData->pJPEGbuf, pData->iJPEGbufmax); } if (pData->pJPEGbuf2 == MNG_NULL) { pData->iJPEGbufmax2 = MNG_JPEG_MAXBUF; MNG_ALLOC (pData, pData->pJPEGbuf2, pData->iJPEGbufmax2); } pData->pJPEGcurrent = pData->pJPEGbuf; pData->iJPEGbufremain = 0; pData->pJPEGrow = MNG_NULL; pData->iJPEGrowlen = 0; pData->iJPEGtoskip = 0; pData->pJPEGcurrent2 = pData->pJPEGbuf2; pData->iJPEGbufremain2 = 0; pData->pJPEGrow2 = MNG_NULL; pData->iJPEGrowlen2 = 0; pData->iJPEGtoskip2 = 0; /* not doing anything yet ! */ pData->bJPEGcompress = MNG_FALSE; pData->bJPEGdecompress = MNG_FALSE; pData->bJPEGhasheader = MNG_FALSE; pData->bJPEGdecostarted = MNG_FALSE; pData->bJPEGscanstarted = MNG_FALSE; pData->bJPEGscanending = MNG_FALSE; pData->bJPEGdecompress2 = MNG_FALSE; pData->bJPEGhasheader2 = MNG_FALSE; pData->bJPEGdecostarted2 = MNG_FALSE; pData->bJPEGscanstarted2 = MNG_FALSE; pData->iJPEGrow = 0; /* zero input/output lines */ pData->iJPEGalpharow = 0; pData->iJPEGrgbrow = 0; pData->iJPEGdisprow = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_INITIALIZE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mngjpeg_cleanup (mng_datap pData) { #if defined(MNG_INCLUDE_IJG6B) && defined(MNG_USE_SETJMP) mng_retcode iRetcode; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_CLEANUP, MNG_LC_START); #endif #ifdef MNG_INCLUDE_IJG6B #ifdef MNG_USE_SETJMP iRetcode = setjmp (pData->sErrorbuf);/* setup local JPEG error-recovery */ if (iRetcode != 0) /* got here from longjmp ? */ MNG_ERRORJ (pData, iRetcode); /* then IJG-lib issued an error */ #endif #ifdef MNG_INCLUDE_JNG_READ /* still decompressing something ? */ if (pData->bJPEGdecompress) jpeg_destroy_decompress (pData->pJPEGdinfo); if (pData->bJPEGdecompress2) jpeg_destroy_decompress (pData->pJPEGdinfo2); #endif #ifdef MNG_INCLUDE_JNG_WRITE if (pData->bJPEGcompress) /* still compressing something ? */ jpeg_destroy_compress (pData->pJPEGcinfo); #endif #endif /* MNG_INCLUDE_IJG6B */ /* cleanup temporary buffers */ MNG_FREE (pData, pData->pJPEGbuf2, pData->iJPEGbufmax2); MNG_FREE (pData, pData->pJPEGbuf, pData->iJPEGbufmax); /* cleanup space for JPEG structures */ #ifdef MNG_INCLUDE_JNG_WRITE MNG_FREE (pData, pData->pJPEGcinfo, sizeof (mngjpeg_comp )); MNG_FREE (pData, pData->pJPEGcerr, sizeof (mngjpeg_error )); #endif #ifdef MNG_INCLUDE_JNG_READ MNG_FREE (pData, pData->pJPEGdinfo, sizeof (mngjpeg_decomp)); MNG_FREE (pData, pData->pJPEGdsrc, sizeof (mngjpeg_source)); MNG_FREE (pData, pData->pJPEGderr, sizeof (mngjpeg_error )); MNG_FREE (pData, pData->pJPEGdinfo2, sizeof (mngjpeg_decomp)); MNG_FREE (pData, pData->pJPEGdsrc2, sizeof (mngjpeg_source)); MNG_FREE (pData, pData->pJPEGderr2, sizeof (mngjpeg_error )); #endif MNG_FREE (pData, pData->pJPEGrow2, pData->iJPEGrowlen2); MNG_FREE (pData, pData->pJPEGrow, pData->iJPEGrowlen); /* whatever we were doing ... */ /* we don't anymore ... */ pData->bJPEGcompress = MNG_FALSE; pData->bJPEGdecompress = MNG_FALSE; pData->bJPEGhasheader = MNG_FALSE; pData->bJPEGdecostarted = MNG_FALSE; pData->bJPEGscanstarted = MNG_FALSE; pData->bJPEGscanending = MNG_FALSE; pData->bJPEGdecompress2 = MNG_FALSE; pData->bJPEGhasheader2 = MNG_FALSE; pData->bJPEGdecostarted2 = MNG_FALSE; pData->bJPEGscanstarted2 = MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_CLEANUP, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ /* * * */ /* * JPEG decompression routines (JDAT) * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG_READ mng_retcode mngjpeg_decompressinit (mng_datap pData) { #if defined(MNG_INCLUDE_IJG6B) && defined(MNG_USE_SETJMP) mng_retcode iRetcode; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSINIT, MNG_LC_START); #endif #ifdef MNG_INCLUDE_IJG6B /* allocate and initialize a JPEG decompression object */ pData->pJPEGdinfo->err = jpeg_std_error (pData->pJPEGderr); #ifdef MNG_USE_SETJMP /* setup local JPEG error-routines */ pData->pJPEGderr->error_exit = mng_error_exit; pData->pJPEGderr->output_message = mng_output_message; iRetcode = setjmp (pData->sErrorbuf);/* setup local JPEG error-recovery */ if (iRetcode != 0) /* got here from longjmp ? */ MNG_ERRORJ (pData, iRetcode); /* then IJG-lib issued an error */ #endif /* MNG_USE_SETJMP */ /* allocate and initialize a JPEG decompression object (continued) */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSINIT, MNG_LC_JPEG_CREATE_DECOMPRESS) #endif jpeg_create_decompress (pData->pJPEGdinfo); pData->bJPEGdecompress = MNG_TRUE; /* indicate it's initialized */ /* specify the source of the compressed data (eg, a file) */ /* no, not a file; we have buffered input */ pData->pJPEGdinfo->src = pData->pJPEGdsrc; /* use the default handler */ pData->pJPEGdinfo->src->resync_to_restart = jpeg_resync_to_restart; /* setup local source routine & parms */ pData->pJPEGdinfo->src->init_source = mng_init_source; pData->pJPEGdinfo->src->fill_input_buffer = mng_fill_input_buffer; pData->pJPEGdinfo->src->skip_input_data = mng_skip_input_data; pData->pJPEGdinfo->src->term_source = mng_term_source; pData->pJPEGdinfo->src->next_input_byte = pData->pJPEGcurrent; pData->pJPEGdinfo->src->bytes_in_buffer = pData->iJPEGbufremain; #endif /* MNG_INCLUDE_IJG6B */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSINIT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG_READ */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG_READ mng_retcode mngjpeg_decompressdata (mng_datap pData, mng_uint32 iRawsize, mng_uint8p pRawdata) { mng_retcode iRetcode; mng_uint32 iRemain; mng_uint8p pWork; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_START); #endif #if defined (MNG_INCLUDE_IJG6B) && defined(MNG_USE_SETJMP) iRetcode = setjmp (pData->sErrorbuf);/* initialize local JPEG error-recovery */ if (iRetcode != 0) /* got here from longjmp ? */ MNG_ERRORJ (pData, iRetcode); /* then IJG-lib issued an error */ #endif pWork = pRawdata; iRemain = iRawsize; if (pData->iJPEGtoskip) /* JPEG-lib told us to skip some more data ? */ { if (iRemain > pData->iJPEGtoskip) /* enough data in this buffer ? */ { iRemain -= pData->iJPEGtoskip; /* skip enough to access the next byte */ pWork += pData->iJPEGtoskip; pData->iJPEGtoskip = 0; /* no more to skip then */ } else { pData->iJPEGtoskip -= iRemain; /* skip all data in the buffer */ iRemain = 0; /* and indicate this accordingly */ } /* the skip set current-pointer to NULL ! */ pData->pJPEGcurrent = pData->pJPEGbuf; } while (iRemain) /* repeat until no more input-bytes */ { /* need to shift anything ? */ if ((pData->pJPEGcurrent > pData->pJPEGbuf) && (pData->pJPEGcurrent - pData->pJPEGbuf + pData->iJPEGbufremain + iRemain > pData->iJPEGbufmax)) { if (pData->iJPEGbufremain > 0) /* then do so */ MNG_COPY (pData->pJPEGbuf, pData->pJPEGcurrent, pData->iJPEGbufremain); pData->pJPEGcurrent = pData->pJPEGbuf; } /* does the remaining input fit into the buffer ? */ if (pData->iJPEGbufremain + iRemain <= pData->iJPEGbufmax) { /* move the lot */ MNG_COPY ((pData->pJPEGcurrent + pData->iJPEGbufremain), pWork, iRemain); pData->iJPEGbufremain += iRemain;/* adjust remaining_bytes counter */ iRemain = 0; /* and indicate there's no input left */ } else { /* calculate what does fit */ mng_uint32 iFits = pData->iJPEGbufmax - pData->iJPEGbufremain; if (iFits <= 0) /* no space is just bugger 'm all */ MNG_ERROR (pData, MNG_JPEGBUFTOOSMALL); /* move that */ MNG_COPY ((pData->pJPEGcurrent + pData->iJPEGbufremain), pWork, iFits); pData->iJPEGbufremain += iFits; /* adjust remain_bytes counter */ iRemain -= iFits; /* and the input-parms */ pWork += iFits; } #ifdef MNG_INCLUDE_IJG6B pData->pJPEGdinfo->src->next_input_byte = pData->pJPEGcurrent; pData->pJPEGdinfo->src->bytes_in_buffer = pData->iJPEGbufremain; if (!pData->bJPEGhasheader) /* haven't got the header yet ? */ { /* call jpeg_read_header() to obtain image info */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_READ_HEADER) #endif if (jpeg_read_header (pData->pJPEGdinfo, TRUE) != JPEG_SUSPENDED) { /* indicate the header's oke */ pData->bJPEGhasheader = MNG_TRUE; /* let's do some sanity checks ! */ if ((pData->pJPEGdinfo->image_width != pData->iDatawidth ) || (pData->pJPEGdinfo->image_height != pData->iDataheight) ) MNG_ERROR (pData, MNG_JPEGPARMSERR); if ( ((pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAY ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAYA) ) && (pData->pJPEGdinfo->jpeg_color_space != JCS_GRAYSCALE ) ) MNG_ERROR (pData, MNG_JPEGPARMSERR); if ( ((pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLOR ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLORA) ) && (pData->pJPEGdinfo->jpeg_color_space != JCS_YCbCr ) ) MNG_ERROR (pData, MNG_JPEGPARMSERR); /* indicate whether or not it's progressive */ pData->bJPEGprogressive = (mng_bool)jpeg_has_multiple_scans (pData->pJPEGdinfo); /* progressive+alpha can't display "on-the-fly"!! */ if ((pData->bJPEGprogressive) && ((pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAYA ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLORA) )) pData->fDisplayrow = MNG_NULL; /* allocate a row of JPEG-samples */ if (pData->pJPEGdinfo->jpeg_color_space == JCS_YCbCr) pData->iJPEGrowlen = pData->pJPEGdinfo->image_width * RGB_PIXELSIZE; else pData->iJPEGrowlen = pData->pJPEGdinfo->image_width; MNG_ALLOC (pData, pData->pJPEGrow, pData->iJPEGrowlen); pData->iJPEGrgbrow = 0; /* quite empty up to now */ } pData->pJPEGcurrent = (mng_uint8p)pData->pJPEGdinfo->src->next_input_byte; pData->iJPEGbufremain = (mng_uint32)pData->pJPEGdinfo->src->bytes_in_buffer; } /* decompress not started ? */ if ((pData->bJPEGhasheader) && (!pData->bJPEGdecostarted)) { /* set parameters for decompression */ if (pData->bJPEGprogressive) /* progressive display ? */ pData->pJPEGdinfo->buffered_image = TRUE; /* jpeg_start_decompress(...); */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_START_DECOMPRESS) #endif if (jpeg_start_decompress (pData->pJPEGdinfo) == TRUE) /* indicate it started */ pData->bJPEGdecostarted = MNG_TRUE; pData->pJPEGcurrent = (mng_uint8p)pData->pJPEGdinfo->src->next_input_byte; pData->iJPEGbufremain = (mng_uint32)pData->pJPEGdinfo->src->bytes_in_buffer; } /* process some scanlines ? */ if ((pData->bJPEGhasheader) && (pData->bJPEGdecostarted) && ((!jpeg_input_complete (pData->pJPEGdinfo)) || (pData->pJPEGdinfo->output_scanline < pData->pJPEGdinfo->output_height) || ((pData->bJPEGprogressive) && (pData->bJPEGscanending)))) { mng_int32 iLines = 0; /* for (each output pass) */ do { /* address the row output buffer */ JSAMPROW pRow = (JSAMPROW)pData->pJPEGrow; /* init new pass ? */ if ((pData->bJPEGprogressive) && (!pData->bJPEGscanstarted)) { pData->bJPEGscanstarted = MNG_TRUE; /* adjust output decompression parameters if required */ /* nop */ /* start a new output pass */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_START_OUTPUT) #endif jpeg_start_output (pData->pJPEGdinfo, pData->pJPEGdinfo->input_scan_number); pData->iJPEGrow = 0; /* start at row 0 in the image again */ } /* while (scan lines remain to be read) */ if ((!pData->bJPEGprogressive) || (!pData->bJPEGscanending)) { do { /* jpeg_read_scanlines(...); */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_READ_SCANLINES) #endif iLines = jpeg_read_scanlines (pData->pJPEGdinfo, (JSAMPARRAY)&pRow, 1); pData->pJPEGcurrent = (mng_uint8p)pData->pJPEGdinfo->src->next_input_byte; pData->iJPEGbufremain = (mng_uint32)pData->pJPEGdinfo->src->bytes_in_buffer; if (iLines > 0) /* got something ? */ { if (pData->fStorerow2) /* store in object ? */ { iRetcode = ((mng_storerow)pData->fStorerow2) (pData); if (iRetcode) /* on error bail out */ return iRetcode; } } } while ((pData->pJPEGdinfo->output_scanline < pData->pJPEGdinfo->output_height) && (iLines > 0)); /* until end-of-image or not enough input-data */ } /* terminate output pass */ if ((pData->bJPEGprogressive) && (pData->pJPEGdinfo->output_scanline >= pData->pJPEGdinfo->output_height)) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_FINISH_OUTPUT) #endif if (jpeg_finish_output (pData->pJPEGdinfo) != JPEG_SUSPENDED) { /* this scan has ended */ pData->bJPEGscanstarted = MNG_FALSE; pData->bJPEGscanending = MNG_FALSE; } else { pData->bJPEGscanending = MNG_TRUE; } } } while ((!jpeg_input_complete (pData->pJPEGdinfo)) && (iLines > 0) && (!pData->bJPEGscanending)); } /* end of image ? */ if ((pData->bJPEGhasheader) && (pData->bJPEGdecostarted) && (!pData->bJPEGscanending) && (jpeg_input_complete (pData->pJPEGdinfo)) && (pData->pJPEGdinfo->input_scan_number == pData->pJPEGdinfo->output_scan_number)) { /* jpeg_finish_decompress(...); */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_FINISH_DECOMPRESS) #endif if (jpeg_finish_decompress (pData->pJPEGdinfo) == TRUE) { /* indicate it's done */ pData->bJPEGhasheader = MNG_FALSE; pData->bJPEGdecostarted = MNG_FALSE; pData->pJPEGcurrent = (mng_uint8p)pData->pJPEGdinfo->src->next_input_byte; pData->iJPEGbufremain = (mng_uint32)pData->pJPEGdinfo->src->bytes_in_buffer; /* remaining fluff is an error ! */ if ((pData->iJPEGbufremain > 0) || (iRemain > 0)) MNG_ERROR (pData, MNG_TOOMUCHJDAT); } } #endif /* MNG_INCLUDE_IJG6B */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG_READ */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG_READ mng_retcode mngjpeg_decompressfree (mng_datap pData) { #if defined(MNG_INCLUDE_IJG6B) && defined(MNG_USE_SETJMP) mng_retcode iRetcode; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSFREE, MNG_LC_START); #endif #ifdef MNG_INCLUDE_IJG6B #ifdef MNG_USE_SETJMP iRetcode = setjmp (pData->sErrorbuf);/* setup local JPEG error-recovery */ if (iRetcode != 0) /* got here from longjmp ? */ MNG_ERRORJ (pData, iRetcode); /* then IJG-lib issued an error */ #endif /* free the row of JPEG-samples*/ MNG_FREE (pData, pData->pJPEGrow, pData->iJPEGrowlen); /* release the JPEG decompression object */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSFREE, MNG_LC_JPEG_DESTROY_DECOMPRESS) #endif jpeg_destroy_decompress (pData->pJPEGdinfo); pData->bJPEGdecompress = MNG_FALSE; /* indicate it's done */ #endif /* MNG_INCLUDE_IJG6B */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSFREE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG_READ */ /* ************************************************************************** */ /* * * */ /* * JPEG decompression routines (JDAA) * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG_READ mng_retcode mngjpeg_decompressinit2 (mng_datap pData) { #if defined(MNG_INCLUDE_IJG6B) && defined(MNG_USE_SETJMP) mng_retcode iRetcode; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSINIT, MNG_LC_START); #endif #ifdef MNG_INCLUDE_IJG6B /* allocate and initialize a JPEG decompression object */ pData->pJPEGdinfo2->err = jpeg_std_error (pData->pJPEGderr2); #ifdef MNG_USE_SETJMP /* setup local JPEG error-routines */ pData->pJPEGderr2->error_exit = mng_error_exit; pData->pJPEGderr2->output_message = mng_output_message; iRetcode = setjmp (pData->sErrorbuf);/* setup local JPEG error-recovery */ if (iRetcode != 0) /* got here from longjmp ? */ MNG_ERRORJ (pData, iRetcode); /* then IJG-lib issued an error */ #endif /* MNG_USE_SETJMP */ /* allocate and initialize a JPEG decompression object (continued) */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSINIT, MNG_LC_JPEG_CREATE_DECOMPRESS) #endif jpeg_create_decompress (pData->pJPEGdinfo2); pData->bJPEGdecompress2 = MNG_TRUE; /* indicate it's initialized */ /* specify the source of the compressed data (eg, a file) */ /* no, not a file; we have buffered input */ pData->pJPEGdinfo2->src = pData->pJPEGdsrc2; /* use the default handler */ pData->pJPEGdinfo2->src->resync_to_restart = jpeg_resync_to_restart; /* setup local source routine & parms */ pData->pJPEGdinfo2->src->init_source = mng_init_source; pData->pJPEGdinfo2->src->fill_input_buffer = mng_fill_input_buffer; pData->pJPEGdinfo2->src->skip_input_data = mng_skip_input_data2; pData->pJPEGdinfo2->src->term_source = mng_term_source; pData->pJPEGdinfo2->src->next_input_byte = pData->pJPEGcurrent2; pData->pJPEGdinfo2->src->bytes_in_buffer = pData->iJPEGbufremain2; #endif /* MNG_INCLUDE_IJG6B */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSINIT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG_READ */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG_READ mng_retcode mngjpeg_decompressdata2 (mng_datap pData, mng_uint32 iRawsize, mng_uint8p pRawdata) { mng_retcode iRetcode; mng_uint32 iRemain; mng_uint8p pWork; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_START); #endif #if defined (MNG_INCLUDE_IJG6B) && defined(MNG_USE_SETJMP) iRetcode = setjmp (pData->sErrorbuf);/* initialize local JPEG error-recovery */ if (iRetcode != 0) /* got here from longjmp ? */ MNG_ERRORJ (pData, iRetcode); /* then IJG-lib issued an error */ #endif pWork = pRawdata; iRemain = iRawsize; if (pData->iJPEGtoskip2) /* JPEG-lib told us to skip some more data ? */ { if (iRemain > pData->iJPEGtoskip2) /* enough data in this buffer ? */ { iRemain -= pData->iJPEGtoskip2; /* skip enough to access the next byte */ pWork += pData->iJPEGtoskip2; pData->iJPEGtoskip2 = 0; /* no more to skip then */ } else { pData->iJPEGtoskip2 -= iRemain; /* skip all data in the buffer */ iRemain = 0; /* and indicate this accordingly */ } /* the skip set current-pointer to NULL ! */ pData->pJPEGcurrent2 = pData->pJPEGbuf2; } while (iRemain) /* repeat until no more input-bytes */ { /* need to shift anything ? */ if ((pData->pJPEGcurrent2 > pData->pJPEGbuf2) && (pData->pJPEGcurrent2 - pData->pJPEGbuf2 + pData->iJPEGbufremain2 + iRemain > pData->iJPEGbufmax2)) { if (pData->iJPEGbufremain2 > 0) /* then do so */ MNG_COPY (pData->pJPEGbuf2, pData->pJPEGcurrent2, pData->iJPEGbufremain2); pData->pJPEGcurrent2 = pData->pJPEGbuf2; } /* does the remaining input fit into the buffer ? */ if (pData->iJPEGbufremain2 + iRemain <= pData->iJPEGbufmax2) { /* move the lot */ MNG_COPY ((pData->pJPEGcurrent2 + pData->iJPEGbufremain2), pWork, iRemain); /* adjust remaining_bytes counter */ pData->iJPEGbufremain2 += iRemain; iRemain = 0; /* and indicate there's no input left */ } else { /* calculate what does fit */ mng_uint32 iFits = pData->iJPEGbufmax2 - pData->iJPEGbufremain2; if (iFits <= 0) /* no space is just bugger 'm all */ MNG_ERROR (pData, MNG_JPEGBUFTOOSMALL); /* move that */ MNG_COPY ((pData->pJPEGcurrent2 + pData->iJPEGbufremain2), pWork, iFits); pData->iJPEGbufremain2 += iFits; /* adjust remain_bytes counter */ iRemain -= iFits; /* and the input-parms */ pWork += iFits; } #ifdef MNG_INCLUDE_IJG6B pData->pJPEGdinfo2->src->next_input_byte = pData->pJPEGcurrent2; pData->pJPEGdinfo2->src->bytes_in_buffer = pData->iJPEGbufremain2; if (!pData->bJPEGhasheader2) /* haven't got the header yet ? */ { /* call jpeg_read_header() to obtain image info */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_READ_HEADER) #endif if (jpeg_read_header (pData->pJPEGdinfo2, TRUE) != JPEG_SUSPENDED) { /* indicate the header's oke */ pData->bJPEGhasheader2 = MNG_TRUE; /* let's do some sanity checks ! */ if ((pData->pJPEGdinfo2->image_width != pData->iDatawidth ) || (pData->pJPEGdinfo2->image_height != pData->iDataheight) ) MNG_ERROR (pData, MNG_JPEGPARMSERR); if (pData->pJPEGdinfo2->jpeg_color_space != JCS_GRAYSCALE) MNG_ERROR (pData, MNG_JPEGPARMSERR); /* indicate whether or not it's progressive */ pData->bJPEGprogressive2 = (mng_bool)jpeg_has_multiple_scans (pData->pJPEGdinfo2); if (pData->bJPEGprogressive2) /* progressive alphachannel not allowed !!! */ MNG_ERROR (pData, MNG_JPEGPARMSERR); /* allocate a row of JPEG-samples */ if (pData->pJPEGdinfo2->jpeg_color_space == JCS_YCbCr) pData->iJPEGrowlen2 = pData->pJPEGdinfo2->image_width * RGB_PIXELSIZE; else pData->iJPEGrowlen2 = pData->pJPEGdinfo2->image_width; MNG_ALLOC (pData, pData->pJPEGrow2, pData->iJPEGrowlen2); pData->iJPEGalpharow = 0; /* quite empty up to now */ } pData->pJPEGcurrent2 = (mng_uint8p)pData->pJPEGdinfo2->src->next_input_byte; pData->iJPEGbufremain2 = (mng_uint32)pData->pJPEGdinfo2->src->bytes_in_buffer; } /* decompress not started ? */ if ((pData->bJPEGhasheader2) && (!pData->bJPEGdecostarted2)) { /* set parameters for decompression */ if (pData->bJPEGprogressive2) /* progressive display ? */ pData->pJPEGdinfo2->buffered_image = TRUE; /* jpeg_start_decompress(...); */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_START_DECOMPRESS) #endif if (jpeg_start_decompress (pData->pJPEGdinfo2) == TRUE) /* indicate it started */ pData->bJPEGdecostarted2 = MNG_TRUE; pData->pJPEGcurrent2 = (mng_uint8p)pData->pJPEGdinfo2->src->next_input_byte; pData->iJPEGbufremain2 = (mng_uint32)pData->pJPEGdinfo2->src->bytes_in_buffer; } /* process some scanlines ? */ if ((pData->bJPEGhasheader2) && (pData->bJPEGdecostarted2) && ((!jpeg_input_complete (pData->pJPEGdinfo2)) || (pData->pJPEGdinfo2->output_scanline < pData->pJPEGdinfo2->output_height))) { mng_int32 iLines; /* for (each output pass) */ do { /* address the row output buffer */ JSAMPROW pRow = (JSAMPROW)pData->pJPEGrow2; /* init new pass ? */ if ((pData->bJPEGprogressive2) && ((!pData->bJPEGscanstarted2) || (pData->pJPEGdinfo2->output_scanline >= pData->pJPEGdinfo2->output_height))) { pData->bJPEGscanstarted2 = MNG_TRUE; /* adjust output decompression parameters if required */ /* nop */ /* start a new output pass */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_START_OUTPUT) #endif jpeg_start_output (pData->pJPEGdinfo2, pData->pJPEGdinfo2->input_scan_number); pData->iJPEGrow = 0; /* start at row 0 in the image again */ } /* while (scan lines remain to be read) */ do { /* jpeg_read_scanlines(...); */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_READ_SCANLINES) #endif iLines = jpeg_read_scanlines (pData->pJPEGdinfo2, (JSAMPARRAY)&pRow, 1); pData->pJPEGcurrent2 = (mng_uint8p)pData->pJPEGdinfo2->src->next_input_byte; pData->iJPEGbufremain2 = (mng_uint32)pData->pJPEGdinfo2->src->bytes_in_buffer; if (iLines > 0) /* got something ? */ { if (pData->fStorerow3) /* store in object ? */ { iRetcode = ((mng_storerow)pData->fStorerow3) (pData); if (iRetcode) /* on error bail out */ return iRetcode; } } } while ((pData->pJPEGdinfo2->output_scanline < pData->pJPEGdinfo2->output_height) && (iLines > 0)); /* until end-of-image or not enough input-data */ /* terminate output pass */ if ((pData->bJPEGprogressive2) && (pData->pJPEGdinfo2->output_scanline >= pData->pJPEGdinfo2->output_height)) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_FINISH_OUTPUT) #endif if (jpeg_finish_output (pData->pJPEGdinfo2) == JPEG_SUSPENDED) jpeg_finish_output (pData->pJPEGdinfo2); /* this scan has ended */ pData->bJPEGscanstarted2 = MNG_FALSE; } } while ((!jpeg_input_complete (pData->pJPEGdinfo2)) && (iLines > 0)); } /* end of image ? */ if ((pData->bJPEGhasheader2) && (pData->bJPEGdecostarted2) && (jpeg_input_complete (pData->pJPEGdinfo2)) && (pData->pJPEGdinfo2->input_scan_number == pData->pJPEGdinfo2->output_scan_number)) { /* jpeg_finish_decompress(...); */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_JPEG_FINISH_DECOMPRESS) #endif if (jpeg_finish_decompress (pData->pJPEGdinfo2) == TRUE) { /* indicate it's done */ pData->bJPEGhasheader2 = MNG_FALSE; pData->bJPEGdecostarted2 = MNG_FALSE; pData->pJPEGcurrent2 = (mng_uint8p)pData->pJPEGdinfo2->src->next_input_byte; pData->iJPEGbufremain2 = (mng_uint32)pData->pJPEGdinfo2->src->bytes_in_buffer; /* remaining fluff is an error ! */ if ((pData->iJPEGbufremain2 > 0) || (iRemain > 0)) MNG_ERROR (pData, MNG_TOOMUCHJDAT); } } #endif /* MNG_INCLUDE_IJG6B */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSDATA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG_READ */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG_READ mng_retcode mngjpeg_decompressfree2 (mng_datap pData) { #if defined(MNG_INCLUDE_IJG6B) && defined(MNG_USE_SETJMP) mng_retcode iRetcode; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSFREE, MNG_LC_START); #endif #ifdef MNG_INCLUDE_IJG6B #ifdef MNG_USE_SETJMP iRetcode = setjmp (pData->sErrorbuf);/* setup local JPEG error-recovery */ if (iRetcode != 0) /* got here from longjmp ? */ MNG_ERRORJ (pData, iRetcode); /* then IJG-lib issued an error */ #endif /* free the row of JPEG-samples*/ MNG_FREE (pData, pData->pJPEGrow2, pData->iJPEGrowlen2); /* release the JPEG decompression object */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSFREE, MNG_LC_JPEG_DESTROY_DECOMPRESS) #endif jpeg_destroy_decompress (pData->pJPEGdinfo2); pData->bJPEGdecompress2 = MNG_FALSE; /* indicate it's done */ #endif /* MNG_INCLUDE_IJG6B */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_JPEG_DECOMPRESSFREE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG_READ */ /* ************************************************************************** */ #endif /* MNG_INCLUDE_JNG && MNG_INCLUDE_DISPLAY_PROCS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/config.sub0000755000000000000000000010546712115360516013461 0ustar rootroot#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012, 2013 Free Software Foundation, Inc. timestamp='2012-12-29' # This file 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 3 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, see . # # 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libmng-2.0.2/libmng_zlib.c0000644000000000000000000005323212005307152014115 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_zlib.c copyright (c) 2000-2004 G.Juyn * */ /* * version : 1.0.9 * */ /* * * */ /* * purpose : ZLIB library interface (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the ZLIB library interface * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - filled the deflatedata routine * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * * */ /* * 0.5.2 - 05/20/2000 - G.Juyn * */ /* * - fixed for JNG alpha handling * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - moved init of default zlib parms from here to * */ /* * "mng_hlapi.c" * */ /* * * */ /* * 0.5.3 - 06/16/2000 - G.Juyn * */ /* * - changed progressive-display processing * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/08/2000 - G.Juyn * */ /* * - fixed compiler-warnings from Mozilla * */ /* * 0.9.3 - 09/07/2000 - G.Juyn * */ /* * - added support for new filter_types * */ /* * * */ /* * 1.0.5 - 08/07/2002 - G.Juyn * */ /* * - added test-option for PNG filter method 193 (=no filter) * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/19/2002 - G.Juyn * */ /* * - added warning for too much IDAT data * */ /* * * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - added MNG_NO_16BIT_SUPPORT support * */ /* * * */ /* * 1.0.9 - 10/09/2004 - G.R-P * */ /* * - added MNG_NO_1_2_4BIT_SUPPORT support * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_memory.h" #include "libmng_pixels.h" #include "libmng_filter.h" #include "libmng_zlib.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB /* ************************************************************************** */ voidpf mngzlib_alloc (voidpf pData, uInt iCount, uInt iSize) { voidpf pPtr; /* temporary space */ #ifdef MNG_INTERNAL_MEMMNGMT pPtr = calloc (iCount, iSize); /* local allocation */ #else if (((mng_datap)pData)->fMemalloc) /* callback function set ? */ pPtr = ((mng_datap)pData)->fMemalloc (iCount * iSize); else pPtr = Z_NULL; /* can't allocate! */ #endif return pPtr; /* return the result */ } /* ************************************************************************** */ void mngzlib_free (voidpf pData, voidpf pAddress) { #ifdef MNG_INTERNAL_MEMMNGMT free (pAddress); /* free locally */ #else if (((mng_datap)pData)->fMemfree) /* callback set? */ ((mng_datap)pData)->fMemfree (pAddress, 1); #endif } /* ************************************************************************** */ mng_retcode mngzlib_initialize (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_INITIALIZE, MNG_LC_START); #endif #ifdef MNG_INTERNAL_MEMMNGMT pData->sZlib.zalloc = Z_NULL; /* let zlib figure out memory management */ pData->sZlib.zfree = Z_NULL; pData->sZlib.opaque = Z_NULL; #else /* use user-provided callbacks */ pData->sZlib.zalloc = mngzlib_alloc; pData->sZlib.zfree = mngzlib_free; pData->sZlib.opaque = (voidpf)pData; #endif pData->bInflating = MNG_FALSE; /* not performing any action yet */ pData->bDeflating = MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_INITIALIZE, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } /* ************************************************************************** */ mng_retcode mngzlib_cleanup (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_CLEANUP, MNG_LC_START); #endif if (pData->bInflating) /* force zlib cleanup */ mngzlib_inflatefree (pData); if (pData->bDeflating) mngzlib_deflatefree (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_CLEANUP, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } /* ************************************************************************** */ mng_retcode mngzlib_inflateinit (mng_datap pData) { int iZrslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEINIT, MNG_LC_START); #endif /* initialize zlib structures and such */ iZrslt = inflateInit (&pData->sZlib); if (iZrslt != Z_OK) /* on error bail out */ MNG_ERRORZ (pData, (mng_uint32)iZrslt); pData->bInflating = MNG_TRUE; /* really inflating something now */ pData->sZlib.next_out = 0; /* force JIT initialization */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEINIT, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode mngzlib_inflaterows (mng_datap pData, mng_uint32 iInlen, mng_uint8p pIndata) { int iZrslt; mng_retcode iRslt; mng_ptr pSwap; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEROWS, MNG_LC_START); #endif pData->sZlib.next_in = pIndata; /* let zlib know where to get stuff */ pData->sZlib.avail_in = (uInt)iInlen; if (pData->sZlib.next_out == 0) /* initialize output variables ? */ { /* let zlib know where to store stuff */ pData->sZlib.next_out = pData->pWorkrow; pData->sZlib.avail_out = (uInt)(pData->iRowsize + pData->iPixelofs); #ifdef MNG_NO_1_2_4BIT_SUPPORT if (pData->iPNGdepth < 8) pData->sZlib.avail_out = (uInt)((pData->iPNGdepth*pData->iRowsize + 7)/8 + pData->iPixelofs); #endif #ifdef MNG_NO_16BIT_SUPPORT if (pData->iPNGdepth > 8) pData->sZlib.avail_out = (uInt)(2*pData->iRowsize + pData->iPixelofs); #endif } do { /* now inflate a row */ iZrslt = inflate (&pData->sZlib, Z_SYNC_FLUSH); /* produced a full row ? */ if (((iZrslt == Z_OK) || (iZrslt == Z_STREAM_END)) && (pData->sZlib.avail_out == 0)) { /* image not completed yet ? */ if (pData->iRow < (mng_int32)pData->iDataheight) { #ifdef MNG_NO_1_2_4BIT_SUPPORT if (pData->iPNGdepth == 1) { /* Inflate Workrow to 8-bit */ mng_int32 iX; mng_uint8p pSrc = pData->pWorkrow+1; mng_uint8p pDest = pSrc + pData->iRowsize - (pData->iRowsize+7)/8; for (iX = ((pData->iRowsize+7)/8) ; iX > 0 ; iX--) *pDest++ = *pSrc++; pDest = pData->pWorkrow+1; pSrc = pDest + pData->iRowsize - (pData->iRowsize+7)/8; for (iX = pData->iRowsize; ;) { *pDest++ = (((*pSrc)>>7)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>6)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>5)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>4)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>3)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>2)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>1)&1); if (iX-- <= 0) break; *pDest++ = (((*pSrc) )&1); if (iX-- <= 0) break; pSrc++; } } else if (pData->iPNGdepth == 2) { /* Inflate Workrow to 8-bit */ mng_int32 iX; mng_uint8p pSrc = pData->pWorkrow+1; mng_uint8p pDest = pSrc + pData->iRowsize - (2*pData->iRowsize+7)/8; for (iX = ((2*pData->iRowsize+7)/8) ; iX > 0 ; iX--) *pDest++ = *pSrc++; pDest = pData->pWorkrow+1; pSrc = pDest + pData->iRowsize - (2*pData->iRowsize+7)/8; for (iX = pData->iRowsize; ;) { *pDest++ = (((*pSrc)>>6)&3); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>4)&3); if (iX-- <= 0) break; *pDest++ = (((*pSrc)>>2)&3); if (iX-- <= 0) break; *pDest++ = (((*pSrc) )&3); if (iX-- <= 0) break; pSrc++; } } else if (pData->iPNGdepth == 4) { /* Inflate Workrow to 8-bit */ mng_int32 iX; mng_uint8p pSrc = pData->pWorkrow+1; mng_uint8p pDest = pSrc + pData->iRowsize - (4*pData->iRowsize+7)/8; for (iX = ((4*pData->iRowsize+7)/8) ; iX > 0 ; iX--) *pDest++ = *pSrc++; pDest = pData->pWorkrow+1; pSrc = pDest + pData->iRowsize - (4*pData->iRowsize+7)/8; for (iX = pData->iRowsize; ;) { *pDest++ = (((*pSrc)>>4)&0x0f); if (iX-- <= 0) break; *pDest++ = (((*pSrc) )&0x0f); if (iX-- <= 0) break; pSrc++; } } if (pData->iPNGdepth < 8 && pData->iColortype == 0) { /* Expand samples to 8-bit by LBR */ mng_int32 iX; mng_uint8p pSrc = pData->pWorkrow+1; mng_uint8 multiplier[]={0,255,85,0,17,0,0,0,1}; for (iX = pData->iRowsize; iX > 0; iX--) *pSrc++ *= multiplier[pData->iPNGdepth]; } #endif #ifdef MNG_NO_16BIT_SUPPORT if (pData->iPNGdepth > 8) { /* Reduce Workrow to 8-bit */ mng_int32 iX; mng_uint8p pSrc = pData->pWorkrow+1; mng_uint8p pDest = pSrc; for (iX = pData->iRowsize; iX > 0; iX--) { *pDest = *pSrc; pDest++; pSrc+=2; } } #endif #ifdef FILTER192 /* has leveling info ? */ if (pData->iFilterofs == MNG_FILTER_DIFFERING) iRslt = init_rowdiffering (pData); else #endif iRslt = MNG_NOERROR; /* filter the row if necessary */ if ((!iRslt) && (pData->iFilterofs < pData->iPixelofs ) && (*(pData->pWorkrow + pData->iFilterofs)) ) iRslt = mng_filter_a_row (pData); else iRslt = MNG_NOERROR; /* additional leveling/differing ? */ if ((!iRslt) && (pData->fDifferrow)) { iRslt = ((mng_differrow)pData->fDifferrow) (pData); pSwap = pData->pWorkrow; pData->pWorkrow = pData->pPrevrow; pData->pPrevrow = pSwap; /* make sure we're processing the right data */ } if (!iRslt) { #ifdef MNG_INCLUDE_JNG if (pData->bHasJHDR) /* is JNG alpha-channel ? */ { /* just store in object ? */ if ((!iRslt) && (pData->fStorerow)) iRslt = ((mng_storerow)pData->fStorerow) (pData); } else #endif /* MNG_INCLUDE_JNG */ { /* process this row */ if ((!iRslt) && (pData->fProcessrow)) iRslt = ((mng_processrow)pData->fProcessrow) (pData); /* store in object ? */ if ((!iRslt) && (pData->fStorerow)) iRslt = ((mng_storerow)pData->fStorerow) (pData); /* color correction ? */ if ((!iRslt) && (pData->fCorrectrow)) iRslt = ((mng_correctrow)pData->fCorrectrow) (pData); /* slap onto canvas ? */ if ((!iRslt) && (pData->fDisplayrow)) { iRslt = ((mng_displayrow)pData->fDisplayrow) (pData); if (!iRslt) /* check progressive display refresh */ iRslt = mng_display_progressive_check (pData); } } } if (iRslt) /* on error bail out */ MNG_ERROR (pData, iRslt); if (!pData->fDifferrow) /* swap row-pointers */ { pSwap = pData->pWorkrow; pData->pWorkrow = pData->pPrevrow; pData->pPrevrow = pSwap; /* so prev points to the processed row! */ } iRslt = mng_next_row (pData); /* adjust variables for next row */ if (iRslt) /* on error bail out */ MNG_ERROR (pData, iRslt); } /* let zlib know where to store next output */ pData->sZlib.next_out = pData->pWorkrow; pData->sZlib.avail_out = (uInt)(pData->iRowsize + pData->iPixelofs); #ifdef MNG_NO_1_2_4BIT_SUPPORT if (pData->iPNGdepth < 8) pData->sZlib.avail_out = (uInt)((pData->iPNGdepth*pData->iRowsize + 7)/8 + pData->iPixelofs); #endif #ifdef MNG_NO_16BIT_SUPPORT if (pData->iPNGdepth > 8) pData->sZlib.avail_out = (uInt)(2*pData->iRowsize + pData->iPixelofs); #endif } } /* until some error or EOI or all pixels received */ while ( (iZrslt == Z_OK) && (pData->sZlib.avail_in > 0) && ( (pData->iRow < (mng_int32)pData->iDataheight) || ( (pData->iPass >= 0) && (pData->iPass < 7) ) ) ); /* on error bail out */ if ((iZrslt != Z_OK) && (iZrslt != Z_STREAM_END)) MNG_ERRORZ (pData, (mng_uint32)iZrslt); /* too much data ? */ if ((iZrslt == Z_OK) && (pData->sZlib.avail_in > 0)) MNG_WARNING (pData, MNG_TOOMUCHIDAT); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEROWS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ mng_retcode mngzlib_inflatedata (mng_datap pData, mng_uint32 iInlen, mng_uint8p pIndata) { int iZrslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEDATA, MNG_LC_START); #endif /* let zlib know where to get stuff */ pData->sZlib.next_in = pIndata; pData->sZlib.avail_in = (uInt)iInlen; /* now inflate the data in one go! */ iZrslt = inflate (&pData->sZlib, Z_FINISH); /* not enough room in output-buffer ? */ if ((iZrslt == Z_BUF_ERROR) || (pData->sZlib.avail_in > 0)) return MNG_BUFOVERFLOW; /* on error bail out */ if ((iZrslt != Z_OK) && (iZrslt != Z_STREAM_END)) MNG_ERRORZ (pData, (mng_uint32)iZrslt); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEDATA, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mngzlib_inflatefree (mng_datap pData) { int iZrslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEFREE, MNG_LC_START); #endif pData->bInflating = MNG_FALSE; /* stopped it */ iZrslt = inflateEnd (&pData->sZlib); /* let zlib cleanup its own stuff */ if (iZrslt != Z_OK) /* on error bail out */ MNG_ERRORZ (pData, (mng_uint32)iZrslt); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEFREE, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } /* ************************************************************************** */ mng_retcode mngzlib_deflateinit (mng_datap pData) { int iZrslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEINIT, MNG_LC_START); #endif /* initialize zlib structures and such */ iZrslt = deflateInit2 (&pData->sZlib, pData->iZlevel, pData->iZmethod, pData->iZwindowbits, pData->iZmemlevel, pData->iZstrategy); if (iZrslt != Z_OK) /* on error bail out */ MNG_ERRORZ (pData, (mng_uint32)iZrslt); pData->bDeflating = MNG_TRUE; /* really deflating something now */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEINIT, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } /* ************************************************************************** */ mng_retcode mngzlib_deflaterows (mng_datap pData, mng_uint32 iInlen, mng_uint8p pIndata) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEROWS, MNG_LC_START); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEROWS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mngzlib_deflatedata (mng_datap pData, mng_uint32 iInlen, mng_uint8p pIndata) { int iZrslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEDATA, MNG_LC_START); #endif pData->sZlib.next_in = pIndata; /* let zlib know where to get stuff */ pData->sZlib.avail_in = (uInt)iInlen; /* now deflate the data in one go! */ iZrslt = deflate (&pData->sZlib, Z_FINISH); /* not enough room in output-buffer ? */ if ((iZrslt == Z_BUF_ERROR) || (pData->sZlib.avail_in > 0)) return MNG_BUFOVERFLOW; /* on error bail out */ if ((iZrslt != Z_OK) && (iZrslt != Z_STREAM_END)) MNG_ERRORZ (pData, (mng_uint32)iZrslt); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEDATA, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mngzlib_deflatefree (mng_datap pData) { int iZrslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEFREE, MNG_LC_START); #endif iZrslt = deflateEnd (&pData->sZlib); /* let zlib cleanup its own stuff */ if (iZrslt != Z_OK) /* on error bail out */ MNG_ERRORZ (pData, (mng_uint32)iZrslt); pData->bDeflating = MNG_FALSE; /* stopped it */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEFREE, MNG_LC_END); #endif return MNG_NOERROR; /* done */ } /* ************************************************************************** */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_error.h0000644000000000000000000001647012005307152014316 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_error.h copyright (c) 2000-2002 G.Juyn * */ /* * version : 1.0.5 * */ /* * * */ /* * purpose : Error functions (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the generic error-codes and functions * */ /* * * */ /* * changes : 0.5.1 - 05/06/2000 - G.Juyn * */ /* * - added some errorcodes * */ /* * 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - added some errorcodes * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - added application errorcodes (used with callbacks) * */ /* * - moved chunk-access errorcodes to severity 5 * */ /* * * */ /* * 0.5.2 - 05/20/2000 - G.Juyn * */ /* * - added JNG errorcodes * */ /* * 0.5.2 - 05/23/2000 - G.Juyn * */ /* * - added error tell-tale definition * */ /* * 0.5.2 - 05/30/2000 - G.Juyn * */ /* * - added errorcodes for delta-image processing * */ /* * 0.5.2 - 06/06/2000 - G.Juyn * */ /* * - added errorcode for delayed buffer-processing * */ /* * - moved errorcodes to "libmng.h" * */ /* * * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - added macro + routine to set returncode without * */ /* * calling error callback * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 08/20/2002 - G.Juyn * */ /* * - added option for soft-handling of errors * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_error_h_ #define _libmng_error_h_ /* ************************************************************************** */ /* * * */ /* * Default error routines * */ /* * * */ /* ************************************************************************** */ mng_bool mng_store_error (mng_datap pData, mng_retcode iError, mng_retcode iExtra1, mng_retcode iExtra2); mng_bool mng_process_error (mng_datap pData, mng_retcode iError, mng_retcode iExtra1, mng_retcode iExtra2); /* ************************************************************************** */ /* * * */ /* * Error handling macros * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_SOFTERRORS #define MNG_ERROR(D,C) { if (!mng_process_error (D, C, 0, 0)) return C; } #define MNG_ERRORZ(D,Z) { if (!mng_process_error (D, MNG_ZLIBERROR, Z, 0)) return MNG_ZLIBERROR; } #define MNG_ERRORJ(D,J) { if (!mng_process_error (D, MNG_JPEGERROR, J, 0)) return MNG_JPEGERROR; } #define MNG_ERRORL(D,L) { if (!mng_process_error (D, MNG_LCMSERROR, L, 0)) return MNG_LCMSERROR; } #else #define MNG_ERROR(D,C) { mng_process_error (D, C, 0, 0); return C; } #define MNG_ERRORZ(D,Z) { mng_process_error (D, MNG_ZLIBERROR, Z, 0); return MNG_ZLIBERROR; } #define MNG_ERRORJ(D,J) { mng_process_error (D, MNG_JPEGERROR, J, 0); return MNG_JPEGERROR; } #define MNG_ERRORL(D,L) { mng_process_error (D, MNG_LCMSERROR, L, 0); return MNG_LCMSERROR; } #endif #define MNG_RETURN(D,C) { mng_store_error (D, C, 0, 0); return C; } #define MNG_WARNING(D,C) { if (!mng_process_error (D, C, 0, 0)) return C; } #define MNG_VALIDHANDLE(H) { if ((H == 0) || (((mng_datap)H)->iMagic != MNG_MAGIC)) \ return MNG_INVALIDHANDLE; } #define MNG_VALIDHANDLEX(H) { if ((H == 0) || (((mng_datap)H)->iMagic != MNG_MAGIC)) \ return 0; } #define MNG_VALIDCB(D,C) { if (!((mng_datap)D)->C) \ MNG_ERROR (((mng_datap)D), MNG_NOCALLBACK) } /* ************************************************************************** */ /* * * */ /* * Error string-table entry * */ /* * * */ /* ************************************************************************** */ typedef struct { mng_retcode iError; mng_pchar zErrortext; } mng_error_entry; typedef mng_error_entry const * mng_error_entryp; /* ************************************************************************** */ #endif /* _libmng_error_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/configure.ac0000644000000000000000000001703312115357037013757 0ustar rootrootdnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.65) # define([MAJ_NR],[2]) define([MIN_NR],[0]) define([REL_NR],[2]) # #AC_INIT (PACKAGE, VERSION, [BUG-REPORT], [TARNAME], [URL]) AC_INIT( [libmng],[MAJ_NR.MIN_NR.REL_NR], [png-mng-implement@lists.sourceforge.net], [libmng-MAJ_NR.MIN_NR.REL_NR], [http://www.libmng.com/]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([libmng_hlapi.c]) # AC_CONFIG_HEADERS(config.h) # MNG_MAJOR_NR=MAJ_NR MNG_MINOR_NR=MIN_NR MNG_RELEASE_NR=REL_NR # AC_SUBST(MNG_MAJOR_NR) AC_SUBST(MNG_MINOR_NR) AC_SUBST(MNG_RELEASE_NR) # AM_INIT_AUTOMAKE([-Wall -Werror]) dnl pass the version string on the the makefiles AC_SUBST(PACKAGE) AC_SUBST(VERSION) AC_DEFINE([MNG_VERSION_MAJOR],[MAJ_NR],[MAJOR number of version]) AC_DEFINE([MNG_VERSION_MINOR],[MIN_NR],[MINOR number of version]) AC_DEFINE([MNG_VERSION_RELEASE],[REL_NR],[PATCH number of version]) AC_DEFINE([MNG_VERSION_SO],[MAJ_NR],[eg. libmng.so.1]) AC_DEFINE([MNG_VERSION_DLL],[MAJ_NR],[ but: libmng.dll (!)]) dnl Checks for programs. AC_PROG_CC AC_ISC_POSIX AM_PROG_LIBTOOL AC_PROG_INSTALL AC_LIBTOOL_WIN32_DLL # AC_C_BIGENDIAN # dnl support for files >2GB AC_SYS_LARGEFILE dnl Check for required header files AC_HEADER_STDC dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST dnl need pow and fabs AC_CHECK_FUNC(pow, , AC_CHECK_LIB(m, pow, LIBS="$LIBS -lm")) dnl what functionality we want to add (read, write, display). dnl all on by default. see libmng_conf.h for full descriptions dnl not building a standard shared object? AC_ARG_ENABLE(buildso, [ --disable-buildso disable building standard shared object]) if test "x$enable_buildso" != "xno"; then AC_DEFINE([MNG_BUILD_SO], [1], [enable building standard shared object]) fi dnl we only support the full mng spec for now (no LC or VLC) AC_DEFINE([MNG_SUPPORT_FULL], [1], [define if you want full mng support]) dnl remove support in library to read images? AC_ARG_ENABLE(read, [ --disable-read remove read support from library]) if test "x$enable_read" != "xno"; then AC_DEFINE([MNG_SUPPORT_READ], [1], [define if you want read support]) fi dnl remove support in library to write images? AC_ARG_ENABLE(write, [ --disable-write remove write support from library]) if test "x$enable_write" != "xno"; then AC_DEFINE([MNG_SUPPORT_WRITE], [1], [define if you want write support]) fi dnl remove support in library to display images? AC_ARG_ENABLE(display, [ --disable-display remove display support from library]) if test "x$enable_display" != "xno"; then AC_DEFINE([MNG_SUPPORT_DISPLAY], [1], [define if you want display support]) fi dnl remove support for 'dynamic' MNG? AC_ARG_ENABLE(dynamic, [ --disable-dynamic remove dynamic MNG support from library]) if test "x$enable_dynamic" != "xno"; then AC_DEFINE([MNG_SUPPORT_DYNAMICMNG], [1], [define if you want dynamic support]) fi dnl remove support in library to access chunks? AC_ARG_ENABLE(chunks, [ --disable-chunks remove support for chunk access]) if test "x$enable_chunks" != "xno"; then AC_DEFINE([MNG_ACCESS_CHUNKS], [1], [define if you want chunk access support]) fi dnl disable support for accessing chunks that have been previously read? AC_ARG_ENABLE(storechunks, [ --disable-storechunks remove support for access of previous chunks]) if test "x$enable_storechunks" != "xno"; then AC_DEFINE([MNG_STORE_CHUNKS], [1], [enable support for accessing chunks]) fi dnl enable support for debug tracing callbacks and messages? AC_ARG_ENABLE(trace, [ --enable-trace include support for debug tracing callbacks],[ if test "x$enable_trace" = "xyes"; then AC_DEFINE([MNG_SUPPORT_TRACE], [1], [enable support for debug tracing]) AC_DEFINE([MNG_TRACE_TELLTALE], [1], [enable support for debug messages]) fi ]) dnl verbose error text dnl this should always be on AC_DEFINE([MNG_ERROR_TELLTALE], [1], [enable verbose error text]) dnl libz is required. AC_ARG_WITH(zlib, [ --with-zlib[=DIR] use zlib include/library files in DIR],[ if test -d "$withval"; then CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" fi ]) AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, gzread, , AC_MSG_ERROR(zlib library not found)), AC_MSG_ERROR(zlib header not found) ) dnl check for jpeg library AC_ARG_WITH(jpeg, [ --with-jpeg[=DIR] use jpeg include/library files in DIR], [with_jpeg=$withval],[with_jpeg=_auto]) if test "x$with_jpeg" != "xno" -a "x$with_jpeg" != "xyes" -a \ "x$with_jpeg" != "x_auto"; then # Save in case test with directory specified fails _cppflags=${CPPFLAGS} _ldflags=${LDFLAGS} _restore=1 CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" else _restore=0 fi if test "x$with_jpeg" != "xno"; then AC_CHECK_HEADER(jpeglib.h, AC_CHECK_LIB(jpeg, jpeg_read_header, [ LIBS="$LIBS -ljpeg" AC_DEFINE([HAVE_LIBJPEG], [1], [define if you want JPEG support]) _restore=0 ], AC_MSG_WARN(jpeg library not found)), AC_MSG_WARN(jpeg header not found) ) fi test $_restore -eq 1 && CPPFLAGS=$_cppflags LDFLAGS=$_ldflags dnl check for lcms2 library AC_ARG_WITH(lcms2, [ --with-lcms2[=DIR] use lcms2 include/library files in DIR], [with_lcms2=$withval],[with_lcms2=_auto]) if test "x$with_lcms2" != "xno" -a "x$with_lcms2" != "xyes" -a \ "x$with_lcms2" != "x_auto"; then # Save in case test with directory specified fails _cppflags=$CPPFLAGS _ldflags=$LDFLAGS _restore=1 CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" else _restore=0 fi if test "x$with_lcms2" != "xno"; then AC_CHECK_HEADER(lcms2.h, [ have_lcms2=yes AC_CHECK_LIB(lcms2, cmsFreeToneCurve, [ LIBS="$LIBS -llcms2" AC_DEFINE([HAVE_LIBLCMS2], [1], [define if you want lcms v2 support]) dnl for now this implies MNG_INCLUDE_LCMS in the headers: AC_DEFINE([MNG_FULL_CMS], [1], [define if you want full lcms support]) _restore=0 have_lcms2=yes ],[ have_lcms2=no ]) ]) dnl give feedback only if the user asked specifically for lcms2 if test "x$with_lcms2" != "x_auto" -a "x$have_lcms2" != "xyes"; then AC_MSG_WARN([lcms2 not found... disabling LCMS v2 support]) fi fi if test "x$with_lcms2" != "x_auto" -a "x$have_lcms2" != "xyes"; then dnl check for lcms library AC_ARG_WITH(lcms, [ --with-lcms[=DIR] use lcms include/library files in DIR], [with_lcms=$withval],[with_lcms=_auto]) if test "x$with_lcms" != "xno" -a "x$with_lcms" != "xyes" -a \ "x$with_lcms" != "x_auto"; then # Save in case test with directory specified fails _cppflags=$CPPFLAGS _ldflags=$LDFLAGS _restore=1 CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" else _restore=0 fi if test "x$with_lcms" != "xno"; then AC_CHECK_HEADER(lcms.h, [ have_lcms=yes AC_CHECK_LIB(lcms, cmsCreateRGBProfile, [ LIBS="$LIBS -llcms" AC_DEFINE([HAVE_LIBLCMS1], [1], [define if you want lcms v1 support]) dnl for now this implies MNG_INCLUDE_LCMS in the headers: AC_DEFINE([MNG_FULL_CMS], [1], [define if you want full lcms support]) _restore=0 have_lcms=yes ],[ have_lcms=no ]) ]) dnl give feedback only if the user asked specifically for lcms if test "x$with_lcms" != "x_auto" -a "x$have_lcms" != "xyes"; then AC_MSG_WARN([lcms not found... disabling LCMS v1 support]) fi fi fi test $_restore -eq 1 && CPPFLAGS=$_cppflags LDFLAGS=$_ldflags AC_CONFIG_FILES([Makefile libmng.pc:libmng.pc.in ]) AC_OUTPUT libmng-2.0.2/libmng_dither.h0000644000000000000000000000525712005307152014445 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_dither.h copyright (c) 2000-2002 G.Juyn * */ /* * version : 1.0.5 * */ /* * * */ /* * purpose : Dithering routines (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the dithering routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_dither_h_ #define _libmng_dither_h_ /* ************************************************************************** */ mng_retcode mng_dither_a_row (mng_datap pData, mng_uint8p pRow); /* ************************************************************************** */ #endif /* _libmng_dither_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/README.version0000644000000000000000000000073312115352323014025 0ustar rootrootVersion changes - here 2.0.2 - must be written into the following files: libmng.h : ======================= #define MNG_VERSION_TEXT "2.0.2" CMake/vers.cmake: ======================= SET(MNG_VERSION_MAJOR 2) SET(MNG_VERSION_MINOR 0) SET(MNG_VERSION_PATCH 2) makefiles/configure.ac : ======================= define([MAJ_NR],[2]) define([MIN_NR],[0]) define([REL_NR],[2]) makefiles/version.mak : ======================= MNGMAJ = 2 MNGMIN = 0 MNGREL = 2 MNGVER = 2.0.2 libmng-2.0.2/Makefile.am0000644000000000000000000000260112115357037013520 0ustar rootroot## Process this file with automake to produce Makefile.in MAINTAINERCLEANFILES = Makefile.in ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = 1.3 foreign no-dependencies # include the app subdirectories in the distribution EXTRA_DIST = makefiles doc contrib # libmng release @VERSION@ libmng_la_LDFLAGS = \ -version-number @MNG_MAJOR_NR@:@MNG_MINOR_NR@:@MNG_RELEASE_NR@ lib_LTLIBRARIES = libmng.la include_HEADERS = libmng.h libmng_conf.h libmng_types.h noinst_HEADERS = libmng_chunk_io.h libmng_chunk_prc.h libmng_chunks.h \ libmng_cms.h libmng_data.h libmng_display.h libmng_dither.h \ libmng_error.h libmng_filter.h libmng_jpeg.h libmng_memory.h \ libmng_object_prc.h libmng_objects.h libmng_pixels.h \ libmng_read.h libmng_trace.h libmng_write.h libmng_zlib.h libmng_la_SOURCES = libmng_callback_xs.c libmng_chunk_io.c \ libmng_chunk_prc.c libmng_chunk_xs.c libmng_cms.c \ libmng_display.c libmng_dither.c libmng_error.c \ libmng_filter.c libmng_hlapi.c libmng_jpeg.c \ libmng_object_prc.c libmng_pixels.c libmng_prop_xs.c \ libmng_read.c libmng_trace.c libmng_write.c libmng_zlib.c man_MANS = doc/man/libmng.3 doc/man/jng.5 doc/man/mng.5 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libmng.pc uninstall-hook: rm -f $(DESTDIR)$(pkgconfigdir)/libmng.pc rm -f $(DESTDIR)$(includedir)/libmng.h rm -f $(DESTDIR)$(includedir)/libmng_conf.h rm -f $(DESTDIR)$(includedir)/libmng_types.h libmng-2.0.2/bootstrap.sh0000755000000000000000000000004712115360472014037 0ustar rootroot#!/bin/sh autoreconf --install --force libmng-2.0.2/libmng_prop_xs.c0000644000000000000000000024145112005307152014651 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_prop_xs.c copyright (c) 2000-2006 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : property get/set interface (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the property get/set functions * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - fixed calling convention * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - added set_outputprofile2 & set_srgbprofile2 * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * * */ /* * 0.5.2 - 05/23/2000 - G.Juyn * */ /* * - changed inclusion of cms-routines * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - added support for get/set default zlib/IJG parms * */ /* * 0.5.2 - 05/31/2000 - G.Juyn * */ /* * - fixed up punctuation (contribution by Tim Rowley) * */ /* * 0.5.2 - 06/05/2000 - G.Juyn * */ /* * - added support for RGB8_A8 canvasstyle * */ /* * * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - added get/set for speedtype to facilitate testing * */ /* * - added get for imagelevel during processtext callback * */ /* * 0.5.3 - 06/26/2000 - G.Juyn * */ /* * - changed userdata variable to mng_ptr * */ /* * 0.5.3 - 06/29/2000 - G.Juyn * */ /* * - fixed incompatible return-types * */ /* * * */ /* * 0.9.1 - 07/08/2000 - G.Juyn * */ /* * - added get routines for internal display variables * */ /* * - added get/set routines for suspensionmode variable * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - added get/set routines for sectionbreak variable * */ /* * * */ /* * 0.9.2 - 07/31/2000 - G.Juyn * */ /* * - added status_xxxx functions * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 10/10/2000 - G.Juyn * */ /* * - added support for alpha-depth prediction * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added functions to retrieve PNG/JNG specific header-info * */ /* * 0.9.3 - 10/20/2000 - G.Juyn * */ /* * - added get/set for bKGD preference setting * */ /* * 0.9.3 - 10/21/2000 - G.Juyn * */ /* * - added get function for interlace/progressive display * */ /* * * */ /* * 1.0.1 - 04/21/2001 - G.Juyn (code by G.Kelly) * */ /* * - added BGRA8 canvas with premultiplied alpha * */ /* * 1.0.1 - 05/02/2001 - G.Juyn * */ /* * - added "default" sRGB generation (Thanks Marti!) * */ /* * * */ /* * 1.0.2 - 06/23/2001 - G.Juyn * */ /* * - added optimization option for MNG-video playback * */ /* * 1.0.2 - 06/25/2001 - G.Juyn * */ /* * - added option to turn off progressive refresh * */ /* * * */ /* * 1.0.3 - 08/06/2001 - G.Juyn * */ /* * - added get function for last processed BACK chunk * */ /* * * */ /* * 1.0.4 - 06/22/2002 - G.Juyn * */ /* * - B495442 - invalid returnvalue in mng_get_suspensionmode * */ /* * * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * 1.0.5 - 09/22/2002 - G.Juyn * */ /* * - added bgrx8 canvas (filler byte) * */ /* * 1.0.5 - 11/07/2002 - G.Juyn * */ /* * - added support to get totals after mng_read() * */ /* * * */ /* * 1.0.6 - 05/11/2003 - G. Juyn * */ /* * - added conditionals around canvas update routines * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - added conditionals around some JNG-supporting code * */ /* * 1.0.6 - 07/11/2003 - G.R-P * */ /* * - added conditionals zlib and jpeg property accessors * */ /* * 1.0.6 - 07/14/2003 - G.R-P * */ /* * - added conditionals around various unused functions * */ /* * * */ /* * 1.0.7 - 11/27/2003 - R.A * */ /* * - added CANVAS_RGB565 and CANVAS_BGR565 * */ /* * 1.0.7 - 12/06/2003 - R.A * */ /* * - added CANVAS_RGBA565 and CANVAS_BGRA565 * */ /* * 1.0.7 - 01/25/2004 - J.S * */ /* * - added premultiplied alpha canvas' for RGBA, ARGB, ABGR * */ /* * 1.0.7 - 03/07/2004 - G.R-P. * */ /* * - put gamma, cms-related functions inside #ifdef * */ /* * * */ /* * 1.0.8 - 04/02/2004 - G.Juyn * */ /* * - added CRC existence & checking flags * */ /* * * */ /* * 1.0.9 - 09/18/2004 - G.R-P. * */ /* * - added some MNG_SUPPORT_WRITE conditionals * */ /* * 1.0.9 - 10/03/2004 - G.Juyn * */ /* * - added function to retrieve current FRAM delay * */ /* * 1.0.9 - 10/14/2004 - G.Juyn * */ /* * - added bgr565_a8 canvas-style (thanks to J. Elvander) * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* * 1.0.10 - 03/07/2006 - (thanks to W. Manthey) * */ /* * - added CANVAS_RGB555 and CANVAS_BGR555 * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_objects.h" #include "libmng_memory.h" #include "libmng_cms.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ /* * * */ /* * Property set functions * */ /* * * */ /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_userdata (mng_handle hHandle, mng_ptr pUserdata) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_USERDATA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->pUserdata = pUserdata; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_USERDATA, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_canvasstyle (mng_handle hHandle, mng_uint32 iStyle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_CANVASSTYLE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) switch (iStyle) { #ifndef MNG_SKIPCANVAS_RGB8 case MNG_CANVAS_RGB8 : break; #endif #ifndef MNG_SKIPCANVAS_RGBA8 case MNG_CANVAS_RGBA8 : break; #endif #ifndef MNG_SKIPCANVAS_RGBA8_PM case MNG_CANVAS_RGBA8_PM: break; #endif #ifndef MNG_SKIPCANVAS_ARGB8 case MNG_CANVAS_ARGB8 : break; #endif #ifndef MNG_SKIPCANVAS_ARGB8_PM case MNG_CANVAS_ARGB8_PM: break; #endif #ifndef MNG_SKIPCANVAS_RGB8_A8 case MNG_CANVAS_RGB8_A8 : break; #endif #ifndef MNG_SKIPCANVAS_BGR8 case MNG_CANVAS_BGR8 : break; #endif #ifndef MNG_SKIPCANVAS_BGRX8 case MNG_CANVAS_BGRX8 : break; #endif #ifndef MNG_SKIPCANVAS_BGRA8 case MNG_CANVAS_BGRA8 : break; #endif #ifndef MNG_SKIPCANVAS_BGRA8_PM case MNG_CANVAS_BGRA8_PM: break; #endif #ifndef MNG_SKIPCANVAS_ABGR8 case MNG_CANVAS_ABGR8 : break; #endif #ifndef MNG_SKIPCANVAS_ABGR8_PM case MNG_CANVAS_ABGR8_PM: break; #endif #ifndef MNG_SKIPCANVAS_RGB565 case MNG_CANVAS_RGB565 : break; #endif #ifndef MNG_SKIPCANVAS_RGBA565 case MNG_CANVAS_RGBA565 : break; #endif #ifndef MNG_SKIPCANVAS_BGR565 case MNG_CANVAS_BGR565 : break; #endif #ifndef MNG_SKIPCANVAS_BGRA565 case MNG_CANVAS_BGRA565 : break; #endif #ifndef MNG_SKIPCANVAS_BGR565_A8 case MNG_CANVAS_BGR565_A8 : break; #endif #ifndef MNG_SKIPCANVAS_RGB555 case MNG_CANVAS_RGB555 : break; #endif #ifndef MNG_SKIPCANVAS_BGR555 case MNG_CANVAS_BGR555 : break; #endif /* case MNG_CANVAS_RGB16 : break; */ /* case MNG_CANVAS_RGBA16 : break; */ /* case MNG_CANVAS_ARGB16 : break; */ /* case MNG_CANVAS_BGR16 : break; */ /* case MNG_CANVAS_BGRA16 : break; */ /* case MNG_CANVAS_ABGR16 : break; */ /* case MNG_CANVAS_INDEX8 : break; */ /* case MNG_CANVAS_INDEXA8 : break; */ /* case MNG_CANVAS_AINDEX8 : break; */ /* case MNG_CANVAS_GRAY8 : break; */ /* case MNG_CANVAS_GRAY16 : break; */ /* case MNG_CANVAS_GRAYA8 : break; */ /* case MNG_CANVAS_GRAYA16 : break; */ /* case MNG_CANVAS_AGRAY8 : break; */ /* case MNG_CANVAS_AGRAY16 : break; */ /* case MNG_CANVAS_DX15 : break; */ /* case MNG_CANVAS_DX16 : break; */ default : { MNG_ERROR (((mng_datap)hHandle), MNG_INVALIDCNVSTYLE) }; } ((mng_datap)hHandle)->iCanvasstyle = iStyle; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_CANVASSTYLE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_bkgdstyle (mng_handle hHandle, mng_uint32 iStyle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_BKGDSTYLE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) switch (iStyle) /* alpha-modes not supported */ { #ifndef MNG_SKIPCANVAS_RGB8 case MNG_CANVAS_RGB8 : break; #endif #ifndef MNG_SKIPCANVAS_BGR8 case MNG_CANVAS_BGR8 : break; #endif #ifndef MNG_SKIPCANVAS_BGRX8 case MNG_CANVAS_BGRX8 : break; #endif #ifndef MNG_SKIPCANVAS_RGB565 case MNG_CANVAS_RGB565 : break; #endif #ifndef MNG_SKIPCANVAS_BGR565 case MNG_CANVAS_BGR565 : break; #endif /* case MNG_CANVAS_RGB16 : break; */ /* case MNG_CANVAS_BGR16 : break; */ /* case MNG_CANVAS_INDEX8 : break; */ /* case MNG_CANVAS_GRAY8 : break; */ /* case MNG_CANVAS_GRAY16 : break; */ /* case MNG_CANVAS_DX15 : break; */ /* case MNG_CANVAS_DX16 : break; */ default : MNG_ERROR (((mng_datap)hHandle), MNG_INVALIDCNVSTYLE); } ((mng_datap)hHandle)->iBkgdstyle = iStyle; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_BKGDSTYLE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_bgcolor (mng_handle hHandle, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_BGCOLOR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iBGred = iRed; ((mng_datap)hHandle)->iBGgreen = iGreen; ((mng_datap)hHandle)->iBGblue = iBlue; ((mng_datap)hHandle)->bUseBKGD = MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_BGCOLOR, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_usebkgd (mng_handle hHandle, mng_bool bUseBKGD) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_USEBKGD, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->bUseBKGD = bUseBKGD; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_USEBKGD, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_storechunks (mng_handle hHandle, mng_bool bStorechunks) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_STORECHUNKS, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->bStorechunks = bStorechunks; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_STORECHUNKS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_sectionbreaks (mng_handle hHandle, mng_bool bSectionbreaks) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SECTIONBREAKS, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->bSectionbreaks = bSectionbreaks; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SECTIONBREAKS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_cacheplayback (mng_handle hHandle, mng_bool bCacheplayback) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_CACHEPLAYBACK, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) if (((mng_datap)hHandle)->bHasheader) MNG_ERROR (((mng_datap)hHandle), MNG_FUNCTIONINVALID); ((mng_datap)hHandle)->bCacheplayback = bCacheplayback; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_CACHEPLAYBACK, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_doprogressive (mng_handle hHandle, mng_bool bDoProgressive) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_DOPROGRESSIVE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->bDoProgressive = bDoProgressive; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_DOPROGRESSIVE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_crcmode (mng_handle hHandle, mng_uint32 iCrcmode) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_CRCMODE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iCrcmode = iCrcmode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_CRCMODE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_set_srgb (mng_handle hHandle, mng_bool bIssRGB) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SRGB, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->bIssRGB = bIssRGB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SRGB, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_SKIPCHUNK_iCCP mng_retcode MNG_DECL mng_set_outputprofile (mng_handle hHandle, mng_pchar zFilename) { #ifdef MNG_INCLUDE_LCMS mng_datap pData; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_OUTPUTPROFILE, MNG_LC_START); #endif #ifdef MNG_INCLUDE_LCMS MNG_VALIDHANDLE (hHandle) pData = (mng_datap)hHandle; /* address the structure */ if (pData->hProf2) /* previously defined ? */ mnglcms_freeprofile (pData->hProf2); /* allocate new CMS profile handle */ pData->hProf2 = mnglcms_createfileprofile (zFilename); if (!pData->hProf2) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOHANDLE); #endif /* MNG_INCLUDE_LCMS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_OUTPUTPROFILE, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_SKIPCHUNK_iCCP mng_retcode MNG_DECL mng_set_outputprofile2 (mng_handle hHandle, mng_uint32 iProfilesize, mng_ptr pProfile) { #ifdef MNG_INCLUDE_LCMS mng_datap pData; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_OUTPUTPROFILE2, MNG_LC_START); #endif #ifdef MNG_INCLUDE_LCMS MNG_VALIDHANDLE (hHandle) pData = (mng_datap)hHandle; /* address the structure */ if (pData->hProf2) /* previously defined ? */ mnglcms_freeprofile (pData->hProf2); /* allocate new CMS profile handle */ pData->hProf2 = mnglcms_creatememprofile (iProfilesize, pProfile); if (!pData->hProf2) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOHANDLE); #endif /* MNG_INCLUDE_LCMS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_OUTPUTPROFILE2, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_outputsrgb (mng_handle hHandle) { #ifdef MNG_INCLUDE_LCMS mng_datap pData; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_OUTPUTSRGB, MNG_LC_START); #endif #ifdef MNG_INCLUDE_LCMS MNG_VALIDHANDLE (hHandle) pData = (mng_datap)hHandle; /* address the structure */ if (pData->hProf2) /* previously defined ? */ mnglcms_freeprofile (pData->hProf2); /* allocate new CMS profile handle */ pData->hProf2 = mnglcms_createsrgbprofile (); if (!pData->hProf2) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOHANDLE); #endif /* MNG_INCLUDE_LCMS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_OUTPUTSRGB, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_set_srgbprofile (mng_handle hHandle, mng_pchar zFilename) { #ifdef MNG_INCLUDE_LCMS mng_datap pData; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SRGBPROFILE2, MNG_LC_START); #endif #ifdef MNG_INCLUDE_LCMS MNG_VALIDHANDLE (hHandle) pData = (mng_datap)hHandle; /* address the structure */ if (pData->hProf3) /* previously defined ? */ mnglcms_freeprofile (pData->hProf3); /* allocate new CMS profile handle */ pData->hProf3 = mnglcms_createfileprofile (zFilename); if (!pData->hProf3) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOHANDLE); #endif /* MNG_INCLUDE_LCMS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SRGBPROFILE2, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_set_srgbprofile2 (mng_handle hHandle, mng_uint32 iProfilesize, mng_ptr pProfile) { #ifdef MNG_INCLUDE_LCMS mng_datap pData; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SRGBPROFILE, MNG_LC_START); #endif #ifdef MNG_INCLUDE_LCMS MNG_VALIDHANDLE (hHandle) pData = (mng_datap)hHandle; /* address the structure */ if (pData->hProf3) /* previously defined ? */ mnglcms_freeprofile (pData->hProf3); /* allocate new CMS profile handle */ pData->hProf3 = mnglcms_creatememprofile (iProfilesize, pProfile); if (!pData->hProf3) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOHANDLE); #endif /* MNG_INCLUDE_LCMS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SRGBPROFILE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_srgbimplicit (mng_handle hHandle) { #ifdef MNG_INCLUDE_LCMS mng_datap pData; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SRGBIMPLICIT, MNG_LC_START); #endif #ifdef MNG_INCLUDE_LCMS MNG_VALIDHANDLE (hHandle) pData = (mng_datap)hHandle; /* address the structure */ if (pData->hProf3) /* previously defined ? */ mnglcms_freeprofile (pData->hProf3); /* allocate new CMS profile handle */ pData->hProf3 = mnglcms_createsrgbprofile (); if (!pData->hProf3) /* handle error ? */ MNG_ERRORL (pData, MNG_LCMS_NOHANDLE); #endif /* MNG_INCLUDE_LCMS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SRGBIMPLICIT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) mng_retcode MNG_DECL mng_set_viewgamma (mng_handle hHandle, mng_float dGamma) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_VIEWGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->dViewgamma = dGamma; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_VIEWGAMMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_displaygamma (mng_handle hHandle, mng_float dGamma) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_DISPLAYGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->dDisplaygamma = dGamma; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_DISPLAYGAMMA, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_dfltimggamma (mng_handle hHandle, mng_float dGamma) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_DFLTIMGGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->dDfltimggamma = dGamma; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_DFLTIMGGAMMA, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) mng_retcode MNG_DECL mng_set_viewgammaint (mng_handle hHandle, mng_uint32 iGamma) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_VIEWGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->dViewgamma = (mng_float)iGamma / 100000; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_VIEWGAMMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_displaygammaint (mng_handle hHandle, mng_uint32 iGamma) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_DISPLAYGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->dDisplaygamma = (mng_float)iGamma / 100000; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_DISPLAYGAMMA, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_DFLT_INFO mng_retcode MNG_DECL mng_set_dfltimggammaint (mng_handle hHandle, mng_uint32 iGamma) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_DFLTIMGGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->dDfltimggamma = (mng_float)iGamma / 100000; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_DFLTIMGGAMMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIP_MAXCANVAS mng_retcode MNG_DECL mng_set_maxcanvaswidth (mng_handle hHandle, mng_uint32 iMaxwidth) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_MAXCANVASWIDTH, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iMaxwidth = iMaxwidth; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_MAXCANVASWIDTH, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_maxcanvasheight (mng_handle hHandle, mng_uint32 iMaxheight) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_MAXCANVASHEIGHT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iMaxheight = iMaxheight; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_MAXCANVASHEIGHT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_set_maxcanvassize (mng_handle hHandle, mng_uint32 iMaxwidth, mng_uint32 iMaxheight) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_MAXCANVASSIZE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iMaxwidth = iMaxwidth; ((mng_datap)hHandle)->iMaxheight = iMaxheight; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_MAXCANVASSIZE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_zlib_level (mng_handle hHandle, mng_int32 iZlevel) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_LEVEL, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iZlevel = iZlevel; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_LEVEL, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_zlib_method (mng_handle hHandle, mng_int32 iZmethod) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_METHOD, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iZmethod = iZmethod; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_METHOD, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_zlib_windowbits (mng_handle hHandle, mng_int32 iZwindowbits) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_WINDOWBITS, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iZwindowbits = iZwindowbits; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_WINDOWBITS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_zlib_memlevel (mng_handle hHandle, mng_int32 iZmemlevel) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_MEMLEVEL, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iZmemlevel = iZmemlevel; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_MEMLEVEL, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_zlib_strategy (mng_handle hHandle, mng_int32 iZstrategy) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_STRATEGY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iZstrategy = iZstrategy; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_STRATEGY, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_zlib_maxidat (mng_handle hHandle, mng_uint32 iMaxIDAT) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_MAXIDAT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iMaxIDAT = iMaxIDAT; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_ZLIB_MAXIDAT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_jpeg_dctmethod (mng_handle hHandle, mngjpeg_dctmethod eJPEGdctmethod) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_DCTMETHOD, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->eJPEGdctmethod = eJPEGdctmethod; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_DCTMETHOD, MNG_LC_END); #endif return MNG_NOERROR; } #endif MNG_SUPPORT_WRITE #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_jpeg_quality (mng_handle hHandle, mng_int32 iJPEGquality) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_QUALITY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iJPEGquality = iJPEGquality; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_QUALITY, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_jpeg_smoothing (mng_handle hHandle, mng_int32 iJPEGsmoothing) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_SMOOTHING, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iJPEGsmoothing = iJPEGsmoothing; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_SMOOTHING, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_jpeg_progressive (mng_handle hHandle, mng_bool bJPEGprogressive) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_PROGRESSIVE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->bJPEGcompressprogr = bJPEGprogressive; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_PROGRESSIVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_jpeg_optimized (mng_handle hHandle, mng_bool bJPEGoptimized) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_OPTIMIZED, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->bJPEGcompressopt = bJPEGoptimized; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_OPTIMIZED, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG #ifdef MNG_SUPPORT_WRITE mng_retcode MNG_DECL mng_set_jpeg_maxjdat (mng_handle hHandle, mng_uint32 iMaxJDAT) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_MAXJDAT, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iMaxJDAT = iMaxJDAT; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_JPEG_MAXJDAT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_WRITE */ #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_retcode MNG_DECL mng_set_suspensionmode (mng_handle hHandle, mng_bool bSuspensionmode) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SUSPENSIONMODE, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) if (((mng_datap)hHandle)->bReading) /* we must NOT be reading !!! */ MNG_ERROR ((mng_datap)hHandle, MNG_FUNCTIONINVALID); ((mng_datap)hHandle)->bSuspensionmode = bSuspensionmode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SUSPENSIONMODE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_set_speed (mng_handle hHandle, mng_speedtype iSpeed) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SPEED, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) ((mng_datap)hHandle)->iSpeed = iSpeed; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_SET_SPEED, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ /* * * */ /* * Property get functions * */ /* * * */ /* ************************************************************************** */ mng_ptr MNG_DECL mng_get_userdata (mng_handle hHandle) { /* no tracing in here to prevent recursive calls */ MNG_VALIDHANDLEX (hHandle) return ((mng_datap)hHandle)->pUserdata; } /* ************************************************************************** */ mng_imgtype MNG_DECL mng_get_sigtype (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_SIGTYPE, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return mng_it_unknown; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_SIGTYPE, MNG_LC_END); #endif return ((mng_datap)hHandle)->eSigtype; } /* ************************************************************************** */ mng_imgtype MNG_DECL mng_get_imagetype (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_IMAGETYPE, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return mng_it_unknown; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_IMAGETYPE, MNG_LC_END); #endif return ((mng_datap)hHandle)->eImagetype; } /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_imagewidth (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_IMAGEWIDTH, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_IMAGEWIDTH, MNG_LC_END); #endif return ((mng_datap)hHandle)->iWidth; } /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_imageheight (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_IMAGEWIDTH, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_IMAGEHEIGHT, MNG_LC_END); #endif return ((mng_datap)hHandle)->iHeight; } /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_ticks (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_TICKS, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_TICKS, MNG_LC_END); #endif return ((mng_datap)hHandle)->iTicks; } /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_framecount (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_FRAMECOUNT, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_FRAMECOUNT, MNG_LC_END); #endif return ((mng_datap)hHandle)->iFramecount; } /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_layercount (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_LAYERCOUNT, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_LAYERCOUNT, MNG_LC_END); #endif return ((mng_datap)hHandle)->iLayercount; } /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_playtime (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_PLAYTIME, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_PLAYTIME, MNG_LC_END); #endif return ((mng_datap)hHandle)->iPlaytime; } /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_simplicity (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_SIMPLICITY, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_SIMPLICITY, MNG_LC_END); #endif return ((mng_datap)hHandle)->iSimplicity; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_get_bitdepth (mng_handle hHandle) { mng_uint8 iRslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_BITDEPTH, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) if (((mng_datap)hHandle)->eImagetype == mng_it_png) iRslt = ((mng_datap)hHandle)->iBitdepth; else #ifdef MNG_INCLUDE_JNG if (((mng_datap)hHandle)->eImagetype == mng_it_jng) iRslt = ((mng_datap)hHandle)->iJHDRimgbitdepth; else #endif iRslt = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_BITDEPTH, MNG_LC_END); #endif return iRslt; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_get_colortype (mng_handle hHandle) { mng_uint8 iRslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_COLORTYPE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) if (((mng_datap)hHandle)->eImagetype == mng_it_png) iRslt = ((mng_datap)hHandle)->iColortype; else #ifdef MNG_INCLUDE_JNG if (((mng_datap)hHandle)->eImagetype == mng_it_jng) iRslt = ((mng_datap)hHandle)->iJHDRcolortype; else #endif iRslt = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_COLORTYPE, MNG_LC_END); #endif return iRslt; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_get_compression (mng_handle hHandle) { mng_uint8 iRslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_COMPRESSION, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) if (((mng_datap)hHandle)->eImagetype == mng_it_png) iRslt = ((mng_datap)hHandle)->iCompression; else #ifdef MNG_INCLUDE_JNG if (((mng_datap)hHandle)->eImagetype == mng_it_jng) iRslt = ((mng_datap)hHandle)->iJHDRimgcompression; else #endif iRslt = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_COMPRESSION, MNG_LC_END); #endif return iRslt; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_get_filter (mng_handle hHandle) { mng_uint8 iRslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_FILTER, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) if (((mng_datap)hHandle)->eImagetype == mng_it_png) iRslt = ((mng_datap)hHandle)->iFilter; else iRslt = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_FILTER, MNG_LC_END); #endif return iRslt; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_get_interlace (mng_handle hHandle) { mng_uint8 iRslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_INTERLACE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) if (((mng_datap)hHandle)->eImagetype == mng_it_png) iRslt = ((mng_datap)hHandle)->iInterlace; else #ifdef MNG_INCLUDE_JNG if (((mng_datap)hHandle)->eImagetype == mng_it_jng) iRslt = ((mng_datap)hHandle)->iJHDRimginterlace; else #endif iRslt = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_INTERLACE, MNG_LC_END); #endif return iRslt; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_get_alphabitdepth (mng_handle hHandle) { mng_uint8 iRslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ALPHABITDEPTH, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_INCLUDE_JNG if (((mng_datap)hHandle)->eImagetype == mng_it_jng) iRslt = ((mng_datap)hHandle)->iJHDRalphabitdepth; else #endif iRslt = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ALPHABITDEPTH, MNG_LC_END); #endif return iRslt; } /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_uint8 MNG_DECL mng_get_refreshpass (mng_handle hHandle) { mng_uint8 iRslt; mng_datap pData; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_REFRESHPASS, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) pData = (mng_datap)hHandle; /* for PNG we know the exact pass */ if ((pData->eImagetype == mng_it_png) && (pData->iPass >= 0)) iRslt = pData->iPass; #ifdef MNG_INCLUDE_JNG else /* for JNG we'll fake it... */ if ((pData->eImagetype == mng_it_jng) && (pData->bJPEGhasheader) && (pData->bJPEGdecostarted) && (pData->bJPEGprogressive)) { if (pData->pJPEGdinfo->input_scan_number <= 1) iRslt = 0; /* first pass (I think...) */ else if (jpeg_input_complete (pData->pJPEGdinfo)) iRslt = 7; /* input complete; aka final pass */ else iRslt = 3; /* anything between 0 and 7 will do */ } #endif else iRslt = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_REFRESHPASS, MNG_LC_END); #endif return iRslt; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ mng_uint8 MNG_DECL mng_get_alphacompression (mng_handle hHandle) { mng_uint8 iRslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ALPHACOMPRESSION, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_INCLUDE_JNG if (((mng_datap)hHandle)->eImagetype == mng_it_jng) iRslt = ((mng_datap)hHandle)->iJHDRalphacompression; else #endif iRslt = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ALPHACOMPRESSION, MNG_LC_END); #endif return iRslt; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_get_alphafilter (mng_handle hHandle) { mng_uint8 iRslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ALPHAFILTER, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_INCLUDE_JNG if (((mng_datap)hHandle)->eImagetype == mng_it_jng) iRslt = ((mng_datap)hHandle)->iJHDRalphafilter; else #endif iRslt = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ALPHAFILTER, MNG_LC_END); #endif return iRslt; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_get_alphainterlace (mng_handle hHandle) { mng_uint8 iRslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ALPHAINTERLACE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_INCLUDE_JNG if (((mng_datap)hHandle)->eImagetype == mng_it_jng) iRslt = ((mng_datap)hHandle)->iJHDRalphainterlace; else #endif iRslt = 0; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ALPHAINTERLACE, MNG_LC_END); #endif return iRslt; } /* ************************************************************************** */ mng_uint8 MNG_DECL mng_get_alphadepth (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ALPHADEPTH, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ALPHADEPTH, MNG_LC_END); #endif return ((mng_datap)hHandle)->iAlphadepth; } /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_canvasstyle (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_CANVASSTYLE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_CANVASSTYLE, MNG_LC_END); #endif return ((mng_datap)hHandle)->iCanvasstyle; } /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_bkgdstyle (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_BKGDSTYLE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_BKGDSTYLE, MNG_LC_END); #endif return ((mng_datap)hHandle)->iBkgdstyle; } /* ************************************************************************** */ mng_retcode MNG_DECL mng_get_bgcolor (mng_handle hHandle, mng_uint16* iRed, mng_uint16* iGreen, mng_uint16* iBlue) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GET_BGCOLOR, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) *iRed = ((mng_datap)hHandle)->iBGred; *iGreen = ((mng_datap)hHandle)->iBGgreen; *iBlue = ((mng_datap)hHandle)->iBGblue; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_GET_BGCOLOR, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_bool MNG_DECL mng_get_usebkgd (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_USEBKGD, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_USEBKGD, MNG_LC_END); #endif return ((mng_datap)hHandle)->bUseBKGD; } /* ************************************************************************** */ mng_bool MNG_DECL mng_get_storechunks (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_STORECHUNKS, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_STORECHUNKS, MNG_LC_END); #endif return ((mng_datap)hHandle)->bStorechunks; } /* ************************************************************************** */ mng_bool MNG_DECL mng_get_sectionbreaks (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_SECTIONBREAKS, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_SECTIONBREAKS, MNG_LC_END); #endif return ((mng_datap)hHandle)->bSectionbreaks; } /* ************************************************************************** */ mng_bool MNG_DECL mng_get_cacheplayback (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_CACHEPLAYBACK, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_CACHEPLAYBACK, MNG_LC_END); #endif return ((mng_datap)hHandle)->bCacheplayback; } /* ************************************************************************** */ mng_bool MNG_DECL mng_get_doprogressive (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_DOPROGRESSIVE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_DOPROGRESSIVE, MNG_LC_END); #endif return ((mng_datap)hHandle)->bDoProgressive; } /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_crcmode (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_CRCMODE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_CRCMODE, MNG_LC_END); #endif return ((mng_datap)hHandle)->iCrcmode; } /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_bool MNG_DECL mng_get_srgb (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_SRGB, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEB (((mng_datap)hHandle), MNG_FN_GET_SRGB, MNG_LC_END); #endif return ((mng_datap)hHandle)->bIssRGB; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) mng_float MNG_DECL mng_get_viewgamma (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_VIEWGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_VIEWGAMMA, MNG_LC_END); #endif return ((mng_datap)hHandle)->dViewgamma; } #endif /* ************************************************************************** */ #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) mng_float MNG_DECL mng_get_displaygamma (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_DISPLAYGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_DISPLAYGAMMA, MNG_LC_END); #endif return ((mng_datap)hHandle)->dDisplaygamma; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DFLT_INFO #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) mng_float MNG_DECL mng_get_dfltimggamma (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_DFLTIMGGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_DFLTIMGGAMMA, MNG_LC_END); #endif return ((mng_datap)hHandle)->dDfltimggamma; } #endif #endif /* ************************************************************************** */ #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) mng_uint32 MNG_DECL mng_get_viewgammaint (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_VIEWGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_VIEWGAMMA, MNG_LC_END); #endif return (mng_uint32)(((mng_datap)hHandle)->dViewgamma * 100000); } #endif /* ************************************************************************** */ #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) mng_uint32 MNG_DECL mng_get_displaygammaint (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_DISPLAYGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_DISPLAYGAMMA, MNG_LC_END); #endif return (mng_uint32)(((mng_datap)hHandle)->dDisplaygamma * 100000); } #endif /* ************************************************************************** */ #ifndef MNG_NO_DFLT_INFO #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) mng_uint32 MNG_DECL mng_get_dfltimggammaint (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_DFLTIMGGAMMA, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_DFLTIMGGAMMA, MNG_LC_END); #endif return (mng_uint32)(((mng_datap)hHandle)->dDfltimggamma * 100000); } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIP_MAXCANVAS mng_uint32 MNG_DECL mng_get_maxcanvaswidth (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_MAXCANVASWIDTH, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_MAXCANVASWIDTH, MNG_LC_END); #endif return ((mng_datap)hHandle)->iMaxwidth; } /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_maxcanvasheight (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_MAXCANVASHEIGHT, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_MAXCANVASHEIGHT, MNG_LC_END); #endif return ((mng_datap)hHandle)->iMaxheight; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB mng_int32 MNG_DECL mng_get_zlib_level (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_LEVEL, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_LEVEL, MNG_LC_END); #endif return ((mng_datap)hHandle)->iZlevel; } #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB mng_int32 MNG_DECL mng_get_zlib_method (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_METHOD, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_METHOD, MNG_LC_END); #endif return ((mng_datap)hHandle)->iZmethod; } #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB mng_int32 MNG_DECL mng_get_zlib_windowbits (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_WINDOWBITS, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_WINDOWBITS, MNG_LC_END); #endif return ((mng_datap)hHandle)->iZwindowbits; } #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB mng_int32 MNG_DECL mng_get_zlib_memlevel (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_MEMLEVEL, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_MEMLEVEL, MNG_LC_END); #endif return ((mng_datap)hHandle)->iZmemlevel; } #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB mng_int32 MNG_DECL mng_get_zlib_strategy (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_STRATEGY, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_STRATEGY, MNG_LC_END); #endif return ((mng_datap)hHandle)->iZstrategy; } #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB #ifdef MNG_ACCESS_ZLIB mng_uint32 MNG_DECL mng_get_zlib_maxidat (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_MAXIDAT, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_ZLIB_MAXIDAT, MNG_LC_END); #endif return ((mng_datap)hHandle)->iMaxIDAT; } #endif /* MNG_ACCESS_ZLIB */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG mngjpeg_dctmethod MNG_DECL mng_get_jpeg_dctmethod (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_DCTMETHOD, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return JDCT_ISLOW; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_DCTMETHOD, MNG_LC_END); #endif return ((mng_datap)hHandle)->eJPEGdctmethod; } #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG mng_int32 MNG_DECL mng_get_jpeg_quality (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_QUALITY, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_QUALITY, MNG_LC_END); #endif return ((mng_datap)hHandle)->iJPEGquality; } #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG mng_int32 MNG_DECL mng_get_jpeg_smoothing (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_SMOOTHING, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_SMOOTHING, MNG_LC_END); #endif return ((mng_datap)hHandle)->iJPEGsmoothing; } #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG mng_bool MNG_DECL mng_get_jpeg_progressive (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_PROGRESSIVE, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_PROGRESSIVE, MNG_LC_END); #endif return ((mng_datap)hHandle)->bJPEGcompressprogr; } #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG mng_bool MNG_DECL mng_get_jpeg_optimized (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_OPTIMIZED, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_OPTIMIZED, MNG_LC_END); #endif return ((mng_datap)hHandle)->bJPEGcompressopt; } #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_ACCESS_JPEG mng_uint32 MNG_DECL mng_get_jpeg_maxjdat (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_MAXJDAT, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_JPEG_MAXJDAT, MNG_LC_END); #endif return ((mng_datap)hHandle)->iMaxJDAT; } #endif /* MNG_ACCESS_JPEG */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_bool MNG_DECL mng_get_suspensionmode (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_SUSPENSIONMODE, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_SUSPENSIONMODE, MNG_LC_END); #endif return ((mng_datap)hHandle)->bSuspensionmode; } #endif /* MNG_SUPPORT_READ */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_speedtype MNG_DECL mng_get_speed (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_SPEED, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return mng_st_normal; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_SPEED, MNG_LC_END); #endif return ((mng_datap)hHandle)->iSpeed; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ mng_uint32 MNG_DECL mng_get_imagelevel (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_IMAGELEVEL, MNG_LC_START); #endif MNG_VALIDHANDLEX (hHandle) #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_IMAGELEVEL, MNG_LC_END); #endif return ((mng_datap)hHandle)->iImagelevel; } /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_get_lastbackchunk (mng_handle hHandle, mng_uint16* iRed, mng_uint16* iGreen, mng_uint16* iBlue, mng_uint8* iMandatory) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_LASTBACKCHUNK, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) if (((mng_datap)hHandle)->eImagetype != mng_it_mng) MNG_ERROR (((mng_datap)hHandle), MNG_FUNCTIONINVALID); *iRed = ((mng_datap)hHandle)->iBACKred; *iGreen = ((mng_datap)hHandle)->iBACKgreen; *iBlue = ((mng_datap)hHandle)->iBACKblue; *iMandatory = ((mng_datap)hHandle)->iBACKmandatory; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_LASTBACKCHUNK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_retcode MNG_DECL mng_get_lastseekname (mng_handle hHandle, mng_pchar zSegmentname) { mng_datap pData; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_LASTSEEKNAME, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) pData = (mng_datap)hHandle; /* only allowed for MNG ! */ if (pData->eImagetype != mng_it_mng) MNG_ERROR (pData, MNG_FUNCTIONINVALID); if (pData->pLastseek) /* is there a last SEEK ? */ { mng_ani_seekp pSEEK = (mng_ani_seekp)pData->pLastseek; if (pSEEK->iSegmentnamesize) /* copy the name if there is one */ MNG_COPY (zSegmentname, pSEEK->zSegmentname, pSEEK->iSegmentnamesize); *(((mng_uint8p)zSegmentname) + pSEEK->iSegmentnamesize) = 0; } else { /* return an empty string */ *((mng_uint8p)zSegmentname) = 0; } #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_LASTSEEKNAME, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_uint32 MNG_DECL mng_get_currframdelay (mng_handle hHandle) { mng_datap pData; mng_uint32 iRslt; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_CURRFRAMDELAY, MNG_LC_START); #endif MNG_VALIDHANDLE (hHandle) pData = (mng_datap)hHandle; /* only allowed for MNG ! */ if (pData->eImagetype != mng_it_mng) MNG_ERROR (pData, MNG_FUNCTIONINVALID); iRslt = pData->iFramedelay; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_CURRFRAMDELAY, MNG_LC_END); #endif return iRslt; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_uint32 MNG_DECL mng_get_starttime (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_STARTTIME, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return mng_st_normal; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_STARTTIME, MNG_LC_END); #endif return ((mng_datap)hHandle)->iStarttime; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_uint32 MNG_DECL mng_get_runtime (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_RUNTIME, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return mng_st_normal; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_RUNTIME, MNG_LC_END); #endif return ((mng_datap)hHandle)->iRuntime; } #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_CURRENT_INFO mng_uint32 MNG_DECL mng_get_currentframe (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_CURRENTFRAME, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return mng_st_normal; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_CURRENTFRAME, MNG_LC_END); #endif return ((mng_datap)hHandle)->iFrameseq; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_CURRENT_INFO mng_uint32 MNG_DECL mng_get_currentlayer (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_CURRENTLAYER, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return mng_st_normal; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_CURRENTLAYER, MNG_LC_END); #endif return ((mng_datap)hHandle)->iLayerseq; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_CURRENT_INFO mng_uint32 MNG_DECL mng_get_currentplaytime (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_CURRENTPLAYTIME, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return mng_st_normal; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_CURRENTPLAYTIME, MNG_LC_END); #endif return ((mng_datap)hHandle)->iFrametime; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_CURRENT_INFO mng_uint32 MNG_DECL mng_get_totalframes (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_TOTALFRAMES, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return mng_st_normal; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_TOTALFRAMES, MNG_LC_END); #endif return ((mng_datap)hHandle)->iTotalframes; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_CURRENT_INFO mng_uint32 MNG_DECL mng_get_totallayers (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_TOTALLAYERS, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return mng_st_normal; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_TOTALLAYERS, MNG_LC_END); #endif return ((mng_datap)hHandle)->iTotallayers; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_CURRENT_INFO mng_uint32 MNG_DECL mng_get_totalplaytime (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_TOTALPLAYTIME, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return mng_st_normal; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_GET_TOTALPLAYTIME, MNG_LC_END); #endif return ((mng_datap)hHandle)->iTotalplaytime; } #endif #endif /* MNG_SUPPORT_DISPLAY */ /* ************************************************************************** */ mng_bool MNG_DECL mng_status_error (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_ERROR, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_ERROR, MNG_LC_END); #endif return (mng_bool)((mng_datap)hHandle)->iErrorcode; } /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_bool MNG_DECL mng_status_reading (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_READING, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_READING, MNG_LC_END); #endif return ((mng_datap)hHandle)->bReading; } #endif /* ************************************************************************** */ #ifdef MNG_SUPPORT_READ mng_bool MNG_DECL mng_status_suspendbreak (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_SUSPENDBREAK, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_SUSPENDBREAK, MNG_LC_END); #endif return ((mng_datap)hHandle)->bSuspended; } #endif /* ************************************************************************** */ #ifdef MNG_SUPPORT_WRITE mng_bool MNG_DECL mng_status_creating (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_CREATING, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_CREATING, MNG_LC_END); #endif return ((mng_datap)hHandle)->bCreating; } #endif /* ************************************************************************** */ #ifdef MNG_SUPPORT_WRITE mng_bool MNG_DECL mng_status_writing (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_WRITING, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_WRITING, MNG_LC_END); #endif return ((mng_datap)hHandle)->bWriting; } #endif /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_bool MNG_DECL mng_status_displaying (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_DISPLAYING, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_DISPLAYING, MNG_LC_END); #endif return ((mng_datap)hHandle)->bDisplaying; } #endif /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_bool MNG_DECL mng_status_running (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_RUNNING, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_RUNNING, MNG_LC_END); #endif return ((mng_datap)hHandle)->bRunning; } #endif /* ************************************************************************** */ #ifdef MNG_SUPPORT_DISPLAY mng_bool MNG_DECL mng_status_timerbreak (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_TIMERBREAK, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_TIMERBREAK, MNG_LC_END); #endif return ((mng_datap)hHandle)->bTimerset; } #endif /* ************************************************************************** */ #ifdef MNG_SUPPORT_DYNAMICMNG mng_bool MNG_DECL mng_status_dynamic (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_DYNAMIC, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_DYNAMIC, MNG_LC_END); #endif return ((mng_datap)hHandle)->bDynamic; } #endif /* ************************************************************************** */ #ifdef MNG_SUPPORT_DYNAMICMNG mng_bool MNG_DECL mng_status_runningevent (mng_handle hHandle) { #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_RUNNINGEVENT, MNG_LC_START); #endif if ((hHandle == 0) || (((mng_datap)hHandle)->iMagic != MNG_MAGIC)) return MNG_FALSE; #ifdef MNG_SUPPORT_TRACE MNG_TRACEX (((mng_datap)hHandle), MNG_FN_STATUS_RUNNINGEVENT, MNG_LC_END); #endif return ((mng_datap)hHandle)->bRunningevent; } #endif /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/missing0000755000000000000000000001533112115360516013063 0ustar rootroot#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2012-06-26.16; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # 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 . # 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. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'automa4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # 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: libmng-2.0.2/libmng_chunk_prc.c0000644000000000000000000036201112005307152015127 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_chunk_prc.c copyright (c) 2000-2005 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Chunk initialization & cleanup (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the chunk initialization & cleanup * */ /* * routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * * */ /* * 0.9.1 - 07/19/2000 - G.Juyn * */ /* * - fixed creation-code * */ /* * * */ /* * 0.9.2 - 07/31/2000 - G.Juyn * */ /* * - put add_chunk() inside MNG_INCLUDE_WRITE_PROCS wrapper * */ /* * 0.9.2 - 08/01/2000 - G.Juyn * */ /* * - wrapper for add_chunk() changed * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added support for JDAA * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * - added HLAPI function to copy chunks * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * 1.0.5 - 10/04/2002 - G.Juyn * */ /* * - fixed chunk-storage for evNT chunk * */ /* * 1.0.5 - 10/17/2002 - G.Juyn * */ /* * - fixed issue in freeing evNT chunk * */ /* * * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - added MNG_SKIPCHUNK_cHNK footprint optimizations * */ /* * - added MNG_NO_DELTA_PNG reduction feature * */ /* * 1.0.6 - 07/14/2003 - G.R-P * */ /* * - added MNG_NO_LOOP_SIGNALS_SUPPORTED conditional * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditionals around PAST chunk support * */ /* * 1.0.6 - 08/17/2003 - G.R-P * */ /* * - added conditionals around non-VLC chunk support * */ /* * * */ /* * 1.0.7 - 03/24/2004 - G.R-P * */ /* * - fixed SKIPCHUNK_eXPI -> fPRI typo * */ /* * * */ /* * 1.0.9 - 09/25/2004 - G.Juyn * */ /* * - replaced MNG_TWEAK_LARGE_FILES with permanent solution * */ /* * 1.0.9 - 12/05/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKINITFREE * */ /* * 1.0.9 - 12/06/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKASSIGN * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* * 1.0.10 - 07/30/2005 - G.Juyn * */ /* * - fixed problem with CLON object during readdisplay() * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_memory.h" #include "libmng_chunks.h" #include "libmng_chunk_prc.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ /* * * */ /* * General chunk routines * */ /* * * */ /* ************************************************************************** */ void mng_add_chunk (mng_datap pData, mng_chunkp pChunk) { if (!pData->pFirstchunk) /* list is still empty ? */ { pData->pFirstchunk = pChunk; /* then this becomes the first */ #ifdef MNG_SUPPORT_WRITE if (!pData->iFirstchunkadded) { pData->iFirstchunkadded = ((mng_chunk_headerp)pChunk)->iChunkname; #endif if (((mng_chunk_headerp)pChunk)->iChunkname == MNG_UINT_IHDR) pData->eImagetype = mng_it_png; else #ifdef MNG_INCLUDE_JNG if (((mng_chunk_headerp)pChunk)->iChunkname == MNG_UINT_JHDR) pData->eImagetype = mng_it_jng; else #endif pData->eImagetype = mng_it_mng; pData->eSigtype = pData->eImagetype; #ifdef MNG_SUPPORT_WRITE } #endif } else { /* else we make appropriate links */ ((mng_chunk_headerp)pChunk)->pPrev = pData->pLastchunk; ((mng_chunk_headerp)pData->pLastchunk)->pNext = pChunk; } pData->pLastchunk = pChunk; /* and it's always the last */ return; } /* ************************************************************************** */ /* * * */ /* * Chunk specific initialization routines * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_OPTIMIZE_CHUNKINITFREE INIT_CHUNK_HDR (mng_init_general) { MNG_ALLOC (pData, *ppChunk, ((mng_chunk_headerp)pHeader)->iChunksize); MNG_COPY (*ppChunk, pHeader, sizeof (mng_chunk_header)); return MNG_NOERROR; } #else /* MNG_OPTIMIZE_CHUNKINITFREE */ /* ************************************************************************** */ INIT_CHUNK_HDR (mng_init_ihdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IHDR, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_ihdr)); ((mng_ihdrp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IHDR, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ INIT_CHUNK_HDR (mng_init_plte) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PLTE, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_plte)); ((mng_pltep)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PLTE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ INIT_CHUNK_HDR (mng_init_idat) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDAT, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_idat)); ((mng_idatp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDAT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ INIT_CHUNK_HDR (mng_init_iend) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IEND, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_iend)); ((mng_iendp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IEND, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ INIT_CHUNK_HDR (mng_init_trns) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_TRNS, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_trns)); ((mng_trnsp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_TRNS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_gAMA INIT_CHUNK_HDR (mng_init_gama) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GAMA, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_gama)); ((mng_gamap)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GAMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_cHRM INIT_CHUNK_HDR (mng_init_chrm) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_CHRM, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_chrm)); ((mng_chrmp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_CHRM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sRGB INIT_CHUNK_HDR (mng_init_srgb) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SRGB, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_srgb)); ((mng_srgbp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SRGB, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iCCP INIT_CHUNK_HDR (mng_init_iccp) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ICCP, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_iccp)); ((mng_iccpp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ICCP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tEXt INIT_CHUNK_HDR (mng_init_text) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_TEXT, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_text)); ((mng_textp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_TEXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_zTXt INIT_CHUNK_HDR (mng_init_ztxt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ZTXT, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_ztxt)); ((mng_ztxtp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ZTXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iTXt INIT_CHUNK_HDR (mng_init_itxt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ITXT, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_itxt)); ((mng_itxtp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ITXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_bKGD INIT_CHUNK_HDR (mng_init_bkgd) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_BKGD, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_bkgd)); ((mng_bkgdp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_BKGD, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYs INIT_CHUNK_HDR (mng_init_phys) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PHYS, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_phys)); ((mng_physp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PHYS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sBIT INIT_CHUNK_HDR (mng_init_sbit) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SBIT, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_sbit)); ((mng_sbitp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SBIT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sPLT INIT_CHUNK_HDR (mng_init_splt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SPLT, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_splt)); ((mng_spltp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SPLT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_hIST INIT_CHUNK_HDR (mng_init_hist) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_HIST, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_hist)); ((mng_histp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_HIST, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tIME INIT_CHUNK_HDR (mng_init_time) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_TIME, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_time)); ((mng_timep)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_TIME, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ INIT_CHUNK_HDR (mng_init_mhdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_MHDR, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_mhdr)); ((mng_mhdrp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_MHDR, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ INIT_CHUNK_HDR (mng_init_mend) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_MEND, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_mend)); ((mng_mendp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_MEND, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_LOOP INIT_CHUNK_HDR (mng_init_loop) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_LOOP, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_loop)); ((mng_loopp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_LOOP, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ INIT_CHUNK_HDR (mng_init_endl) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ENDL, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_endl)); ((mng_endlp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ENDL, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DEFI INIT_CHUNK_HDR (mng_init_defi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DEFI, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_defi)); ((mng_defip)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DEFI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BASI INIT_CHUNK_HDR (mng_init_basi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_BASI, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_basi)); ((mng_basip)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_BASI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLON INIT_CHUNK_HDR (mng_init_clon) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_CLON, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_clon)); ((mng_clonp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_CLON, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST INIT_CHUNK_HDR (mng_init_past) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PAST, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_past)); ((mng_pastp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PAST, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DISC INIT_CHUNK_HDR (mng_init_disc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DISC, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_disc)); ((mng_discp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DISC, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_BACK INIT_CHUNK_HDR (mng_init_back) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_BACK, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_back)); ((mng_backp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_BACK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_FRAM INIT_CHUNK_HDR (mng_init_fram) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_FRAM, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_fram)); ((mng_framp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_FRAM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MOVE INIT_CHUNK_HDR (mng_init_move) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_MOVE, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_move)); ((mng_movep)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_MOVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_CLIP INIT_CHUNK_HDR (mng_init_clip) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_CLIP, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_clip)); ((mng_clipp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_CLIP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SHOW INIT_CHUNK_HDR (mng_init_show) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SHOW, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_show)); ((mng_showp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SHOW, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_TERM INIT_CHUNK_HDR (mng_init_term) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_TERM, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_term)); ((mng_termp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_TERM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE INIT_CHUNK_HDR (mng_init_save) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SAVE, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_save)); ((mng_savep)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SAVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SEEK INIT_CHUNK_HDR (mng_init_seek) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SEEK, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_seek)); ((mng_seekp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_SEEK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_eXPI INIT_CHUNK_HDR (mng_init_expi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_EXPI, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_expi)); ((mng_expip)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_EXPI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_fPRI INIT_CHUNK_HDR (mng_init_fpri) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_FPRI, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_fpri)); ((mng_fprip)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_FPRI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_nEED INIT_CHUNK_HDR (mng_init_need) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_NEED, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_need)); ((mng_needp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_NEED, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_pHYg INIT_CHUNK_HDR (mng_init_phyg) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PHYG, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_phyg)); ((mng_phygp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PHYG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG INIT_CHUNK_HDR (mng_init_jhdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JHDR, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_jhdr)); ((mng_jhdrp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG INIT_CHUNK_HDR (mng_init_jdaa) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JDAA, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_jdaa)); ((mng_jdaap)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JDAA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG INIT_CHUNK_HDR (mng_init_jdat) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JDAT, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_jdat)); ((mng_jdatp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JDAT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG INIT_CHUNK_HDR (mng_init_jsep) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JSEP, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_jsep)); ((mng_jsepp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JSEP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG INIT_CHUNK_HDR (mng_init_dhdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DHDR, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_dhdr)); ((mng_dhdrp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG INIT_CHUNK_HDR (mng_init_prom) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PROM, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_prom)); ((mng_promp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PROM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG INIT_CHUNK_HDR (mng_init_ipng) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IPNG, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_ipng)); ((mng_ipngp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IPNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG INIT_CHUNK_HDR (mng_init_pplt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PPLT, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_pplt)); ((mng_ppltp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_PPLT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG INIT_CHUNK_HDR (mng_init_ijng) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IJNG, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_ijng)); ((mng_ijngp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IJNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG INIT_CHUNK_HDR (mng_init_drop) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DROP, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_drop)); ((mng_dropp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DROP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK INIT_CHUNK_HDR (mng_init_dbyk) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DBYK, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_dbyk)); ((mng_dbykp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DBYK, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR INIT_CHUNK_HDR (mng_init_ordr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ORDR, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_ordr)); ((mng_ordrp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ORDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MAGN INIT_CHUNK_HDR (mng_init_magn) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_MAGN, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_magn)); ((mng_magnp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_MAGN, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_evNT INIT_CHUNK_HDR (mng_init_evnt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_EVNT, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_evnt)); ((mng_evntp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_EVNT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ INIT_CHUNK_HDR (mng_init_unknown) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_UNKNOWN, MNG_LC_START); #endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_unknown_chunk)); ((mng_unknown_chunkp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_UNKNOWN, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_OPTIMIZE_CHUNKINITFREE */ /* ************************************************************************** */ /* * * */ /* * Chunk specific cleanup routines * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_OPTIMIZE_CHUNKINITFREE FREE_CHUNK_HDR (mng_free_general) { MNG_FREEX (pData, pHeader, ((mng_chunk_headerp)pHeader)->iChunksize); return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE FREE_CHUNK_HDR (mng_free_ihdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IHDR, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_ihdr)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE FREE_CHUNK_HDR (mng_free_plte) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PLTE, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_plte)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PLTE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ FREE_CHUNK_HDR (mng_free_idat) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IDAT, MNG_LC_START); #endif if (((mng_idatp)pHeader)->iDatasize) MNG_FREEX (pData, ((mng_idatp)pHeader)->pData, ((mng_idatp)pHeader)->iDatasize); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_idat)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IDAT, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE FREE_CHUNK_HDR (mng_free_iend) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IEND, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_iend)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IEND, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE FREE_CHUNK_HDR (mng_free_trns) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_TRNS, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_trns)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_TRNS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_gAMA FREE_CHUNK_HDR (mng_free_gama) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_GAMA, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_gama)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_GAMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_cHRM FREE_CHUNK_HDR (mng_free_chrm) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_CHRM, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_chrm)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_CHRM, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_sRGB FREE_CHUNK_HDR (mng_free_srgb) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SRGB, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_srgb)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SRGB, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iCCP FREE_CHUNK_HDR (mng_free_iccp) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ICCP, MNG_LC_START); #endif if (((mng_iccpp)pHeader)->iNamesize) MNG_FREEX (pData, ((mng_iccpp)pHeader)->zName, ((mng_iccpp)pHeader)->iNamesize + 1); if (((mng_iccpp)pHeader)->iProfilesize) MNG_FREEX (pData, ((mng_iccpp)pHeader)->pProfile, ((mng_iccpp)pHeader)->iProfilesize); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_iccp)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ICCP, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tEXt FREE_CHUNK_HDR (mng_free_text) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_TEXT, MNG_LC_START); #endif if (((mng_textp)pHeader)->iKeywordsize) MNG_FREEX (pData, ((mng_textp)pHeader)->zKeyword, ((mng_textp)pHeader)->iKeywordsize + 1); if (((mng_textp)pHeader)->iTextsize) MNG_FREEX (pData, ((mng_textp)pHeader)->zText, ((mng_textp)pHeader)->iTextsize + 1); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_text)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_TEXT, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_zTXt FREE_CHUNK_HDR (mng_free_ztxt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ZTXT, MNG_LC_START); #endif if (((mng_ztxtp)pHeader)->iKeywordsize) MNG_FREEX (pData, ((mng_ztxtp)pHeader)->zKeyword, ((mng_ztxtp)pHeader)->iKeywordsize + 1); if (((mng_ztxtp)pHeader)->iTextsize) MNG_FREEX (pData, ((mng_ztxtp)pHeader)->zText, ((mng_ztxtp)pHeader)->iTextsize); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_ztxt)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ZTXT, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iTXt FREE_CHUNK_HDR (mng_free_itxt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ITXT, MNG_LC_START); #endif if (((mng_itxtp)pHeader)->iKeywordsize) MNG_FREEX (pData, ((mng_itxtp)pHeader)->zKeyword, ((mng_itxtp)pHeader)->iKeywordsize + 1); if (((mng_itxtp)pHeader)->iLanguagesize) MNG_FREEX (pData, ((mng_itxtp)pHeader)->zLanguage, ((mng_itxtp)pHeader)->iLanguagesize + 1); if (((mng_itxtp)pHeader)->iTranslationsize) MNG_FREEX (pData, ((mng_itxtp)pHeader)->zTranslation, ((mng_itxtp)pHeader)->iTranslationsize + 1); if (((mng_itxtp)pHeader)->iTextsize) MNG_FREEX (pData, ((mng_itxtp)pHeader)->zText, ((mng_itxtp)pHeader)->iTextsize); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_itxt)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ITXT, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL FREE_CHUNK_HDR (mng_free_mpng) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MPNG, MNG_LC_START); #endif if (((mng_mpngp)pHeader)->iFramessize) MNG_FREEX (pData, ((mng_mpngp)pHeader)->pFrames, ((mng_mpngp)pHeader)->iFramessize); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_mpng)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MPNG, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL FREE_CHUNK_HDR (mng_free_adat) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ADAT, MNG_LC_START); #endif if (((mng_adatp)pHeader)->iTilessize) MNG_FREEX (pData, ((mng_adatp)pHeader)->pTiles, ((mng_adatp)pHeader)->iTilessize); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_adat)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ADAT, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_bKGD FREE_CHUNK_HDR (mng_free_bkgd) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_BKGD, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_bkgd)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_BKGD, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_pHYs FREE_CHUNK_HDR (mng_free_phys) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PHYS, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_phys)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PHYS, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_sBIT FREE_CHUNK_HDR (mng_free_sbit) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SBIT, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_sbit)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SBIT, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sPLT FREE_CHUNK_HDR (mng_free_splt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SPLT, MNG_LC_START); #endif if (((mng_spltp)pHeader)->iNamesize) MNG_FREEX (pData, ((mng_spltp)pHeader)->zName, ((mng_spltp)pHeader)->iNamesize + 1); if (((mng_spltp)pHeader)->iEntrycount) MNG_FREEX (pData, ((mng_spltp)pHeader)->pEntries, ((mng_spltp)pHeader)->iEntrycount * (((mng_spltp)pHeader)->iSampledepth * 3 + sizeof (mng_uint16)) ); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_splt)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SPLT, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_hIST FREE_CHUNK_HDR (mng_free_hist) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_HIST, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_hist)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_HIST, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_tIME FREE_CHUNK_HDR (mng_free_time) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_TIME, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_time)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_TIME, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE FREE_CHUNK_HDR (mng_free_mhdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MHDR, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_mhdr)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE FREE_CHUNK_HDR (mng_free_mend) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MEND, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_mend)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MEND, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_LOOP FREE_CHUNK_HDR (mng_free_loop) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_LOOP, MNG_LC_START); #endif #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED if (((mng_loopp)pHeader)->iCount) MNG_FREEX (pData, ((mng_loopp)pHeader)->pSignals, ((mng_loopp)pHeader)->iCount * sizeof (mng_uint32) ); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_loop)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_LOOP, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE FREE_CHUNK_HDR (mng_free_endl) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ENDL, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_endl)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ENDL, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_DEFI FREE_CHUNK_HDR (mng_free_defi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_DEFI, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_defi)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_DEFI, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_BASI FREE_CHUNK_HDR (mng_free_basi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_BASI, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_basi)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_BASI, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_CLON FREE_CHUNK_HDR (mng_free_clon) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_CLON, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_clon)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_CLON, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST FREE_CHUNK_HDR (mng_free_past) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PAST, MNG_LC_START); #endif if (((mng_pastp)pHeader)->iCount) MNG_FREEX (pData, ((mng_pastp)pHeader)->pSources, ((mng_pastp)pHeader)->iCount * sizeof (mng_past_source) ); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_past)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PAST, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DISC FREE_CHUNK_HDR (mng_free_disc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_DISC, MNG_LC_START); #endif if (((mng_discp)pHeader)->iCount) MNG_FREEX (pData, ((mng_discp)pHeader)->pObjectids, ((mng_discp)pHeader)->iCount * sizeof (mng_uint16) ); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_disc)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_DISC, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_BACK FREE_CHUNK_HDR (mng_free_back) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_BACK, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_back)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_BACK, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_FRAM FREE_CHUNK_HDR (mng_free_fram) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_FRAM, MNG_LC_START); #endif if (((mng_framp)pHeader)->iNamesize) MNG_FREEX (pData, ((mng_framp)pHeader)->zName, ((mng_framp)pHeader)->iNamesize + 1); if (((mng_framp)pHeader)->iCount) MNG_FREEX (pData, ((mng_framp)pHeader)->pSyncids, ((mng_framp)pHeader)->iCount * sizeof (mng_uint32) ); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_fram)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_FRAM, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_MOVE FREE_CHUNK_HDR (mng_free_move) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MOVE, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_move)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MOVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_CLIP FREE_CHUNK_HDR (mng_free_clip) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_CLIP, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_clip)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_CLIP, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_SHOW FREE_CHUNK_HDR (mng_free_show) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SHOW, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_show)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SHOW, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_TERM FREE_CHUNK_HDR (mng_free_term) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_TERM, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_term)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_TERM, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE FREE_CHUNK_HDR (mng_free_save) { mng_save_entryp pEntry = ((mng_savep)pHeader)->pEntries; mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SAVE, MNG_LC_START); #endif for (iX = 0; iX < ((mng_savep)pHeader)->iCount; iX++) { if (pEntry->iNamesize) MNG_FREEX (pData, pEntry->zName, pEntry->iNamesize); pEntry = pEntry + sizeof (mng_save_entry); } if (((mng_savep)pHeader)->iCount) MNG_FREEX (pData, ((mng_savep)pHeader)->pEntries, ((mng_savep)pHeader)->iCount * sizeof (mng_save_entry) ); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_save)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SAVE, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SEEK FREE_CHUNK_HDR (mng_free_seek) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SEEK, MNG_LC_START); #endif if (((mng_seekp)pHeader)->iNamesize) MNG_FREEX (pData, ((mng_seekp)pHeader)->zName, ((mng_seekp)pHeader)->iNamesize + 1); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_seek)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_SEEK, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_eXPI FREE_CHUNK_HDR (mng_free_expi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_EXPI, MNG_LC_START); #endif if (((mng_expip)pHeader)->iNamesize) MNG_FREEX (pData, ((mng_expip)pHeader)->zName, ((mng_expip)pHeader)->iNamesize + 1); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_expi)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_EXPI, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_fPRI FREE_CHUNK_HDR (mng_free_fpri) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_FPRI, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_fpri)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_FPRI, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_nEED FREE_CHUNK_HDR (mng_free_need) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_NEED, MNG_LC_START); #endif if (((mng_needp)pHeader)->iKeywordssize) MNG_FREEX (pData, ((mng_needp)pHeader)->zKeywords, ((mng_needp)pHeader)->iKeywordssize + 1); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_need)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_NEED, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_pHYg FREE_CHUNK_HDR (mng_free_phyg) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PHYG, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_phyg)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PHYG, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifdef MNG_INCLUDE_JNG FREE_CHUNK_HDR (mng_free_jhdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_JHDR, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_jhdr)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_JHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG FREE_CHUNK_HDR (mng_free_jdaa) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_JDAA, MNG_LC_START); #endif if (((mng_jdaap)pHeader)->iDatasize) MNG_FREEX (pData, ((mng_jdaap)pHeader)->pData, ((mng_jdaap)pHeader)->iDatasize); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_jdaa)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_JDAA, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG FREE_CHUNK_HDR (mng_free_jdat) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_JDAT, MNG_LC_START); #endif if (((mng_jdatp)pHeader)->iDatasize) MNG_FREEX (pData, ((mng_jdatp)pHeader)->pData, ((mng_jdatp)pHeader)->iDatasize); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_jdat)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_JDAT, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifdef MNG_INCLUDE_JNG FREE_CHUNK_HDR (mng_free_jsep) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_JSEP, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_jsep)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_JSEP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_NO_DELTA_PNG FREE_CHUNK_HDR (mng_free_dhdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_DHDR, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_dhdr)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_DHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_NO_DELTA_PNG FREE_CHUNK_HDR (mng_free_prom) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PROM, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_prom)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PROM, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_NO_DELTA_PNG FREE_CHUNK_HDR (mng_free_ipng) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IPNG, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_ipng)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IPNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_NO_DELTA_PNG FREE_CHUNK_HDR (mng_free_pplt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PPLT, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_pplt)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_PPLT, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG FREE_CHUNK_HDR (mng_free_ijng) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IJNG, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_ijng)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_IJNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG FREE_CHUNK_HDR (mng_free_drop) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_DROP, MNG_LC_START); #endif if (((mng_dropp)pHeader)->iCount) MNG_FREEX (pData, ((mng_dropp)pHeader)->pChunknames, ((mng_dropp)pHeader)->iCount * sizeof (mng_chunkid) ); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_drop)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_DROP, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK FREE_CHUNK_HDR (mng_free_dbyk) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_DBYK, MNG_LC_START); #endif if (((mng_dbykp)pHeader)->iKeywordssize) MNG_FREEX (pData, ((mng_dbykp)pHeader)->zKeywords, ((mng_dbykp)pHeader)->iKeywordssize); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_dbyk)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_DBYK, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR FREE_CHUNK_HDR (mng_free_ordr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ORDR, MNG_LC_START); #endif if (((mng_ordrp)pHeader)->iCount) MNG_FREEX (pData, ((mng_ordrp)pHeader)->pEntries, ((mng_ordrp)pHeader)->iCount * sizeof (mng_ordr_entry) ); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_ordr)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ORDR, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKINITFREE #ifndef MNG_SKIPCHUNK_MAGN FREE_CHUNK_HDR (mng_free_magn) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MAGN, MNG_LC_START); #endif MNG_FREEX (pData, pHeader, sizeof (mng_magn)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_MAGN, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_evNT FREE_CHUNK_HDR (mng_free_evnt) { mng_evnt_entryp pEntry = ((mng_evntp)pHeader)->pEntries; mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_EVNT, MNG_LC_START); #endif for (iX = 0; iX < ((mng_evntp)pHeader)->iCount; iX++) { if (pEntry->iSegmentnamesize) MNG_FREEX (pData, pEntry->zSegmentname, pEntry->iSegmentnamesize+1); pEntry++; } if (((mng_evntp)pHeader)->iCount) MNG_FREEX (pData, ((mng_evntp)pHeader)->pEntries, ((mng_evntp)pHeader)->iCount * sizeof (mng_evnt_entry) ); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_evnt)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_EVNT, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } #endif /* ************************************************************************** */ FREE_CHUNK_HDR (mng_free_unknown) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_UNKNOWN, MNG_LC_START); #endif if (((mng_unknown_chunkp)pHeader)->iDatasize) MNG_FREEX (pData, ((mng_unknown_chunkp)pHeader)->pData, ((mng_unknown_chunkp)pHeader)->iDatasize); #ifndef MNG_OPTIMIZE_CHUNKINITFREE MNG_FREEX (pData, pHeader, sizeof (mng_unknown_chunk)); #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_UNKNOWN, MNG_LC_END); #endif #ifndef MNG_OPTIMIZE_CHUNKINITFREE return MNG_NOERROR; #else return mng_free_general(pData, pHeader); #endif } /* ************************************************************************** */ /* * * */ /* * Chunk specific copy routines * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_WRITE_PROCS /* ************************************************************************** */ #ifdef MNG_OPTIMIZE_CHUNKASSIGN ASSIGN_CHUNK_HDR (mng_assign_general) { mng_ptr pSrc = (mng_uint8p)pChunkfrom + sizeof (mng_chunk_header); mng_ptr pDst = (mng_uint8p)pChunkto + sizeof (mng_chunk_header); mng_size_t iLen = ((mng_chunk_headerp)pChunkfrom)->iChunksize - sizeof (mng_chunk_header); MNG_COPY (pDst, pSrc, iLen); return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN ASSIGN_CHUNK_HDR (mng_assign_ihdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_IHDR, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_IHDR) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_ihdrp)pChunkto)->iWidth = ((mng_ihdrp)pChunkfrom)->iWidth; ((mng_ihdrp)pChunkto)->iHeight = ((mng_ihdrp)pChunkfrom)->iHeight; ((mng_ihdrp)pChunkto)->iBitdepth = ((mng_ihdrp)pChunkfrom)->iBitdepth; ((mng_ihdrp)pChunkto)->iColortype = ((mng_ihdrp)pChunkfrom)->iColortype; ((mng_ihdrp)pChunkto)->iCompression = ((mng_ihdrp)pChunkfrom)->iCompression; ((mng_ihdrp)pChunkto)->iFilter = ((mng_ihdrp)pChunkfrom)->iFilter; ((mng_ihdrp)pChunkto)->iInterlace = ((mng_ihdrp)pChunkfrom)->iInterlace; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_IHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN ASSIGN_CHUNK_HDR (mng_assign_plte) { mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PLTE, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_PLTE) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_pltep)pChunkto)->bEmpty = ((mng_pltep)pChunkfrom)->bEmpty; ((mng_pltep)pChunkto)->iEntrycount = ((mng_pltep)pChunkfrom)->iEntrycount; for (iX = 0; iX < ((mng_pltep)pChunkto)->iEntrycount; iX++) ((mng_pltep)pChunkto)->aEntries [iX] = ((mng_pltep)pChunkfrom)->aEntries [iX]; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PLTE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ ASSIGN_CHUNK_HDR (mng_assign_idat) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_IDAT, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_IDAT) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_idatp)pChunkto)->bEmpty = ((mng_idatp)pChunkfrom)->bEmpty; ((mng_idatp)pChunkto)->iDatasize = ((mng_idatp)pChunkfrom)->iDatasize; if (((mng_idatp)pChunkto)->iDatasize) { MNG_ALLOC (pData, ((mng_idatp)pChunkto)->pData, ((mng_idatp)pChunkto)->iDatasize); MNG_COPY (((mng_idatp)pChunkto)->pData, ((mng_idatp)pChunkfrom)->pData, ((mng_idatp)pChunkto)->iDatasize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_IDAT, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN ASSIGN_CHUNK_HDR (mng_assign_iend) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_IEND, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_IEND) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_IEND, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN ASSIGN_CHUNK_HDR (mng_assign_trns) { mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_TRNS, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_tRNS) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_trnsp)pChunkto)->bEmpty = ((mng_trnsp)pChunkfrom)->bEmpty; ((mng_trnsp)pChunkto)->bGlobal = ((mng_trnsp)pChunkfrom)->bGlobal; ((mng_trnsp)pChunkto)->iType = ((mng_trnsp)pChunkfrom)->iType; ((mng_trnsp)pChunkto)->iCount = ((mng_trnsp)pChunkfrom)->iCount; ((mng_trnsp)pChunkto)->iGray = ((mng_trnsp)pChunkfrom)->iGray; ((mng_trnsp)pChunkto)->iRed = ((mng_trnsp)pChunkfrom)->iRed; ((mng_trnsp)pChunkto)->iGreen = ((mng_trnsp)pChunkfrom)->iGreen; ((mng_trnsp)pChunkto)->iBlue = ((mng_trnsp)pChunkfrom)->iBlue; ((mng_trnsp)pChunkto)->iRawlen = ((mng_trnsp)pChunkfrom)->iRawlen; for (iX = 0; iX < ((mng_trnsp)pChunkto)->iCount; iX++) ((mng_trnsp)pChunkto)->aEntries [iX] = ((mng_trnsp)pChunkfrom)->aEntries [iX]; for (iX = 0; iX < ((mng_trnsp)pChunkto)->iRawlen; iX++) ((mng_trnsp)pChunkto)->aRawdata [iX] = ((mng_trnsp)pChunkfrom)->aRawdata [iX]; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_TRNS, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_gAMA ASSIGN_CHUNK_HDR (mng_assign_gama) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_GAMA, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_gAMA) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_gamap)pChunkto)->bEmpty = ((mng_gamap)pChunkfrom)->bEmpty; ((mng_gamap)pChunkto)->iGamma = ((mng_gamap)pChunkfrom)->iGamma; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_GAMA, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_cHRM ASSIGN_CHUNK_HDR (mng_assign_chrm) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_CHRM, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_cHRM) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_chrmp)pChunkto)->bEmpty = ((mng_chrmp)pChunkfrom)->bEmpty; ((mng_chrmp)pChunkto)->iWhitepointx = ((mng_chrmp)pChunkfrom)->iWhitepointx; ((mng_chrmp)pChunkto)->iWhitepointy = ((mng_chrmp)pChunkfrom)->iWhitepointy; ((mng_chrmp)pChunkto)->iRedx = ((mng_chrmp)pChunkfrom)->iRedx; ((mng_chrmp)pChunkto)->iRedy = ((mng_chrmp)pChunkfrom)->iRedy; ((mng_chrmp)pChunkto)->iGreenx = ((mng_chrmp)pChunkfrom)->iGreenx; ((mng_chrmp)pChunkto)->iGreeny = ((mng_chrmp)pChunkfrom)->iGreeny; ((mng_chrmp)pChunkto)->iBluex = ((mng_chrmp)pChunkfrom)->iBluex; ((mng_chrmp)pChunkto)->iBluey = ((mng_chrmp)pChunkfrom)->iBluey; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_CHRM, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_sRGB ASSIGN_CHUNK_HDR (mng_assign_srgb) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SRGB, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_sRGB) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_srgbp)pChunkto)->iRenderingintent = ((mng_srgbp)pChunkfrom)->iRenderingintent; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SRGB, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iCCP ASSIGN_CHUNK_HDR (mng_assign_iccp) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ICCP, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_iCCP) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_iccpp)pChunkto)->bEmpty = ((mng_iccpp)pChunkfrom)->bEmpty; ((mng_iccpp)pChunkto)->iNamesize = ((mng_iccpp)pChunkfrom)->iNamesize; ((mng_iccpp)pChunkto)->iCompression = ((mng_iccpp)pChunkfrom)->iCompression; ((mng_iccpp)pChunkto)->iProfilesize = ((mng_iccpp)pChunkfrom)->iProfilesize; if (((mng_iccpp)pChunkto)->iNamesize) { MNG_ALLOC (pData, ((mng_iccpp)pChunkto)->zName, ((mng_iccpp)pChunkto)->iNamesize); MNG_COPY (((mng_iccpp)pChunkto)->zName, ((mng_iccpp)pChunkfrom)->zName, ((mng_iccpp)pChunkto)->iNamesize); } if (((mng_iccpp)pChunkto)->iProfilesize) { MNG_ALLOC (pData, ((mng_iccpp)pChunkto)->pProfile, ((mng_iccpp)pChunkto)->iProfilesize); MNG_COPY (((mng_iccpp)pChunkto)->pProfile, ((mng_iccpp)pChunkfrom)->pProfile, ((mng_iccpp)pChunkto)->iProfilesize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ICCP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_tEXt ASSIGN_CHUNK_HDR (mng_assign_text) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_TEXT, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_tEXt) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_textp)pChunkto)->iKeywordsize = ((mng_textp)pChunkfrom)->iKeywordsize; ((mng_textp)pChunkto)->iTextsize = ((mng_textp)pChunkfrom)->iTextsize; if (((mng_textp)pChunkto)->iKeywordsize) { MNG_ALLOC (pData, ((mng_itxtp)pChunkto)->zKeyword, ((mng_textp)pChunkto)->iKeywordsize); MNG_COPY (((mng_itxtp)pChunkto)->zKeyword, ((mng_textp)pChunkfrom)->zKeyword, ((mng_itxtp)pChunkto)->iKeywordsize); } if (((mng_textp)pChunkto)->iTextsize) { MNG_ALLOC (pData, ((mng_textp)pChunkto)->zText, ((mng_textp)pChunkto)->iTextsize); MNG_COPY (((mng_textp)pChunkto)->zText, ((mng_textp)pChunkfrom)->zText, ((mng_textp)pChunkto)->iTextsize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_TEXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_zTXt ASSIGN_CHUNK_HDR (mng_assign_ztxt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ZTXT, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_zTXt) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_ztxtp)pChunkto)->iKeywordsize = ((mng_ztxtp)pChunkfrom)->iKeywordsize; ((mng_ztxtp)pChunkto)->iCompression = ((mng_ztxtp)pChunkfrom)->iCompression; ((mng_ztxtp)pChunkto)->iTextsize = ((mng_ztxtp)pChunkfrom)->iTextsize; if (((mng_ztxtp)pChunkto)->iKeywordsize) { MNG_ALLOC (pData, ((mng_ztxtp)pChunkto)->zKeyword, ((mng_ztxtp)pChunkto)->iKeywordsize); MNG_COPY (((mng_ztxtp)pChunkto)->zKeyword, ((mng_ztxtp)pChunkfrom)->zKeyword, ((mng_ztxtp)pChunkto)->iKeywordsize); } if (((mng_ztxtp)pChunkto)->iTextsize) { MNG_ALLOC (pData, ((mng_ztxtp)pChunkto)->zText, ((mng_ztxtp)pChunkto)->iTextsize); MNG_COPY (((mng_ztxtp)pChunkto)->zText, ((mng_ztxtp)pChunkfrom)->zText, ((mng_ztxtp)pChunkto)->iTextsize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ZTXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_iTXt ASSIGN_CHUNK_HDR (mng_assign_itxt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ITXT, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_iTXt) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_itxtp)pChunkto)->iKeywordsize = ((mng_itxtp)pChunkfrom)->iKeywordsize; ((mng_itxtp)pChunkto)->iCompressionflag = ((mng_itxtp)pChunkfrom)->iCompressionflag; ((mng_itxtp)pChunkto)->iCompressionmethod = ((mng_itxtp)pChunkfrom)->iCompressionmethod; ((mng_itxtp)pChunkto)->iLanguagesize = ((mng_itxtp)pChunkfrom)->iLanguagesize; ((mng_itxtp)pChunkto)->iTranslationsize = ((mng_itxtp)pChunkfrom)->iTranslationsize; ((mng_itxtp)pChunkto)->iTextsize = ((mng_itxtp)pChunkfrom)->iTextsize; if (((mng_itxtp)pChunkto)->iKeywordsize) { MNG_ALLOC (pData, ((mng_itxtp)pChunkto)->zKeyword, ((mng_itxtp)pChunkto)->iKeywordsize); MNG_COPY (((mng_itxtp)pChunkto)->zKeyword, ((mng_itxtp)pChunkfrom)->zKeyword, ((mng_itxtp)pChunkto)->iKeywordsize); } if (((mng_itxtp)pChunkto)->iTextsize) { MNG_ALLOC (pData, ((mng_itxtp)pChunkto)->zLanguage, ((mng_itxtp)pChunkto)->iLanguagesize); MNG_COPY (((mng_itxtp)pChunkto)->zLanguage, ((mng_itxtp)pChunkfrom)->zLanguage, ((mng_itxtp)pChunkto)->iLanguagesize); } if (((mng_itxtp)pChunkto)->iTextsize) { MNG_ALLOC (pData, ((mng_itxtp)pChunkto)->zTranslation, ((mng_itxtp)pChunkto)->iTranslationsize); MNG_COPY (((mng_itxtp)pChunkto)->zTranslation, ((mng_itxtp)pChunkfrom)->zTranslation, ((mng_itxtp)pChunkto)->iTranslationsize); } if (((mng_itxtp)pChunkto)->iTextsize) { MNG_ALLOC (pData, ((mng_itxtp)pChunkto)->zText, ((mng_itxtp)pChunkto)->iTextsize); MNG_COPY (((mng_itxtp)pChunkto)->zText, ((mng_itxtp)pChunkfrom)->zText, ((mng_itxtp)pChunkto)->iTextsize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ITXT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_bKGD ASSIGN_CHUNK_HDR (mng_assign_bkgd) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_BKGD, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_bKGD) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_bkgdp)pChunkto)->bEmpty = ((mng_bkgdp)pChunkfrom)->bEmpty; ((mng_bkgdp)pChunkto)->iType = ((mng_bkgdp)pChunkfrom)->iType; ((mng_bkgdp)pChunkto)->iIndex = ((mng_bkgdp)pChunkfrom)->iIndex; ((mng_bkgdp)pChunkto)->iGray = ((mng_bkgdp)pChunkfrom)->iGray; ((mng_bkgdp)pChunkto)->iRed = ((mng_bkgdp)pChunkfrom)->iRed; ((mng_bkgdp)pChunkto)->iGreen = ((mng_bkgdp)pChunkfrom)->iGreen; ((mng_bkgdp)pChunkto)->iBlue = ((mng_bkgdp)pChunkfrom)->iBlue; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_BKGD, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_pHYs ASSIGN_CHUNK_HDR (mng_assign_phys) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PHYS, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_pHYs) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_physp)pChunkto)->bEmpty = ((mng_physp)pChunkfrom)->bEmpty; ((mng_physp)pChunkto)->iSizex = ((mng_physp)pChunkfrom)->iSizex; ((mng_physp)pChunkto)->iSizey = ((mng_physp)pChunkfrom)->iSizey; ((mng_physp)pChunkto)->iUnit = ((mng_physp)pChunkfrom)->iUnit; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PHYS, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_sBIT ASSIGN_CHUNK_HDR (mng_assign_sbit) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SBIT, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_sBIT) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_sbitp)pChunkto)->bEmpty = ((mng_sbitp)pChunkfrom)->bEmpty; ((mng_sbitp)pChunkto)->iType = ((mng_sbitp)pChunkfrom)->iType; ((mng_sbitp)pChunkto)->aBits [0] = ((mng_sbitp)pChunkfrom)->aBits [0]; ((mng_sbitp)pChunkto)->aBits [1] = ((mng_sbitp)pChunkfrom)->aBits [1]; ((mng_sbitp)pChunkto)->aBits [2] = ((mng_sbitp)pChunkfrom)->aBits [2]; ((mng_sbitp)pChunkto)->aBits [3] = ((mng_sbitp)pChunkfrom)->aBits [3]; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SBIT, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_sPLT ASSIGN_CHUNK_HDR (mng_assign_splt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SPLT, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_sPLT) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_spltp)pChunkto)->bEmpty = ((mng_spltp)pChunkfrom)->bEmpty; ((mng_spltp)pChunkto)->iNamesize = ((mng_spltp)pChunkfrom)->iNamesize; ((mng_spltp)pChunkto)->iSampledepth = ((mng_spltp)pChunkfrom)->iSampledepth; ((mng_spltp)pChunkto)->iEntrycount = ((mng_spltp)pChunkfrom)->iEntrycount; ((mng_spltp)pChunkto)->pEntries = ((mng_spltp)pChunkfrom)->pEntries; if (((mng_spltp)pChunkto)->iNamesize) { MNG_ALLOC (pData, ((mng_spltp)pChunkto)->zName, ((mng_spltp)pChunkto)->iNamesize); MNG_COPY (((mng_spltp)pChunkto)->zName, ((mng_spltp)pChunkfrom)->zName, ((mng_spltp)pChunkto)->iNamesize); } if (((mng_spltp)pChunkto)->iEntrycount) { mng_uint32 iLen = ((mng_spltp)pChunkto)->iEntrycount * (((mng_spltp)pChunkto)->iSampledepth * 3 + sizeof (mng_uint16)); MNG_ALLOC (pData, ((mng_spltp)pChunkto)->pEntries, iLen); MNG_COPY (((mng_spltp)pChunkto)->pEntries, ((mng_spltp)pChunkfrom)->pEntries, iLen); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SPLT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_hIST ASSIGN_CHUNK_HDR (mng_assign_hist) { mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_HIST, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_hIST) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_histp)pChunkto)->iEntrycount = ((mng_histp)pChunkfrom)->iEntrycount; for (iX = 0; iX < ((mng_histp)pChunkto)->iEntrycount; iX++) ((mng_histp)pChunkto)->aEntries [iX] = ((mng_histp)pChunkfrom)->aEntries [iX]; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_HIST, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_tIME ASSIGN_CHUNK_HDR (mng_assign_time) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_TIME, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_tIME) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_timep)pChunkto)->iYear = ((mng_timep)pChunkfrom)->iYear; ((mng_timep)pChunkto)->iMonth = ((mng_timep)pChunkfrom)->iMonth; ((mng_timep)pChunkto)->iDay = ((mng_timep)pChunkfrom)->iDay; ((mng_timep)pChunkto)->iHour = ((mng_timep)pChunkfrom)->iHour; ((mng_timep)pChunkto)->iMinute = ((mng_timep)pChunkfrom)->iMinute; ((mng_timep)pChunkto)->iSecond = ((mng_timep)pChunkfrom)->iSecond; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_TIME, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN ASSIGN_CHUNK_HDR (mng_assign_mhdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_MHDR, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_MHDR) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_mhdrp)pChunkto)->iWidth = ((mng_mhdrp)pChunkfrom)->iWidth; ((mng_mhdrp)pChunkto)->iHeight = ((mng_mhdrp)pChunkfrom)->iHeight; ((mng_mhdrp)pChunkto)->iTicks = ((mng_mhdrp)pChunkfrom)->iTicks; ((mng_mhdrp)pChunkto)->iLayercount = ((mng_mhdrp)pChunkfrom)->iLayercount; ((mng_mhdrp)pChunkto)->iFramecount = ((mng_mhdrp)pChunkfrom)->iFramecount; ((mng_mhdrp)pChunkto)->iPlaytime = ((mng_mhdrp)pChunkfrom)->iPlaytime; ((mng_mhdrp)pChunkto)->iSimplicity = ((mng_mhdrp)pChunkfrom)->iSimplicity; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_MHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN ASSIGN_CHUNK_HDR (mng_assign_mend) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_MEND, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_MEND) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_MEND, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_LOOP ASSIGN_CHUNK_HDR (mng_assign_loop) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_LOOP, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_LOOP) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_loopp)pChunkto)->iLevel = ((mng_loopp)pChunkfrom)->iLevel; ((mng_loopp)pChunkto)->iRepeat = ((mng_loopp)pChunkfrom)->iRepeat; ((mng_loopp)pChunkto)->iTermination = ((mng_loopp)pChunkfrom)->iTermination; ((mng_loopp)pChunkto)->iItermin = ((mng_loopp)pChunkfrom)->iItermin; ((mng_loopp)pChunkto)->iItermax = ((mng_loopp)pChunkfrom)->iItermax; ((mng_loopp)pChunkto)->iCount = ((mng_loopp)pChunkfrom)->iCount; #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED if (((mng_loopp)pChunkto)->iCount) { mng_uint32 iLen = ((mng_loopp)pChunkto)->iCount * sizeof (mng_uint32); MNG_ALLOC (pData, ((mng_loopp)pChunkto)->pSignals, iLen); MNG_COPY (((mng_loopp)pChunkto)->pSignals, ((mng_loopp)pChunkfrom)->pSignals, iLen); } #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_LOOP, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN ASSIGN_CHUNK_HDR (mng_assign_endl) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ENDL, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_ENDL) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_endlp)pChunkto)->iLevel = ((mng_endlp)pChunkfrom)->iLevel; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ENDL, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_DEFI ASSIGN_CHUNK_HDR (mng_assign_defi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_DEFI, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_DEFI) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_defip)pChunkto)->iObjectid = ((mng_defip)pChunkfrom)->iObjectid; ((mng_defip)pChunkto)->bHasdonotshow = ((mng_defip)pChunkfrom)->bHasdonotshow; ((mng_defip)pChunkto)->iDonotshow = ((mng_defip)pChunkfrom)->iDonotshow; ((mng_defip)pChunkto)->bHasconcrete = ((mng_defip)pChunkfrom)->bHasconcrete; ((mng_defip)pChunkto)->iConcrete = ((mng_defip)pChunkfrom)->iConcrete; ((mng_defip)pChunkto)->bHasloca = ((mng_defip)pChunkfrom)->bHasloca; ((mng_defip)pChunkto)->iXlocation = ((mng_defip)pChunkfrom)->iXlocation; ((mng_defip)pChunkto)->iYlocation = ((mng_defip)pChunkfrom)->iYlocation; ((mng_defip)pChunkto)->bHasclip = ((mng_defip)pChunkfrom)->bHasclip; ((mng_defip)pChunkto)->iLeftcb = ((mng_defip)pChunkfrom)->iLeftcb; ((mng_defip)pChunkto)->iRightcb = ((mng_defip)pChunkfrom)->iRightcb; ((mng_defip)pChunkto)->iTopcb = ((mng_defip)pChunkfrom)->iTopcb; ((mng_defip)pChunkto)->iBottomcb = ((mng_defip)pChunkfrom)->iBottomcb; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_DEFI, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_BASI ASSIGN_CHUNK_HDR (mng_assign_basi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_BASI, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_BASI) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_basip)pChunkto)->iWidth = ((mng_basip)pChunkfrom)->iWidth; ((mng_basip)pChunkto)->iHeight = ((mng_basip)pChunkfrom)->iHeight; ((mng_basip)pChunkto)->iBitdepth = ((mng_basip)pChunkfrom)->iBitdepth; ((mng_basip)pChunkto)->iColortype = ((mng_basip)pChunkfrom)->iColortype; ((mng_basip)pChunkto)->iCompression = ((mng_basip)pChunkfrom)->iCompression; ((mng_basip)pChunkto)->iFilter = ((mng_basip)pChunkfrom)->iFilter; ((mng_basip)pChunkto)->iInterlace = ((mng_basip)pChunkfrom)->iInterlace; ((mng_basip)pChunkto)->iRed = ((mng_basip)pChunkfrom)->iRed; ((mng_basip)pChunkto)->iGreen = ((mng_basip)pChunkfrom)->iGreen; ((mng_basip)pChunkto)->iBlue = ((mng_basip)pChunkfrom)->iBlue; ((mng_basip)pChunkto)->iAlpha = ((mng_basip)pChunkfrom)->iAlpha; ((mng_basip)pChunkto)->iViewable = ((mng_basip)pChunkfrom)->iViewable; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_BASI, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_CLON ASSIGN_CHUNK_HDR (mng_assign_clon) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_CLON, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_CLON) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_clonp)pChunkto)->iSourceid = ((mng_clonp)pChunkfrom)->iSourceid; ((mng_clonp)pChunkto)->iCloneid = ((mng_clonp)pChunkfrom)->iCloneid; ((mng_clonp)pChunkto)->iClonetype = ((mng_clonp)pChunkfrom)->iClonetype; #ifdef MNG_OPTIMIZE_CHUNKREADER ((mng_clonp)pChunkto)->bHasdonotshow = ((mng_clonp)pChunkfrom)->bHasdonotshow; #endif ((mng_clonp)pChunkto)->iDonotshow = ((mng_clonp)pChunkfrom)->iDonotshow; ((mng_clonp)pChunkto)->iConcrete = ((mng_clonp)pChunkfrom)->iConcrete; ((mng_clonp)pChunkto)->bHasloca = ((mng_clonp)pChunkfrom)->bHasloca; ((mng_clonp)pChunkto)->iLocationtype = ((mng_clonp)pChunkfrom)->iLocationtype; ((mng_clonp)pChunkto)->iLocationx = ((mng_clonp)pChunkfrom)->iLocationx; ((mng_clonp)pChunkto)->iLocationy = ((mng_clonp)pChunkfrom)->iLocationy; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_CLON, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST ASSIGN_CHUNK_HDR (mng_assign_past) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PAST, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_PAST) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_pastp)pChunkto)->iDestid = ((mng_pastp)pChunkfrom)->iDestid; ((mng_pastp)pChunkto)->iTargettype = ((mng_pastp)pChunkfrom)->iTargettype; ((mng_pastp)pChunkto)->iTargetx = ((mng_pastp)pChunkfrom)->iTargetx; ((mng_pastp)pChunkto)->iTargety = ((mng_pastp)pChunkfrom)->iTargety; ((mng_pastp)pChunkto)->iCount = ((mng_pastp)pChunkfrom)->iCount; if (((mng_pastp)pChunkto)->iCount) { mng_uint32 iLen = ((mng_pastp)pChunkto)->iCount * sizeof (mng_past_source); MNG_ALLOC (pData, ((mng_pastp)pChunkto)->pSources, iLen); MNG_COPY (((mng_pastp)pChunkto)->pSources, ((mng_pastp)pChunkfrom)->pSources, iLen); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PAST, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_DISC ASSIGN_CHUNK_HDR (mng_assign_disc) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_DISC, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_DISC) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_discp)pChunkto)->iCount = ((mng_discp)pChunkfrom)->iCount; if (((mng_discp)pChunkto)->iCount) { mng_uint32 iLen = ((mng_discp)pChunkto)->iCount * sizeof (mng_uint16); MNG_ALLOC (pData, ((mng_discp)pChunkto)->pObjectids, iLen); MNG_COPY (((mng_discp)pChunkto)->pObjectids, ((mng_discp)pChunkfrom)->pObjectids, iLen); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_DISC, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_BACK ASSIGN_CHUNK_HDR (mng_assign_back) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_BACK, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_BACK) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_backp)pChunkto)->iRed = ((mng_backp)pChunkfrom)->iRed; ((mng_backp)pChunkto)->iGreen = ((mng_backp)pChunkfrom)->iGreen; ((mng_backp)pChunkto)->iBlue = ((mng_backp)pChunkfrom)->iBlue; ((mng_backp)pChunkto)->iMandatory = ((mng_backp)pChunkfrom)->iMandatory; ((mng_backp)pChunkto)->iImageid = ((mng_backp)pChunkfrom)->iImageid; ((mng_backp)pChunkto)->iTile = ((mng_backp)pChunkfrom)->iTile; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_BACK, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_FRAM ASSIGN_CHUNK_HDR (mng_assign_fram) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_FRAM, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_FRAM) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_framp)pChunkto)->bEmpty = ((mng_framp)pChunkfrom)->bEmpty; ((mng_framp)pChunkto)->iMode = ((mng_framp)pChunkfrom)->iMode; ((mng_framp)pChunkto)->iNamesize = ((mng_framp)pChunkfrom)->iNamesize; ((mng_framp)pChunkto)->iChangedelay = ((mng_framp)pChunkfrom)->iChangedelay; ((mng_framp)pChunkto)->iChangetimeout = ((mng_framp)pChunkfrom)->iChangetimeout; ((mng_framp)pChunkto)->iChangeclipping = ((mng_framp)pChunkfrom)->iChangeclipping; ((mng_framp)pChunkto)->iChangesyncid = ((mng_framp)pChunkfrom)->iChangesyncid; ((mng_framp)pChunkto)->iDelay = ((mng_framp)pChunkfrom)->iDelay; ((mng_framp)pChunkto)->iTimeout = ((mng_framp)pChunkfrom)->iTimeout; ((mng_framp)pChunkto)->iBoundarytype = ((mng_framp)pChunkfrom)->iBoundarytype; ((mng_framp)pChunkto)->iBoundaryl = ((mng_framp)pChunkfrom)->iBoundaryl; ((mng_framp)pChunkto)->iBoundaryr = ((mng_framp)pChunkfrom)->iBoundaryr; ((mng_framp)pChunkto)->iBoundaryt = ((mng_framp)pChunkfrom)->iBoundaryt; ((mng_framp)pChunkto)->iBoundaryb = ((mng_framp)pChunkfrom)->iBoundaryb; ((mng_framp)pChunkto)->iCount = ((mng_framp)pChunkfrom)->iCount; if (((mng_framp)pChunkto)->iNamesize) { MNG_ALLOC (pData, ((mng_framp)pChunkto)->zName, ((mng_framp)pChunkto)->iNamesize); MNG_COPY (((mng_framp)pChunkto)->zName, ((mng_framp)pChunkfrom)->zName, ((mng_framp)pChunkto)->iNamesize); } if (((mng_framp)pChunkto)->iCount) { mng_uint32 iLen = ((mng_framp)pChunkto)->iCount * sizeof (mng_uint32); MNG_ALLOC (pData, ((mng_framp)pChunkto)->pSyncids, iLen); MNG_COPY (((mng_framp)pChunkto)->pSyncids, ((mng_framp)pChunkfrom)->pSyncids, iLen); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_FRAM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_MOVE ASSIGN_CHUNK_HDR (mng_assign_move) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_MOVE, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_MOVE) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_movep)pChunkto)->iFirstid = ((mng_movep)pChunkfrom)->iFirstid; ((mng_movep)pChunkto)->iLastid = ((mng_movep)pChunkfrom)->iLastid; ((mng_movep)pChunkto)->iMovetype = ((mng_movep)pChunkfrom)->iMovetype; ((mng_movep)pChunkto)->iMovex = ((mng_movep)pChunkfrom)->iMovex; ((mng_movep)pChunkto)->iMovey = ((mng_movep)pChunkfrom)->iMovey; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_MOVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_CLIP ASSIGN_CHUNK_HDR (mng_assign_clip) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_CLIP, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_CLIP) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_clipp)pChunkto)->iFirstid = ((mng_clipp)pChunkfrom)->iFirstid; ((mng_clipp)pChunkto)->iLastid = ((mng_clipp)pChunkfrom)->iLastid; ((mng_clipp)pChunkto)->iCliptype = ((mng_clipp)pChunkfrom)->iCliptype; ((mng_clipp)pChunkto)->iClipl = ((mng_clipp)pChunkfrom)->iClipl; ((mng_clipp)pChunkto)->iClipr = ((mng_clipp)pChunkfrom)->iClipr; ((mng_clipp)pChunkto)->iClipt = ((mng_clipp)pChunkfrom)->iClipt; ((mng_clipp)pChunkto)->iClipb = ((mng_clipp)pChunkfrom)->iClipb; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_CLIP, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_SHOW ASSIGN_CHUNK_HDR (mng_assign_show) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SHOW, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_SHOW) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_showp)pChunkto)->bEmpty = ((mng_showp)pChunkfrom)->bEmpty; ((mng_showp)pChunkto)->iFirstid = ((mng_showp)pChunkfrom)->iFirstid; ((mng_showp)pChunkto)->iLastid = ((mng_showp)pChunkfrom)->iLastid; ((mng_showp)pChunkto)->iMode = ((mng_showp)pChunkfrom)->iMode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SHOW, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_TERM ASSIGN_CHUNK_HDR (mng_assign_term) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_TERM, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_TERM) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_termp)pChunkto)->iTermaction = ((mng_termp)pChunkfrom)->iTermaction; ((mng_termp)pChunkto)->iIteraction = ((mng_termp)pChunkfrom)->iIteraction; ((mng_termp)pChunkto)->iDelay = ((mng_termp)pChunkfrom)->iDelay; ((mng_termp)pChunkto)->iItermax = ((mng_termp)pChunkfrom)->iItermax; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_TERM, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SAVE ASSIGN_CHUNK_HDR (mng_assign_save) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SAVE, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_SAVE) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_savep)pChunkto)->bEmpty = ((mng_savep)pChunkfrom)->bEmpty; ((mng_savep)pChunkto)->iOffsettype = ((mng_savep)pChunkfrom)->iOffsettype; ((mng_savep)pChunkto)->iCount = ((mng_savep)pChunkfrom)->iCount; if (((mng_savep)pChunkto)->iCount) { mng_uint32 iX; mng_save_entryp pEntry; mng_uint32 iLen = ((mng_savep)pChunkto)->iCount * sizeof (mng_save_entry); MNG_ALLOC (pData, ((mng_savep)pChunkto)->pEntries, iLen); MNG_COPY (((mng_savep)pChunkto)->pEntries, ((mng_savep)pChunkfrom)->pEntries, iLen); pEntry = ((mng_savep)pChunkto)->pEntries; for (iX = 0; iX < ((mng_savep)pChunkto)->iCount; iX++) { if (pEntry->iNamesize) { mng_pchar pTemp = pEntry->zName; MNG_ALLOC (pData, pEntry->zName, pEntry->iNamesize); MNG_COPY (pEntry->zName, pTemp, pEntry->iNamesize); } else { pEntry->zName = MNG_NULL; } pEntry++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SAVE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_SEEK ASSIGN_CHUNK_HDR (mng_assign_seek) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SEEK, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_SEEK) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_seekp)pChunkto)->iNamesize = ((mng_seekp)pChunkfrom)->iNamesize; if (((mng_seekp)pChunkto)->iNamesize) { MNG_ALLOC (pData, ((mng_seekp)pChunkto)->zName, ((mng_seekp)pChunkto)->iNamesize); MNG_COPY (((mng_seekp)pChunkto)->zName, ((mng_seekp)pChunkfrom)->zName, ((mng_seekp)pChunkto)->iNamesize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_SEEK, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_eXPI ASSIGN_CHUNK_HDR (mng_assign_expi) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_EXPI, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_eXPI) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_expip)pChunkto)->iSnapshotid = ((mng_expip)pChunkfrom)->iSnapshotid; ((mng_expip)pChunkto)->iNamesize = ((mng_expip)pChunkfrom)->iNamesize; if (((mng_expip)pChunkto)->iNamesize) { MNG_ALLOC (pData, ((mng_expip)pChunkto)->zName, ((mng_expip)pChunkto)->iNamesize); MNG_COPY (((mng_expip)pChunkto)->zName, ((mng_expip)pChunkfrom)->zName, ((mng_expip)pChunkto)->iNamesize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_EXPI, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_fPRI ASSIGN_CHUNK_HDR (mng_assign_fpri) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_FPRI, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_fPRI) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_fprip)pChunkto)->iDeltatype = ((mng_fprip)pChunkfrom)->iDeltatype; ((mng_fprip)pChunkto)->iPriority = ((mng_fprip)pChunkfrom)->iPriority; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_FPRI, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_nEED ASSIGN_CHUNK_HDR (mng_assign_need) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_NEED, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_nEED) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_needp)pChunkto)->iKeywordssize = ((mng_needp)pChunkfrom)->iKeywordssize; if (((mng_needp)pChunkto)->iKeywordssize) { MNG_ALLOC (pData, ((mng_needp)pChunkto)->zKeywords, ((mng_needp)pChunkto)->iKeywordssize); MNG_COPY (((mng_needp)pChunkto)->zKeywords, ((mng_needp)pChunkfrom)->zKeywords, ((mng_needp)pChunkto)->iKeywordssize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_NEED, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_pHYg ASSIGN_CHUNK_HDR (mng_assign_phyg) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PHYG, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_pHYg) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_phygp)pChunkto)->bEmpty = ((mng_phygp)pChunkfrom)->bEmpty; ((mng_phygp)pChunkto)->iSizex = ((mng_phygp)pChunkfrom)->iSizex; ((mng_phygp)pChunkto)->iSizey = ((mng_phygp)pChunkfrom)->iSizey; ((mng_phygp)pChunkto)->iUnit = ((mng_phygp)pChunkfrom)->iUnit; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PHYG, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifdef MNG_INCLUDE_JNG ASSIGN_CHUNK_HDR (mng_assign_jhdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_JHDR, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_JHDR) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_jhdrp)pChunkto)->iWidth = ((mng_jhdrp)pChunkfrom)->iWidth; ((mng_jhdrp)pChunkto)->iHeight = ((mng_jhdrp)pChunkfrom)->iHeight; ((mng_jhdrp)pChunkto)->iColortype = ((mng_jhdrp)pChunkfrom)->iColortype; ((mng_jhdrp)pChunkto)->iImagesampledepth = ((mng_jhdrp)pChunkfrom)->iImagesampledepth; ((mng_jhdrp)pChunkto)->iImagecompression = ((mng_jhdrp)pChunkfrom)->iImagecompression; ((mng_jhdrp)pChunkto)->iImageinterlace = ((mng_jhdrp)pChunkfrom)->iImageinterlace; ((mng_jhdrp)pChunkto)->iAlphasampledepth = ((mng_jhdrp)pChunkfrom)->iAlphasampledepth; ((mng_jhdrp)pChunkto)->iAlphacompression = ((mng_jhdrp)pChunkfrom)->iAlphacompression; ((mng_jhdrp)pChunkto)->iAlphafilter = ((mng_jhdrp)pChunkfrom)->iAlphafilter; ((mng_jhdrp)pChunkto)->iAlphainterlace = ((mng_jhdrp)pChunkfrom)->iAlphainterlace; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_JHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG ASSIGN_CHUNK_HDR (mng_assign_jdaa) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_JDAA, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_JDAA) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_jdaap)pChunkto)->bEmpty = ((mng_jdaap)pChunkfrom)->bEmpty; ((mng_jdaap)pChunkto)->iDatasize = ((mng_jdaap)pChunkfrom)->iDatasize; if (((mng_jdaap)pChunkto)->iDatasize) { MNG_ALLOC (pData, ((mng_jdaap)pChunkto)->pData, ((mng_jdaap)pChunkto)->iDatasize); MNG_COPY (((mng_jdaap)pChunkto)->pData, ((mng_jdaap)pChunkfrom)->pData, ((mng_jdaap)pChunkto)->iDatasize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_JDAA, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG ASSIGN_CHUNK_HDR (mng_assign_jdat) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_JDAT, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_JDAT) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_jdatp)pChunkto)->bEmpty = ((mng_jdatp)pChunkfrom)->bEmpty; ((mng_jdatp)pChunkto)->iDatasize = ((mng_jdatp)pChunkfrom)->iDatasize; if (((mng_jdatp)pChunkto)->iDatasize) { MNG_ALLOC (pData, ((mng_jdatp)pChunkto)->pData, ((mng_jdatp)pChunkto)->iDatasize); MNG_COPY (((mng_jdatp)pChunkto)->pData, ((mng_jdatp)pChunkfrom)->pData, ((mng_jdatp)pChunkto)->iDatasize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_JDAT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifdef MNG_INCLUDE_JNG ASSIGN_CHUNK_HDR (mng_assign_jsep) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_JSEP, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_JSEP) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_JSEP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_INCLUDE_JNG */ #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_NO_DELTA_PNG ASSIGN_CHUNK_HDR (mng_assign_dhdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_DHDR, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_DHDR) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_dhdrp)pChunkto)->iObjectid = ((mng_dhdrp)pChunkfrom)->iObjectid; ((mng_dhdrp)pChunkto)->iImagetype = ((mng_dhdrp)pChunkfrom)->iImagetype; ((mng_dhdrp)pChunkto)->iDeltatype = ((mng_dhdrp)pChunkfrom)->iDeltatype; ((mng_dhdrp)pChunkto)->iBlockwidth = ((mng_dhdrp)pChunkfrom)->iBlockwidth; ((mng_dhdrp)pChunkto)->iBlockheight = ((mng_dhdrp)pChunkfrom)->iBlockheight; ((mng_dhdrp)pChunkto)->iBlockx = ((mng_dhdrp)pChunkfrom)->iBlockx; ((mng_dhdrp)pChunkto)->iBlocky = ((mng_dhdrp)pChunkfrom)->iBlocky; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_DHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_NO_DELTA_PNG ASSIGN_CHUNK_HDR (mng_assign_prom) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PROM, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_PROM) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_promp)pChunkto)->iColortype = ((mng_promp)pChunkfrom)->iColortype; ((mng_promp)pChunkto)->iSampledepth = ((mng_promp)pChunkfrom)->iSampledepth; ((mng_promp)pChunkto)->iFilltype = ((mng_promp)pChunkfrom)->iFilltype; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PROM, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_NO_DELTA_PNG ASSIGN_CHUNK_HDR (mng_assign_ipng) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_IPNG, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_IPNG) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_IPNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_NO_DELTA_PNG ASSIGN_CHUNK_HDR (mng_assign_pplt) { mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PPLT, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_PPLT) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_ppltp)pChunkto)->iDeltatype = ((mng_ppltp)pChunkfrom)->iDeltatype; ((mng_ppltp)pChunkto)->iCount = ((mng_ppltp)pChunkfrom)->iCount; for (iX = 0; iX < ((mng_ppltp)pChunkto)->iCount; iX++) ((mng_ppltp)pChunkto)->aEntries [iX] = ((mng_ppltp)pChunkfrom)->aEntries [iX]; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_PPLT, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG ASSIGN_CHUNK_HDR (mng_assign_ijng) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_IJNG, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_IJNG) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_IJNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG ASSIGN_CHUNK_HDR (mng_assign_drop) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_DROP, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_DROP) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_dropp)pChunkto)->iCount = ((mng_dropp)pChunkfrom)->iCount; if (((mng_dropp)pChunkto)->iCount) { mng_uint32 iLen = ((mng_dropp)pChunkto)->iCount * sizeof (mng_uint32); MNG_ALLOC (pData, ((mng_dropp)pChunkto)->pChunknames, iLen); MNG_COPY (((mng_dropp)pChunkto)->pChunknames, ((mng_dropp)pChunkfrom)->pChunknames, iLen); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_DROP, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK ASSIGN_CHUNK_HDR (mng_assign_dbyk) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_DBYK, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_DBYK) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_dbykp)pChunkto)->iChunkname = ((mng_dbykp)pChunkfrom)->iChunkname; ((mng_dbykp)pChunkto)->iPolarity = ((mng_dbykp)pChunkfrom)->iPolarity; ((mng_dbykp)pChunkto)->iKeywordssize = ((mng_dbykp)pChunkfrom)->iKeywordssize; if (((mng_dbykp)pChunkto)->iKeywordssize) { MNG_ALLOC (pData, ((mng_dbykp)pChunkto)->zKeywords, ((mng_dbykp)pChunkto)->iKeywordssize); MNG_COPY (((mng_dbykp)pChunkto)->zKeywords, ((mng_dbykp)pChunkfrom)->zKeywords, ((mng_dbykp)pChunkto)->iKeywordssize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_DBYK, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR ASSIGN_CHUNK_HDR (mng_assign_ordr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ORDR, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_ORDR) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_ordrp)pChunkto)->iCount = ((mng_ordrp)pChunkfrom)->iCount; if (((mng_ordrp)pChunkto)->iCount) { mng_uint32 iLen = ((mng_ordrp)pChunkto)->iCount * sizeof (mng_ordr_entry); MNG_ALLOC (pData, ((mng_ordrp)pChunkto)->pEntries, iLen); MNG_COPY (((mng_ordrp)pChunkto)->pEntries, ((mng_ordrp)pChunkfrom)->pEntries, iLen); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ORDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_CHUNKASSIGN #ifndef MNG_SKIPCHUNK_MAGN ASSIGN_CHUNK_HDR (mng_assign_magn) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_MAGN, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_MAGN) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_magnp)pChunkto)->iFirstid = ((mng_magnp)pChunkfrom)->iFirstid; ((mng_magnp)pChunkto)->iLastid = ((mng_magnp)pChunkfrom)->iLastid; ((mng_magnp)pChunkto)->iMethodX = ((mng_magnp)pChunkfrom)->iMethodX; ((mng_magnp)pChunkto)->iMX = ((mng_magnp)pChunkfrom)->iMX; ((mng_magnp)pChunkto)->iMY = ((mng_magnp)pChunkfrom)->iMY; ((mng_magnp)pChunkto)->iML = ((mng_magnp)pChunkfrom)->iML; ((mng_magnp)pChunkto)->iMR = ((mng_magnp)pChunkfrom)->iMR; ((mng_magnp)pChunkto)->iMT = ((mng_magnp)pChunkfrom)->iMT; ((mng_magnp)pChunkto)->iMB = ((mng_magnp)pChunkfrom)->iMB; ((mng_magnp)pChunkto)->iMethodY = ((mng_magnp)pChunkfrom)->iMethodY; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_MAGN, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_MPNG_PROPOSAL ASSIGN_CHUNK_HDR (mng_assign_mpng) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_MPNG, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_mpNG) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_mpngp)pChunkto)->iFramewidth = ((mng_mpngp)pChunkfrom)->iFramewidth; ((mng_mpngp)pChunkto)->iFrameheight = ((mng_mpngp)pChunkfrom)->iFrameheight; ((mng_mpngp)pChunkto)->iNumplays = ((mng_mpngp)pChunkfrom)->iNumplays; ((mng_mpngp)pChunkto)->iTickspersec = ((mng_mpngp)pChunkfrom)->iTickspersec; ((mng_mpngp)pChunkto)->iCompressionmethod = ((mng_mpngp)pChunkfrom)->iCompressionmethod; ((mng_mpngp)pChunkto)->iFramessize = ((mng_mpngp)pChunkfrom)->iFramessize; if (((mng_mpngp)pChunkto)->iFramessize) { MNG_ALLOC (pData, ((mng_mpngp)pChunkto)->pFrames, ((mng_mpngp)pChunkto)->iFramessize); MNG_COPY (((mng_mpngp)pChunkto)->pFrames, ((mng_mpngp)pChunkfrom)->pFrames, ((mng_mpngp)pChunkto)->iFramessize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_MPNG, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL ASSIGN_CHUNK_HDR (mng_assign_ahdr) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_AHDR, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_ahDR) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_ahdrp)pChunkto)->iNumframes = ((mng_ahdrp)pChunkfrom)->iNumframes; ((mng_ahdrp)pChunkto)->iTickspersec = ((mng_ahdrp)pChunkfrom)->iTickspersec; ((mng_ahdrp)pChunkto)->iNumplays = ((mng_ahdrp)pChunkfrom)->iNumplays; ((mng_ahdrp)pChunkto)->iTilewidth = ((mng_ahdrp)pChunkfrom)->iTilewidth; ((mng_ahdrp)pChunkto)->iTileheight = ((mng_ahdrp)pChunkfrom)->iTileheight; ((mng_ahdrp)pChunkto)->iInterlace = ((mng_ahdrp)pChunkfrom)->iInterlace; ((mng_ahdrp)pChunkto)->iStillused = ((mng_ahdrp)pChunkfrom)->iStillused; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_AHDR, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_ANG_PROPOSAL ASSIGN_CHUNK_HDR (mng_assign_adat) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ADAT, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_adAT) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_adatp)pChunkto)->iTilessize = ((mng_adatp)pChunkfrom)->iTilessize; if (((mng_adatp)pChunkto)->iTilessize) { MNG_ALLOC (pData, ((mng_adatp)pChunkto)->pTiles, ((mng_adatp)pChunkto)->iTilessize); MNG_COPY (((mng_adatp)pChunkto)->pTiles, ((mng_adatp)pChunkfrom)->pTiles, ((mng_adatp)pChunkto)->iTilessize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_ADAT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_evNT ASSIGN_CHUNK_HDR (mng_assign_evnt) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_EVNT, MNG_LC_START); #endif if (((mng_chunk_headerp)pChunkfrom)->iChunkname != MNG_UINT_evNT) MNG_ERROR (pData, MNG_WRONGCHUNK); /* ouch */ ((mng_evntp)pChunkto)->iCount = ((mng_evntp)pChunkfrom)->iCount; if (((mng_evntp)pChunkto)->iCount) { mng_uint32 iX; mng_evnt_entryp pEntry; mng_uint32 iLen = ((mng_evntp)pChunkto)->iCount * sizeof (mng_evnt_entry); MNG_ALLOC (pData, ((mng_evntp)pChunkto)->pEntries, iLen); MNG_COPY (((mng_evntp)pChunkto)->pEntries, ((mng_evntp)pChunkfrom)->pEntries, iLen); pEntry = ((mng_evntp)pChunkto)->pEntries; for (iX = 0; iX < ((mng_evntp)pChunkto)->iCount; iX++) { if (pEntry->iSegmentnamesize) { mng_pchar pTemp = pEntry->zSegmentname; MNG_ALLOC (pData, pEntry->zSegmentname, pEntry->iSegmentnamesize+1); MNG_COPY (pEntry->zSegmentname, pTemp, pEntry->iSegmentnamesize); } else { pEntry->zSegmentname = MNG_NULL; } pEntry++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_EVNT, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ ASSIGN_CHUNK_HDR (mng_assign_unknown) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_UNKNOWN, MNG_LC_START); #endif ((mng_unknown_chunkp)pChunkto)->iDatasize = ((mng_unknown_chunkp)pChunkfrom)->iDatasize; if (((mng_unknown_chunkp)pChunkto)->iDatasize) { MNG_ALLOC (pData, ((mng_unknown_chunkp)pChunkto)->pData, ((mng_unknown_chunkp)pChunkto)->iDatasize); MNG_COPY (((mng_unknown_chunkp)pChunkto)->pData, ((mng_unknown_chunkp)pChunkfrom)->pData, ((mng_unknown_chunkp)pChunkto)->iDatasize); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_ASSIGN_UNKNOWN, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_INCLUDE_WRITE_PROCS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/doc/0000755000000000000000000000000012115376074012234 5ustar rootrootlibmng-2.0.2/doc/CMakeLists.txt0000644000000000000000000000045012005307152014760 0ustar rootroot#libmng-VERSION/doc IF(BUILD_MAN) IF(MAN_FOUND) ADD_SUBDIRECTORY(man) ELSE(MAN_FOUND) MESSAGE(STATUS "No MAN program found. MAN pages not built.") ENDIF(MAN_FOUND) ENDIF(BUILD_MAN) INSTALL(FILES Plan1.png Plan2.png doc.readme libmng.txt DESTINATION ${MNG_INSTALL_DOC_DIR} ) #--- fin libmng-2.0.2/doc/doc.readme0000644000000000000000000000066612005307152014155 0ustar rootrootThis directory hosts the documentation for libmng. You will find a lot of useful info on the web-site: http://www.libmng.com Man-pages are in the man sub-directory RPM specification files are in the RPM sub-directory Files in this directory: - libmng.txt Description of the library proper and its usage - Plan1.png & Plan2.png Visual representation of the functional and technical design of the library (in PNG format of course!) libmng-2.0.2/doc/libmng.txt0000644000000000000000000012014712005307152014237 0ustar rootrootlibmng - Multiple-image Network Graphics (MNG) Reference Library 1.0.9 DESCRIPTION The libmng library supports decoding, displaying, encoding, and various other manipulations of the Multiple-image Network Graphics (MNG) format image files. It uses the zlib compression library, and optionally the JPEG library by the Independant JPEG Group (IJG) and/or lcms (little cms), a color-management library by Marti Maria Saguer. I. Introduction This file describes how to use and modify the MNG reference library (known as libmng) for your own use. There are seven sections to this file: introduction, callbacks, housekeeping, reading, displaying, writing, and modification and configuration notes for various special platforms. We assume that libmng is already installed; see the INSTALL.README file for instructions on how to install libmng. Libmng was written to support and promote the MNG specification. The latest MNG specification (currently 1.0) is available at http://www.libpng.org/pub/mng/ Other information about MNG can be found at the MNG home page at http://www.libpng.org/pub/mng/ The latest version of libmng can be found at its own homepage at http://www.libmng.com/ In most cases the library will not need to be changed. For standardization purposes the library contains both a Windows DLL and a makefile for building a shared library (SO). The library is written in C, but an interface for Borland Delphi is also available. Libmng has been designed to handle multiple sessions at one time, to be easily modifiable, to be portable to the vast majority of machines (ANSI, K&R, 32-, and 64-bit) available, and to be easy to use. Libmng uses zlib for its compression and decompression of MNG files. Further information about zlib, and the latest version of zlib, can be found at the zlib home page, . The zlib compression utility is a general purpose utility that is useful for more than MNG/PNG files, and can be used without libmng. See the documentation delivered with zlib for more details. Libmng optionally uses the JPEG library by the Independant JPEG Group (IJG). This library is used for the JNG sub-format, which is part of the MNG specification, and allows for inclusion of JPEG decoded and thus highly compressed (photographic) images. Further information about the IJG JPEG library and the latest sources can be found at . Libmng can also optionally use the lcms (little CMS) library by Marti Maria Saguer. This library provides an excellent color-management system (CMS), which gives libmng the ability to provide full color-correction for images with the proper color-information encoded. Further information and the latest sources can be found at . Libmng is thread safe, provided the threads are using different handles as returned by the initialization call. Each thread should have its own handle and thus its own image. Libmng does not protect itself against two threads using the same instance of a handle. The libmng.h header file is the single reference needed for programming with libmng: #include II. Callbacks Libmng makes extensive use of callback functions. This is meant to keep the library as platform-independant and flexible as possible. Actually, the first call you will make to the library, already contains three parameters you can use to provide callback entry-points. Most functions must return a mng_bool (boolean). Returning MNG_FALSE indicates the library the callback failed in some way and the library will immediately return from whatever it was doing back to the application. Returning MNG_TRUE indicates there were no problems and processing can continue. Let's step through each of the possible callbacks. The sections on reading, displaying and writing will also explain which callbacks are needed when and where. - mng_ptr mng_memalloc (mng_size_t iLen) A very basic function which the library uses to allocate a memory-block with the given size. A typical implementation would be: mng_ptr my_alloc (mng_size_t iLen) { return calloc (1, iSize); } Note that the library requires you to zero-out the memory-block!!! - void mng_memfree (mng_ptr pPtr, mng_size_t iLen) Counterpart of the previous function. Typically: void my_free (mng_ptr pPtr, mng_size_t iLen) { free (pPtr); } - mng_bool mng_openstream (mng_handle hHandle) - mng_bool mng_closestream (mng_handle hHandle) These are called by the library just before it starts to process (either read or write) a file and just after the processing stops. This is the recommended place to do I/O initialization & finalization. Whether you do or not, is up to you. The library does not put any meaning into the calls. They are simply provided for your convenience. - mng_bool mng_readdata (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pRead) This function is called when the library needs some more input while reading an image. The reading process supports two modes: Suspension-mode (SMOD) and non-suspension-mode (NSMOD). See mng_set_suspensionmode() for a more detailed description. In NSMOD, the library requires you to return exactly the amount of bytes requested (= iBuflen). Any lesser amount indicates the input file is exhausted and the library will return a MNG_UNEXPECTEDEOF errorcode. In SMOD, you may return a smaller amount of bytes than requested. This tells the library it should temporarily wait for more input to arrive. The lib will return with MNG_NEEDMOREDATA, and will expect a call to mng_read_resume() or mng_display_resume() next, as soon as more input-data has arrived. For NSMOD this function could be as simple as: mng_bool my_read (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pRead) { *pRead = fread (pBuf, 1, iBuflen, myfile); return MNG_TRUE; } - mng_bool mng_writedata (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pWritten) This function is called during the mng_write() function to actually output data to the file. There is no suspension-mode during write, so the application must return the exact number of bytes the library requests to be written. A typical implementation could be: mng_bool my_write (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pWritten) { *pWritten = fwrite (pBuf, 1, iBuflen, myfile); return MNG_TRUE; } - mng_bool mng_errorproc (mng_handle hHandle, mng_int32 iErrorcode, mng_int8 iSeverity, mng_chunkid iChunkname, mng_uint32 iChunkseq, mng_int32 iExtra1, mng_int32 iExtra2, mng_pchar zErrortext) This function is called whenever an error is detected inside the library. This may be caused by invalid input, callbacks indicating failure, or wrongfully calling functions out of place. If you do not provide this callback the library will still return an errorcode from the called function, and the mng_getlasterror() function can be used to retrieve the other parameters. This function is currently only provided for convenience, but may at some point be used to indicate certain errors may be acceptable, and processing should continue. - mng_bool mng_traceproc (mng_handle hHandle, mng_int32 iFuncnr, mng_int32 iFuncseq, mng_pchar zFuncname) This function is provided to allow a functional analysis of the library. This may be useful if you encounter certain errors and cannot determine what the problem is. Almost all functions inside the library will activate this callback with an appropriate function-name at the start and end of the function. Please note that large images may generate an enormous amount of calls. - mng_bool mng_processheader (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight) This function is called once the header information of an input- image has been processed. At this point the image dimensions are available and also some other properties depending on the type of the image. Eg. for a MNG the frame-/layercount, playtime & simplicity fields are known. The primary purpose of this callback is to inform the application of the size of the image, and for the application to initialize the drawing canvas to be used by the library. This is also a good point to set the canvas-style. Eg. mng_set_canvasstyle(). - mng_bool mng_processtext (mng_handle hHandle, mng_uint8 iType, mng_pchar zKeyword, mng_pchar zText, mng_pchar zLanguage, mng_pchar zTranslation) This callback is activated for each textual chunk in the input- image. These are tEXt, zTXt & iTXt. It may be used to retain specific comments for presentation to the user. - mng_bool mng_processsave (mng_handle hHandle) - mng_bool mng_processseek (mng_handle hHandle, mng_pchar zName) The purpose of these callbacks is to signal the processing of the SAVE & SEEK chunks in a MNG input-file. This may be used in the future to specify some special processing. At the moment these functions are only provided as a signal. - mng_ptr mng_getcanvasline (mng_handle hHandle, mng_uint32 iLinenr) - mng_ptr mng_getbkgdline (mng_handle hHandle, mng_uint32 iLinenr) - mng_ptr mng_getalphaline (mng_handle hHandle, mng_uint32 iLinenr) These callbacks are used to access the drawing canvas, background canvas and an optional separate alpha-channel canvas. The latter is used only with the MNG_CANVAS_RGB8_A8 canvas-style. If the getbkgdline() callback is not supplied the library will composite full or partially transparent pixels in the image against a specified background color. See mng_set_bgcolor() for more details. If a chosen canvas-style includes an alpha-channel, this callback is very likely not needed. The application is responsible for returning a pointer to a line of pixels, which should be in the exact format as defined by the call to mng_set_canvasstyle() and mng_set_bkgdstyle(), without gaps between the representation of each pixel. - mng_bool mng_refresh (mng_handle hHandle, mng_uint32 iX, mng_uint32 iY, mng_uint32 iWidth, mng_uint32 iHeight) This callback is called when the library has drawn a complete frame onto the drawing canvas, and it is ready to be displayed. The application is responsible for transferring the drawing canvas from memory onto the actual output device. - mng_uint32 mng_gettickcount (mng_handle hHandle) This function should return the number of milliseconds on some internal clock. The entire animation timing depends heavily on this function, 1and the number returned should be as accurate as possible. - mng_bool mng_settimer (mng_handle hHandle, mng_uint32 iMsecs) This callback is activated every time the library requires a "pause". Note that the function itself should NOT execute the wait. It should simply store the time-field and allow the library to return. Libmng will return with the MNG_NEEDTIMERWAIT code, indicating the callback was called and it is now time to execute the pause. After the indicated number of milliseconds have elapsed, the application should call mng_display_resume(), to resume the animation as planned. This method allows for both a real timer or a simple wait command in the application. Whichever method you select, both the gettickcount() and settimer() callbacks are crucial for proper animation timing. - mng_bool mng_processgamma (mng_handle hHandle, mng_uint32 iGamma) - mng_bool mng_processchroma (mng_handle hHandle, mng_uint32 iWhitepointx, mng_uint32 iWhitepointy, mng_uint32 iRedx, mng_uint32 iRedy, mng_uint32 iGreenx, mng_uint32 iGreeny, mng_uint32 iBluex, mng_uint32 iBluey) - mng_bool mng_processsrgb (mng_handle hHandle, mng_uint8 iRenderingintent) - mng_bool mng_processiccp (mng_handle hHandle, mng_uint32 iProfilesize, mng_ptr pProfile) - mng_bool mng_processarow (mng_handle hHandle, mng_uint32 iRowsamples, mng_bool bIsRGBA16, mng_ptr pRow) These callbacks are only required when you selected the MNG_APP_CMS directive during compilation of the library. See the configuration section for more details. - mng_bool mng_iteratechunk (mng_handle hHandle, mng_handle hChunk, mng_chunkid iChunkid, mng_uint32 iChunkseq) This callback is only used for the mng_iterate_chunks() function. It is called exactly once for each chunk stored. III. Housekeeping > Memory management The library can use internal memory allocation/deallocation or use provided callbacks for its memory management. The choice is made at compilation time. See the section on customization for details. If internal management has been selected, the memory callback functions need not be supplied. Even if you do supply them they will not be used. The actual code used is similar to the code discussed in the callback section: pPtr = calloc (1, iSize); free (pPtr); If your compiler does not support these functions, or you wish to monitor the library's use of memory for certain reasons, you can choose to compile the library with external memory management. In this case the memory callback functions MUST be supplied, and should function as if the above code was used. > Initialization The basic initialization of the library is short and swift: myhandle = mng_initialize (myuserdata, my_alloc, my_free, MNG_NULL); if (myhandle == MNG_NULL) /* process error */; The first field is an application-only parameter. It is saved in libmng's internal structures and available at all times through the mng_get_userdata() function. This is especially handy in callback functions if your program may be handling multiple files at the same time. The second and third field supply the library with the memory callback 1function entry-points. These are described in more detail in the callback section and the previous paragraph. The fourth and last field may be used to supply the library with the entry-point of a trace callback function. For regular use you will not need this! The function returns a handle which will be your ticket to MNG-heaven. All other functions rely on this handle. It is the single fixed unique reference-point between your application and the library. You should call the initialization function for each image you wish to process simultaneously. If you are processing images consecutively, you can reset the internal status of the library with the mng_reset() function. This function will clear all internal state variables, free any stored chunks and/or objects, etc, etc. Your callbacks and other external parameters will be retained. After you successfully received the handle it is time to set the required callbacks. The sections on reading, displaying & writing indicate which callbacks are required and which are optional. To set the callbacks simply do: myretcode = mng_setcb_xxxxxx (myhandle, my_xxxxxx); if (myretcode != MNG_NOERROR) /* process error */; Naturally you'd replace the x's with the name of the callback. > Cleanup Once you've gotten hold of that precious mng_handle, you should always, and I mean always, call the cleanup function when you're done. Just do: mng_cleanup (myhandle); And you're done. There shouldn't be an ounce of memory spilled after that call. Note that if you would like to process multiple files consecutively you do not need to do mng_cleanup() / mng_initialize() between each file but simply myretcode = mng_reset (myhandle); if (myretcode != MNG_NOERROR) /* process error */; will suffice. Saves some time and effort, that. > Error handling From the examples in the previous paragraphs you may have noticed a meticulous scheme for error handling. And yes, that's exactly what it is. Practically each call simply returns an errorcode, indicating success, eg. MNG_NOERROR or failure, anything else but MNG_NEEDMOREDATA and MNG_NEEDTIMERWAIT. These latter two will be discussed in more detail in their respective fields of interest: the reading section and displaying section respectively. It is the application's responsibility to check the returncode after each call. You can call mng_getlasterror() to receive the details of the last detected error. This even includes a discriptive error-message if you enabled that option during compilation of the library. Note that after receiving an error it is still possible to call the library, but it's also very likely that any following call will fail. The only functions deemed to work will be mng_reset() and mng_cleanup(). Yes, if you abort your program after an error, you should still call mng_cleanup(). IV. Reading Reading a MNG, JNG or PNG is fairly easy. It depends slightly on your ultimate goal how certain specifics are to be handled, but the basics are similar in all cases. For the read functioins to work you must have compiled the library with the MNG_READ_SUPPRT directive. The standard DLL and Shared Library have this on by default! > Setup Naturally you must have initialized the library and be the owner of a mng_handle. The following callbacks are essential: mng_openstream, mng_readdata, mng_closestream You may optionally define: mng_errorproc, mng_traceproc mng_processheader, mng_processtext mng_processsave, mng_processseek The reading bit will also fail if you are already creating or displaying a file. Seems a bit obvious, but I thought I'd mention it, just in case. > To suspend or not to suspend There is one choice you need to make before calling the read function. Are you in need of suspension-mode or not? If you're reading from a disk you most certainly do not need suspension-mode. Even the oldest and slowest of disks will be fast enough for straight reading. However, if your input comes from a really slow device, such as a dialup-line or the likes, you may opt for suspension-mode. This is done by calling myretcode = mng_set_suspensionmode (myhandle, MNG_TRUE); if (myretcode != MNG_NOERROR) /* process error */; Suspension-mode will force the library to use special buffering on the input. This allows your application to receive data of arbitrarily length and return this in the mng_readdata() callback, without disturbing the chunk processing routines of the library. Suspension-mode does require a little extra care in the main logic of the 1application. The read function may return with MNG_NEEDMOREDATA when the mng_readdata() callback returns less data then it needs to process the next chunk. This indicates the application to wait for more data to arrive and then resume processing by calling mng_read_resume(). > The read HLAPI The actual reading is just plain simple. Since all I/O is done 1outside the library through the callbacks, the library can focus on its real task. Understanding, checking and labelling the input data! All you really need to do is this: myretcode = mng_read (myhandle); if (myretcode != MNG_NOERROR) /* process error */; Of course, if you're on suspension-mode the code is a little more complicated: myretcode = mng_read (myhandle); while (myretcode == MNG_NEEDMOREDATA) { /* wait for input-data to arrive */ myretcode = mng_read_resume (myhandle); } if (myretcode != MNG_NOERROR) /* process error */; This is rather crude and more sophisticated programming methods may dictate another approach. Whatever method you decide on, it should act as if the above code was in its place. There is also the mng_readdisplay() function, but this is discussed in the displaying section. It functions pretty much as the mng_read() function, but also immediately starts displaying the image. mng_read_resume() should be replaced by mng_display_resume() in that case! > What happens inside What actually happens inside the library depends on the configuration options set during the compilation of the library. Basically the library will first read the 8-byte file header, to determine its validity and the type of image it is about to process. Then it will repeatedly read a 4-byte chunk-length and then the remainder of the chunk until it either reaches EOF (indicated by the mng_readdata() callback) or implicitly decides EOF as it processed the logically last chunk of the image. Applications that require strict conformity and do not allow superfluous data after the ending chunk, will need to perform this check in their mng_closestream() callback. Each chunk is then checked on CRC, after which it is handed over to the appropriate chunk processing routine. These routines will disect the chunk, check the validity of its contents, check its position with respect to other chunks, etc, etc. If everything checks out, the chunk is further processed as follows: If display support has been selected during compilation, certain pre-display initialization will take place. If chunk-storage support has been selected during compilation, the chunks data may be stored in a special internal structure and held for future reference. > Storing and accessing chunks One of the compilation options activates support for chunk storage. This option may be useful if you want to examine an image. The directive is MNG_STORE_CHUNKS. You must also turn on the MNG_ACCESS_CHUNKS directive. The actual storage facility can be turned on or off with the mng_set_storechunks() function. If set to MNG_TRUE, chunks will be stored as they are read. At any point you can then call the mng_iterate_chunks() function to iterate through the current list of chunks. This function requires a callback which is called for each chunk and receives a specific chunk-handle. This chunk-handle can be used to call the appropriate mng_getchunk_xxxx() function, to access the chunks properties. A typical implementation may look like this: mng_bool my_iteratechunk (mng_handle hHandle, mng_handle hChunk, mng_chunkid iChunkid, mng_uint32 iChunkseq) { switch (iChunkid) { case MNG_UINT_MHDR : { /* process MHDR */; break; } case MNG_UINT_FRAM : { /* process FRAM */; break; } ...etc... case MNG_UINT_HUH : { /* unknown chunk */; break; } default : { /* duh; forgot one */; } } return MNG_TRUE; /* keep'm coming */ } To get to the actual chunk fields of lets say a SHOW chunk you would do: mng_bool isempty; mng_uint16 firstid, lastid; mng_uint8 showmode; myretcode mng_getchunk_show (hHandle, hChunk, isempty, firstid, lastid, showmode); if (myretcode != MNG_NOERROR) /* process error */; V. Displaying > Setup Assuming you have initialized the library and are the owner of a mng_handle. The following callbacks are essential: mng_getcanvasline, mng_refresh mng_gettickcount, mng_settimer If you wish to use an application supplied background you must supply: mng_getbkgdline If you wish to use the MNG_CANVAS_RGB8_A8 canvas style you must supply: mng_getalphaline You may optionally define: mng_errorproc, mng_traceproc mng_processheader, mng_processtext mng_processsave, mng_processseek Note that the mng_processheader() callback is optional but will be quite significant for proper operation! Displaying an image will fail if you are creating a file or already displaying one. Yes, you can't display it twice! > A word on canvas styles The canvas style describes how your drawing canvas is made up. You must set this before the library actually starts drawing, so the mng_processheader() callback is a pretty good place for it. Currently only 8-bit RGB canvas styles are supported, either with or without an alpha channel. If you like to do alpha composition yourself you can select one of the canvas styles that include an alpha channel. You can even have a separate alpha canvas by selecting the MNG_CANVAS_RGB8_A8 style. All styles require a compact model. Eg. MNG_CANVAS_BGR8 requires your canvas lines in bgrbgrbgr... storage, where each letter represents an 8-bit value of the corresponding color, and each threesome makes up the values of one(1) pixel. The library processes a line at a time, so the canvas lines do not actually need to be consecutive in memory. > Alpha composition and application backgrounds All Network Graphics can be partially transparent. This requires special processing if you need to display an image against some background. Note that the MNG header (MHDR chunk) contains a simplicity field indicating whether transparency information in the file is critical or not. This only applies to embedded images, which means the full image-frame of the MNG may still contain fully transparent pixels! Depending on your needs you can supply a single background color, a background canvas or tell the library to return the alpha-channel and do alpha composition yourself. This is different from the BACK chunk in a MNG, or the bKGD chunk in an (embedded) PNG or JNG. The BACK chunk indicates an optional or mandatory background color and/or image. The bKGD chunk only indicates an optional background color. These chunks indicate the Authors preferences. They may be absent in which case you need to supply some sort of background yourself. > Composing against a background color This is the easiest method. Call the mng_set_bgcolor() function to set the values of the red, green and blue component of your preferred background color. Use one of the canvas styles that do not have an alpha-channel, and which matches your output requirements. > Composing against a background canvas This is somewhat more complicated. You will need to set the mng_getbkgdline() callback. This will be called whenever the library needs to compose a partially transparent line. This canvas must hold the background against which the image should be composed. Its size must match exactly with the image dimensions and thus the drawing canvas! Use one of the canvas styles that do not have an alpha-channel, and which matches your output requirements. The canvas style of the background canvas may even differ from the drawing canvas. The library's composing will still function properly. > Composing within the application If you have the option in your application to draw a (partially) transparent canvas to the output device, this option is preferred. Select one of the canvas styles that do have an alpha-channel. The library will now supply the appropriate alpha information, allowing the application to compose the image as it sees fit. > Color information and CMS Network Graphics may, and usually will, contain color-correction information. This information is intended to compensate for the difference in recording and display devices used. This document does not address the specifics of color-management. See the PNG specification for a more detailed description. > Using little cms by Marti Maria Saguer This is the easiest method, providing you can compile the lcms package. Select the MNG_FULL_CMS directive during compilation, and sit back and relax. The library will take care of all color-correction for you. > Using an OS- or application-supplied CMS If you are so lucky to have access to CMS functionality from within your application, you may instruct the library to leave color-correction to you. Select the MNG_APP_CMS directive during compilation of the library. You MUST also set the following callbacks: mng_processgamma, mng_processchroma, mng_processsrgb, mng_processiccp and mng_processarow The last callback is called when the library needs you to correct an arbitrary line of pixels. The other callbacks are called when the corresponding color-information is encountered in the file. You must store this information somewhere for use in the mng_processarow() callback. > Using gamma-only correction This isn't a preferred method, but it's better than no correction at all. Gamma-only correction will at least compensate for gamma-differences between the original recorder and your output device. Select the MNG_GAMMA_ONLY directive during compilation of the library. Your compiler MUST support fp operations. > No color correction Ouch. This is really bad. This is the least preferred method, but may be necessary if your system cannot use lcms, doesn't have its own CMS, and does not allow fp operations, ruling out the gamma-only option. Select the MNG_NO_CMS directive during compilation. Images will definitely not be displayed as seen by the Author!!! > Animations and timing Animations require some form of timing support. The library relies on two callbacks for this purpose. The mng_gettickcount() and mng_settimer() callbacks. mng_gettickcount() is used to determine the passing of time in milliseconds since the beginning of the animation. This is also used to compensate during suspension-mode if you are using the mng_readdisplay() function to read & display the file simultaneously. The callback may return an arbitrary number of milliseconds, but this number must increase proportionaly between calls. Most modern systems will have some tickcount() function which derives its input from an internal clock. The value returned from this function is more than adequate for libmng. The mng_settimer() callback is called when the library determines a little "pause" is required before rendering another frame of the animation. The pause interval is also expressed in milliseconds. Your application should store this value and return immediately. The library will then make appropriate arrangements to store its internal state and returns to your application with the MNG_NEEDTIMERWAIT code. At that point you should suspend processing and wait the given interval. Please use your OS features for this. Do not engage some sort of loop. That is real bad programming practice. Most modern systems will have some timing functions. A simple wait() function may suffice, but this may prevent your applications main-task from running, and possibly prevent the actual update of your output device. > The mng_refresh() callback The mng_refresh() callback is called whenever the library has "finished" drawing a new frame onto your canvas, and just before it will call the mng_settimer() callback. This allows you to perform some actions necessary to "refresh" the canvas onto your output device. Please do NOT suspend processing inside this callback. This must be handled after the mng_settimer() callback! > Displaying while reading This method is preferred if you are reading from a slow input device (such as a dialup-line) and you wish to start displaying something as quickly as possible. This functionality is provided mainly for browser-type applications but may be appropriate for other applications as well. The method is usually used in unison with the suspension-mode of the read module. A typical implementation would look like this: /* initiale library and set required callbacks */ /* activate suspension-mode */ myretcode = mng_set_suspensionmode (myhandle, MNG_TRUE); if (myretcode != MNG_NOERROR) /* process error */; myretcode = mng_readdisplay (myhandle); while ((myretcode == MNG_NEEDMOREDATA) || (myretcode == MNG_NEEDTIMERWAIT)) { if (myretcode == MNG_NEEDMOREDATA) /* wait for more input-data */; else /* wait for timer interval */; myretcode = mng_display_resume (myhandle); } if (myretcode != MNG_NOERROR) /* process error */; More advanced programming methods may require a different approach, but the final result should function as in the code above. > Displaying after reading This method is used to display a file that was previously read. It is primarily meant for viewers with direct file access, such as 1a local harddisk. Once you have successfully read the file, all you need to do is: myretcode = mng_display (myhandle); while (myretcode == MNG_NEEDTIMERWAIT) { /* wait for timer interval */; myretcode = mng_display_resume (myhandle); } if (myretcode != MNG_NOERROR) /* process error */; Again, more advanced programming methods may require a different approach, but the final result should function as in the code above. > Display manipulation Several HLAPI functions are provided to allow a user to manipulate the normal flow of an animation. - mng_display_freeze (mng_handle hHandle) This will "freeze" the animation in place. - mng_display_resume (mng_handle hHandle) This function can be used to resume a frozen animation, or to force the library to advance the animation to the next frame. - mng_display_reset (mng_handle hHandle) This function will "reset" the animation into its pristine state. Calling mng_display() afterwards will re-display the animation from the first frame. - mng_display_golayer (mng_handle hHandle, mng_uint32 iLayer) - mng_display_goframe (mng_handle hHandle, mng_uint32 iFrame) - mng_display_goplaytime (mng_handle hHandle, mng_uint32 iPlaytime) These three functions can be used to "jump" to a specific layer, frame or timeslot in the animation. You must "freeze" the animation before using any of these functions. All above functions may only be called during a timer interval! It is the applications responsibility to cleanup any resources with respect to the timer wait. VI. Writing The main focus of the library lies in its displaying capabilites. But it does offer writing support as well. You can create and write a file, or you can write a file you have previously read, providing the storage of chunks was enabled and active. For this to work you must have compiled the library with the MNG_WRITE_SUPPO1RT and MNG_ACCESS_CHUNKS directives. The standard DLL and Shared Library have this on by default! > Setup As always you must have initialized the library and be the owner of a mng_handle. The following callbacks are essential: mng_openstream, mng_writedata, mng_closestream You can optionally define: mng_errorproc, mng_traceproc The creation and writing functions will fail if you are in the middle of reading, creating or writing a file. > Creating a new file To start a new file the library must be in its initial state. First you need to tell the library your intentions: myretcode = mng_create (myhandle); if (myretcode != MNG_NOERROR) /* process error */; After that you start adding the appropriate chunks: myretcode = mng_putchunk_mhdr (myhandle, ...); if (myretcode != MNG_NOERROR) /* process error */; And so on, and so forth. Note that the library will automatically signal the logical end of the file by the ending chunk. Also the first chunk will indicate the library the filetype (eg. PNG, JNG or MNG) and force the proper signature when writing the file. The code above can be simplified, as you can always get the last errorcode by using the mng_getlasterror() function: if ( (mng_putchunk_xxxx (myhandle, ...)) or (mng_putchunk_xxxx (myhandle, ...)) or ...etc... ) /* process error */; Please note that you must have a pretty good understanding of the chunk specification. Unlike the read functions, there are virtually no checks, so it is quite possible to write completely wrong files. It is a good practice to read back your file into the library to verify its integrity. Once you've got all the chunks added, all you do is: myretcode mng_write (myhandle); if (myretcode != MNG_NOERROR) /* process error */; And presto. You're done. The real work is of course carried out in your callbacks. Note that this is a single operation as opposed to the read & display functions that may return with MNG_NEEDMOREDATA and/or MNG_NEEDTIMERWAIT. The write function just does the job, and only returns after it's finished or if it encounters some unrecoverable error. > Writing a previously read file If you have already successfully read a file, you can use the library to write it out as a copy or something. You MUST have compiled the library with the MNG_STORE_CHUNKS directive, and you must have done mng_set_storechunks (myhandle, MNG_TRUE). This doesn't require the MNG_ACCESS_CHUNKS directive, unless you want to fiddle with the chunks as well. Again all you need to do is: myretcode mng_write (myhandle); if (myretcode != MNG_NOERROR) /* process error */; VII. Modifying/Customizing libmng: to do > Compilation directives to do > Platform dependant modification to do References : libmng : http://www.libmng.com/ zlib : http://www.info-zip.org/pub/infozip/zlib/ IJG JPEG library : http://www.ijg.org/ lcms (little CMS) by Marti Maria Saguer : http://www.littlecms.com/ MNG specification: http://www.libpng.org/pub/mng In the case of any inconsistency between the MNG specification and this library, the specification takes precedence. The contributing authors would like to thank all those who helped with testing, bug fixes, and patience. This wouldn't have been possible without all of you!!! COPYRIGHT NOTICE: Copyright (c) 2000,2001 Gerard Juyn For the purposes of this copyright and license, "Contributing Authors" is defined as the following set of individuals: Gerard Juyn The MNG Library is supplied "AS IS". The Contributing Authors disclaim all warranties, expressed or implied, including, without limitation, the warranties of merchantability and of fitness for any purpose. The Contributing Authors assume no liability for direct, indirect, incidental, special, exemplary, or consequential damages, which may result from the use of the MNG Library, even if advised of the possibility of such damage. Permission is hereby granted to use, copy, modify, and distribute this source code, or portions hereof, for any purpose, without fee, subject to the following restrictions: 1. The origin of this source code must not be misrepresented; you must not claim that you wrote the original software. 2. Altered versions must be plainly marked as such and must not be misrepresented as being the original source. 3. This Copyright notice may not be removed or altered from any source or altered source distribution. The Contributing Authors specifically permit, without fee, and encourage the use of this source code as a component to supporting the MNG and JNG file format in commercial products. If you use this source code in a product, acknowledgment would be highly appreciated. Remarks : Parts of this software have been adapted from the libpng library. Although this library supports all features from the PNG specification (as MNG descends from it) it does not require the libpng library. It does require the zlib library and optionally the IJG JPEG library, and/or the "little-cms" library by Marti Maria Saguer (depending on the inclusion of support for JNG and Full-Color-Management respectively. This library's function is primarily to read and display MNG animations. It is not meant as a full-featured image-editing component! It does however offer creation and editing functionality at the chunk level. (future modifications may include some more support for creation and or editing) libmng-2.0.2/doc/Plan2.png0000644000000000000000000002122112005307152013701 0ustar rootroot‰PNG  IHDR XÚ¯BÔPLTEÿÿÿÿÿô™3ªtRNSÿÿÿÿû¶S",IDATxÚíÙ¢¥ªE“åÿÿs=ÔVAz¹uëÔn\'ÃÐG´ƒÉª…lU Ùt»~RýB:x¢âþ×¼ŒŸèï÷«\ëœke/äRÜ}Šä’ϨHA!"*"Ráq‰ˆˆŠ<ö$­$Ñæ…<Фè˱…T,Sã…ˆŠªüQ±×;Õã?º×Ÿ¿ÞUHOÞRˆ˜–ùå#OŠ_õ̓ش…ä©~"J Iðä?Þç¯_›ô—ÒÇ“€ão1ãà'1ì¸.RÅíñ¸j¼btÆ×Š,]È¿DÛ‰¹…œo•O$·¾yן7¡WYBÎæG´ý¡¿nµ£å;5Rˆç˽$=ÉCËòDv×ùgÿ «™RÈñö7—R¿-|y„o³1ï.}ã´…üuìw×þx‹'RÏIzwÍÿ¸|ﮤVÓSO†5$dBö†­ $ cÚ[x'£gC"ì‰ £5^¡jF{éxŒwa”Ê­•¤ÇuãÉÙêImHÄaôޙ؅”ÍÕ‰ñE=–ÿã­mIšíæËõ Ùš²E<Ù¶mÛ¶êžl›þ}êòšT/d3íæËegL—)äEÝx\«òëUÈï×Òýý÷ó 9ZµOnJ²¯¿»™¶ÂKB€±M!V/HD­ŽÑ>‚lýTEФ]!ÕfeÑdÞBÄ~ä‰3"ÎàÅ9“±†&Æ…3¼¨’:¾(V!ÞÏYáqÍÊB|y!rƒÖÃBÎ9Ä~ëœÚh©IÚ§;Û_þ­Êð¯*»y3<ö$­ÐËf¡'Á—¿X·k«¨ÌýîÊn0ñî*}wy/%­™ù<‘êžÈòÂWŸ•Æ*UøÊžˆVaÑŠKÆêzñVC?½!QàgYøÕˆ'FK.­!‘£xúôœdÆøö³²¼»ü¶-[Èß ièg-<Ùú<®%kWάlO^#I;qäqm?—hl(RÝ‘m€¥8ò{ƒfû%hñŸ¶³›»úsdßPþûÝ­,)£DWG¤¨«˜èHZ_ª†"ÒV‘›‡xÙ[8²jûG·ŽÔvÄîkä€ngÉKú[«M£Ñ8²¯—"õq‡ƒŽ¤LÉmÇÊ9¹Ä×±2vçK¼ÂŒªZéŽx’´x³Á‡é‡ƒê:’¦H Uç™›ª‡øš®.}ö3 ¾Ã¦qd+ü)Ž4wÄÚj1³#ÿO`ݲ9ŒÝ¬“ie˜[ð¼Ž[™6#›»÷¦¯Z1G€G>qGtÑõ9voÛâŽì¡zÛZùÒ©j½Ç`Ç‘$rçÛ—ÿªÈþŠ^ÞÖZÝ÷`9—-'ÜÕYÓþãHSïgq¤8ÏFÞ]½Æ‘ưËGŽ|~2ìâ[¡—áˆLãˆoúûaÕÒÑŽ‹Ú¼kµq¤&ì¯qd¡ŸâŽ´þéü7ƒ#gÜ?÷9«ÎDâœ&¤ÎQ;î!Üb<$’qÒÿsE|¥ÔÎ}:e¬Ê2ò9â8ØÕ‘ëº01²gŸíŠDG¬¦^G€GpGVq¤d`³à§í†5êv­æˆàŽàHGFE÷:âŒ/¬ˆsBí yv&º\Û2ׂä¯|IØkŽ胴lµ1æ"ì{§C/—sOìKs“tuwÄØÑçqDŒ„^cáõ;›#çðœ›ýîdăó…‘ì, íϱ’ìrDŸd.î™y9ÇI}•GV-} #8òRGŸ0вlQpGpäîWì£LUŠÒªÏáÈñé‘@Õº_C×þô“4GœêsÓ\]Ư#±³bgq$ò+î™Øâ=IïÓŽHð¸Äë1NâÞ“õ½ä8rÿšJuÄ8²×y[ bý?5WŽˆì]IcD½Œ[ÊTæpD9b0â!´Êʇ”9ĨÛÖO/kܬÃbÄ û,ý¸IfuqdIG˜gOКý×z#[³ŸâޤýÔ“pGp$åVÿ§utn.‹‘ÍþÆ G¶móe×L¼ÖÍn9T‘MÍÄÖOÏ´Ž[È‘mGb?=ït[ö×8BdÇ‘/;M¹UòS:V‚ H‡WÕ»lA¾Q»AfäìÿïŸÿÞdˆ »Û‘ªû”AF²Ù„ìÿBb‚ ‚¬,† K òã9La?YY’\*y1Já³²9Vžÿÿ AF ¢ÇÿŽÿ ‚”<óœXQ‘å_Y† ¿eÑóè^YSoÔ7ôXQuá\]`+KÄÞGiÔF!†$u.Ò]ëI©ý>Uw^…~HâN-ùˆ¤ú%/CÅÒå8K­~ A&ϪãÐI þ+^;½ \‹ ÂCí,Hÿwêº×>{Vý&¨¾&ÈC›@ žüv—ù8†_;AÚæc"ˆÙSÕpÇÕtÝ?P#ÆPûùQFªzµŽEò©—²íkÃE_ EwX"C-Då%‚\B?÷DJ Õ,’0¨éœ+&êû< ¦J¼ÐwÄ‚:‚ ‚ ‚ ‚ ÖÚdjAJFs±‚ôgb‚ ØYq¥É»ùNß㉠ƹ÷‚ #ñN"ÅS#‚<|¨âCýîÚËDš zeÅæè: œCU¹{¨î¥ášu¹6:sk§^úZPw‘h;Oý‚‚è—I.+ø„î0\k_ê_@³—fÈã‡*ù‚H¹/!ƒú8Ç3'AÝ êR#¨KQP—.‚Ìd’Ûc ™Z/uAYE‚L-ÈÂ3m/dÝw/‚ ‚ H© áY5A‚„7sгR÷sŠ°á‚ØGE>¸R«m±õ]^AâÖÞ½Ü,†Ôú¼¥Ï:‰ r_#H_A‚²ÿDük‡Ô<Óø$ Arɽ?ZçIƒ;`*2NcåŽÓû â¹7¹?Òã Ñîišz­çTÀa"õCä¡ F]y(Èþ¢~&Èåê‰4ø$|hL´ 8k® KxBë ¢OùR i÷Ê ­pçA]î)6-ÃÎ~^Ü÷ˆ¿#ObÈÜAA²Ñ"AôÂØ/¿‡A½dmXÚµßd© Ž ‚ «òQC× R{]ÖG×yU¤iO½Õ- ‚ ‚¤t[“ñN ß y ˆ“- ‰ÒÖeEÆ Îé`y*ȃuY)‚‚CA ^Yö²+97„g¯í¬!¨?Œ!ê êÆÂ¬'‚(A=_“‚ žñ¸„‚ ‚ ‚ Ê‚` ‚Ìt’3†ºêv„ÇAé+ˆ?Ïo ±\À¯Ý§þ\øÐ¬:»ÜW-»'‹£– ƒ‹ßÞ°“$ˆ ¢×¹á· r—€ƒ¦äÜqþAΙ›Ì‡*÷A­Í+Kr_YÒ"†˜“ŒÙ3†Á$5@x¨¡—ñýéÚ‘ î”Ü>†h@ÍÄCÔú¨‚w7H È倦‚ nLC–õä¬Aák)é¼"¥¯¬t Ù§¾RPÏ]‹ Uù`P_I#"My£MCR2u AA¯ ²˜!Ȭ‚`K¿e1yjÛ|íË)¸dе‚ ‚ õꦺm¡ÏE‚lÂ+ëÅ‚|Ûß>íÙöR7£Ô AþžÍCA¼Òf b–ºmRôÚ1«¹ñ‡WÖ ‚(‚L!ˆ÷ ‡ ´²AAó‚ † ‚!‚`Ë ²}ÄÖä•AAA–ÄXY{|gC‚x&½ýS­2JE‘1äºA ²)„Ì.ˆC7{·¡Ml¡‚ ‚ ‚ Ò[&¨æCÁ* òÃæ0弬© A«&Hï”L+Zé³Ê¤ ÷‘¦\ñ¦– ?ýE…A‚üþþ¯úûí!ÈHBŽñÿ*‚ ‚¼I çAQ‚ˆ•/NAFέ·`+Ëä‡ Ã wædAÖ$D® cßCHVk%˜|sT³Wú5A™[cád=srG: ýñš‚ˆ¹¢Ð\ÔæYóÿîÊ ÏÕcFT®OíR¤œËäËA4.ˆ}õûÑAœ£ç³Ùé¸DMA|PùQ ÆÕò˜…WW Æ;Aö½?š€ FØrcˆ„bH¸h·ÐÕ[YöÂtIiÎDÖ²'-ÐÛ·V-,ȗפà’Õ†ÜA¤¶ ÆæA‚X›òÌ€ƒ’¤¹ —]NŠ  rn@B©ûP}ÛÏî® l@ì/ˆ½µîº¯k  rÙ¯vý‡›˜àð@|™ Ì\·§«Bi×VÖ]‚š‚„w]:ÙZ|ûš½‚hŠ 7ÛLG 2A?Ä÷hô¹ úTg30‚ˆ¹É€ $íëVU±ÒEä"Æ¡Ÿ$¹¬ÈÙ@·©Ú‚×Z—ú-b,‹±,AYN‚Sä$[)ˆm¯ke Ãé;†C1Û¼âë‡Üe…;†šßS‡{Azv -5:u 'ÚŽP¥§ž^oœÕÛsc« 2“Eò~§Ù;· ì‡ ‚ ‚ ‚ ‚Ô„íØ † ‚!Ȫ‚¬ ß)ÈÂÍEAAAAAA‚Hðá ‚ô$˜0Rœ”€*ׂ‚|TµQ™‹Ý—ÉÆ‹«56¶ÚDW’ —à,7A=°©>'Mi­VÛjSÁ^A¢5=–È·b³A’E)Që(™è•%©‚Hh'1‚d rœƒ7àœzfÖbï²y$Hî ÄÛ½N¿A ¢zîÍSïá2ˆ w—"ïi¹ë‰&]|éã5ÄCŽ-—g#­¯ ·«ØCu·ÕY‡ÑÜ]:›Ï½º æ-H —?ª•Ä©³/¤o?DJQsŸt¶ ñq¯^B«!mšh»VøÊ’焨”b]½ˆ ‘ÇhTÕŒ žÞž¨zfWâµk b·Yhö"ÈgÙŸ¾\{û‚ ZYÁSn¾»äON+ óZ•È­N»¡A?Äj¯Y]ÛcÇGd¯Í›k­<òÿúëÕWAf2zêŸä²Þ"Y¹’#Èåj©Aˆ¢â!r®‚œ«Ë$‰#†X‹?C¬öÚÓžzÁ™]‰§kN¥ú!‚ ‚ ‚ ‚ õa;6ƒ!‚`òEAªOP}ôü­z‚T¾ä«'C ‚ ‚ ‚ ‚Ì ˆ HÖ ç`NÄ·³×ŸáAÜO5—wˆŽ!=õo ¢¡~HæX–%ˆÒ1œ¸§NÇð± ÇÉתO0K;Š A½·¼«ëy ‹ 2ÜÊ0/€PQ@¨¨ TT**€€€å€P.€å€P.€@„Š o„4o.@0l   ëÈG:aöå ‚€` €†††HWcQâ§æÃdÎ;fY;€€€€€H¦Ÿv‚’˜-ÅÈ'KÔ ò5@ô€ãø!‚€<$–êÒ ¶­¨I½ÂÒr®÷~à›;éE¾½c2øoJؘ>¿cþíüÒ³Šz÷®’1ý¾ÜÂD¥²æ}9 UsL—ò‡‡™x·/ ¢—¼º{¶gq“Ëš¦; ưÉþ ñþ€HîDM$’{… ›XG¯b÷AŽ7úþý¿:R H‹§ù¤ÜäY°Hƒ;>9xìüò^@^UQ@@äÓ€˜#XM˽v¬Ò®)ìø7Ãú§'ωÂcôÊjU /”¸ùN¤ÔsäÁøãËsÌ@¾Èt…3ΤŸD1Ì þjªÃ' %¾¬ÒDáeßž(¤‰ —‰Â ,ƒfÒ‡F}U!ýAM@.jâôÔIw^íÏû ±Rƒ}ã~^ÒÁJb^©àÞ±¦'”)ÕƒÖ›F±°‘R2     ‚€€€”IIúÒ`   Ö:…6árw–Ùc € ‚€`  ‚}ÿ2ñ«ýYª1l=@nð»œÛg~óø'šñcÁVäÉñKvŒˆf Øw_Åw3ä)€`D Õ"ÈlkÅØÀÕ´Üz€Üwšg&’ØQ½ôAœ+*2×([€›–› HI§ùÒEΡü$òNmS­@ü€¯h* ±´¢×‘ÍJå&z¬Ù¸×dH|5 ’€¶ f@ï È}Ù2 U»×Š CQéÈã¤áw³ é}XfêG€¸‰© wí$îuñg¦ö¹.@¦$Ü´©7ŠeÎXÕŒ› ŸU!1õ“rkäF¦{ò6˜ùJ9>Íæ@ÞÙIÏü`©?Š ½!ýÁL²Ùý$}@yE5×®vÄØxñà©’@çu€¤5û$}Òìñ(Ö»' ±r™1k]§ê€¢:n¢ð¶l¡‰%¾½Ò#fÒkOæÌ¤Lb¯é¤7YÃÜzçfQ¹õF.äó£X½F“Ö,@@@@@@@@dY@Hð¡rÃ"   ö@æß05÷ýa¯dîRf¿? @Á@@@@@@d@,ô´Ž˜ êæ¤ÃĪ7yµÜ³üÍ„ìÇõj%Ý2?£" ÏçÍ;îõÎNH©‚½À/øQß!aݹþý0³ åÄ{P™Ž êOO R _ÄMùlà-Æéš×cM;éj7€H^ÕÈÈ«•²–a^ì]€LS €€ ‚½¢#“ªŽb%ÎhžS–"v–[ì Xm˜—‰B @fI—È<k±d@tÖ‰B"€ÌÐÄRõ¤kˆwFSÝ)ËãBú R«“žWiFMfÌh2Š ³V †y1 @Á@@@@@šU Òþ@0 @0 @0 @0 @,@¾– žN:– Hò‹öÍV-·ý•ó•‚€` €     2›«íC€†òôèˆôR¾6_չܩ)OSèÉNXÈmþ4däI äL,ä[‘¾s¹“Ríì8÷ˆ¶º€DOçj|ô(€H…4…ƒ1¢És@FDÿáŠã!‚|[_|Ÿ˜ȃ4…žì„ÍñE±³Ãá&A·RÐcŽtIs@všÂ&Õ*©ìâ³GdA@žö˜c æAä€D{Ìb'!!‚Ø}"Èt€XIάoö2›Âõžì“ÊÉé1Gº¤MgÒ'¤¬úüflhMsÆÓ2Ÿtî{ô¦èt…“úȉӴ5F±ê¤ÁøÊ0oÿ‰Â( î]½š3“Þ¼÷vS@Œ²Gr3vS«6DúÄ2ÃñÝϰrS4¤K«ëDaòLzç‰ÂvMáÄK¯ÞÞÆc@B}ä›>ñZ€4BjÛI/¿M†y Ë-ì#¯ üÂbEÁ€\'GZëôäN@ZbE·9^Fý$wsð“r/›+å®hV€0Qøúa^iˆx©£SZ=•Ô¢Û"Æ·@&œIAì'Pé"ìiî/­¢Æû Ækµ2 ·}›¢Û5±Š' ±5, ¥Òµ¥O#½Ø iíÅ QÒÂ(‰õò1@ÞÓžf Á@°,)I0$ý†a‚a‚a‚a]Á0ì4 Ã<ƒ…<  OÙÖÉ>^.€¬ ȘR>V.€€€€€ ‚€`¯äÿïn›ê–y»‚} ÿ 4±0¹þ®ù@0 @2®þß=ß6l:@Ü—÷9¬”8°´Ä0oì–l_o}¯òeêþgÿe´VÏ2€lm{Ä2=Þ}½÷@¾Aþ×;ˆ˜DßA¼<€Aä !Q@ÞAÜ"€¤¼ §$uD«U¹éƒ˜ß­ÞÄ UU§Ú>¨¨‰}_Ù}Mñ@¾ÓéßÔñ²Ý¼à§oÚ€´ÄÛ? @B¤ n@°7ò¾r@@@@@0 @Á@°!€þ€ô6ÖÃÃêÛ?4%³<]<ÞIEND®B`‚libmng-2.0.2/doc/Plan1.png0000644000000000000000000002154212005307152013706 0ustar rootroot‰PNG  IHDR XÚ¯BÔPLTEÿÿÿÿÿô™3ªtRNSÿÿÿÿû¶S"ýIDATxÚí邤* F“òýß¹t•²‰'wnÏôbcü8„Eˆh“§²Õ(dÓmÓmk[ˆê¶mí é𸠄ÿ4/ã#úù|*×:çZùr*è~!¢"²âü„\"ß"9žT‡TþïUDE¥U!/Dö'Y±j'{Rð©È÷†[’àÉþhEŒëĪ{ßÇ~|W­¶`,á+çÓ«B Žº©á[06ƒ'í Ó2?-òävSß<ˆõ-D.›øBÕ =).DÄn!­·ZMŒ ¦ýé0O® ‘ÿhs4,òmTÄ RÁBb … ñÝ–¤y¢=W&FglVäy…¸¤©ŒõDrëÛ·oÙ!ØQ‹"…]"£;í"ž~‚¿éN+¤ìq9¬ì}_³âGKÜ®\¸åÍíAjEáç(äü3Z³1m—–Ô®¹ ñ 5Džç‰œÇ§nÏ¡B!ªá_øœÇåk»’zM¥ž ëHÈä…¸¤ù`¬Õ ·ìHh`|’c;O~ÀJpFâ÷i¿Ç•БˆÃØ Æk¿B2c|{{Î"Ívñéó Ùš²E<Ù~ËEu=ù­t- IõB6Ó.>}ìŠés Ù⫲5 ÙФ]!Ÿ^…|”ô›9×GíÙ´ØmIp¸·&û$‘¿i\ˆãÞGTáoo‹ÝVçÔWG­¡Â”ÍŠØ7ë¼´àøiÖ§ž”α~\ÕVe Z¥…ˆ,áIbÛ+áÛ“X¸›Kx³éVs¥Ã™Þ ’6¿èòTNn­ÊÒ¬”â’T·‘éçÉ·W" áúÔ–”{"žË=ß+ävï×î餢åkœ$µ~H:2oÛ•ÝazaÛ%Õ ñ÷5åë✞C›BX»ª¯Ê.ãµýÐ!iÜ/òˆÇåÔ›@ˆïÝáþM[‰DÆE}×íUÙgØãÛ¯Ê2òÛöØBb«N›Q¤Ôôc[FøÚ…ä¬ÊöñdIÚˆ#åwòßþd¯~£HvkÒÉRù¬`Õ~ Zü»íì⮾Žü6”>WoÈQBNƒ½G*ì?úYvß,S4RgÐeOÑíŽÄïÂ^Iž1n§82YÕ’c»•±ŒxáˆÈ±K+²¡sŠ~VeEº|WäxºiŠLêHEÜ»1ó¤N¨å‘órqlêªJßuDÃŽÈiI^<WÁ×±œU¥–ŽLTµn:²7g¨‘#ßÞ#8rQO¦Û—¿Td_â€ÅûZ;)áçˆ{°Àœ¯-'ÜÕQÓ¾ §v$r,óñ¾Lv¤JŽ»ßÁqž×6‹ªVØÃNŽœOÌ(qDÕZjSiÃHø‹¾‡71ì.éäˆï ŽÇ;¢ŽL÷ ùþä~ ŠLáH#‡#žS‡Þ{ëïé@pdE–©Zƒ‚˜=¨PŸÇ8š×w­yL”·ÙÏîÝqdoŸCŽx²wìùú\£1:µ¾›‘ó#?9¢QG¤‹#sÔsq€W­sí±Î’ ¿~[0üªáˆFZž #šàU Gpd¬#w&6o|W›=„©l-GGpG‘úÙÄšGµi×’ãÈHG¢hÞ>‡s¸[A(Ñ}Š·0WÉí V3-ñxFpdQGÍŸ0‹òØ¡®àŽàÈþ‰/½œ»KpD"Ž”Žz¦S$êHûCC:1‚#õ9§2Æ —÷,G¤­"^Ú3‰üÄ&ZúT­tGŽál\‘AŽLÈ­§<Á‘³ðF<–ó{Rm‘¦Žx©2z=g 6Þ÷fÆ–×täê·ÎùúÇ|‘Gu$¡ukøfóZÏsDñLpä ŽÈìŽHb÷£(•|_G¢Ë­nb¢ö ™¹jíÙ£$:qo÷}?FôÊ‘¥®-WmE€GÞèHê¼V•wŒX-刬ÂŽLëˆÈ*ŠD=J!û1½–§å‘´•„_wc½Â‘²‘ŠŽÈ8GŽŠã[øµ†VÉ#D∙{:],ÚL!J¬%pï"»~BëÅÉO"E‘‹ße§²ŸH’ëˆÈpØG©åRyC«µ€#uÞ|HYCäfçqŽàH¹#¬³'hÍáÞÌk-àÈÖì»8‚#ißÝÎWpGRnõ›uh+gd³¿0È‘mÛ|Ù5¯u³[UdS3q£õÝ#­ãrd›Æ‘Øw;Ýž û2ŽÙqäÍŽDSnÝù.+ A¤CSµ–=GwÔnA¹ÙNS[׺€ n¤ÒÍš³0>G‚Øj È1d¯„ Ž k‚!È£ù𦰂T’Ø×Í®ƒ$?˜¤´?‘ßk¤EÌì·@%¡á}|öÓ÷PÏÙX$Cð8 E«É»»½Êg ï^‹é>JI¢S©+ âo=z¶å±”×UÊ}ž ‹õ‡ ’t˜–\H%ÖØ'fAì Í‘Q¯µø&9Õˆ9Þe»« îÄŸ¥Iïöþ–Íf "áD.‹{aB AAY_ Až/ÈÙ\¬… ýÛL A«(ÈÕyÞÍyâ›&½1Ö[; òž±G® ÁU Ȱ‚ K bL×ç^kÌÐËHA~Ù¢Ü% 'ÈUvêëuôpëÄ}\Æ ²¿¢zùÊL'A´PÛۂŒ#Ą̈7ƒ ccHÂú=1„ > ‚ Éî»z¨ç—NE|©qƒo­ŸÞ39¿ñJAôŽ ‡·\îÕl(ÈL–²+.Ag7Ys òâ Ž ‚ O䥆 S òà•¶EynÛ‹ ‚ bï™AØÊŒ¦o!n±ý A ÑAjõÚö~Wû"…MV­&ðÑgÌÔDÃÇÒɽ¹+ˆ»¨ÞLî]J\ãËDRüì–O7ÎÚò¶3ÿîO‚=®Kú‚´ êÓ rj‹5›· 5Ú³· AAK7YVÚïe½ô=¯Š‚L:u‚ ‚ 2BIOóŠ Z?µƒWðñàÒ_Ab‚ HAäVFÊä·Š$ötãr³QÏrôéÕ¹D+ B“E AAAž‚`²¾ 3äÀŠ¡®ù²5‚ ‚¼GË%ž‚HÑï[kŸú-A*/PéEÛWìS¿>Ê¡³ ÑÝ  Ï:áÝ^eáÄ‚œ_n#k'ȽÃe œ š%HZV›kAΧèÙ3Œk²bùÄŠ–p‹±Òã\wå“„sÊ\â= ã…1D¬¬4§=£¦Ü 5ø(‘‹$ÞÔe@“E/‹n/‚TdECAAy‰!Ȭ‚`ne1)µ­À_»¸ 7.t-‚ ‚ H½‡º©n[è÷"ÈA6¡ÉZX½‚o¿Ö§½ Û¯ÔÍ(uCï³)Ä+m¦ f©Û† ·š³šh²fDd A¼-‚ÐËBAAÌo‚ ‚ † ‚=Ví%öAÞQ¹AAA¤v1{gëZäÔ»>ÿñ/~#È(AAFÆó«!2PM!dvA”2¸Û»ìc#ãAAÂÕ\‚`‚ XEA>ئœ—5•!‚`Õé’é‰v÷Yå r£÷’®ÜíM-A>ú‰ ƒ #ù|ÿWý|~d$!{‡øÿŸŠ üý%‘È“@Þ‚œS!ÈXBÞ$ˆ•®Lü=)ˆ:©³Z "‰iYš båö³²LÓ‰=J#ÈçZï¯+ˆ:‚è`AÊzYáÁ|T¤ô´½Q7a®ÍIëûh/H!æ¤ÁpB4ÞdéÓ ÑTBèeÍ ÈÑH ˆ×_ =Ci$㨿"f³>ué Hbö]é)È.cù) NoÃøÙ®‚¼m*1s"ßD®~ⵯùbˆ¹é­rŸ $(×Óñõ‚d<…Ú‚(‚ThÞë ¢‚ ’]öí×b{­gÎïô`ä¼r3ó8d™k­¶Ãíp!È‚Ë42Vß×!dB”&ëQ×"‚pm=AjõË+#khÁE7Ùgí‚Þ¾%’PËbõjÌÛw;BÅÉ61ç:ÿR‘«WB‚üÏuŸ^Häÿúýc•FĶA‚ˆ)H%ˆo‚:]ãWˆ®#ˆ=öÕE Ñ AÌ·„DDU³ Y\ã7éÑd¹¯mÝd¥&Ë!Þ7‰2 /]ú1ßE÷ìØ¸ êß²’ ¡O¿î§Dn­J¹díq‚ ‚,$HÒ¶¦‹#¥£mµC¹ ˆ;É1ŸvådbôÊ´ˆ ×»±ÖDsÙGí‚ÿÈ™Ë2Ç…I3cDs1×Þ²ÙÇ ’×dÙ,‹®NHn“%J“5G/Kn\{}1Ý^º½‚ ‚ ‚ ‚ ²Š /ÛŽ0½ ‚ † k 2"ˆa1Ató0A ACAñ‚ˆ»°— ošPÌÄ¿›¦¹ 7.yÚ”{6!ÎC‚ ýAùzY‚ ‚ ïD¼§&]{¼ä.£IØxÖSôƒ_‚„÷Ù\ bÁ:Fw/Ä~nËHA¢y¤â;Ÿ$Úa¼$íÔˆ¦‚8;iBÏú ¢7ÑRA"ÛŠ:¢†ûû‘ò2X-$Ętx4!êc4ž!‚1Dg Dö£¿FƱÝ^ +F·—q‚ ‚{‚ÔïözöÀÞ¤s qË“Ç!å‚”ú$>DóJo3!9½‘a¾ ƒ€ A4~6‚ DœÓ!¤‚ z¦‰„,,ˆ "÷ÉDì®Äƒ1F–ÎÑLigŽˆw”]9ËñIî\{-ÈDÛ$mf´ mÇ!3Ù¥ ‚ s !s ¢ç±v’ ÇäÉõA.#¾d¯ƒ=zj~A†ŽCAAAAAª ÂvlCÁä‚T_ zéù[õ©|É["@AAAé-ˆ‚Ì%ˆõb,‚d?]ó¹IB.NÂA´]ëðëµs)D­·£d&Bj"ßV† }›,º½ŒCAAn "róéÊ­aêáB}ºÆ™Y8Y¤‚ !‰‚¸›¢gm%âÙâ-îï@¨ ÇYrU Ÿö„ —„h%BèeÕ‰!jŸ„T*Ý^Æ!‚ ‚ ‚ ‚ ‚ §Áv„¹ÁA0y· S‚IP_ó eAAAA¹ÊÒƒ }‘oª;‘PƦž‚mú\-ŸúÅ&¨¨ II°² g¶)+¤a3Ü&KÛå&¨«÷Q¼ŠQIÛùÚ~¡š™ õ‚ì Ë‘v‚¼”[70ÇCIÇ A: 2Å8A¤• I[/F"oÄÙדuDŒÝqÇ. 9e_\ ’u¢áƒ®ºlú\¦É²r„ æ5T+ƒ]ªòû(Æ–6·vÌ/ˆ\žsÑdÉm²jR¼ÇPŽÊ¥Á1~– ¢áÉ‚øµÇdÒ¸^V AŽÝqû99¾’*ˆ\´}ÇSn(ˆ§Í» "¹Ûí5QŸöÙµ á—Ž. Nü¼i²7^)¬YЄ8 ßH† UqÉn²¤¼É2SÜ3RO/€©¦NAAdÁí$–œÌAAAAAÞ ùÔ±;† ‚¥ ‚ÍaºÈfÉ—÷ 1A AØV`£¯][—ŒºAAAAä‚lª›n‚ ‚ È3ÙA„^V7A¶ÿ¯þ×óíü ±>û–z*ù¥‚-Îtî#ÈvüQ¿²“ÒU5¯ …„ø´ÍD7 ²é¶å²m¿ðÓrÛŠš,Éô²2{JæSÝéF/k´ ÿ*üÆë2!jEi$ÈC44¥… =Gêÿz0RgêAAAAAAž%Û°»† ‚!††††HmÛ°¥ @ªBs§¨    ‚€`Â#Å„G:Ò{+7  qg¶ÍsB³#ûü#¨ ïÄ8‹Åƒ†€Aˆ  A_ât€¼zn¸ôÊé9 @) ŸýÿB@ºL.Șr±N“G2¸^E1ÿ @üä²Ëšø:}@°ôýï?óÿ¯ü:‘ÙÅ2?Ù¿à| Ø €|ÿè—‘ýÃwp Ø‹Ù19ñø.€<¹F$»æýò"íDyËèl9PÈÃk„ØÝ³gðÿ¹õñ÷m÷[öÅ/Š NGëñ€\Þë Ñ£´¿àí&„z‰½‰59š 5‡$-ÑÏ ûç ¥’.ˆOÃ#¿Àa nÆ™ã+Ï~óNó¦Z5@<±@¬§QAd ®]t±ÌÐÅÒSÏ@‘‰1Që‹î@¤´Ícšwmf±°{ú&޶@^HÊ ^É @0 ®¶ ¡Gæúìß'S_æM˜„aÃÔû6LµébMˆ19i¾VyZÜRûUÌè+Ä bJ‹º0¹`{~@¤k)}ÑÄ·‹¬—2{ ID•‚½{ ¢Ö_Î{xÆ«˜æ+I€¼ä´—{Yí®&~~vªiÞ;;†¿Š@¹³”ëì±=Ííx_v–'B…¡Üû冻ån{4Øå®ˆ½ÆÚ@ ” îŠ9„rß>ñüsþ¾½Š ”K¹ÅååR.€P.åÎÈl IÎRcìˆ6Íߨýùóh±Pù¼Ë’ö/7(Wk¸,wŽôµ+@¼o~•M™H…¬JI~%´ Å •@zâ½û+ µ¡ *ûnRµðn䇢ꞿ×;‚´$TMÕ:M¨ å®È|Ä|-r‘.V´?ý]¬7RóÁ?uV'¼Ìöä”éV**€@$úÍ’#žïU˜ßð¸hØ{§  oDäØPvqºPýiÏsÒ''-TƒiÞzâÍ|¥îáô2OI>]¨þÊòymNÅûU­f‚K©‘ù @bt±œ:S9‚8i ~ü8@¯5 ÷ . â¬ÅxÒ›ÄÛ‹Š %AÞˆy®…½ Í9¨áä¿”S7]›AÊ . ŒAž4‹Õ°”K¢ªÜX)˜ýËe @(@„Š BE¡¢€PQ@@¤ø‘’†`årÃæ1Á0Á0Á°Ž€¼d†a¥€ô(@0 @Á@0 @0 @0l( ÖJFAm ¼”øªõ°û€¸‡JÉY˜dL)¼Öþ`@r²Ý€¼5Ïí!‚€$Ò÷¿ˆ  ox0B=ÙñŽÄ2œ-¬¨"¿ô8…¸ð÷vé© HàÛ÷sý­ˆzŽþӟ´äV"…‰f }ù¥$?aÌÝ®Ž|ÿˆ•œGUSß­X Ãs¹¨3âæìi ȯšZ*¥—| Ô‰Wrzìa@4)AØÒ€t ¢Ž6ûXªo‹ ™€¼8‚X£c)f±NW€û±« 7ZY›‰Ðn2k†)û9çÄQy= ­»X“'ñ4!‚¼q`ò$žçÂ@æä}I<@†V@© Hà{÷ ² f¦ ;WyQ*¾·Ò0‰'€ÌH8GøËÑ‘óÍðJÍ™jÈÈ…2_ñMó«:€hJ*¾*€ìi€H…ûy#ˆÆ²<©öŠ ¢z‘‘ÐL»@œu Ì…—ìáeæ+©Gý>€„«v‰ VÔ0ÜÎNÅWÑ™ižÄó÷“îˆÐj¸d ö*©»=¢¬ ˆÔÓ €|ýéÈd!t@†Ïb¹À dFHéT?ö^¾9.x# f¬šv«3 ›. Ž%’õ†NÖ˜«Ñ¢ÐÅBáÒ€h: í#ˆçŽ@ºâ.?yæU(©»1©ÕÅ2nLjùkÎbÈóWÒ+­t2Í kòp@@@éCΩî@‚=Ã@0 @Á@0 @@醤?À0 @0 @0 @0¬ †æ‚a˜g²G€a‚aò*Û:ÙËËç2¦”—•     ‚€` Øò€üÿì¶©n™· Ø›ùÿ €„¡‹…ÈùgÍ?‚€`’qõÿð|Û@°éqïcZ)qbéÓ¼±[²}½ô@ÞÈÿ›©¿?¿6Iëõ<íûaûE,Ó㟯×>È{"ȱƒˆAt¥âýã„ G‰²VqW\ˆ ’ÒNHêŒV« r11¿Z½‹ªªNµ-¨¨‰c_ùùšâ3€¼g Ò¿«ãd»hà§ïÚ€´Ä;> @B¤ n@°Y¯\ @Á@0l ¤? ý†5Á0Á0Á°êöVÞ bÓIœIEND®B`‚libmng-2.0.2/doc/misc/0000755000000000000000000000000012005307152013154 5ustar rootrootlibmng-2.0.2/doc/misc/magic.dif0000644000000000000000000000140612005307152014721 0ustar rootroot--- magic.orig Wed Aug 14 16:48:56 2002 +++ magic Wed Aug 14 16:50:09 2002 @@ -2544,6 +2544,27 @@ >>28 byte 1 interlaced 1 string PNG PNG image data, CORRUPTED +#MNG +# 0x8a M N G 0x0d 0x0a 0x1a 0x0a [4-byte pad] +# M H D R [4-byte width][4-byte height][4-byte ticks][4-byte layers] +# [4-byte frame][4-byte time] +# +0 string \x8aMNG MNG image data, +>4 belong !0x0d0a1a0a CORRUPTED +>4 belong 0x0d0a1a0a +>>16 belong x %ld x +>>20 belong x %ld + +#JNG +# 0x8b J N G 0x0d 0x0a 0x1a 0x0a [4-byte pad] +# J H D R [4-byte width][4-byte height] +# +0 string \x8bJNG JNG image data, +>4 belong !0x0d0a1a0a CORRUPTED +>4 belong 0x0d0a1a0a +>>16 belong x %ld x +>>20 belong x %ld + # GIF 0 string GIF8 GIF image data >4 string 7a \b, version 8%s, libmng-2.0.2/doc/man/0000755000000000000000000000000012005307152012774 5ustar rootrootlibmng-2.0.2/doc/man/jng.50000644000000000000000000000220612005307152013640 0ustar rootroot.TH JNG 5 "July 26, 2000" .SH NAME jng \- JPEG Network Graphics (JNG) sub-format .SH DESCRIPTION JNG (JPEG Network Graphics) is a sub-format of the MNG (Multiple-image Network Graphics) format. As with MNG it extends on the features of the popular PNG (Portable Network Graphics) image-format. .br This sub-format was designed to support a lossy compression-method. It is based completely on the JPEG specification. It adds the high-compression ratios of JPEG for photographic images. As a member of the Network Graphics family, JNG was deemed adequate as a stand-alone format as it extends the JPEG format with color-correction and transparency features. .SH "SEE ALSO" .IR png(5) ", " mng(5) ", " libmng(3) .LP MNG 1.00, February 9, 2001: .IP http://www.libpng.org/pub/mng .SH AUTHORS This man page: Gerard Juyn .LP Multiple-image Network Graphics (MNG) Specification Version 1.00 (Februari 9, 2001): Glenn Randers-Pehrson and others (png-list@ccrc.wustl.edu). .LP .SH COPYRIGHT NOTICE The MNG-1.00 specification is copyright (c) 1998-2001 Glenn Randers-Pehrson. See the specification for conditions of use and distribution. .LP .\" end of man page libmng-2.0.2/doc/man/CMakeLists.txt0000644000000000000000000000217012005307152015534 0ustar rootroot#libmng-VERSION/doc/man # SET(SRC ${CMAKE_SOURCE_DIR}/doc/man) SET(DST ${CMAKE_BINARY_DIR}/doc/man) # SET(MAN_3 libmng.3 ) SET(MAN_5 jng.5 mng.5 ) # SET(MAN_3_gz "") SET(MAN_5_gz "") # IF(GZIP_FOUND) # FOREACH(man ${MAN_3} ) ADD_CUSTOM_COMMAND(OUTPUT ${man}.gz COMMAND ${GZIP_EXE} -f -c "${SRC}/${man}" > "${DST}/${man}.gz" DEPENDS ${man} COMMENT "Building ${man}.gz") SET(MAN_3_gz ${DST}/${man}.gz ${MAN_3_gz}) ENDFOREACH(man) # FOREACH(man ${MAN_5} ) ADD_CUSTOM_COMMAND(OUTPUT ${man}.gz COMMAND ${GZIP_EXE} -f -c "${SRC}/${man}" > "${DST}/${man}.gz" DEPENDS ${man} COMMENT "Building ${man}.gz") SET(MAN_5_gz ${DST}/${man}.gz ${MAN_5_gz}) ENDFOREACH(man) # ELSE(GZIP_FOUND) # FOREACH(man ${MAN_3} ) SET(MAN_3_gz ${SRC}/${man} ${MAN_3_gz}) ENDFOREACH(man) # FOREACH(man ${MAN_5} ) SET(MAN_5_gz ${SRC}/${man} ${MAN_5_gz}) ENDFOREACH(man) # ENDIF(GZIP_FOUND) # ADD_CUSTOM_TARGET(doc ALL DEPENDS ${MAN_3_gz} ${MAN_5_gz} ) # INSTALL(FILES ${MAN_3_gz} DESTINATION ${MNG_INSTALL_SHARE_DIR}/man/man3) INSTALL(FILES ${MAN_5_gz} DESTINATION ${MNG_INSTALL_SHARE_DIR}/man/man5) # libmng-2.0.2/doc/man/libmng.30000644000000000000000000012106112005307152014331 0ustar rootroot.TH LIBMNG 3 "January 30th, 2005" .SH NAME libmng \- Multiple-image Network Graphics (MNG) Reference Library 1.0.9 .SH SYNOPSIS \fI\fB \fB#include \fP .SH DESCRIPTION The .I libmng library supports decoding, displaying, encoding, and various other manipulations of the Multiple-image Network Graphics (MNG) format image files. It uses the .IR zlib(3) compression library, and optionally the JPEG library by the Independant JPEG Group (IJG) and/or lcms (little cms), a color-management library by Marti Maria Saguer. .SH I. Introduction This file describes how to use and modify the MNG reference library (known as libmng) for your own use. There are seven sections to this file: introduction, callbacks, housekeeping, reading, displaying, writing, and modification and configuration notes for various special platforms. We assume that libmng is already installed; see the INSTALL.README file for instructions on how to install libmng. Libmng was written to support and promote the MNG specification. The MNG-1.0 specification is available at . Other information about MNG can be found at the MNG home page, . The latest version of libmng can be found at its own homepage at . In most cases the library will not need to be changed. For standardization purposes the library contains both a Windows DLL and a makefile for building a shared library (SO). The library is written in C, but an interface for Borland Delphi is also available. Libmng has been designed to handle multiple sessions at one time, to be easily modifiable, to be portable to the vast majority of machines (ANSI, K&R, 32-, and 64-bit) available, and to be easy to use. Libmng uses zlib for its compression and decompression of MNG files. Further information about zlib, and the latest version of zlib, can be found at the zlib home page, . The zlib compression utility is a general purpose utility that is useful for more than MNG/PNG files, and can be used without libmng. See the documentation delivered with zlib for more details. Libmng optionally uses the JPEG library by the Independant JPEG Group (IJG). This library is used for the JNG sub-format, which is part of the MNG specification, and allows for inclusion of JPEG decoded and thus highly compressed (photographic) images. Further information about the IJG JPEG library and the latest sources can be found at . Libmng can also optionally use the lcms (little CMS) library by Marti Maria Saguer. This library provides an excellent color-management system (CMS), which gives libmng the ability to provide full color-correction for images with the proper color-information encoded. Further information and the latest sources can be found at . Libmng is thread safe, provided the threads are using different handles as returned by the initialization call. Each thread should have its own handle and thus its own image. Libmng does not protect itself against two threads using the same instance of a handle. The libmng.h header file is the single reference needed for programming with libmng: #include .SH II. Callbacks Libmng makes extensive use of callback functions. This is meant to keep the library as platform-independant and flexible as possible. Actually, the first call you will make to the library, already contains three parameters you can use to provide callback entry-points. Most functions must return a mng_bool (boolean). Returning MNG_FALSE indicates the library the callback failed in some way and the library will immediately return from whatever it was doing back to the application. Returning MNG_TRUE indicates there were no problems and processing can continue. Let's step through each of the possible callbacks. The sections on reading, displaying and writing will also explain which callbacks are needed when and where. \- mng_ptr mng_memalloc (mng_size_t iLen) A very basic function which the library uses to allocate a memory-block with the given size. A typical implementation would be: mng_ptr my_alloc (mng_size_t iLen) { return calloc (1, iLen); } Note that the library requires you to zero-out the memory-block!!! \- void mng_memfree (mng_ptr pPtr, mng_size_t iLen) Counterpart of the previous function. Typically: void my_free (mng_ptr pPtr, mng_size_t iLen) { free (pPtr); } \- mng_bool mng_openstream (mng_handle hHandle) \- mng_bool mng_closestream (mng_handle hHandle) These are called by the library just before it starts to process (either read or write) a file and just after the processing stops. This is the recommended place to do I/O initialization & finalization. Whether you do or not, is up to you. The library does not put any meaning into the calls. They are simply provided for your convenience. \- mng_bool mng_readdata (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pRead) This function is called when the library needs some more input while reading an image. The reading process supports two modes: Suspension-mode (SMOD) and non-suspension-mode (NSMOD). See mng_set_suspensionmode() for a more detailed description. In NSMOD, the library requires you to return exactly the amount of bytes requested (= iBuflen). Any lesser amount indicates the input file is exhausted and the library will return a MNG_UNEXPECTEDEOF errorcode. In SMOD, you may return a smaller amount of bytes than requested. This tells the library it should temporarily wait for more input to arrive. The lib will return with MNG_NEEDMOREDATA, and will expect a call to mng_read_resume() or mng_display_resume() next, as soon as more input-data has arrived. For NSMOD this function could be as simple as: mng_bool my_read (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pRead) { *pRead = fread (pBuf, 1, iBuflen, myfile); return MNG_TRUE; } \- mng_bool mng_writedata (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pWritten) This function is called during the mng_write() function to actually output data to the file. There is no suspension-mode during write, so the application must return the exact number of bytes the library requests to be written. A typical implementation could be: mng_bool my_write (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pWritten) { *pWritten = fwrite (pBuf, 1, iBuflen, myfile); return MNG_TRUE; } \- mng_bool mng_errorproc (mng_handle hHandle, mng_int32 iErrorcode, mng_int8 iSeverity, mng_chunkid iChunkname, mng_uint32 iChunkseq, mng_int32 iExtra1, mng_int32 iExtra2, mng_pchar zErrortext) This function is called whenever an error is detected inside the library. This may be caused by invalid input, callbacks indicating failure, or wrongfully calling functions out of place. If you do not provide this callback the library will still return an errorcode from the called function, and the mng_getlasterror() function can be used to retrieve the other parameters. This function is currently only provided for convenience, but may at some point be used to indicate certain errors may be acceptable, and processing should continue. \- mng_bool mng_traceproc (mng_handle hHandle, mng_int32 iFuncnr, mng_int32 iFuncseq, mng_pchar zFuncname) This function is provided to allow a functional analysis of the library. This may be useful if you encounter certain errors and cannot determine what the problem is. Almost all functions inside the library will activate this callback with an appropriate function-name at the start and end of the function. Please note that large images may generate an enormous amount of calls. \- mng_bool mng_processheader (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight) This function is called once the header information of an input- image has been processed. At this point the image dimensions are available and also some other properties depending on the type of the image. Eg. for a MNG the frame-/layercount, playtime & simplicity fields are known. The primary purpose of this callback is to inform the application of the size of the image, and for the application to initialize the drawing canvas to be used by the library. This is also a good point to set the canvas-style. Eg. mng_set_canvasstyle(). \- mng_bool mng_processtext (mng_handle hHandle, mng_uint8 iType, mng_pchar zKeyword, mng_pchar zText, mng_pchar zLanguage, mng_pchar zTranslation) This callback is activated for each textual chunk in the input- image. These are tEXt, zTXt & iTXt. It may be used to retain specific comments for presentation to the user. \- mng_bool mng_processsave (mng_handle hHandle) \- mng_bool mng_processseek (mng_handle hHandle, mng_pchar zName) The purpose of these callbacks is to signal the processing of the SAVE & SEEK chunks in a MNG input-file. This may be used in the future to specify some special processing. At the moment these functions are only provided as a signal. \- mng_ptr mng_getcanvasline (mng_handle hHandle, mng_uint32 iLinenr) \- mng_ptr mng_getbkgdline (mng_handle hHandle, mng_uint32 iLinenr) \- mng_ptr mng_getalphaline (mng_handle hHandle, mng_uint32 iLinenr) These callbacks are used to access the drawing canvas, background canvas and an optional separate alpha-channel canvas. The latter is used only with the MNG_CANVAS_RGB8_A8 canvas-style. If the getbkgdline() callback is not supplied the library will composite fully or partially transparent pixels in the image against a specified background color. See mng_set_bgcolor() for more details. If a chosen canvas-style includes an alpha-channel, this callback is very likely not needed. The application is responsible for returning a pointer to a line of pixels, which should be in the exact format as defined by the call to mng_set_canvasstyle() and mng_set_bkgdstyle(), without gaps between the representation of each pixel, unless specified by the canvas-style. \- mng_bool mng_refresh (mng_handle hHandle, mng_uint32 iX, mng_uint32 iY, mng_uint32 iWidth, mng_uint32 iHeight) This callback is called when the library has drawn a complete frame onto the drawing canvas, and it is ready to be displayed. The application is responsible for transferring the drawing canvas from memory onto the actual output device. \- mng_uint32 mng_gettickcount (mng_handle hHandle) This function should return the number of milliseconds on some internal clock. The entire animation timing depends heavily on this function, and the number returned should be as accurate as possible. \- mng_bool mng_settimer (mng_handle hHandle, mng_uint32 iMsecs) This callback is activated every time the library requires a "pause". Note that the function itself should NOT execute the wait. It should simply store the time-field and allow the library to return. Libmng will return with the MNG_NEEDTIMERWAIT code, indicating the callback was called and it is now time to execute the pause. After the indicated number of milliseconds have elapsed, the application should call mng_display_resume(), to resume the animation as planned. This method allows for both a real timer or a simple wait command in the application. Whichever method you select, both the gettickcount() and settimer() callbacks are crucial for proper animation timing. \- mng_bool mng_processgamma (mng_handle hHandle, mng_uint32 iGamma) \- mng_bool mng_processchroma (mng_handle hHandle, mng_uint32 iWhitepointx, mng_uint32 iWhitepointy, mng_uint32 iRedx, mng_uint32 iRedy, mng_uint32 iGreenx, mng_uint32 iGreeny, mng_uint32 iBluex, mng_uint32 iBluey) \- mng_bool mng_processsrgb (mng_handle hHandle, mng_uint8 iRenderingintent) \- mng_bool mng_processiccp (mng_handle hHandle, mng_uint32 iProfilesize, mng_ptr pProfile) \- mng_bool mng_processarow (mng_handle hHandle, mng_uint32 iRowsamples, mng_bool bIsRGBA16, mng_ptr pRow) These callbacks are only required when you selected the MNG_APP_CMS directive during compilation of the library. See the configuration section for more details. \- mng_bool mng_iteratechunk (mng_handle hHandle, mng_handle hChunk, mng_chunkid iChunkid, mng_uint32 iChunkseq) This callback is only used for the mng_iterate_chunks() function. It is called exactly once for each chunk stored. .SH III. Housekeeping .SS Memory management The library can use internal memory allocation/deallocation or use provided callbacks for its memory management. The choice is made at compilation time. See the section on customization for details. If internal management has been selected, the memory callback functions need not be supplied. Even if you do supply them they will not be used. The actual code used is similar to the code discussed in the callback section: pPtr = calloc (1, iLen); free (pPtr); If your compiler does not support these functions, or you wish to monitor the library's use of memory for certain reasons, you can choose to compile the library with external memory management. In this case the memory callback functions MUST be supplied, and should function as if the above code was used. .SS Initialization The basic initialization of the library is short and swift: myhandle = mng_initialize (myuserdata, my_alloc, my_free, MNG_NULL); if (myhandle == MNG_NULL) /* process error */; The first field is an application-only parameter. It is saved in libmng's internal structures and available at all times through the mng_get_userdata() function. This is especially handy in callback functions if your program may be handling multiple files at the same time. The second and third field supply the library with the memory callback function entry-points. These are described in more detail in the callback section and the previous paragraph. The fourth and last field may be used to supply the library with the entry-point of a trace callback function. For regular use you will not need this! The function returns a handle which will be your ticket to MNG-heaven. All other functions rely on this handle. It is the single fixed unique reference-point between your application and the library. You should call the initialization function for each image you wish to process simultaneously. If you are processing images consecutively, you can reset the internal status of the library with the mng_reset() function. This function will clear all internal state variables, free any stored chunks and/or objects, etc, etc. Your callbacks and other external parameters will be retained. After you successfully received the handle it is time to set the required callbacks. The sections on reading, displaying & writing indicate which callbacks are required and which are optional. To set the callbacks simply do: myretcode = mng_setcb_xxxxxx (myhandle, my_xxxxxx); if (myretcode != MNG_NOERROR) /* process error */; Naturally you'd replace the x's with the name of the callback. .SS Cleanup Once you've gotten hold of that precious mng_handle, you should always, and I mean always, call the cleanup function when you're done. Just do: mng_cleanup (myhandle); And you're done. There shouldn't be an ounce of memory spilled after that call. Note that if you would like to process multiple files consecutively you do not need to do mng_cleanup() / mng_initialize() between each file but simply myretcode = mng_reset (myhandle); if (myretcode != MNG_NOERROR) /* process error */; will suffice. Saves some time and effort, that. .SS Error handling From the examples in the previous paragraphs you may have noticed a meticulous scheme for error handling. And yes, that's exactly what it is. Practically each call simply returns an errorcode, indicating success, eg. MNG_NOERROR or failure, anything else but MNG_NEEDMOREDATA and MNG_NEEDTIMERWAIT. These latter two will be discussed in more detail in their respective fields of interest: the reading section and displaying section respectively. It is the application's responsibility to check the returncode after each call. You can call mng_getlasterror() to receive the details of the last detected error. This even includes a discriptive error-message if you enabled that option during compilation of the library. Note that after receiving an error it is still possible to call the library, but it's also very likely that any following call will fail. The only functions deemed to work will be mng_reset() and mng_cleanup(). Yes, if you abort your program after an error, you should still call mng_cleanup(). .SH IV. Reading Reading a MNG, JNG or PNG is fairly easy. It depends slightly on your ultimate goal how certain specifics are to be handled, but the basics are similar in all cases. For the read functioins to work you must have compiled the library with the MNG_READ_SUPPRT directive. The standard DLL and Shared Library have this on by default! .SS Setup Naturally you must have initialized the library and be the owner of a mng_handle. The following callbacks are essential: mng_openstream, mng_readdata, mng_closestream You may optionally define: mng_errorproc, mng_traceproc mng_processheader, mng_processtext mng_processsave, mng_processseek The reading bit will also fail if you are already creating or displaying a file. Seems a bit obvious, but I thought I'd mention it, just in case. .SS To suspend or not to suspend There is one choice you need to make before calling the read function. Are you in need of suspension-mode or not? If you're reading from a disk you most certainly do not need suspension-mode. Even the oldest and slowest of disks will be fast enough for straight reading. However, if your input comes from a really slow device, such as a dialup-line or the likes, you may opt for suspension-mode. This is done by calling myretcode = mng_set_suspensionmode (myhandle, MNG_TRUE); if (myretcode != MNG_NOERROR) /* process error */; Suspension-mode will force the library to use special buffering on the input. This allows your application to receive data of arbitrarily length and return this in the mng_readdata() callback, without disturbing the chunk processing routines of the library. Suspension-mode does require a little extra care in the main logic of the application. The read function may return with MNG_NEEDMOREDATA when the mng_readdata() callback returns less data then it needs to process the next chunk. This indicates the application to wait for more data to arrive and then resume processing by calling mng_read_resume(). .SS The read HLAPI The actual reading is just plain simple. Since all I/O is done outside the library through the callbacks, the library can focus on its real task. Understanding, checking and labelling the input data! All you really need to do is this: myretcode = mng_read (myhandle); if (myretcode != MNG_NOERROR) /* process error */; Of course, if you're on suspension-mode the code is a little more complicated: myretcode = mng_read (myhandle); while (myretcode == MNG_NEEDMOREDATA) { /* wait for input-data to arrive */ myretcode = mng_read_resume (myhandle); } if (myretcode != MNG_NOERROR) /* process error */; This is rather crude and more sophisticated programming methods may dictate another approach. Whatever method you decide on, it should act as if the above code was in its place. There is also the mng_readdisplay() function, but this is discussed in the displaying section. It functions pretty much as the mng_read() function, but also immediately starts displaying the image. mng_read_resume() should be replaced by mng_display_resume() in that case! .SS What happens inside What actually happens inside the library depends on the configuration options set during the compilation of the library. Basically the library will first read the 8-byte file header, to determine its validity and the type of image it is about to process. Then it will repeatedly read a 4-byte chunk-length and then the remainder of the chunk until it either reaches EOF (indicated by the mng_readdata() callback) or implicitly decides EOF as it processed the logically last chunk of the image. Applications that require strict conformity and do not allow superfluous data after the ending chunk, will need to perform this check in their mng_closestream() callback. Each chunk is then checked on CRC, after which it is handed over to the appropriate chunk processing routine. These routines will disect the chunk, check the validity of its contents, check its position with respect to other chunks, etc, etc. If everything checks out, the chunk is further processed as follows: If display support has been selected during compilation, certain pre-display initialization will take place. If chunk-storage support has been selected during compilation, the chunks data may be stored in a special internal structure and held for future reference. .SS Storing and accessing chunks One of the compilation options activates support for chunk storage. This option may be useful if you want to examine an image. The directive is MNG_STORE_CHUNKS. You must also turn on the MNG_ACCESS_CHUNKS directive. The actual storage facility can be turned on or off with the mng_set_storechunks() function. If set to MNG_TRUE, chunks will be stored as they are read. At any point you can then call the mng_iterate_chunks() function to iterate through the current list of chunks. This function requires a callback which is called for each chunk and receives a specific chunk-handle. This chunk-handle can be used to call the appropriate mng_getchunk_xxxx() function, to access the chunks properties. A typical implementation may look like this: mng_bool my_iteratechunk (mng_handle hHandle, mng_handle hChunk, mng_chunkid iChunkid, mng_uint32 iChunkseq) { switch (iChunkid) { case MNG_UINT_MHDR : { /* process MHDR */; break; } case MNG_UINT_FRAM : { /* process FRAM */; break; } ...etc... case MNG_UINT_HUH : { /* unknown chunk */; break; } default : { /* duh; forgot one */; } } return MNG_TRUE; /* keep'm coming */ } To get to the actual chunk fields of lets say a SHOW chunk you would do: mng_bool isempty; mng_uint16 firstid, lastid; mng_uint8 showmode; myretcode mng_getchunk_show (hHandle, hChunk, isempty, firstid, lastid, showmode); if (myretcode != MNG_NOERROR) /* process error */; .SH V. Displaying .SS Setup Assuming you have initialized the library and are the owner of a mng_handle. The following callbacks are essential: mng_getcanvasline, mng_refresh mng_gettickcount, mng_settimer If you wish to use an application supplied background you must supply: mng_getbkgdline If you wish to use the MNG_CANVAS_RGB8_A8 canvas style you must supply: mng_getalphaline You may optionally define: mng_errorproc, mng_traceproc mng_processheader, mng_processtext mng_processsave, mng_processseek Note that the mng_processheader() callback is optional but will be quite significant for proper operation! Displaying an image will fail if you are creating a file or already displaying one. Yes, you can't display it twice! .SS A word on canvas styles The canvas style describes how your drawing canvas is made up. You must set this before the library actually starts drawing, so the mng_processheader() callback is a pretty good place for it. Currently only 8-bit RGB canvas styles are supported, either with or without an alpha channel. If you like to do alpha composition yourself you can select one of the canvas styles that include an alpha channel. You can even have a separate alpha canvas by selecting the MNG_CANVAS_RGB8_A8 style. All styles require a compact model. Eg. MNG_CANVAS_BGR8 requires your canvas lines in bgrbgrbgr... storage, where each letter represents an 8-bit value of the corresponding color, and each threesome makes up the values of one(1) pixel. The library processes a line at a time, so the canvas lines do not actually need to be consecutive in memory. .SS Alpha composition and application backgrounds All Network Graphics can be partially transparent. This requires special processing if you need to display an image against some background. Note that the MNG header (MHDR chunk) contains a simplicity field indicating whether transparency information in the file is critical or not. This only applies to embedded images, which means the full image-frame of the MNG may still contain fully transparent pixels! Depending on your needs you can supply a single background color, a background canvas or tell the library to return the alpha-channel and do alpha composition yourself. This is different from the BACK chunk in a MNG, or the bKGD chunk in an (embedded) PNG or JNG. The BACK chunk indicates an optional or mandatory background color and/or image. The bKGD chunk only indicates an optional background color. These chunks indicate the Authors preferences. They may be absent in which case you need to supply some sort of background yourself. .SS Composing against a background color This is the easiest method. Call the mng_set_bgcolor() function to set the values of the red, green and blue component of your preferred background color. Use one of the canvas styles that do not have an alpha-channel, and which matches your output requirements. .SS Composing against a background canvas This is somewhat more complicated. You will need to set the mng_getbkgdline() callback. This will be called whenever the library needs to compose a partially transparent line. This canvas must hold the background against which the image should be composed. Its size must match exactly with the image dimensions and thus the drawing canvas! Use one of the canvas styles that do not have an alpha-channel, and which matches your output requirements. The canvas style of the background canvas may even differ from the drawing canvas. The library's composing will still function properly. .SS Composing within the application If you have the option in your application to draw a (partially) transparent canvas to the output device, this option is preferred. Select one of the canvas styles that do have an alpha-channel. The library will now supply the appropriate alpha information, allowing the application to compose the image as it sees fit. .SS Color information and CMS Network Graphics may, and usually will, contain color-correction information. This information is intended to compensate for the difference in recording and display devices used. This document does not address the specifics of color-management. See the PNG specification for a more detailed description. .SS Using little cms by Marti Maria Saguer This is the easiest method, providing you can compile the lcms package. Select the MNG_FULL_CMS directive during compilation, and sit back and relax. The library will take care of all color-correction for you. .SS Using an OS- or application-supplied CMS If you are so lucky to have access to CMS functionality from within your application, you may instruct the library to leave color-correction to you. Select the MNG_APP_CMS directive during compilation of the library. You MUST also set the following callbacks: mng_processgamma, mng_processchroma, mng_processsrgb, mng_processiccp and mng_processarow The last callback is called when the library needs you to correct an arbitrary line of pixels. The other callbacks are called when the corresponding color-information is encountered in the file. You must store this information somewhere for use in the mng_processarow() callback. .SS Using gamma-only correction This isn't a preferred method, but it's better than no correction at all. Gamma-only correction will at least compensate for gamma-differences between the original recorder and your output device. Select the MNG_GAMMA_ONLY directive during compilation of the library. Your compiler MUST support fp operations. .SS No color correction Ouch. This is really bad. This is the least preferred method, but may be necessary if your system cannot use lcms, doesn't have its own CMS, and does not allow fp operations, ruling out the gamma-only option. Select the MNG_NO_CMS directive during compilation. Images will definitely not be displayed as seen by the Author!!! .SS Animations and timing Animations require some form of timing support. The library relies on two callbacks for this purpose. The mng_gettickcount() and mng_settimer() callbacks. mng_gettickcount() is used to determine the passing of time in milliseconds since the beginning of the animation. This is also used to compensate during suspension-mode if you are using the mng_readdisplay() function to read & display the file simultaneously. The callback may return an arbitrary number of milliseconds, but this number must increase proportionaly between calls. Most modern systems will have some tickcount() function which derives its input from an internal clock. The value returned from this function is more than adequate for libmng. The mng_settimer() callback is called when the library determines a little "pause" is required before rendering another frame of the animation. The pause interval is also expressed in milliseconds. Your application should store this value and return immediately. The library will then make appropriate arrangements to store its internal state and returns to your application with the MNG_NEEDTIMERWAIT code. At that point you should suspend processing and wait the given interval. Please use your OS features for this. Do not engage some sort of loop. That is real bad programming practice. Most modern systems will have some timing functions. A simple wait() function may suffice, but this may prevent your applications main-task from running, and possibly prevent the actual update of your output device. .SS The mng_refresh() callback The mng_refresh() callback is called whenever the library has "finished" drawing a new frame onto your canvas, and just before it will call the mng_settimer() callback. This allows you to perform some actions necessary to "refresh" the canvas onto your output device. Please do NOT suspend processing inside this callback. This must be handled after the mng_settimer() callback! .SS Displaying while reading This method is preferred if you are reading from a slow input device (such as a dialup-line) and you wish to start displaying something as quickly as possible. This functionality is provided mainly for browser-type applications but may be appropriate for other applications as well. The method is usually used in unison with the suspension-mode of the read module. A typical implementation would look like this: /* initiale library and set required callbacks */ /* activate suspension-mode */ myretcode = mng_set_suspensionmode (myhandle, MNG_TRUE); if (myretcode != MNG_NOERROR) /* process error */; myretcode = mng_readdisplay (myhandle); while ((myretcode == MNG_NEEDMOREDATA) || (myretcode == MNG_NEEDTIMERWAIT)) { if (myretcode == MNG_NEEDMOREDATA) /* wait for more input-data */; else /* wait for timer interval */; myretcode = mng_display_resume (myhandle); } if (myretcode != MNG_NOERROR) /* process error */; More advanced programming methods may require a different approach, but the final result should function as in the code above. .SS Displaying after reading This method is used to display a file that was previously read. It is primarily meant for viewers with direct file access, such as 1a local harddisk. Once you have successfully read the file, all you need to do is: myretcode = mng_display (myhandle); while (myretcode == MNG_NEEDTIMERWAIT) { /* wait for timer interval */; myretcode = mng_display_resume (myhandle); } if (myretcode != MNG_NOERROR) /* process error */; Again, more advanced programming methods may require a different approach, but the final result should function as in the code above. .SS Display manipulation Several HLAPI functions are provided to allow a user to manipulate the normal flow of an animation. \- mng_display_freeze (mng_handle hHandle) This will "freeze" the animation in place. \- mng_display_resume (mng_handle hHandle) This function can be used to resume a frozen animation, or to force the library to advance the animation to the next frame. \- mng_display_reset (mng_handle hHandle) This function will "reset" the animation into its pristine state. Calling mng_display() afterwards will re-display the animation from the first frame. \- mng_display_golayer (mng_handle hHandle, mng_uint32 iLayer) \- mng_display_goframe (mng_handle hHandle, mng_uint32 iFrame) \- mng_display_gotime (mng_handle hHandle, mng_uint32 iPlaytime) These three functions can be used to "jump" to a specific layer, frame or timeslot in the animation. You must "freeze" the animation before using any of these functions. All above functions may only be called during a timer interval! It is the applications responsibility to cleanup any resources with respect to the timer wait. .SH VI. Writing The main focus of the library lies in its displaying capabilites. But it does offer writing support as well. You can create and write a file, or you can write a file you have previously read, providing the storage of chunks was enabled and active. For this to work you must have compiled the library with the MNG_WRITE_SUPPO1RT and MNG_ACCESS_CHUNKS directives. The standard DLL and Shared Library have this on by default! .SS Setup As always you must have initialized the library and be the owner of a mng_handle. The following callbacks are essential: mng_openstream, mng_writedata, mng_closestream You can optionally define: mng_errorproc, mng_traceproc The creation and writing functions will fail if you are in the middle of reading, creating or writing a file. .SS Creating a new file To start a new file the library must be in its initial state. First you need to tell the library your intentions: myretcode = mng_create (myhandle); if (myretcode != MNG_NOERROR) /* process error */; After that you start adding the appropriate chunks: myretcode = mng_put1chunk_mhdr (myhandle, ...); if (myretcode != MNG_NOERROR) /* process error */; And so on, and so forth. Note that the library will automatically signal the logical end of the file by the ending chunk. Also the first chunk will indicate the library the filetype (eg. PNG, JNG or MNG) and force the proper signature when writing the file. The code above can be simplified, as you can always get the last errorcode by using the mng_getlasterror() function: if ( (mng_putchunk_xxxx (myhandle, ...)) or (mng_putchunk_xxxx (myhandle, ...)) or ...etc... ) /* process error */; Please note that you must have a pretty good understanding of the chunk specification. Unlike the read functions, there are virtually no checks, so it is quite possible to write completely wrong files. It is a good practice to read back your file into the library to verify its integrity. Once you've got all the chunks added, all you do is: myretcode mng_write (myhandle); if (myretcode != MNG_NOERROR) /* process error */; And presto. You're done. The real work is of course carried out in your callbacks. Note that this is a single operation as opposed to the read & display functions that may return with MNG_NEEDMOREDATA and/or MNG_NEEDTIMERWAIT. The write function just does the job, and only returns after it's finished or if it encounters some unrecoverable error. .SS Writing a previously read file If you have already successfully read a file, you can use the library to write it out as a copy or something. You MUST have compiled the library with the MNG_STORE_CHUNKS directive, and you must have done mng_set_storechunks (myhandle, MNG_TRUE). This doesn't require the MNG_ACCESS_CHUNKS directive, unless you want to fiddle with the chunks as well. Again all you need to do is: myretcode mng_write (myhandle); if (myretcode != MNG_NOERROR) /* process error */; .SH VII. Modifying/Customizing libmng: not finished yet .SS Compilation directives not finished yet .SS Platform dependant modification not finished yet .SH "SEE ALSO" .IR mng(5), jng(5), png(5), libpng(3) .LP libmng : .IP .br http://www.libmng.com .LP zlib : .IP .br http://www.info-zip.org/pub/infozip/zlib/ .LP IJG JPEG library : .IP .br http://www.ijg.org .LP lcms (little CMS) by Marti Maria Saguer : .IP .br http://www.littlecms.com/ .LP MNG specification: .IP .br http://www.libpng.org/pub/mng .LP In the case of any inconsistency between the MNG specification and this library, the specification takes precedence. .SH AUTHORS This man page: Gerard Juyn The contributing authors would like to thank all those who helped with testing, bug fixes, and patience. This wouldn't have been possible without all of you!!! .SH COPYRIGHT NOTICE: Copyright (c) 2000-2002 Gerard Juyn For the purposes of this copyright and license, "Contributing Authors" is defined as the following set of individuals: Gerard Juyn The MNG Library is supplied "AS IS". The Contributing Authors disclaim all warranties, expressed or implied, including, without limitation, the warranties of merchantability and of fitness for any purpose. The Contributing Authors assume no liability for direct, indirect, incidental, special, exemplary, or consequential damages, which may result from the use of the MNG Library, even if advised of the possibility of such damage. Permission is hereby granted to use, copy, modify, and distribute this source code, or portions hereof, for any purpose, without fee, subject to the following restrictions: 1. The origin of this source code must not be misrepresented; you must not claim that you wrote the original software. 2. Altered versions must be plainly marked as such and must not be misrepresented as being the original source. 3. This Copyright notice may not be removed or altered from any source or altered source distribution. The Contributing Authors specifically permit, without fee, and encourage the use of this source code as a component to supporting the MNG and JNG file format in commercial products. If you use this source code in a product, acknowledgment would be highly appreciated. .SH Remarks Parts of this software have been adapted from the libpng library. Although this library supports all features from the PNG specification (as MNG descends from it) it does not require the libpng library. It does require the zlib library and optionally the IJG JPEG library, and/or the "little-cms" library by Marti Maria Saguer (depending on the inclusion of support for JNG and Full-Color-Management respectively. This library's function is primarily to read and display MNG animations. It is not meant as a full-featured image-editing component! It does however offer creation and editing functionality at the chunk level. (future modifications may include some more support for creation and or editing) .\" end of man page libmng-2.0.2/doc/man/mng.50000644000000000000000000000264112005307152013646 0ustar rootroot.TH MNG 5 "July 25, 2000" .SH NAME mng \- Multiple-image Network Graphics (MNG) format .SH DESCRIPTION MNG (Multiple-image Network Graphics) is the animation extension of the popular PNG image-format. PNG (Portable Network Graphics) is an extensible file format for the lossless, portable, well-compressed storage of raster images. .br MNG has advanced animation features which make it very useful as a full replacement for GIF animations. These features allow animations that are impossible with GIF or result in much smaller files as GIF. As MNG builds on the same structure as PNG, it is robust, extensible and free of patents. It retains the same clever file integrity checks as in PNG. MNG also embraces the lossy JPEG image-format in a sub-format named JNG, which allows for alpha-transparency and color-correction on highly compressed (photographic) images. .SH "SEE ALSO" .IR png(5) ", " jng(5) ", " libmng(3) ", " libpng(3) ", " zlib(3) ", " deflate(5) ", " zlib(5) ", " jpeg(5) .LP MNG 1.00, Februari 9, 2001: .IP .br http://www.libpng.org/pub/mng .SH AUTHORS This man page: Gerard Juyn .LP Multiple-image Network Graphics (MNG) Specification Version 1.00 (Februari 9, 2001): Glenn Randers-Pehrson and others (png-list@ccrc.wustl.edu). .LP .SH COPYRIGHT NOTICE The MNG-1.00 specification is copyright (c) 1998-2001 Glenn Randers-Pehrson. See the specification for conditions of use and distribution. .LP .\" end of man page libmng-2.0.2/doc/rpm/0000755000000000000000000000000012115376074013032 5ustar rootrootlibmng-2.0.2/libmng_conf.h0000644000000000000000000003161212005307152014105 0ustar rootroot/* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_conf.h copyright (c) G.Juyn 2000-2004 * */ /* * version : 1.0.9 * */ /* * * */ /* * purpose : main configuration file * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : The configuration file. Change this to include/exclude * */ /* * the options you want or do not want in libmng. * */ /* * * */ /* * changes : 0.5.2 - 06/02/2000 - G.Juyn * */ /* * - separated configuration-options into this file * */ /* * - changed to most likely configuration (?) * */ /* * 0.5.2 - 06/03/2000 - G.Juyn * */ /* * - changed options to create a standard so-library * */ /* * with everything enabled * */ /* * 0.5.2 - 06/04/2000 - G.Juyn * */ /* * - changed options to create a standard win32-dll * */ /* * with everything enabled * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/12/2000 - G.Juyn * */ /* * - added workaround for faulty PhotoShop iCCP chunk * */ /* * 0.9.3 - 09/16/2000 - G.Juyn * */ /* * - removed trace-options from default SO/DLL builds * */ /* * * */ /* * 1.0.4 - 06/22/2002 - G.Juyn * */ /* * - B526138 - returned IJGSRC6B calling convention to * */ /* * default for MSVC * */ /* * * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * - added 'supports' call to check function availability * */ /* * * */ /* * 1.0.6 - 06/22/2002 - G.R-P * */ /* * - added MNG_NO_INCLUDE_JNG conditional * */ /* * - added MNG_SKIPCHUNK_evNT conditional * */ /* * 1.0.6 - 07/14/2002 - G.R-P * */ /* * - added MNG_NO_SUPPORT_FUNCQUERY conditional * */ /* * * */ /* * 1.0.7 - 03/07/2004 - G.R-P * */ /* * - added MNG_VERSION_QUERY_SUPPORT_ conditional * */ /* * * */ /* * 1.0.9 - 05/12/2004 - G.Juyn * */ /* * - clearified MNG_BIGENDIAN_SUPPORTED conditional * */ /* * - added MNG_LITTLEENDIAN_SUPPORTED conditional * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_conf_h_ #define _libmng_conf_h_ #ifdef MNG_MOZILLA_CFG #include "special\mozcfg\mozlibmngconf.h" #endif /* ************************************************************************** */ /* * * */ /* * User-selectable compile-time options * */ /* * * */ /* ************************************************************************** */ /* enable exactly one(1) of the MNG-(sub)set selectors */ /* use this to select which (sub)set of the MNG specification you wish to support */ /* generally you'll want full support as the library provides it automatically for you! if you're really strung on memory-requirements you can opt to enable less support (but it's just NOT a good idea!) */ /* NOTE that this isn't actually implemented yet */ #if !defined(MNG_SUPPORT_FULL) && !defined(MNG_SUPPORT_LC) && !defined(MNG_SUPPORT_VLC) #define MNG_SUPPORT_FULL /* #define MNG_SUPPORT_LC */ /* #define MNG_SUPPORT_VLC */ #endif /* ************************************************************************** */ /* enable JPEG support if required */ /* use this to enable the JNG support routines */ /* this requires an external jpeg package; currently only IJG's jpgsrc6b is supported! */ /* NOTE that the IJG code can be either 8- or 12-bit (eg. not both); so choose the one you've defined in jconfig.h; if you don't know what the heck I'm talking about, just leave it at 8-bit support (thank you!) */ #ifndef MNG_NO_INCLUDE_JNG #ifdef MNG_SUPPORT_FULL /* full support includes JNG */ #define MNG_SUPPORT_IJG6B #endif #ifndef MNG_SUPPORT_IJG6B #if defined(MNG_BUILD_SO) || defined(MNG_USE_SO) || defined(MNG_BUILD_DLL) || defined(MNG_USE_DLL) #define MNG_SUPPORT_IJG6B #endif #endif #if defined(MNG_SUPPORT_IJG6B) && !defined(MNG_SUPPORT_JPEG8) && !defined(MNG_SUPPORT_JPEG12) #define MNG_SUPPORT_JPEG8 /* #define MNG_SUPPORT_JPEG12 */ #endif /* The following is required to export the IJG routines from the DLL in the Windows-standard calling convention; currently this only works for Borland C++ !!! */ #if defined(MNG_BUILD_DLL) || defined(MNG_USE_DLL) #if defined(MNG_SUPPORT_IJG6B) && defined(__BORLANDC__) #define MNG_DEFINE_JPEG_STDCALL #endif #endif #endif /* ************************************************************************** */ /* enable required high-level functions */ /* use this to select the high-level functions you require */ /* if you only need to display a MNG, disable write support! */ /* if you only need to examine a MNG, disable write & display support! */ /* if you only need to copy a MNG, disable display support! */ /* if you only need to create a MNG, disable read & display support! */ /* NOTE that turning all options off will be very unuseful! */ #if !defined(MNG_SUPPORT_READ) && !defined(MNG_SUPPORT_WRITE) && !defined(MNG_SUPPORT_DISPLAY) #define MNG_SUPPORT_READ #if defined(MNG_BUILD_SO) || defined(MNG_USE_SO) || defined(MNG_BUILD_DLL) || defined(MNG_USE_DLL) #define MNG_SUPPORT_WRITE #endif #define MNG_SUPPORT_DISPLAY #endif /* ************************************************************************** */ /* enable chunk access functions */ /* use this to select whether you need access to the individual chunks */ /* useful if you want to examine a read MNG (you'll also need MNG_STORE_CHUNKS !)*/ /* required if you need to create & write a new MNG! */ #ifndef MNG_ACCESS_CHUNKS #if defined(MNG_BUILD_SO) || defined(MNG_USE_SO) || defined(MNG_BUILD_DLL) || defined(MNG_USE_DLL) #define MNG_ACCESS_CHUNKS #endif #endif /* ************************************************************************** */ /* enable exactly one(1) of the color-management functionality selectors */ /* use this to select the level of automatic color support */ /* MNG_FULL_CMS requires the lcms (little cms) external package ! */ /* if you want your own app (or the OS) to handle color-management select MNG_APP_CMS */ #define MNG_GAMMA_ONLY /* #define MNG_FULL_CMS */ /* #define MNG_APP_CMS */ /* ************************************************************************** */ /* enable automatic dithering */ /* use this if you need dithering support to convert high-resolution images to a low-resolution output-device */ /* NOTE that this is not supported yet */ /* #define MNG_AUTO_DITHER */ /* ************************************************************************** */ /* enable whether chunks should be stored for reference later */ /* use this if you need to examine the chunks of a MNG you have read, or (re-)write a MNG you have read */ /* turn this off if you want to reduce memory-consumption */ #ifndef MNG_STORE_CHUNKS #if defined(MNG_BUILD_SO) || defined(MNG_USE_SO) || defined(MNG_BUILD_DLL) || defined(MNG_USE_DLL) #define MNG_STORE_CHUNKS #endif #endif /* ************************************************************************** */ /* enable internal memory management (if your compiler supports it) */ /* use this if your compiler supports the 'standard' memory functions (calloc & free), and you want the library to use these functions and not bother your app with memory-callbacks */ /* #define MNG_INTERNAL_MEMMNGMT */ /* ************************************************************************** */ /* enable internal tracing-functionality (manual debugging purposes) */ /* use this if you have trouble location bugs or problems */ /* NOTE that you'll need to specify the trace callback function! */ /* #define MNG_SUPPORT_TRACE */ /* ************************************************************************** */ /* enable extended error- and trace-telltaling */ /* use this if you need explanatory messages with errors and/or tracing */ #if !defined(MNG_ERROR_TELLTALE) && !defined(MNG_TRACE_TELLTALE) #if defined(MNG_BUILD_SO) || defined(MNG_USE_SO) || defined(MNG_BUILD_DLL) || defined(MNG_USE_DLL) #define MNG_ERROR_TELLTALE #define MNG_TRACE_TELLTALE #endif #endif /* ************************************************************************** */ /* enable BIG/LITTLE endian optimizations */ /* enable BIG if you're on an architecture that supports big-endian reads and writes that aren't word-aligned */ /* according to reliable sources this only works for PowerPC (bigendian mode) and 680x0 */ /* enable LITTLE if you're on an architecture that supports little-endian */ /* when in doubt leave both off !!! */ /* #define MNG_BIGENDIAN_SUPPORTED */ /* #define MNG_LITTLEENDIAN_SUPPORTED */ /* ************************************************************************** */ /* enable 'version' functions */ #if !defined(MNG_VERSION_QUERY_SUPPORT) && \ !defined(MNG_NO_VERSION_QUERY_SUPPORT) #define MNG_VERSION_QUERY_SUPPORT #endif /* enable 'supports' function */ /* use this if you need to query the availability of functions at runtime; useful for apps that dynamically load the library and that need specific functions */ #if !defined(MNG_NO_SUPPORT_FUNCQUERY) && !defined(MNG_SUPPORT_FUNCQUERY) #if defined(MNG_BUILD_SO) || defined(MNG_USE_SO) || \ defined(MNG_BUILD_DLL) || defined(MNG_USE_DLL) #define MNG_SUPPORT_FUNCQUERY #endif #endif /* ************************************************************************** */ /* enable dynamic MNG features */ /* use this if you would like to have dynamic support for specifically designed MNGs; eg. this is useful for 'rollover' effects such as common on the world wide web */ #ifndef MNG_SUPPORT_DYNAMICMNG #if defined(MNG_BUILD_SO) || defined(MNG_USE_SO) || defined(MNG_BUILD_DLL) || defined(MNG_USE_DLL) #define MNG_SUPPORT_DYNAMICMNG #endif #endif #ifndef MNG_SUPPORT_DYNAMICMNG #ifndef MNG_SKIPCHUNK_evNT #define MNG_SKIPCHUNK_evNT #endif #endif #ifdef MNG_INCLUDE_JNG #ifndef MNG_NO_ACCESS_JPEG #ifndef MNG_ACCESS_JPEG #define MNG_ACCESS_JPEG #endif #endif #endif #ifdef MNG_INCLUDE_ZLIB #ifndef MNG_NO_ACCESS_ZLIB #ifndef MNG_ACCESS_ZLIB #define MNG_ACCESS_ZLIB #endif #endif #endif /* ************************************************************************** */ /* * * */ /* * End of user-selectable compile-time options * */ /* * * */ /* ************************************************************************** */ #endif /* _libmng_conf_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/stamp-h10000644000000000000000000000002712115373260013035 0ustar rootroottimestamp for config.h libmng-2.0.2/README.contrib0000644000000000000000000000640712005307152014002 0ustar rootrootThe contrib directory contains contributions made by fellow enthousiasts. (Check respective web-sites for the latest version) ---------------------------------------------------------------------- mngplg - A Netscape plugin for MNG - by Jason Summers http://pobox.com/~jason1/imaging/mngplg/ The very first contribution, and what a start! GIF look out, MNG is on the prowl and ready to swat you like a fly! ---------------------------------------------------------------------- mngplay - An SDL based MNG viewer - by Ralph Giles http://snow.ashlu.bc.ca/~giles/mng/ Another nice contribution. View MNG files on practically any platform with this standalone viewer. Source-code only; Requires SDL library and libmng.so (Modified by Greg Roelofs) ---------------------------------------------------------------------- mngview - A BCB port of the Delphi sample - by Andy Protano I have added this nice little port to the BCB samples directory. It adds a nifty progressbar while reading a file. Excellent work! Requires libmng.dll (note: this is in the BCB samples directory) ---------------------------------------------------------------------- mngdump - A BCB GUI-based dump utility - by Andy Protano Andy has sent me this fully functional MNG dump utility, that gives detailed information of the contents of any MNG file. Requires libmng.dll ---------------------------------------------------------------------- mng-view - A GTK-based MNG viewer - by Vova Babin Vova has been hacking away with the libmng code and has come up with this nice little sample how to write a MNG viewer using GTK. Thanks mate! Source-code only Requires GTK+ (1.2 or higher) and libmng (0.9.2 or higher) (Modified by Greg Roelofs) ---------------------------------------------------------------------- mngview - Another MNG viewer; this one for MSVC - by Nicholaus Brennig A welcome contribution from Nicholaus. Author of SlowView. A very nice image-handling utility for Windows. A welcome contribution since there have been numerous questions about linking libmng with MSVC. Well, look no further. Here it is! ---------------------------------------------------------------------- MSVC libmng project - An MSVC project to build libmng.dll - by Chad Austin Chad has contributed some project-files that you could use to build libmng.dll with MSVC. Please be sure to read the README file included. ---------------------------------------------------------------------- fbmngplay - A simple fbcon based mng player - by Stefan Reinauer Stefan has contributed this little example, based on Ralph's SDL player. It uses the kernel framebuffer device to display mng animations through the libmng interface. (currently for 16-bit buffers only) ---------------------------------------------------------------------- xmngview - Lesstif/Motif standalone player for MNG files - by Winfried Szukalski Winfried contributed this MNG player for X-based systems. (recently updated) ---------------------------------------------------------------------- makemng - A delta-MNG creation utility for MSVC - by Alex Volkov Alex sent me this nice utility that will allow you to create highly optmized MNGs using the delta-PNG capabilities of MNG. ---------------------------------------------------------------------- libmng-2.0.2/libmng_jpeg.h0000644000000000000000000000636312005307152014112 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_jpeg.h copyright (c) 2000-2002 G.Juyn * */ /* * version : 1.0.0 * */ /* * * */ /* * purpose : JPEG library interface (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the JPEG library interface * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added support for JDAA * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_jpeg_h_ #define _libmng_jpeg_h_ /* ************************************************************************** */ mng_retcode mngjpeg_initialize (mng_datap pData); mng_retcode mngjpeg_cleanup (mng_datap pData); mng_retcode mngjpeg_decompressinit (mng_datap pData); mng_retcode mngjpeg_decompressdata (mng_datap pData, mng_uint32 iRawsize, mng_uint8p pRawdata); mng_retcode mngjpeg_decompressfree (mng_datap pData); mng_retcode mngjpeg_decompressinit2 (mng_datap pData); mng_retcode mngjpeg_decompressdata2 (mng_datap pData, mng_uint32 iRawsize, mng_uint8p pRawdata); mng_retcode mngjpeg_decompressfree2 (mng_datap pData); /* ************************************************************************** */ #endif /* _libmng_jpeg_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/m4/0000755000000000000000000000000012115360512011775 5ustar rootrootlibmng-2.0.2/m4/libtool.m40000644000000000000000000104474112115360512013716 0ustar rootroot# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010 Free Software Foundation, # Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010 Free Software Foundation, # Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2010 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES # -------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[123]]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; haiku*) version_type=linux need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], [[If ld is used when linking, flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[[12]]*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS libmng-2.0.2/m4/ltsugar.m40000644000000000000000000001042412115360512013721 0ustar rootroot# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) libmng-2.0.2/m4/ltoptions.m40000644000000000000000000002725612115360512014306 0ustar rootroot# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) libmng-2.0.2/m4/lt~obsolete.m40000644000000000000000000001375612115360512014625 0ustar rootroot# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) libmng-2.0.2/m4/ltversion.m40000644000000000000000000000125612115360512014270 0ustar rootroot# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3293 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4]) m4_define([LT_PACKAGE_REVISION], [1.3293]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4' macro_revision='1.3293' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) libmng-2.0.2/libmng_trace.c0000644000000000000000000024475312005307152014265 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_trace.c copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Trace functions (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the trace functions * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - added callback error-reporting support * */ /* * * */ /* * 0.5.2 - 05/23/2000 - G.Juyn * */ /* * - added trace telltale reporting * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - added tracestrings for global animation color-chunks * */ /* * - added tracestrings for get/set of default ZLIB/IJG parms * */ /* * - added tracestrings for global PLTE,tRNS,bKGD * */ /* * 0.5.2 - 05/30/2000 - G.Juyn * */ /* * - added tracestrings for image-object promotion * */ /* * - added tracestrings for delta-image processing * */ /* * 0.5.2 - 06/02/2000 - G.Juyn * */ /* * - added tracestrings for getalphaline callback * */ /* * 0.5.2 - 06/05/2000 - G.Juyn * */ /* * - added tracestring for RGB8_A8 canvasstyle * */ /* * 0.5.2 - 06/06/2000 - G.Juyn * */ /* * - added tracestring for mng_read_resume HLAPI function * */ /* * * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - added tracestrings for get/set speedtype * */ /* * - added tracestring for get imagelevel * */ /* * 0.5.3 - 06/22/2000 - G.Juyn * */ /* * - added tracestring for delta-image processing * */ /* * - added tracestrings for PPLT chunk processing * */ /* * * */ /* * 0.9.1 - 07/07/2000 - G.Juyn * */ /* * - added tracecodes for special display processing * */ /* * 0.9.1 - 07/08/2000 - G.Juyn * */ /* * - added tracestring for get/set suspensionmode * */ /* * - added tracestrings for get/set display variables * */ /* * - added tracecode for read_databuffer (I/O-suspension) * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - added tracestrings for SAVE/SEEK callbacks * */ /* * - added tracestrings for get/set sectionbreaks * */ /* * - added tracestring for special error routine * */ /* * 0.9.1 - 07/19/2000 - G.Juyn * */ /* * - added tracestring for updatemngheader * */ /* * * */ /* * 0.9.2 - 07/31/2000 - G.Juyn * */ /* * - added tracestrings for status_xxxxx functions * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * - added tracestring for updatemngsimplicity * */ /* * * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 09/07/2000 - G.Juyn * */ /* * - added support for new filter_types * */ /* * 0.9.3 - 10/10/2000 - G.Juyn * */ /* * - added support for alpha-depth prediction * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - added JDAA chunk * */ /* * - added support for nEED * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added functions to retrieve PNG/JNG specific header-info * */ /* * - added optional support for bKGD for PNG images * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - added callback to process non-critical unknown chunks * */ /* * - added routine to discard "invalid" objects * */ /* * 0.9.3 - 10/19/2000 - G.Juyn * */ /* * - implemented delayed delta-processing * */ /* * 0.9.3 - 10/20/2000 - G.Juyn * */ /* * - added get/set for bKGD preference setting * */ /* * 0.9.3 - 10/21/2000 - G.Juyn * */ /* * - added get function for interlace/progressive display * */ /* * * */ /* * 0.9.4 - 1/18/2001 - G.Juyn * */ /* * - added "new" MAGN methods 3, 4 & 5 * */ /* * * */ /* * 1.0.1 - 02/08/2001 - G.Juyn * */ /* * - added MEND processing callback * */ /* * 1.0.1 - 04/21/2001 - G.Juyn (code by G.Kelly) * */ /* * - added BGRA8 canvas with premultiplied alpha * */ /* * 1.0.1 - 05/02/2001 - G.Juyn * */ /* * - added "default" sRGB generation (Thanks Marti!) * */ /* * * */ /* * 1.0.2 - 06/23/2001 - G.Juyn * */ /* * - added optimization option for MNG-video playback * */ /* * - added processterm callback * */ /* * 1.0.2 - 06/25/2001 - G.Juyn * */ /* * - added option to turn off progressive refresh * */ /* * * */ /* * 1.0.3 - 08/06/2001 - G.Juyn * */ /* * - added get function for last processed BACK chunk * */ /* * * */ /* * 1.0.5 - 08/15/2002 - G.Juyn * */ /* * - completed PROM support * */ /* * - completed delta-image support * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * - added HLAPI function to copy chunks * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - added support for PAST * */ /* * 1.0.5 - 09/22/2002 - G.Juyn * */ /* * - added bgrx8 canvas (filler byte) * */ /* * 1.0.5 - 09/23/2002 - G.Juyn * */ /* * - added in-memory color-correction of abstract images * */ /* * - added compose over/under routines for PAST processing * */ /* * - added flip & tile routines for PAST processing * */ /* * 1.0.5 - 10/09/2002 - G.Juyn * */ /* * - fixed trace-constants for PAST chunk * */ /* * 1.0.5 - 11/07/2002 - G.Juyn * */ /* * - added support to get totals after mng_read() * */ /* * * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - added conditionals around JNG and Delta-PNG code * */ /* * 1.0.6 - 07/14/2003 - G.R-P * */ /* * - added conditionals around various unused functions * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditionals around PAST chunk support * */ /* * * */ /* * 1.0.7 - 11/27/2003 - R.A * */ /* * - added CANVAS_RGB565 and CANVAS_BGR565 * */ /* * 1.0.7 - 01/25/2004 - J.S * */ /* * - added premultiplied alpha canvas' for RGBA, ARGB, ABGR * */ /* * 1.0.7 - 03/07/2004 - G. Randers-Pehrson * */ /* * - put gamma, cms-related declarations inside #ifdef * */ /* * 1.0.7 - 03/10/2004 - G.R-P * */ /* * - added conditionals around openstream/closestream * */ /* * * */ /* * 1.0.8 - 04/02/2004 - G.Juyn * */ /* * - added CRC existence & checking flags * */ /* * 1.0.8 - 04/11/2004 - G.Juyn * */ /* * - added data-push mechanisms for specialized decoders * */ /* * * */ /* * 1.0.9 - 10/03/2004 - G.Juyn * */ /* * - added function to retrieve current FRAM delay * */ /* * 1.0.9 - 10/14/2004 - G.Juyn * */ /* * - added bgr565_a8 canvas-style (thanks to J. Elvander) * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 07/06/2007 - G.R-P bugfix by Lucas Quintana * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_TRACE_PROCS /* ************************************************************************** */ #ifdef MNG_INCLUDE_TRACE_STRINGS MNG_LOCAL mng_trace_entry const trace_table [] = { {MNG_FN_INITIALIZE, "initialize"}, {MNG_FN_RESET, "reset"}, {MNG_FN_CLEANUP, "cleanup"}, {MNG_FN_READ, "read"}, {MNG_FN_WRITE, "write"}, {MNG_FN_CREATE, "create"}, {MNG_FN_READDISPLAY, "readdisplay"}, {MNG_FN_DISPLAY, "display"}, {MNG_FN_DISPLAY_RESUME, "display_resume"}, {MNG_FN_DISPLAY_FREEZE, "display_freeze"}, {MNG_FN_DISPLAY_RESET, "display_reset"}, #ifndef MNG_NO_DISPLAY_GO_SUPPORTED {MNG_FN_DISPLAY_GOFRAME, "display_goframe"}, {MNG_FN_DISPLAY_GOLAYER, "display_golayer"}, {MNG_FN_DISPLAY_GOTIME, "display_gotime"}, #endif {MNG_FN_GETLASTERROR, "getlasterror"}, {MNG_FN_READ_RESUME, "read_resume"}, {MNG_FN_TRAPEVENT, "trapevent"}, {MNG_FN_READ_PUSHDATA, "read_pushdata"}, {MNG_FN_READ_PUSHSIG, "read_pushsig"}, {MNG_FN_READ_PUSHCHUNK, "read_pushchunk"}, {MNG_FN_SETCB_MEMALLOC, "setcb_memalloc"}, {MNG_FN_SETCB_MEMFREE, "setcb_memfree"}, {MNG_FN_SETCB_READDATA, "setcb_readdata"}, {MNG_FN_SETCB_WRITEDATA, "setcb_writedata"}, {MNG_FN_SETCB_ERRORPROC, "setcb_errorproc"}, {MNG_FN_SETCB_TRACEPROC, "setcb_traceproc"}, {MNG_FN_SETCB_PROCESSHEADER, "setcb_processheader"}, {MNG_FN_SETCB_PROCESSTEXT, "setcb_processtext"}, {MNG_FN_SETCB_GETCANVASLINE, "setcb_getcanvasline"}, {MNG_FN_SETCB_GETBKGDLINE, "setcb_getbkgdline"}, {MNG_FN_SETCB_REFRESH, "setcb_refresh"}, {MNG_FN_SETCB_GETTICKCOUNT, "setcb_gettickcount"}, {MNG_FN_SETCB_SETTIMER, "setcb_settimer"}, {MNG_FN_SETCB_PROCESSGAMMA, "setcb_processgamma"}, {MNG_FN_SETCB_PROCESSCHROMA, "setcb_processchroma"}, {MNG_FN_SETCB_PROCESSSRGB, "setcb_processsrgb"}, {MNG_FN_SETCB_PROCESSICCP, "setcb_processiccp"}, {MNG_FN_SETCB_PROCESSAROW, "setcb_processarow"}, #ifndef MNG_NO_OPEN_CLOSE_STREAM {MNG_FN_SETCB_OPENSTREAM, "setcb_openstream"}, {MNG_FN_SETCB_CLOSESTREAM, "setcb_closestream"}, #endif {MNG_FN_SETCB_GETALPHALINE, "setcb_getalphaline"}, {MNG_FN_SETCB_PROCESSSAVE, "setcb_processsave"}, {MNG_FN_SETCB_PROCESSSEEK, "setcb_processseek"}, {MNG_FN_SETCB_PROCESSNEED, "setcb_processneed"}, {MNG_FN_SETCB_PROCESSUNKNOWN, "setcb_processunknown"}, {MNG_FN_SETCB_PROCESSMEND, "setcb_processmend"}, {MNG_FN_SETCB_PROCESSTERM, "setcb_processterm"}, {MNG_FN_SETCB_RELEASEDATA, "setcb_releasedata"}, {MNG_FN_GETCB_MEMALLOC, "getcb_memalloc"}, {MNG_FN_GETCB_MEMFREE, "getcb_memfree"}, {MNG_FN_GETCB_READDATA, "getcb_readdata,"}, {MNG_FN_GETCB_WRITEDATA, "getcb_writedata"}, {MNG_FN_GETCB_ERRORPROC, "getcb_errorproc"}, {MNG_FN_GETCB_TRACEPROC, "getcb_traceproc"}, {MNG_FN_GETCB_PROCESSHEADER, "getcb_processheader"}, {MNG_FN_GETCB_PROCESSTEXT, "getcb_processtext"}, {MNG_FN_GETCB_GETCANVASLINE, "getcb_getcanvasline"}, {MNG_FN_GETCB_GETBKGDLINE, "getcb_getbkgdline"}, {MNG_FN_GETCB_REFRESH, "getcb_refresh"}, {MNG_FN_GETCB_GETTICKCOUNT, "getcb_gettickcount"}, {MNG_FN_GETCB_SETTIMER, "getcb_settimer"}, {MNG_FN_GETCB_PROCESSGAMMA, "getcb_processgamma"}, {MNG_FN_GETCB_PROCESSCHROMA, "getcb_processchroma"}, {MNG_FN_GETCB_PROCESSSRGB, "getcb_processsrgb"}, {MNG_FN_GETCB_PROCESSICCP, "getcb_processiccp"}, {MNG_FN_GETCB_PROCESSAROW, "getcb_processarow"}, #ifndef MNG_NO_OPEN_CLOSE_STREAM {MNG_FN_GETCB_OPENSTREAM, "getcb_openstream"}, {MNG_FN_GETCB_CLOSESTREAM, "getcb_closestream"}, #endif {MNG_FN_GETCB_GETALPHALINE, "getcb_getalphaline"}, {MNG_FN_GETCB_PROCESSSAVE, "getcb_processsave"}, {MNG_FN_GETCB_PROCESSSEEK, "getcb_processseek"}, {MNG_FN_GETCB_PROCESSNEED, "getcb_processneed"}, {MNG_FN_GETCB_PROCESSUNKNOWN, "getcb_processunknown"}, {MNG_FN_GETCB_PROCESSMEND, "getcb_processmend"}, {MNG_FN_GETCB_PROCESSTERM, "getcb_processterm"}, {MNG_FN_GETCB_RELEASEDATA, "getcb_releasedata"}, {MNG_FN_SET_USERDATA, "set_userdata"}, {MNG_FN_SET_CANVASSTYLE, "set_canvasstyle"}, {MNG_FN_SET_BKGDSTYLE, "set_bkgdstyle"}, {MNG_FN_SET_BGCOLOR, "set_bgcolor"}, {MNG_FN_SET_STORECHUNKS, "set_storechunks"}, #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) {MNG_FN_SET_VIEWGAMMA, "set_viewgamma"}, #ifndef MNG_NO_DFLT_INFO {MNG_FN_SET_DISPLAYGAMMA, "set_displaygamma"}, #endif {MNG_FN_SET_DFLTIMGGAMMA, "set_dfltimggamma"}, #endif {MNG_FN_SET_SRGB, "set_srgb"}, {MNG_FN_SET_OUTPUTPROFILE, "set_outputprofile"}, {MNG_FN_SET_SRGBPROFILE, "set_srgbprofile"}, #ifndef MNG_SKIP_MAXCANVAS {MNG_FN_SET_MAXCANVASWIDTH, "set_maxcanvaswidth"}, {MNG_FN_SET_MAXCANVASHEIGHT, "set_maxcanvasheight"}, {MNG_FN_SET_MAXCANVASSIZE, "set_maxcanvassize"}, #endif #ifndef MNG_NO_ACCESS_ZLIB {MNG_FN_SET_ZLIB_LEVEL, "set_zlib_level"}, {MNG_FN_SET_ZLIB_METHOD, "set_zlib_method"}, {MNG_FN_SET_ZLIB_WINDOWBITS, "set_zlib_windowbits"}, {MNG_FN_SET_ZLIB_MEMLEVEL, "set_zlib_memlevel"}, {MNG_FN_SET_ZLIB_STRATEGY, "set_zlib_strategy"}, {MNG_FN_SET_ZLIB_MAXIDAT, "set_zlib_maxidat"}, #endif #ifndef MNG_NO_ACCESS_JPEG {MNG_FN_SET_JPEG_DCTMETHOD, "set_jpeg_dctmethod"}, {MNG_FN_SET_JPEG_QUALITY, "set_jpeg_quality"}, {MNG_FN_SET_JPEG_SMOOTHING, "set_jpeg_smoothing"}, {MNG_FN_SET_JPEG_PROGRESSIVE, "set_jpeg_progressive"}, {MNG_FN_SET_JPEG_OPTIMIZED, "set_jpeg_optimized"}, {MNG_FN_SET_JPEG_MAXJDAT, "set_jpeg_maxjdat"}, #endif {MNG_FN_SET_SPEED, "set_speed"}, {MNG_FN_SET_SUSPENSIONMODE, "set_suspensionmode"}, {MNG_FN_SET_SECTIONBREAKS, "set_sectionbreaks"}, {MNG_FN_SET_USEBKGD, "set_usebkgd"}, {MNG_FN_SET_OUTPUTPROFILE2, "set_outputprofile2"}, {MNG_FN_SET_SRGBPROFILE2, "set_srgbprofile2"}, {MNG_FN_SET_OUTPUTSRGB, "set_outputsrgb"}, {MNG_FN_SET_SRGBIMPLICIT, "set_srgbimplicit"}, {MNG_FN_SET_CACHEPLAYBACK, "set_cacheplayback"}, {MNG_FN_SET_DOPROGRESSIVE, "set_doprogressive"}, {MNG_FN_SET_CRCMODE, "set_crcmode"}, {MNG_FN_GET_USERDATA, "get_userdata"}, {MNG_FN_GET_SIGTYPE, "get_sigtype"}, {MNG_FN_GET_IMAGETYPE, "get_imagetype"}, {MNG_FN_GET_IMAGEWIDTH, "get_imagewidth"}, {MNG_FN_GET_IMAGEHEIGHT, "get_imageheight"}, {MNG_FN_GET_TICKS, "get_ticks"}, {MNG_FN_GET_FRAMECOUNT, "get_framecount"}, {MNG_FN_GET_LAYERCOUNT, "get_layercount"}, {MNG_FN_GET_PLAYTIME, "get_playtime"}, {MNG_FN_GET_SIMPLICITY, "get_simplicity"}, {MNG_FN_GET_CANVASSTYLE, "get_canvasstyle"}, {MNG_FN_GET_BKGDSTYLE, "get_bkgdstyle"}, {MNG_FN_GET_BGCOLOR, "get_bgcolor"}, {MNG_FN_GET_STORECHUNKS, "get_storechunks"}, #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) || defined(MNG_APP_CMS) {MNG_FN_GET_VIEWGAMMA, "get_viewgamma"}, {MNG_FN_GET_DISPLAYGAMMA, "get_displaygamma"}, #ifndef MNG_NO_DFLT_INFO {MNG_FN_GET_DFLTIMGGAMMA, "get_dfltimggamma"}, #endif #endif {MNG_FN_GET_SRGB, "get_srgb"}, #ifndef MNG_SKIP_MAXCANVAS {MNG_FN_GET_MAXCANVASWIDTH, "get_maxcanvaswidth"}, {MNG_FN_GET_MAXCANVASHEIGHT, "get_maxcanvasheight"}, #endif #ifndef MNG_NO_ACCESS_ZLIB {MNG_FN_GET_ZLIB_LEVEL, "get_zlib_level"}, {MNG_FN_GET_ZLIB_METHOD, "get_zlib_method"}, {MNG_FN_GET_ZLIB_WINDOWBITS, "get_zlib_windowbits"}, {MNG_FN_GET_ZLIB_MEMLEVEL, "get_zlib_memlevel"}, {MNG_FN_GET_ZLIB_STRATEGY, "get_zlib_strategy"}, {MNG_FN_GET_ZLIB_MAXIDAT, "get_zlib_maxidat"}, #endif #ifndef MNG_NO_ACCESS_JPEG {MNG_FN_GET_JPEG_DCTMETHOD, "get_jpeg_dctmethod"}, {MNG_FN_GET_JPEG_QUALITY, "get_jpeg_quality"}, {MNG_FN_GET_JPEG_SMOOTHING, "get_jpeg_smoothing"}, {MNG_FN_GET_JPEG_PROGRESSIVE, "get_jpeg_progressive"}, {MNG_FN_GET_JPEG_OPTIMIZED, "get_jpeg_optimized"}, {MNG_FN_GET_JPEG_MAXJDAT, "get_jpeg_maxjdat"}, #endif {MNG_FN_GET_SPEED, "get_speed"}, {MNG_FN_GET_IMAGELEVEL, "get_imagelevel"}, {MNG_FN_GET_SUSPENSIONMODE, "get_speed"}, {MNG_FN_GET_STARTTIME, "get_starttime"}, {MNG_FN_GET_RUNTIME, "get_runtime"}, #ifndef MNG_NO_CURRENT_INFO {MNG_FN_GET_CURRENTFRAME, "get_currentframe"}, {MNG_FN_GET_CURRENTLAYER, "get_currentlayer"}, {MNG_FN_GET_CURRENTPLAYTIME, "get_currentplaytime"}, #endif {MNG_FN_GET_SECTIONBREAKS, "get_sectionbreaks"}, {MNG_FN_GET_ALPHADEPTH, "get_alphadepth"}, {MNG_FN_GET_BITDEPTH, "get_bitdepth"}, {MNG_FN_GET_COLORTYPE, "get_colortype"}, {MNG_FN_GET_COMPRESSION, "get_compression"}, {MNG_FN_GET_FILTER, "get_filter"}, {MNG_FN_GET_INTERLACE, "get_interlace"}, {MNG_FN_GET_ALPHABITDEPTH, "get_alphabitdepth"}, {MNG_FN_GET_ALPHACOMPRESSION, "get_alphacompression"}, {MNG_FN_GET_ALPHAFILTER, "get_alphafilter"}, {MNG_FN_GET_ALPHAINTERLACE, "get_alphainterlace"}, {MNG_FN_GET_USEBKGD, "get_usebkgd"}, {MNG_FN_GET_REFRESHPASS, "get_refreshpass"}, {MNG_FN_GET_CACHEPLAYBACK, "get_cacheplayback"}, {MNG_FN_GET_DOPROGRESSIVE, "get_doprogressive"}, {MNG_FN_GET_LASTBACKCHUNK, "get_lastbackchunk"}, {MNG_FN_GET_LASTSEEKNAME, "get_lastseekname"}, #ifndef MNG_NO_CURRENT_INFO {MNG_FN_GET_TOTALFRAMES, "get_totalframes"}, {MNG_FN_GET_TOTALLAYERS, "get_totallayers"}, {MNG_FN_GET_TOTALPLAYTIME, "get_totalplaytime"}, #endif {MNG_FN_GET_CRCMODE, "get_crcmode"}, {MNG_FN_GET_CURRFRAMDELAY, "get_currframdelay"}, {MNG_FN_STATUS_ERROR, "status_error"}, {MNG_FN_STATUS_READING, "status_reading"}, {MNG_FN_STATUS_SUSPENDBREAK, "status_suspendbreak"}, {MNG_FN_STATUS_CREATING, "status_creating"}, {MNG_FN_STATUS_WRITING, "status_writing"}, {MNG_FN_STATUS_DISPLAYING, "status_displaying"}, {MNG_FN_STATUS_RUNNING, "status_running"}, {MNG_FN_STATUS_TIMERBREAK, "status_timerbreak"}, {MNG_FN_STATUS_DYNAMIC, "status_dynamic"}, {MNG_FN_STATUS_RUNNINGEVENT, "status_runningevent"}, {MNG_FN_ITERATE_CHUNKS, "iterate_chunks"}, {MNG_FN_COPY_CHUNK, "copy_chunk"}, {MNG_FN_GETCHUNK_IHDR, "getchunk_ihdr"}, {MNG_FN_GETCHUNK_PLTE, "getchunk_plte"}, {MNG_FN_GETCHUNK_IDAT, "getchunk_idat"}, {MNG_FN_GETCHUNK_IEND, "getchunk_iend"}, {MNG_FN_GETCHUNK_TRNS, "getchunk_trns"}, #ifndef MNG_SKIPCHUNK_gAMA {MNG_FN_GETCHUNK_GAMA, "getchunk_gama"}, #endif #ifndef MNG_SKIPCHUNK_cHRM {MNG_FN_GETCHUNK_CHRM, "getchunk_chrm"}, #endif #ifndef MNG_SKIPCHUNK_sRGB {MNG_FN_GETCHUNK_SRGB, "getchunk_srgb"}, #endif #ifndef MNG_SKIPCHUNK_iCCP {MNG_FN_GETCHUNK_ICCP, "getchunk_iccp"}, #endif #ifndef MNG_SKIPCHUNK_tEXt {MNG_FN_GETCHUNK_TEXT, "getchunk_text"}, #endif #ifndef MNG_SKIPCHUNK_zTXt {MNG_FN_GETCHUNK_ZTXT, "getchunk_ztxt"}, #endif #ifndef MNG_SKIPCHUNK_iTXt {MNG_FN_GETCHUNK_ITXT, "getchunk_itxt"}, #endif #ifndef MNG_SKIPCHUNK_bKGD {MNG_FN_GETCHUNK_BKGD, "getchunk_bkgd"}, #endif #ifndef MNG_SKIPCHUNK_pHYs {MNG_FN_GETCHUNK_PHYS, "getchunk_phys"}, #endif #ifndef MNG_SKIPCHUNK_sBIT {MNG_FN_GETCHUNK_SBIT, "getchunk_sbit"}, #endif #ifndef MNG_SKIPCHUNK_sPLT {MNG_FN_GETCHUNK_SPLT, "getchunk_splt"}, #endif #ifndef MNG_SKIPCHUNK_hIST {MNG_FN_GETCHUNK_HIST, "getchunk_hist"}, #endif #ifndef MNG_SKIPCHUNK_tIME {MNG_FN_GETCHUNK_TIME, "getchunk_time"}, #endif {MNG_FN_GETCHUNK_MHDR, "getchunk_mhdr"}, {MNG_FN_GETCHUNK_MEND, "getchunk_mend"}, #ifndef MNG_SKIPCHUNK_LOOP {MNG_FN_GETCHUNK_LOOP, "getchunk_loop"}, {MNG_FN_GETCHUNK_ENDL, "getchunk_endl"}, #endif {MNG_FN_GETCHUNK_DEFI, "getchunk_defi"}, #ifndef MNG_SKIPCHUNK_BASI {MNG_FN_GETCHUNK_BASI, "getchunk_basi"}, #endif {MNG_FN_GETCHUNK_CLON, "getchunk_clon"}, #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_GETCHUNK_PAST, "getchunk_past"}, #endif {MNG_FN_GETCHUNK_DISC, "getchunk_disc"}, {MNG_FN_GETCHUNK_BACK, "getchunk_back"}, {MNG_FN_GETCHUNK_FRAM, "getchunk_fram"}, {MNG_FN_GETCHUNK_MOVE, "getchunk_move"}, {MNG_FN_GETCHUNK_CLIP, "getchunk_clip"}, {MNG_FN_GETCHUNK_SHOW, "getchunk_show"}, {MNG_FN_GETCHUNK_TERM, "getchunk_term"}, #ifndef MNG_SKIPCHUNK_SAVE {MNG_FN_GETCHUNK_SAVE, "getchunk_save"}, #endif #ifndef MNG_SKIPCHUNK_SEEK {MNG_FN_GETCHUNK_SEEK, "getchunk_seek"}, #endif #ifndef MNG_SKIPCHUNK_eXPI {MNG_FN_GETCHUNK_EXPI, "getchunk_expi"}, #endif #ifndef MNG_SKIPCHUNK_fPRI {MNG_FN_GETCHUNK_FPRI, "getchunk_fpri"}, #endif #ifndef MNG_SKIPCHUNK_nEED {MNG_FN_GETCHUNK_NEED, "getchunk_need"}, #endif #ifndef MNG_SKIPCHUNK_pHYg {MNG_FN_GETCHUNK_PHYG, "getchunk_phyg"}, #endif #ifdef MNG_INCLUDE_JNG {MNG_FN_GETCHUNK_JHDR, "getchunk_jhdr"}, {MNG_FN_GETCHUNK_JDAT, "getchunk_jdat"}, {MNG_FN_GETCHUNK_JSEP, "getchunk_jsep"}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_FN_GETCHUNK_DHDR, "getchunk_dhdr"}, {MNG_FN_GETCHUNK_PROM, "getchunk_prom"}, {MNG_FN_GETCHUNK_IPNG, "getchunk_ipng"}, {MNG_FN_GETCHUNK_PPLT, "getchunk_pplt"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_GETCHUNK_IJNG, "getchunk_ijng"}, #endif #ifndef MNG_SKIPCHUNK_DROP {MNG_FN_GETCHUNK_DROP, "getchunk_drop"}, #endif #ifndef MNG_SKIPCHUNK_DBYK {MNG_FN_GETCHUNK_DBYK, "getchunk_dbyk"}, #endif #ifndef MNG_SKIPCHUNK_ORDR {MNG_FN_GETCHUNK_ORDR, "getchunk_ordr"}, #endif #endif {MNG_FN_GETCHUNK_UNKNOWN, "getchunk_unknown"}, {MNG_FN_GETCHUNK_MAGN, "getchunk_magn"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_GETCHUNK_JDAA, "getchunk_jdaa"}, #endif #ifndef MNG_SKIPCHUNK_evNT {MNG_FN_GETCHUNK_EVNT, "getchunk_evnt"}, #endif #ifdef MNG_INCLUDE_MPNG_PROPOSAL {MNG_FN_GETCHUNK_MPNG, "getchunk_mpng"}, #endif #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_GETCHUNK_PAST_SRC, "getchunk_past_src"}, #endif #ifndef MNG_SKIPCHUNK_SAVE {MNG_FN_GETCHUNK_SAVE_ENTRY, "getchunk_save_entry"}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_FN_GETCHUNK_PPLT_ENTRY, "getchunk_pplt_entry"}, {MNG_FN_GETCHUNK_ORDR_ENTRY, "getchunk_ordr_entry"}, #endif #ifndef MNG_SKIPCHUNK_evNT {MNG_FN_GETCHUNK_EVNT_ENTRY, "getchunk_evnt_entry"}, #endif #ifdef MNG_INCLUDE_MPNG_PROPOSAL {MNG_FN_GETCHUNK_MPNG_FRAME, "getchunk_mpng_frame"}, #endif {MNG_FN_PUTCHUNK_IHDR, "putchunk_ihdr"}, {MNG_FN_PUTCHUNK_PLTE, "putchunk_plte"}, {MNG_FN_PUTCHUNK_IDAT, "putchunk_idat"}, {MNG_FN_PUTCHUNK_IEND, "putchunk_iend"}, {MNG_FN_PUTCHUNK_TRNS, "putchunk_trns"}, #ifndef MNG_SKIPCHUNK_gAMA {MNG_FN_PUTCHUNK_GAMA, "putchunk_gama"}, #endif #ifndef MNG_SKIPCHUNK_cHRM {MNG_FN_PUTCHUNK_CHRM, "putchunk_chrm"}, #endif #ifndef MNG_SKIPCHUNK_sRGB {MNG_FN_PUTCHUNK_SRGB, "putchunk_srgb"}, #endif #ifndef MNG_SKIPCHUNK_iCCP {MNG_FN_PUTCHUNK_ICCP, "putchunk_iccp"}, #endif #ifndef MNG_SKIPCHUNK_tEXt {MNG_FN_PUTCHUNK_TEXT, "putchunk_text"}, #endif #ifndef MNG_SKIPCHUNK_zTXt {MNG_FN_PUTCHUNK_ZTXT, "putchunk_ztxt"}, #endif #ifndef MNG_SKIPCHUNK_iTXt {MNG_FN_PUTCHUNK_ITXT, "putchunk_itxt"}, #endif #ifndef MNG_SKIPCHUNK_bKGD {MNG_FN_PUTCHUNK_BKGD, "putchunk_bkgd"}, #endif #ifndef MNG_SKIPCHUNK_pHYs {MNG_FN_PUTCHUNK_PHYS, "putchunk_phys"}, #endif #ifndef MNG_SKIPCHUNK_sBIT {MNG_FN_PUTCHUNK_SBIT, "putchunk_sbit"}, #endif #ifndef MNG_SKIPCHUNK_sPLT {MNG_FN_PUTCHUNK_SPLT, "putchunk_splt"}, #endif #ifndef MNG_SKIPCHUNK_hIST {MNG_FN_PUTCHUNK_HIST, "putchunk_hist"}, #endif #ifndef MNG_SKIPCHUNK_tIME {MNG_FN_PUTCHUNK_TIME, "putchunk_time"}, #endif {MNG_FN_PUTCHUNK_MHDR, "putchunk_mhdr"}, {MNG_FN_PUTCHUNK_MEND, "putchunk_mend"}, {MNG_FN_PUTCHUNK_LOOP, "putchunk_loop"}, {MNG_FN_PUTCHUNK_ENDL, "putchunk_endl"}, {MNG_FN_PUTCHUNK_DEFI, "putchunk_defi"}, {MNG_FN_PUTCHUNK_BASI, "putchunk_basi"}, {MNG_FN_PUTCHUNK_CLON, "putchunk_clon"}, #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_PUTCHUNK_PAST, "putchunk_past"}, #endif {MNG_FN_PUTCHUNK_DISC, "putchunk_disc"}, {MNG_FN_PUTCHUNK_BACK, "putchunk_back"}, {MNG_FN_PUTCHUNK_FRAM, "putchunk_fram"}, {MNG_FN_PUTCHUNK_MOVE, "putchunk_move"}, {MNG_FN_PUTCHUNK_CLIP, "putchunk_clip"}, {MNG_FN_PUTCHUNK_SHOW, "putchunk_show"}, {MNG_FN_PUTCHUNK_TERM, "putchunk_term"}, #ifndef MNG_SKIPCHUNK_SAVE {MNG_FN_PUTCHUNK_SAVE, "putchunk_save"}, #endif #ifndef MNG_SKIPCHUNK_SEEK {MNG_FN_PUTCHUNK_SEEK, "putchunk_seek"}, #endif #ifndef MNG_SKIPCHUNK_eXPI {MNG_FN_PUTCHUNK_EXPI, "putchunk_expi"}, #endif #ifndef MNG_SKIPCHUNK_fPRI {MNG_FN_PUTCHUNK_FPRI, "putchunk_fpri"}, #endif #ifndef MNG_SKIPCHUNK_nEED {MNG_FN_PUTCHUNK_NEED, "putchunk_need"}, #endif #ifndef MNG_SKIPCHUNK_pHYg {MNG_FN_PUTCHUNK_PHYG, "putchunk_phyg"}, #endif #ifdef MNG_INCLUDE_JNG {MNG_FN_PUTCHUNK_JHDR, "putchunk_jhdr"}, {MNG_FN_PUTCHUNK_JDAT, "putchunk_jdat"}, {MNG_FN_PUTCHUNK_JSEP, "putchunk_jsep"}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_FN_PUTCHUNK_DHDR, "putchunk_dhdr"}, {MNG_FN_PUTCHUNK_PROM, "putchunk_prom"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_PUTCHUNK_IPNG, "putchunk_ipng"}, #endif {MNG_FN_PUTCHUNK_PPLT, "putchunk_pplt"}, {MNG_FN_PUTCHUNK_IJNG, "putchunk_ijng"}, #ifndef MNG_SKIPCHUNK_DROP {MNG_FN_PUTCHUNK_DROP, "putchunk_drop"}, #endif #ifndef MNG_SKIPCHUNK_DBYK {MNG_FN_PUTCHUNK_DBYK, "putchunk_dbyk"}, #endif #ifndef MNG_SKIPCHUNK_ORDR {MNG_FN_PUTCHUNK_ORDR, "putchunk_ordr"}, #endif #endif {MNG_FN_PUTCHUNK_UNKNOWN, "putchunk_unknown"}, {MNG_FN_PUTCHUNK_MAGN, "putchunk_magn"}, {MNG_FN_PUTCHUNK_JDAA, "putchunk_jdaa"}, #ifndef MNG_SKIPCHUNK_evNT {MNG_FN_PUTCHUNK_EVNT, "putchunk_evnt"}, #endif #ifdef MNG_INCLUDE_MPNG_PROPOSAL {MNG_FN_PUTCHUNK_MPNG, "putchunk_mpng"}, #endif #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_PUTCHUNK_PAST_SRC, "putchunk_past_src"}, #endif #ifndef MNG_SKIPCHUNK_SAVE {MNG_FN_PUTCHUNK_SAVE_ENTRY, "putchunk_save_entry"}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_FN_PUTCHUNK_PPLT_ENTRY, "putchunk_pplt_entry"}, #ifndef MNG_SKIPCHUNK_ORDR {MNG_FN_PUTCHUNK_ORDR_ENTRY, "putchunk_ordr_entry"}, #endif #endif #ifndef MNG_SKIPCHUNK_evNT {MNG_FN_PUTCHUNK_EVNT_ENTRY, "putchunk_evnt_entry"}, #endif #ifdef MNG_INCLUDE_MPNG_PROPOSAL {MNG_FN_PUTCHUNK_MPNG_FRAME, "putchunk_mpng_frame"}, #endif {MNG_FN_GETIMGDATA_SEQ, "getimgdata_seq"}, {MNG_FN_GETIMGDATA_CHUNKSEQ, "getimgdata_chunkseq"}, {MNG_FN_GETIMGDATA_CHUNK, "getimgdata_chunk"}, {MNG_FN_PUTIMGDATA_IHDR, "putimgdata_ihdr"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_PUTIMGDATA_JHDR, "putimgdata_jhdr"}, {MNG_FN_PUTIMGDATA_BASI, "putimgdata_basi"}, {MNG_FN_PUTIMGDATA_DHDR, "putimgdata_dhdr"}, #endif {MNG_FN_UPDATEMNGHEADER, "updatemngheader"}, {MNG_FN_UPDATEMNGSIMPLICITY, "updatemngsimplicity"}, {MNG_FN_PROCESS_RAW_CHUNK, "process_raw_chunk"}, {MNG_FN_READ_GRAPHIC, "read_graphic"}, {MNG_FN_DROP_CHUNKS, "drop_chunks"}, {MNG_FN_PROCESS_ERROR, "process_error"}, {MNG_FN_CLEAR_CMS, "clear_cms"}, {MNG_FN_DROP_OBJECTS, "drop_objects"}, {MNG_FN_READ_CHUNK, "read_chunk"}, {MNG_FN_LOAD_BKGDLAYER, "load_bkgdlayer"}, {MNG_FN_NEXT_FRAME, "next_frame"}, {MNG_FN_NEXT_LAYER, "next_layer"}, {MNG_FN_INTERFRAME_DELAY, "interframe_delay"}, {MNG_FN_DISPLAY_IMAGE, "display_image"}, {MNG_FN_DROP_IMGOBJECTS, "drop_imgobjects"}, {MNG_FN_DROP_ANIOBJECTS, "drop_aniobjects"}, {MNG_FN_INFLATE_BUFFER, "inflate_buffer"}, {MNG_FN_DEFLATE_BUFFER, "deflate_buffer"}, {MNG_FN_WRITE_RAW_CHUNK, "write_raw_chunk"}, {MNG_FN_WRITE_GRAPHIC, "write_graphic"}, {MNG_FN_SAVE_STATE, "save_state"}, {MNG_FN_RESTORE_STATE, "restore_state"}, {MNG_FN_DROP_SAVEDATA, "drop_savedata"}, #ifndef MNG_NO_DELTA_PNG {MNG_FN_EXECUTE_DELTA_IMAGE, "execute_delta_image"}, #endif {MNG_FN_PROCESS_DISPLAY, "process_display"}, {MNG_FN_CLEAR_CANVAS, "clear_canvas"}, {MNG_FN_READ_DATABUFFER, "read_databuffer"}, {MNG_FN_STORE_ERROR, "store_error"}, {MNG_FN_DROP_INVALID_OBJECTS, "drop_invalid_objects"}, {MNG_FN_RELEASE_PUSHDATA, "release_pushdata"}, {MNG_FN_READ_DATA, "read_data"}, {MNG_FN_READ_CHUNK_CRC, "read_chunk_crc"}, {MNG_FN_RELEASE_PUSHCHUNK, "release_pushchunk"}, {MNG_FN_DISPLAY_RGB8, "display_rgb8"}, {MNG_FN_DISPLAY_RGBA8, "display_rgba8"}, {MNG_FN_DISPLAY_ARGB8, "display_argb8"}, {MNG_FN_DISPLAY_BGR8, "display_bgr8"}, {MNG_FN_DISPLAY_BGRA8, "display_bgra8"}, {MNG_FN_DISPLAY_ABGR8, "display_abgr8"}, {MNG_FN_DISPLAY_RGB16, "display_rgb16"}, {MNG_FN_DISPLAY_RGBA16, "display_rgba16"}, {MNG_FN_DISPLAY_ARGB16, "display_argb16"}, {MNG_FN_DISPLAY_BGR16, "display_bgr16"}, {MNG_FN_DISPLAY_BGRA16, "display_bgra16"}, {MNG_FN_DISPLAY_ABGR16, "display_abgr16"}, {MNG_FN_DISPLAY_INDEX8, "display_index8"}, {MNG_FN_DISPLAY_INDEXA8, "display_indexa8"}, {MNG_FN_DISPLAY_AINDEX8, "display_aindex8"}, {MNG_FN_DISPLAY_GRAY8, "display_gray8"}, {MNG_FN_DISPLAY_GRAY16, "display_gray16"}, {MNG_FN_DISPLAY_GRAYA8, "display_graya8"}, {MNG_FN_DISPLAY_GRAYA16, "display_graya16"}, {MNG_FN_DISPLAY_AGRAY8, "display_agray8"}, {MNG_FN_DISPLAY_AGRAY16, "display_agray16"}, {MNG_FN_DISPLAY_DX15, "display_dx15"}, {MNG_FN_DISPLAY_DX16, "display_dx16"}, {MNG_FN_DISPLAY_RGB8_A8, "display_rgb8_a8"}, {MNG_FN_DISPLAY_BGRA8PM, "display_bgra8_pm"}, {MNG_FN_DISPLAY_BGRX8, "display_bgrx8"}, {MNG_FN_DISPLAY_RGB565, "display_rgb565"}, {MNG_FN_DISPLAY_RGBA565, "display_rgba565"}, {MNG_FN_DISPLAY_BGR565, "display_bgr565"}, {MNG_FN_DISPLAY_BGRA565, "display_bgra565"}, {MNG_FN_DISPLAY_RGBA8_PM, "display_rgba8_pm"}, {MNG_FN_DISPLAY_ARGB8_PM, "display_argb8_pm"}, {MNG_FN_DISPLAY_ABGR8_PM, "display_abgr8_pm"}, {MNG_FN_DISPLAY_BGR565_A8, "display_bgr565_a8"}, {MNG_FN_INIT_FULL_CMS, "init_full_cms"}, {MNG_FN_CORRECT_FULL_CMS, "correct_full_cms"}, {MNG_FN_INIT_GAMMA_ONLY, "init_gamma_only"}, {MNG_FN_CORRECT_GAMMA_ONLY, "correct_gamma_only"}, {MNG_FN_CORRECT_APP_CMS, "correct_app_cms"}, {MNG_FN_INIT_FULL_CMS_OBJ, "init_full_cms_obj"}, {MNG_FN_INIT_GAMMA_ONLY_OBJ, "init_gamma_only_obj"}, {MNG_FN_INIT_APP_CMS, "init_app_cms"}, {MNG_FN_INIT_APP_CMS_OBJ, "init_app_cms_obj"}, {MNG_FN_PROCESS_G1, "process_g1"}, {MNG_FN_PROCESS_G2, "process_g2"}, {MNG_FN_PROCESS_G4, "process_g4"}, {MNG_FN_PROCESS_G8, "process_g8"}, {MNG_FN_PROCESS_G16, "process_g16"}, {MNG_FN_PROCESS_RGB8, "process_rgb8"}, {MNG_FN_PROCESS_RGB16, "process_rgb16"}, {MNG_FN_PROCESS_IDX1, "process_idx1"}, {MNG_FN_PROCESS_IDX2, "process_idx2"}, {MNG_FN_PROCESS_IDX4, "process_idx4"}, {MNG_FN_PROCESS_IDX8, "process_idx8"}, {MNG_FN_PROCESS_GA8, "process_ga8"}, {MNG_FN_PROCESS_GA16, "process_ga16"}, {MNG_FN_PROCESS_RGBA8, "process_rgba8"}, {MNG_FN_PROCESS_RGBA16, "process_rgba16"}, {MNG_FN_INIT_G1_I, "init_g1_i"}, {MNG_FN_INIT_G2_I, "init_g2_i"}, {MNG_FN_INIT_G4_I, "init_g4_i"}, {MNG_FN_INIT_G8_I, "init_g8_i"}, {MNG_FN_INIT_G16_I, "init_g16_i"}, {MNG_FN_INIT_RGB8_I, "init_rgb8_i"}, {MNG_FN_INIT_RGB16_I, "init_rgb16_i"}, {MNG_FN_INIT_IDX1_I, "init_idx1_i"}, {MNG_FN_INIT_IDX2_I, "init_idx2_i"}, {MNG_FN_INIT_IDX4_I, "init_idx4_i"}, {MNG_FN_INIT_IDX8_I, "init_idx8_i"}, {MNG_FN_INIT_GA8_I, "init_ga8_i"}, {MNG_FN_INIT_GA16_I, "init_ga16_i"}, {MNG_FN_INIT_RGBA8_I, "init_rgba8_i"}, {MNG_FN_INIT_RGBA16_I, "init_rgba16_i"}, #ifndef MNG_OPTIMIZE_FOOTPRINT_INIT {MNG_FN_INIT_G1_NI, "init_g1_ni"}, {MNG_FN_INIT_G2_NI, "init_g2_ni"}, {MNG_FN_INIT_G4_NI, "init_g4_ni"}, {MNG_FN_INIT_G8_NI, "init_g8_ni"}, {MNG_FN_INIT_G16_NI, "init_g16_ni"}, {MNG_FN_INIT_RGB8_NI, "init_rgb8_ni"}, {MNG_FN_INIT_RGB16_NI, "init_rgb16_ni"}, {MNG_FN_INIT_IDX1_NI, "init_idx1_ni"}, {MNG_FN_INIT_IDX2_NI, "init_idx2_ni"}, {MNG_FN_INIT_IDX4_NI, "init_idx4_ni"}, {MNG_FN_INIT_IDX8_NI, "init_idx8_ni"}, {MNG_FN_INIT_GA8_NI, "init_ga8_ni"}, {MNG_FN_INIT_GA16_NI, "init_ga16_ni"}, {MNG_FN_INIT_RGBA8_NI, "init_rgba8_ni"}, {MNG_FN_INIT_RGBA16_NI, "init_rgba16_ni"}, #endif {MNG_FN_INIT_ROWPROC, "init_rowproc"}, {MNG_FN_NEXT_ROW, "next_row"}, {MNG_FN_CLEANUP_ROWPROC, "cleanup_rowproc"}, {MNG_FN_FILTER_A_ROW, "filter_a_row"}, {MNG_FN_FILTER_SUB, "filter_sub"}, {MNG_FN_FILTER_UP, "filter_up"}, {MNG_FN_FILTER_AVERAGE, "filter_average"}, {MNG_FN_FILTER_PAETH, "filter_paeth"}, {MNG_FN_INIT_ROWDIFFERING, "init_rowdiffering"}, {MNG_FN_DIFFER_G1, "differ_g1"}, {MNG_FN_DIFFER_G2, "differ_g2"}, {MNG_FN_DIFFER_G4, "differ_g4"}, {MNG_FN_DIFFER_G8, "differ_g8"}, {MNG_FN_DIFFER_G16, "differ_g16"}, {MNG_FN_DIFFER_RGB8, "differ_rgb8"}, {MNG_FN_DIFFER_RGB16, "differ_rgb16"}, {MNG_FN_DIFFER_IDX1, "differ_idx1"}, {MNG_FN_DIFFER_IDX2, "differ_idx2"}, {MNG_FN_DIFFER_IDX4, "differ_idx4"}, {MNG_FN_DIFFER_IDX8, "differ_idx8"}, {MNG_FN_DIFFER_GA8, "differ_ga8"}, {MNG_FN_DIFFER_GA16, "differ_ga16"}, {MNG_FN_DIFFER_RGBA8, "differ_rgba8"}, {MNG_FN_DIFFER_RGBA16, "differ_rgba16"}, {MNG_FN_CREATE_IMGDATAOBJECT, "create_imgdataobject"}, {MNG_FN_FREE_IMGDATAOBJECT, "free_imgdataobject"}, {MNG_FN_CLONE_IMGDATAOBJECT, "clone_imgdataobject"}, {MNG_FN_CREATE_IMGOBJECT, "create_imgobject"}, {MNG_FN_FREE_IMGOBJECT, "free_imgobject"}, {MNG_FN_FIND_IMGOBJECT, "find_imgobject"}, {MNG_FN_CLONE_IMGOBJECT, "clone_imgobject"}, {MNG_FN_RESET_OBJECTDETAILS, "reset_objectdetails"}, {MNG_FN_RENUM_IMGOBJECT, "renum_imgobject"}, {MNG_FN_PROMOTE_IMGOBJECT, "promote_imgobject"}, {MNG_FN_MAGNIFY_IMGOBJECT, "magnify_imgobject"}, {MNG_FN_COLORCORRECT_OBJECT, "colorcorrect_object"}, {MNG_FN_STORE_G1, "store_g1"}, {MNG_FN_STORE_G2, "store_g2"}, {MNG_FN_STORE_G4, "store_g4"}, {MNG_FN_STORE_G8, "store_g8"}, {MNG_FN_STORE_G16, "store_g16"}, {MNG_FN_STORE_RGB8, "store_rgb8"}, {MNG_FN_STORE_RGB16, "store_rgb16"}, {MNG_FN_STORE_IDX1, "store_idx1"}, {MNG_FN_STORE_IDX2, "store_idx2"}, {MNG_FN_STORE_IDX4, "store_idx4"}, {MNG_FN_STORE_IDX8, "store_idx8"}, {MNG_FN_STORE_GA8, "store_ga8"}, {MNG_FN_STORE_GA16, "store_ga16"}, {MNG_FN_STORE_RGBA8, "store_rgba8"}, {MNG_FN_STORE_RGBA16, "store_rgba16"}, {MNG_FN_RETRIEVE_G8, "retrieve_g8"}, {MNG_FN_RETRIEVE_G16, "retrieve_g16"}, {MNG_FN_RETRIEVE_RGB8, "retrieve_rgb8"}, {MNG_FN_RETRIEVE_RGB16, "retrieve_rgb16"}, {MNG_FN_RETRIEVE_IDX8, "retrieve_idx8"}, {MNG_FN_RETRIEVE_GA8, "retrieve_ga8"}, {MNG_FN_RETRIEVE_GA16, "retrieve_ga16"}, {MNG_FN_RETRIEVE_RGBA8, "retrieve_rgba8"}, {MNG_FN_RETRIEVE_RGBA16, "retrieve_rgba16"}, #ifndef MNG_NO_DELTA_PNG {MNG_FN_DELTA_G1, "delta_g1"}, {MNG_FN_DELTA_G2, "delta_g2"}, {MNG_FN_DELTA_G4, "delta_g4"}, {MNG_FN_DELTA_G8, "delta_g8"}, {MNG_FN_DELTA_G16, "delta_g16"}, {MNG_FN_DELTA_RGB8, "delta_rgb8"}, {MNG_FN_DELTA_RGB16, "delta_rgb16"}, {MNG_FN_DELTA_IDX1, "delta_idx1"}, {MNG_FN_DELTA_IDX2, "delta_idx2"}, {MNG_FN_DELTA_IDX4, "delta_idx4"}, {MNG_FN_DELTA_IDX8, "delta_idx8"}, {MNG_FN_DELTA_GA8, "delta_ga8"}, {MNG_FN_DELTA_GA16, "delta_ga16"}, {MNG_FN_DELTA_RGBA8, "delta_rgba8"}, {MNG_FN_DELTA_RGBA16, "delta_rgba16"}, #endif {MNG_FN_CREATE_ANI_LOOP, "create_ani_loop"}, {MNG_FN_CREATE_ANI_ENDL, "create_ani_endl"}, {MNG_FN_CREATE_ANI_DEFI, "create_ani_defi"}, {MNG_FN_CREATE_ANI_BASI, "create_ani_basi"}, {MNG_FN_CREATE_ANI_CLON, "create_ani_clon"}, #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_CREATE_ANI_PAST, "create_ani_past"}, #endif {MNG_FN_CREATE_ANI_DISC, "create_ani_disc"}, {MNG_FN_CREATE_ANI_BACK, "create_ani_back"}, {MNG_FN_CREATE_ANI_FRAM, "create_ani_fram"}, {MNG_FN_CREATE_ANI_MOVE, "create_ani_move"}, {MNG_FN_CREATE_ANI_CLIP, "create_ani_clip"}, {MNG_FN_CREATE_ANI_SHOW, "create_ani_show"}, {MNG_FN_CREATE_ANI_TERM, "create_ani_term"}, {MNG_FN_CREATE_ANI_SAVE, "create_ani_save"}, {MNG_FN_CREATE_ANI_SEEK, "create_ani_seek"}, {MNG_FN_CREATE_ANI_GAMA, "create_ani_gama"}, {MNG_FN_CREATE_ANI_CHRM, "create_ani_chrm"}, {MNG_FN_CREATE_ANI_SRGB, "create_ani_srgb"}, {MNG_FN_CREATE_ANI_ICCP, "create_ani_iccp"}, {MNG_FN_CREATE_ANI_PLTE, "create_ani_plte"}, {MNG_FN_CREATE_ANI_TRNS, "create_ani_trns"}, {MNG_FN_CREATE_ANI_BKGD, "create_ani_bkgd"}, #ifndef MNG_NO_DELTA_PNG {MNG_FN_CREATE_ANI_DHDR, "create_ani_dhdr"}, {MNG_FN_CREATE_ANI_PROM, "create_ani_prom"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_CREATE_ANI_IPNG, "create_ani_ipng"}, #endif {MNG_FN_CREATE_ANI_IJNG, "create_ani_ijng"}, {MNG_FN_CREATE_ANI_PPLT, "create_ani_pplt"}, #endif {MNG_FN_CREATE_ANI_MAGN, "create_ani_magn"}, {MNG_FN_CREATE_ANI_IMAGE, "create_ani_image"}, {MNG_FN_CREATE_EVENT, "create_event"}, {MNG_FN_FREE_ANI_LOOP, "free_ani_loop"}, {MNG_FN_FREE_ANI_ENDL, "free_ani_endl"}, {MNG_FN_FREE_ANI_DEFI, "free_ani_defi"}, {MNG_FN_FREE_ANI_BASI, "free_ani_basi"}, {MNG_FN_FREE_ANI_CLON, "free_ani_clon"}, #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_FREE_ANI_PAST, "free_ani_past"}, #endif {MNG_FN_FREE_ANI_DISC, "free_ani_disc"}, {MNG_FN_FREE_ANI_BACK, "free_ani_back"}, {MNG_FN_FREE_ANI_FRAM, "free_ani_fram"}, {MNG_FN_FREE_ANI_MOVE, "free_ani_move"}, {MNG_FN_FREE_ANI_CLIP, "free_ani_clip"}, {MNG_FN_FREE_ANI_SHOW, "free_ani_show"}, {MNG_FN_FREE_ANI_TERM, "free_ani_term"}, {MNG_FN_FREE_ANI_SAVE, "free_ani_save"}, {MNG_FN_FREE_ANI_SEEK, "free_ani_seek"}, {MNG_FN_FREE_ANI_GAMA, "free_ani_gama"}, {MNG_FN_FREE_ANI_CHRM, "free_ani_chrm"}, {MNG_FN_FREE_ANI_SRGB, "free_ani_srgb"}, {MNG_FN_FREE_ANI_ICCP, "free_ani_iccp"}, {MNG_FN_FREE_ANI_PLTE, "free_ani_plte"}, {MNG_FN_FREE_ANI_TRNS, "free_ani_trns"}, {MNG_FN_FREE_ANI_BKGD, "free_ani_bkgd"}, #ifndef MNG_NO_DELTA_PNG {MNG_FN_FREE_ANI_DHDR, "free_ani_dhdr"}, {MNG_FN_FREE_ANI_PROM, "free_ani_prom"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_FREE_ANI_IPNG, "free_ani_ipng"}, #endif {MNG_FN_FREE_ANI_IJNG, "free_ani_ijng"}, {MNG_FN_FREE_ANI_PPLT, "free_ani_pplt"}, #endif {MNG_FN_FREE_ANI_MAGN, "free_ani_magn"}, {MNG_FN_FREE_ANI_IMAGE, "free_ani_image"}, {MNG_FN_FREE_EVENT, "free_event"}, {MNG_FN_PROCESS_ANI_LOOP, "process_ani_loop"}, {MNG_FN_PROCESS_ANI_ENDL, "process_ani_endl"}, {MNG_FN_PROCESS_ANI_DEFI, "process_ani_defi"}, {MNG_FN_PROCESS_ANI_BASI, "process_ani_basi"}, {MNG_FN_PROCESS_ANI_CLON, "process_ani_clon"}, #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_PROCESS_ANI_PAST, "process_ani_past"}, #endif {MNG_FN_PROCESS_ANI_DISC, "process_ani_disc"}, {MNG_FN_PROCESS_ANI_BACK, "process_ani_back"}, {MNG_FN_PROCESS_ANI_FRAM, "process_ani_fram"}, {MNG_FN_PROCESS_ANI_MOVE, "process_ani_move"}, {MNG_FN_PROCESS_ANI_CLIP, "process_ani_clip"}, {MNG_FN_PROCESS_ANI_SHOW, "process_ani_show"}, {MNG_FN_PROCESS_ANI_TERM, "process_ani_term"}, {MNG_FN_PROCESS_ANI_SAVE, "process_ani_save"}, {MNG_FN_PROCESS_ANI_SEEK, "process_ani_seek"}, {MNG_FN_PROCESS_ANI_GAMA, "process_ani_gama"}, {MNG_FN_PROCESS_ANI_CHRM, "process_ani_chrm"}, {MNG_FN_PROCESS_ANI_SRGB, "process_ani_srgb"}, {MNG_FN_PROCESS_ANI_ICCP, "process_ani_iccp"}, {MNG_FN_PROCESS_ANI_PLTE, "process_ani_plte"}, {MNG_FN_PROCESS_ANI_TRNS, "process_ani_trns"}, {MNG_FN_PROCESS_ANI_BKGD, "process_ani_bkgd"}, #ifndef MNG_NO_DELTA_PNG {MNG_FN_PROCESS_ANI_DHDR, "process_ani_dhdr"}, {MNG_FN_PROCESS_ANI_PROM, "process_ani_prom"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_PROCESS_ANI_IPNG, "process_ani_ipng"}, #endif {MNG_FN_PROCESS_ANI_IJNG, "process_ani_ijng"}, {MNG_FN_PROCESS_ANI_PPLT, "process_ani_pplt"}, #endif {MNG_FN_PROCESS_ANI_MAGN, "process_ani_magn"}, {MNG_FN_PROCESS_ANI_IMAGE, "process_ani_image"}, {MNG_FN_PROCESS_EVENT, "process_event"}, {MNG_FN_RESTORE_BACKIMAGE, "restore_backimage"}, {MNG_FN_RESTORE_BACKCOLOR, "restore_backcolor"}, {MNG_FN_RESTORE_BGCOLOR, "restore_bgcolor"}, {MNG_FN_RESTORE_RGB8, "restore_rgb8"}, {MNG_FN_RESTORE_BGR8, "restore_bgr8"}, {MNG_FN_RESTORE_BKGD, "restore_bkgd"}, {MNG_FN_RESTORE_BGRX8, "restore_bgrx8"}, {MNG_FN_RESTORE_RGB565, "restore_rgb565"}, {MNG_FN_INIT_IHDR, "init_ihdr"}, {MNG_FN_INIT_PLTE, "init_plte"}, {MNG_FN_INIT_IDAT, "init_idat"}, {MNG_FN_INIT_IEND, "init_iend"}, {MNG_FN_INIT_TRNS, "init_trns"}, {MNG_FN_INIT_GAMA, "init_gama"}, {MNG_FN_INIT_CHRM, "init_chrm"}, {MNG_FN_INIT_SRGB, "init_srgb"}, {MNG_FN_INIT_ICCP, "init_iccp"}, {MNG_FN_INIT_TEXT, "init_text"}, {MNG_FN_INIT_ZTXT, "init_ztxt"}, {MNG_FN_INIT_ITXT, "init_itxt"}, {MNG_FN_INIT_BKGD, "init_bkgd"}, {MNG_FN_INIT_PHYS, "init_phys"}, {MNG_FN_INIT_SBIT, "init_sbit"}, {MNG_FN_INIT_SPLT, "init_splt"}, {MNG_FN_INIT_HIST, "init_hist"}, {MNG_FN_INIT_TIME, "init_time"}, {MNG_FN_INIT_MHDR, "init_mhdr"}, {MNG_FN_INIT_MEND, "init_mend"}, {MNG_FN_INIT_LOOP, "init_loop"}, {MNG_FN_INIT_ENDL, "init_endl"}, {MNG_FN_INIT_DEFI, "init_defi"}, {MNG_FN_INIT_BASI, "init_basi"}, {MNG_FN_INIT_CLON, "init_clon"}, #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_INIT_PAST, "init_past"}, #endif {MNG_FN_INIT_DISC, "init_disc"}, {MNG_FN_INIT_BACK, "init_back"}, {MNG_FN_INIT_FRAM, "init_fram"}, {MNG_FN_INIT_MOVE, "init_move"}, {MNG_FN_INIT_CLIP, "init_clip"}, {MNG_FN_INIT_SHOW, "init_show"}, {MNG_FN_INIT_TERM, "init_term"}, {MNG_FN_INIT_SAVE, "init_save"}, {MNG_FN_INIT_SEEK, "init_seek"}, {MNG_FN_INIT_EXPI, "init_expi"}, {MNG_FN_INIT_FPRI, "init_fpri"}, {MNG_FN_INIT_NEED, "init_need"}, {MNG_FN_INIT_PHYG, "init_phyg"}, #ifndef MNG_NO_DELTA_PNG {MNG_FN_INIT_JHDR, "init_jhdr"}, {MNG_FN_INIT_JDAT, "init_jdat"}, {MNG_FN_INIT_JSEP, "init_jsep"}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_FN_INIT_DHDR, "init_dhdr"}, {MNG_FN_INIT_PROM, "init_prom"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_INIT_IPNG, "init_ipng"}, #endif {MNG_FN_INIT_PPLT, "init_pplt"}, {MNG_FN_INIT_IJNG, "init_ijng"}, {MNG_FN_INIT_DROP, "init_drop"}, {MNG_FN_INIT_DBYK, "init_dbyk"}, {MNG_FN_INIT_ORDR, "init_ordr"}, #endif {MNG_FN_INIT_UNKNOWN, "init_unknown"}, {MNG_FN_INIT_MAGN, "init_magn"}, {MNG_FN_INIT_JDAA, "init_jdaa"}, {MNG_FN_INIT_EVNT, "init_evnt"}, #ifdef MNG_INCLUDE_MPNG_PROPOSAL {MNG_FN_INIT_MPNG, "init_mpng"}, #endif {MNG_FN_ASSIGN_IHDR, "assign_ihdr"}, {MNG_FN_ASSIGN_PLTE, "assign_plte"}, {MNG_FN_ASSIGN_IDAT, "assign_idat"}, {MNG_FN_ASSIGN_IEND, "assign_iend"}, {MNG_FN_ASSIGN_TRNS, "assign_trns"}, {MNG_FN_ASSIGN_GAMA, "assign_gama"}, {MNG_FN_ASSIGN_CHRM, "assign_chrm"}, {MNG_FN_ASSIGN_SRGB, "assign_srgb"}, {MNG_FN_ASSIGN_ICCP, "assign_iccp"}, {MNG_FN_ASSIGN_TEXT, "assign_text"}, {MNG_FN_ASSIGN_ZTXT, "assign_ztxt"}, {MNG_FN_ASSIGN_ITXT, "assign_itxt"}, {MNG_FN_ASSIGN_BKGD, "assign_bkgd"}, {MNG_FN_ASSIGN_PHYS, "assign_phys"}, {MNG_FN_ASSIGN_SBIT, "assign_sbit"}, {MNG_FN_ASSIGN_SPLT, "assign_splt"}, {MNG_FN_ASSIGN_HIST, "assign_hist"}, {MNG_FN_ASSIGN_TIME, "assign_time"}, {MNG_FN_ASSIGN_MHDR, "assign_mhdr"}, {MNG_FN_ASSIGN_MEND, "assign_mend"}, {MNG_FN_ASSIGN_LOOP, "assign_loop"}, {MNG_FN_ASSIGN_ENDL, "assign_endl"}, {MNG_FN_ASSIGN_DEFI, "assign_defi"}, {MNG_FN_ASSIGN_BASI, "assign_basi"}, {MNG_FN_ASSIGN_CLON, "assign_clon"}, #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_ASSIGN_PAST, "assign_past"}, #endif {MNG_FN_ASSIGN_DISC, "assign_disc"}, {MNG_FN_ASSIGN_BACK, "assign_back"}, {MNG_FN_ASSIGN_FRAM, "assign_fram"}, {MNG_FN_ASSIGN_MOVE, "assign_move"}, {MNG_FN_ASSIGN_CLIP, "assign_clip"}, {MNG_FN_ASSIGN_SHOW, "assign_show"}, {MNG_FN_ASSIGN_TERM, "assign_term"}, {MNG_FN_ASSIGN_SAVE, "assign_save"}, {MNG_FN_ASSIGN_SEEK, "assign_seek"}, {MNG_FN_ASSIGN_EXPI, "assign_expi"}, {MNG_FN_ASSIGN_FPRI, "assign_fpri"}, {MNG_FN_ASSIGN_NEED, "assign_need"}, {MNG_FN_ASSIGN_PHYG, "assign_phyg"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_ASSIGN_JHDR, "assign_jhdr"}, {MNG_FN_ASSIGN_JDAT, "assign_jdat"}, {MNG_FN_ASSIGN_JSEP, "assign_jsep"}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_FN_ASSIGN_DHDR, "assign_dhdr"}, {MNG_FN_ASSIGN_PROM, "assign_prom"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_ASSIGN_IPNG, "assign_ipng"}, #endif {MNG_FN_ASSIGN_PPLT, "assign_pplt"}, {MNG_FN_ASSIGN_IJNG, "assign_ijng"}, {MNG_FN_ASSIGN_DROP, "assign_drop"}, {MNG_FN_ASSIGN_DBYK, "assign_dbyk"}, {MNG_FN_ASSIGN_ORDR, "assign_ordr"}, #endif {MNG_FN_ASSIGN_UNKNOWN, "assign_unknown"}, {MNG_FN_ASSIGN_MAGN, "assign_magn"}, {MNG_FN_ASSIGN_JDAA, "assign_jdaa"}, {MNG_FN_ASSIGN_EVNT, "assign_evnt"}, #ifdef MNG_INCLUDE_MPNG_PROPOSAL {MNG_FN_ASSIGN_MPNG, "assign_mpng"}, #endif {MNG_FN_FREE_IHDR, "free_ihdr"}, {MNG_FN_FREE_PLTE, "free_plte"}, {MNG_FN_FREE_IDAT, "free_idat"}, {MNG_FN_FREE_IEND, "free_iend"}, {MNG_FN_FREE_TRNS, "free_trns"}, {MNG_FN_FREE_GAMA, "free_gama"}, {MNG_FN_FREE_CHRM, "free_chrm"}, {MNG_FN_FREE_SRGB, "free_srgb"}, {MNG_FN_FREE_ICCP, "free_iccp"}, {MNG_FN_FREE_TEXT, "free_text"}, {MNG_FN_FREE_ZTXT, "free_ztxt"}, {MNG_FN_FREE_ITXT, "free_itxt"}, {MNG_FN_FREE_BKGD, "free_bkgd"}, {MNG_FN_FREE_PHYS, "free_phys"}, {MNG_FN_FREE_SBIT, "free_sbit"}, {MNG_FN_FREE_SPLT, "free_splt"}, {MNG_FN_FREE_HIST, "free_hist"}, {MNG_FN_FREE_TIME, "free_time"}, {MNG_FN_FREE_MHDR, "free_mhdr"}, {MNG_FN_FREE_MEND, "free_mend"}, {MNG_FN_FREE_LOOP, "free_loop"}, {MNG_FN_FREE_ENDL, "free_endl"}, {MNG_FN_FREE_DEFI, "free_defi"}, {MNG_FN_FREE_BASI, "free_basi"}, {MNG_FN_FREE_CLON, "free_clon"}, #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_FREE_PAST, "free_past"}, #endif {MNG_FN_FREE_DISC, "free_disc"}, {MNG_FN_FREE_BACK, "free_back"}, {MNG_FN_FREE_FRAM, "free_fram"}, {MNG_FN_FREE_MOVE, "free_move"}, {MNG_FN_FREE_CLIP, "free_clip"}, {MNG_FN_FREE_SHOW, "free_show"}, {MNG_FN_FREE_TERM, "free_term"}, {MNG_FN_FREE_SAVE, "free_save"}, {MNG_FN_FREE_SEEK, "free_seek"}, {MNG_FN_FREE_EXPI, "free_expi"}, {MNG_FN_FREE_FPRI, "free_fpri"}, {MNG_FN_FREE_NEED, "free_need"}, {MNG_FN_FREE_PHYG, "free_phyg"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_FREE_JHDR, "free_jhdr"}, {MNG_FN_FREE_JDAT, "free_jdat"}, {MNG_FN_FREE_JSEP, "free_jsep"}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_FN_FREE_DHDR, "free_dhdr"}, {MNG_FN_FREE_PROM, "free_prom"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_FREE_IPNG, "free_ipng"}, #endif {MNG_FN_FREE_PPLT, "free_pplt"}, {MNG_FN_FREE_IJNG, "free_ijng"}, {MNG_FN_FREE_DROP, "free_drop"}, {MNG_FN_FREE_DBYK, "free_dbyk"}, {MNG_FN_FREE_ORDR, "free_ordr"}, #endif {MNG_FN_FREE_UNKNOWN, "free_unknown"}, {MNG_FN_FREE_MAGN, "free_magn"}, {MNG_FN_FREE_JDAA, "free_jdaa"}, {MNG_FN_FREE_EVNT, "free_evnt"}, #ifdef MNG_INCLUDE_MPNG_PROPOSAL {MNG_FN_FREE_MPNG, "free_mpng"}, #endif {MNG_FN_READ_IHDR, "read_ihdr"}, {MNG_FN_READ_PLTE, "read_plte"}, {MNG_FN_READ_IDAT, "read_idat"}, {MNG_FN_READ_IEND, "read_iend"}, {MNG_FN_READ_TRNS, "read_trns"}, {MNG_FN_READ_GAMA, "read_gama"}, {MNG_FN_READ_CHRM, "read_chrm"}, {MNG_FN_READ_SRGB, "read_srgb"}, {MNG_FN_READ_ICCP, "read_iccp"}, {MNG_FN_READ_TEXT, "read_text"}, {MNG_FN_READ_ZTXT, "read_ztxt"}, {MNG_FN_READ_ITXT, "read_itxt"}, {MNG_FN_READ_BKGD, "read_bkgd"}, {MNG_FN_READ_PHYS, "read_phys"}, {MNG_FN_READ_SBIT, "read_sbit"}, {MNG_FN_READ_SPLT, "read_splt"}, {MNG_FN_READ_HIST, "read_hist"}, {MNG_FN_READ_TIME, "read_time"}, {MNG_FN_READ_MHDR, "read_mhdr"}, {MNG_FN_READ_MEND, "read_mend"}, {MNG_FN_READ_LOOP, "read_loop"}, {MNG_FN_READ_ENDL, "read_endl"}, {MNG_FN_READ_DEFI, "read_defi"}, {MNG_FN_READ_BASI, "read_basi"}, {MNG_FN_READ_CLON, "read_clon"}, #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_READ_PAST, "read_past"}, #endif {MNG_FN_READ_DISC, "read_disc"}, {MNG_FN_READ_BACK, "read_back"}, {MNG_FN_READ_FRAM, "read_fram"}, {MNG_FN_READ_MOVE, "read_move"}, {MNG_FN_READ_CLIP, "read_clip"}, {MNG_FN_READ_SHOW, "read_show"}, {MNG_FN_READ_TERM, "read_term"}, {MNG_FN_READ_SAVE, "read_save"}, {MNG_FN_READ_SEEK, "read_seek"}, {MNG_FN_READ_EXPI, "read_expi"}, {MNG_FN_READ_FPRI, "read_fpri"}, {MNG_FN_READ_NEED, "read_need"}, {MNG_FN_READ_PHYG, "read_phyg"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_READ_JHDR, "read_jhdr"}, {MNG_FN_READ_JDAT, "read_jdat"}, {MNG_FN_READ_JSEP, "read_jsep"}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_FN_READ_DHDR, "read_dhdr"}, {MNG_FN_READ_PROM, "read_prom"}, {MNG_FN_READ_IPNG, "read_ipng"}, {MNG_FN_READ_PPLT, "read_pplt"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_READ_IJNG, "read_ijng"}, #endif {MNG_FN_READ_DROP, "read_drop"}, {MNG_FN_READ_DBYK, "read_dbyk"}, {MNG_FN_READ_ORDR, "read_ordr"}, #endif {MNG_FN_READ_UNKNOWN, "read_unknown"}, {MNG_FN_READ_MAGN, "read_magn"}, {MNG_FN_READ_JDAA, "read_jdaa"}, {MNG_FN_READ_EVNT, "read_evnt"}, #ifdef MNG_INCLUDE_MPNG_PROPOSAL {MNG_FN_READ_MPNG, "read_mpng"}, #endif {MNG_FN_WRITE_IHDR, "write_ihdr"}, {MNG_FN_WRITE_PLTE, "write_plte"}, {MNG_FN_WRITE_IDAT, "write_idat"}, {MNG_FN_WRITE_IEND, "write_iend"}, {MNG_FN_WRITE_TRNS, "write_trns"}, {MNG_FN_WRITE_GAMA, "write_gama"}, {MNG_FN_WRITE_CHRM, "write_chrm"}, {MNG_FN_WRITE_SRGB, "write_srgb"}, {MNG_FN_WRITE_ICCP, "write_iccp"}, {MNG_FN_WRITE_TEXT, "write_text"}, {MNG_FN_WRITE_ZTXT, "write_ztxt"}, {MNG_FN_WRITE_ITXT, "write_itxt"}, {MNG_FN_WRITE_BKGD, "write_bkgd"}, {MNG_FN_WRITE_PHYS, "write_phys"}, {MNG_FN_WRITE_SBIT, "write_sbit"}, {MNG_FN_WRITE_SPLT, "write_splt"}, {MNG_FN_WRITE_HIST, "write_hist"}, {MNG_FN_WRITE_TIME, "write_time"}, {MNG_FN_WRITE_MHDR, "write_mhdr"}, {MNG_FN_WRITE_MEND, "write_mend"}, {MNG_FN_WRITE_LOOP, "write_loop"}, {MNG_FN_WRITE_ENDL, "write_endl"}, {MNG_FN_WRITE_DEFI, "write_defi"}, {MNG_FN_WRITE_BASI, "write_basi"}, {MNG_FN_WRITE_CLON, "write_clon"}, #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_WRITE_PAST, "write_past"}, #endif {MNG_FN_WRITE_DISC, "write_disc"}, {MNG_FN_WRITE_BACK, "write_back"}, {MNG_FN_WRITE_FRAM, "write_fram"}, {MNG_FN_WRITE_MOVE, "write_move"}, {MNG_FN_WRITE_CLIP, "write_clip"}, {MNG_FN_WRITE_SHOW, "write_show"}, {MNG_FN_WRITE_TERM, "write_term"}, {MNG_FN_WRITE_SAVE, "write_save"}, {MNG_FN_WRITE_SEEK, "write_seek"}, {MNG_FN_WRITE_EXPI, "write_expi"}, {MNG_FN_WRITE_FPRI, "write_fpri"}, {MNG_FN_WRITE_NEED, "write_need"}, {MNG_FN_WRITE_PHYG, "write_phyg"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_WRITE_JHDR, "write_jhdr"}, {MNG_FN_WRITE_JDAT, "write_jdat"}, {MNG_FN_WRITE_JSEP, "write_jsep"}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_FN_WRITE_DHDR, "write_dhdr"}, {MNG_FN_WRITE_PROM, "write_prom"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_WRITE_IPNG, "write_ipng"}, #endif {MNG_FN_WRITE_PPLT, "write_pplt"}, {MNG_FN_WRITE_IJNG, "write_ijng"}, {MNG_FN_WRITE_DROP, "write_drop"}, {MNG_FN_WRITE_DBYK, "write_dbyk"}, {MNG_FN_WRITE_ORDR, "write_ordr"}, #endif {MNG_FN_WRITE_UNKNOWN, "write_unknown"}, {MNG_FN_WRITE_MAGN, "write_magn"}, {MNG_FN_WRITE_JDAA, "write_jdaa"}, {MNG_FN_WRITE_EVNT, "write_evnt"}, #ifdef MNG_INCLUDE_MPNG_PROPOSAL {MNG_FN_WRITE_MPNG, "write_mpng"}, #endif {MNG_FN_ZLIB_INITIALIZE, "zlib_initialize"}, {MNG_FN_ZLIB_CLEANUP, "zlib_cleanup"}, {MNG_FN_ZLIB_INFLATEINIT, "zlib_inflateinit"}, {MNG_FN_ZLIB_INFLATEROWS, "zlib_inflaterows"}, {MNG_FN_ZLIB_INFLATEDATA, "zlib_inflatedata"}, {MNG_FN_ZLIB_INFLATEFREE, "zlib_inflatefree"}, {MNG_FN_ZLIB_DEFLATEINIT, "zlib_deflateinit"}, {MNG_FN_ZLIB_DEFLATEROWS, "zlib_deflaterows"}, {MNG_FN_ZLIB_DEFLATEDATA, "zlib_deflatedata"}, {MNG_FN_ZLIB_DEFLATEFREE, "zlib_deflatefree"}, {MNG_FN_PROCESS_DISPLAY_IHDR, "process_display_ihdr"}, {MNG_FN_PROCESS_DISPLAY_PLTE, "process_display_plte"}, {MNG_FN_PROCESS_DISPLAY_IDAT, "process_display_idat"}, {MNG_FN_PROCESS_DISPLAY_IEND, "process_display_iend"}, {MNG_FN_PROCESS_DISPLAY_TRNS, "process_display_trns"}, {MNG_FN_PROCESS_DISPLAY_GAMA, "process_display_gama"}, {MNG_FN_PROCESS_DISPLAY_CHRM, "process_display_chrm"}, {MNG_FN_PROCESS_DISPLAY_SRGB, "process_display_srgb"}, {MNG_FN_PROCESS_DISPLAY_ICCP, "process_display_iccp"}, {MNG_FN_PROCESS_DISPLAY_BKGD, "process_display_bkgd"}, {MNG_FN_PROCESS_DISPLAY_PHYS, "process_display_phys"}, {MNG_FN_PROCESS_DISPLAY_SBIT, "process_display_sbit"}, {MNG_FN_PROCESS_DISPLAY_SPLT, "process_display_splt"}, {MNG_FN_PROCESS_DISPLAY_HIST, "process_display_hist"}, {MNG_FN_PROCESS_DISPLAY_MHDR, "process_display_mhdr"}, {MNG_FN_PROCESS_DISPLAY_MEND, "process_display_mend"}, {MNG_FN_PROCESS_DISPLAY_LOOP, "process_display_loop"}, {MNG_FN_PROCESS_DISPLAY_ENDL, "process_display_endl"}, {MNG_FN_PROCESS_DISPLAY_DEFI, "process_display_defi"}, {MNG_FN_PROCESS_DISPLAY_BASI, "process_display_basi"}, {MNG_FN_PROCESS_DISPLAY_CLON, "process_display_clon"}, #ifndef MNG_SKIPCHUNK_PAST {MNG_FN_PROCESS_DISPLAY_PAST, "process_display_past"}, #endif {MNG_FN_PROCESS_DISPLAY_DISC, "process_display_disc"}, {MNG_FN_PROCESS_DISPLAY_BACK, "process_display_back"}, {MNG_FN_PROCESS_DISPLAY_FRAM, "process_display_fram"}, {MNG_FN_PROCESS_DISPLAY_MOVE, "process_display_move"}, {MNG_FN_PROCESS_DISPLAY_CLIP, "process_display_clip"}, {MNG_FN_PROCESS_DISPLAY_SHOW, "process_display_show"}, {MNG_FN_PROCESS_DISPLAY_TERM, "process_display_term"}, {MNG_FN_PROCESS_DISPLAY_SAVE, "process_display_save"}, {MNG_FN_PROCESS_DISPLAY_SEEK, "process_display_seek"}, {MNG_FN_PROCESS_DISPLAY_EXPI, "process_display_expi"}, {MNG_FN_PROCESS_DISPLAY_FPRI, "process_display_fpri"}, {MNG_FN_PROCESS_DISPLAY_NEED, "process_display_need"}, {MNG_FN_PROCESS_DISPLAY_PHYG, "process_display_phyg"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_PROCESS_DISPLAY_JHDR, "process_display_jhdr"}, {MNG_FN_PROCESS_DISPLAY_JDAT, "process_display_jdat"}, {MNG_FN_PROCESS_DISPLAY_JSEP, "process_display_jsep"}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_FN_PROCESS_DISPLAY_DHDR, "process_display_dhdr"}, {MNG_FN_PROCESS_DISPLAY_PROM, "process_display_prom"}, #ifdef MNG_INCLUDE_JNG {MNG_FN_PROCESS_DISPLAY_IPNG, "process_display_ipng"}, #endif {MNG_FN_PROCESS_DISPLAY_PPLT, "process_display_pplt"}, {MNG_FN_PROCESS_DISPLAY_IJNG, "process_display_ijng"}, {MNG_FN_PROCESS_DISPLAY_DROP, "process_display_drop"}, {MNG_FN_PROCESS_DISPLAY_DBYK, "process_display_dbyk"}, {MNG_FN_PROCESS_DISPLAY_ORDR, "process_display_ordr"}, #endif {MNG_FN_PROCESS_DISPLAY_MAGN, "process_display_magn"}, {MNG_FN_PROCESS_DISPLAY_JDAA, "process_display_jdaa"}, {MNG_FN_JPEG_INITIALIZE, "jpeg_initialize"}, {MNG_FN_JPEG_CLEANUP, "jpeg_cleanup"}, {MNG_FN_JPEG_DECOMPRESSINIT, "jpeg_decompressinit"}, {MNG_FN_JPEG_DECOMPRESSDATA, "jpeg_decompressdata"}, {MNG_FN_JPEG_DECOMPRESSFREE, "jpeg_decompressfree"}, {MNG_FN_STORE_JPEG_G8, "store_jpeg_g8"}, {MNG_FN_STORE_JPEG_RGB8, "store_jpeg_rgb8"}, {MNG_FN_STORE_JPEG_G12, "store_jpeg_g12"}, {MNG_FN_STORE_JPEG_RGB12, "store_jpeg_rgb12"}, {MNG_FN_STORE_JPEG_GA8, "store_jpeg_ga8"}, {MNG_FN_STORE_JPEG_RGBA8, "store_jpeg_rgba8"}, {MNG_FN_STORE_JPEG_GA12, "store_jpeg_ga12"}, {MNG_FN_STORE_JPEG_RGBA12, "store_jpeg_rgba12"}, {MNG_FN_STORE_JPEG_G8_ALPHA, "store_jpeg_g8_alpha"}, {MNG_FN_STORE_JPEG_RGB8_ALPHA, "store_jpeg_rgb8_alpha"}, {MNG_FN_INIT_JPEG_A1_NI, "init_jpeg_a1_ni"}, {MNG_FN_INIT_JPEG_A2_NI, "init_jpeg_a2_ni"}, {MNG_FN_INIT_JPEG_A4_NI, "init_jpeg_a4_ni"}, {MNG_FN_INIT_JPEG_A8_NI, "init_jpeg_a8_ni"}, {MNG_FN_INIT_JPEG_A16_NI, "init_jpeg_a16_ni"}, {MNG_FN_STORE_JPEG_G8_A1, "store_jpeg_g8_a1"}, {MNG_FN_STORE_JPEG_G8_A2, "store_jpeg_g8_a2"}, {MNG_FN_STORE_JPEG_G8_A4, "store_jpeg_g8_a4"}, {MNG_FN_STORE_JPEG_G8_A8, "store_jpeg_g8_a8"}, {MNG_FN_STORE_JPEG_G8_A16, "store_jpeg_g8_a16"}, {MNG_FN_STORE_JPEG_RGB8_A1, "store_jpeg_rgb8_a1"}, {MNG_FN_STORE_JPEG_RGB8_A2, "store_jpeg_rgb8_a2"}, {MNG_FN_STORE_JPEG_RGB8_A4, "store_jpeg_rgb8_a4"}, {MNG_FN_STORE_JPEG_RGB8_A8, "store_jpeg_rgb8_a8"}, {MNG_FN_STORE_JPEG_RGB8_A16, "store_jpeg_rgb8_a16"}, {MNG_FN_STORE_JPEG_G12_A1, "store_jpeg_g12_a1"}, {MNG_FN_STORE_JPEG_G12_A2, "store_jpeg_g12_a2"}, {MNG_FN_STORE_JPEG_G12_A4, "store_jpeg_g12_a4"}, {MNG_FN_STORE_JPEG_G12_A8, "store_jpeg_g12_a8"}, {MNG_FN_STORE_JPEG_G12_A16, "store_jpeg_g12_a16"}, {MNG_FN_STORE_JPEG_RGB12_A1, "store_jpeg_rgb12_a1"}, {MNG_FN_STORE_JPEG_RGB12_A2, "store_jpeg_rgb12_a2"}, {MNG_FN_STORE_JPEG_RGB12_A4, "store_jpeg_rgb12_a4"}, {MNG_FN_STORE_JPEG_RGB12_A8, "store_jpeg_rgb12_a8"}, {MNG_FN_STORE_JPEG_RGB12_A16, "store_jpeg_rgb12_a16"}, {MNG_FN_NEXT_JPEG_ALPHAROW, "next_jpeg_alpharow"}, {MNG_FN_NEXT_JPEG_ROW, "next_jpeg_row"}, {MNG_FN_DISPLAY_JPEG_ROWS, "display_jpeg_rows"}, {MNG_FN_MAGNIFY_G8_X1, "magnify_g8_x1"}, {MNG_FN_MAGNIFY_G8_X2, "magnify_g8_x2"}, {MNG_FN_MAGNIFY_RGB8_X1, "magnify_rgb8_x1"}, {MNG_FN_MAGNIFY_RGB8_X2, "magnify_rgb8_x2"}, {MNG_FN_MAGNIFY_GA8_X1, "magnify_ga8_x1"}, {MNG_FN_MAGNIFY_GA8_X2, "magnify_ga8_x2"}, {MNG_FN_MAGNIFY_GA8_X3, "magnify_ga8_x3"}, {MNG_FN_MAGNIFY_GA8_X4, "magnify_ga8_x4"}, {MNG_FN_MAGNIFY_RGBA8_X1, "magnify_rgba8_x1"}, {MNG_FN_MAGNIFY_RGBA8_X2, "magnify_rgba8_x2"}, {MNG_FN_MAGNIFY_RGBA8_X3, "magnify_rgba8_x3"}, {MNG_FN_MAGNIFY_RGBA8_X4, "magnify_rgba8_x4"}, {MNG_FN_MAGNIFY_G8_X3, "magnify_g8_x3"}, {MNG_FN_MAGNIFY_RGB8_X3, "magnify_rgb8_x3"}, {MNG_FN_MAGNIFY_GA8_X5, "magnify_ga8_x5"}, {MNG_FN_MAGNIFY_RGBA8_X5, "magnify_rgba8_x5"}, {MNG_FN_MAGNIFY_G8_Y1, "magnify_g8_y1"}, {MNG_FN_MAGNIFY_G8_Y2, "magnify_g8_y2"}, {MNG_FN_MAGNIFY_RGB8_Y1, "magnify_rgb8_y1"}, {MNG_FN_MAGNIFY_RGB8_Y2, "magnify_rgb8_y2"}, {MNG_FN_MAGNIFY_GA8_Y1, "magnify_ga8_y1"}, {MNG_FN_MAGNIFY_GA8_Y2, "magnify_ga8_y2"}, {MNG_FN_MAGNIFY_GA8_Y3, "magnify_ga8_y3"}, {MNG_FN_MAGNIFY_GA8_Y4, "magnify_ga8_y4"}, {MNG_FN_MAGNIFY_RGBA8_Y1, "magnify_rgba8_y1"}, {MNG_FN_MAGNIFY_RGBA8_Y2, "magnify_rgba8_y2"}, {MNG_FN_MAGNIFY_RGBA8_Y3, "magnify_rgba8_y3"}, {MNG_FN_MAGNIFY_RGBA8_Y4, "magnify_rgba8_y4"}, {MNG_FN_MAGNIFY_G8_Y3, "magnify_g8_y3"}, {MNG_FN_MAGNIFY_RGB8_Y3, "magnify_rgb8_y3"}, {MNG_FN_MAGNIFY_GA8_Y5, "magnify_ga8_y5"}, {MNG_FN_MAGNIFY_RGBA8_Y5, "magnify_rgba8_y5"}, {MNG_FN_MAGNIFY_G8_X1, "magnify_g8_x1"}, {MNG_FN_MAGNIFY_G8_X2, "magnify_g8_x2"}, {MNG_FN_MAGNIFY_RGB8_X1, "magnify_rgb8_x1"}, {MNG_FN_MAGNIFY_RGB8_X2, "magnify_rgb8_x2"}, {MNG_FN_MAGNIFY_GA8_X1, "magnify_ga8_x1"}, {MNG_FN_MAGNIFY_GA8_X2, "magnify_ga8_x2"}, {MNG_FN_MAGNIFY_GA8_X3, "magnify_ga8_x3"}, {MNG_FN_MAGNIFY_GA8_X4, "magnify_ga8_x4"}, {MNG_FN_MAGNIFY_RGBA8_X1, "magnify_rgba8_x1"}, {MNG_FN_MAGNIFY_RGBA8_X2, "magnify_rgba8_x2"}, {MNG_FN_MAGNIFY_RGBA8_X3, "magnify_rgba8_x3"}, {MNG_FN_MAGNIFY_RGBA8_X4, "magnify_rgba8_x4"}, {MNG_FN_MAGNIFY_G8_X3, "magnify_g8_x3"}, {MNG_FN_MAGNIFY_RGB8_X3, "magnify_rgb8_x3"}, {MNG_FN_MAGNIFY_GA8_X5, "magnify_ga8_x5"}, {MNG_FN_MAGNIFY_RGBA8_X5, "magnify_rgba8_x5"}, {MNG_FN_MAGNIFY_G8_Y1, "magnify_g8_y1"}, {MNG_FN_MAGNIFY_G8_Y2, "magnify_g8_y2"}, {MNG_FN_MAGNIFY_RGB8_Y1, "magnify_rgb8_y1"}, {MNG_FN_MAGNIFY_RGB8_Y2, "magnify_rgb8_y2"}, {MNG_FN_MAGNIFY_GA8_Y1, "magnify_ga8_y1"}, {MNG_FN_MAGNIFY_GA8_Y2, "magnify_ga8_y2"}, {MNG_FN_MAGNIFY_GA8_Y3, "magnify_ga8_y3"}, {MNG_FN_MAGNIFY_GA8_Y4, "magnify_ga8_y4"}, {MNG_FN_MAGNIFY_RGBA8_Y1, "magnify_rgba8_y1"}, {MNG_FN_MAGNIFY_RGBA8_Y2, "magnify_rgba8_y2"}, {MNG_FN_MAGNIFY_RGBA8_Y3, "magnify_rgba8_y3"}, {MNG_FN_MAGNIFY_RGBA8_Y4, "magnify_rgba8_y4"}, {MNG_FN_MAGNIFY_G8_Y3, "magnify_g8_y3"}, {MNG_FN_MAGNIFY_RGB8_Y3, "magnify_rgb8_y3"}, {MNG_FN_MAGNIFY_GA8_Y5, "magnify_ga8_y5"}, {MNG_FN_MAGNIFY_RGBA8_Y5, "magnify_rgba8_y5"}, {MNG_FN_DELTA_G1_G1, "delta_g1_g1"}, {MNG_FN_DELTA_G2_G2, "delta_g2_g2"}, {MNG_FN_DELTA_G4_G4, "delta_g4_g4"}, {MNG_FN_DELTA_G8_G8, "delta_g8_g8"}, {MNG_FN_DELTA_G16_G16, "delta_g16_g16"}, {MNG_FN_DELTA_RGB8_RGB8, "delta_rgb8_rgb8"}, {MNG_FN_DELTA_RGB16_RGB16, "delta_rgb16_rgb16"}, {MNG_FN_DELTA_GA8_GA8, "delta_ga8_ga8"}, {MNG_FN_DELTA_GA8_G8, "delta_ga8_g8"}, {MNG_FN_DELTA_GA8_A8, "delta_ga8_a8"}, {MNG_FN_DELTA_GA16_GA16, "delta_ga16_ga16"}, {MNG_FN_DELTA_GA16_G16, "delta_ga16_g16"}, {MNG_FN_DELTA_GA16_A16, "delta_ga16_a16"}, {MNG_FN_DELTA_RGBA8_RGBA8, "delta_rgba8_rgba8"}, {MNG_FN_DELTA_RGBA8_RGB8, "delta_rgba8_rgb8"}, {MNG_FN_DELTA_RGBA8_A8, "delta_rgba8_a8"}, {MNG_FN_DELTA_RGBA16_RGBA16, "delta_rgba16_rgba16"}, {MNG_FN_DELTA_RGBA16_RGB16, "delta_rgba16_rgb16"}, {MNG_FN_DELTA_RGBA16_A16, "delta_rgba16_a16"}, {MNG_FN_PROMOTE_G8_G8, "promote_g8_g8"}, {MNG_FN_PROMOTE_G8_G16, "promote_g8_g16"}, {MNG_FN_PROMOTE_G16_G16, "promote_g8_g16"}, {MNG_FN_PROMOTE_G8_GA8, "promote_g8_ga8"}, {MNG_FN_PROMOTE_G8_GA16, "promote_g8_ga16"}, {MNG_FN_PROMOTE_G16_GA16, "promote_g16_ga16"}, {MNG_FN_PROMOTE_G8_RGB8, "promote_g8_rgb8"}, {MNG_FN_PROMOTE_G8_RGB16, "promote_g8_rgb16"}, {MNG_FN_PROMOTE_G16_RGB16, "promote_g16_rgb16"}, {MNG_FN_PROMOTE_G8_RGBA8, "promote_g8_rgba8"}, {MNG_FN_PROMOTE_G8_RGBA16, "promote_g8_rgba16"}, {MNG_FN_PROMOTE_G16_RGBA16, "promote_g16_rgba16"}, {MNG_FN_PROMOTE_GA8_GA16, "promote_ga8_ga16"}, {MNG_FN_PROMOTE_GA8_RGBA8, "promote_ga8_rgba8"}, {MNG_FN_PROMOTE_GA8_RGBA16, "promote_ga8_rgba16"}, {MNG_FN_PROMOTE_GA16_RGBA16, "promote_ga16_rgba16"}, {MNG_FN_PROMOTE_RGB8_RGB16, "promote_rgb8_rgb16"}, {MNG_FN_PROMOTE_RGB8_RGBA8, "promote_rgb8_rgba8"}, {MNG_FN_PROMOTE_RGB8_RGBA16, "promote_rgb8_rgba16"}, {MNG_FN_PROMOTE_RGB16_RGBA16, "promote_rgb16_rgba16"}, {MNG_FN_PROMOTE_RGBA8_RGBA16, "promote_rgba8_rgba16"}, {MNG_FN_PROMOTE_IDX8_RGB8, "promote_idx8_rgb8"}, {MNG_FN_PROMOTE_IDX8_RGB16, "promote_idx8_rgb16"}, {MNG_FN_PROMOTE_IDX8_RGBA8, "promote_idx8_rgba8"}, {MNG_FN_PROMOTE_IDX8_RGBA16, "promote_idx8_rgba16"}, {MNG_FN_SCALE_G1_G2, "scale_g1_g2"}, {MNG_FN_SCALE_G1_G4, "scale_g1_g4"}, {MNG_FN_SCALE_G1_G8, "scale_g1_g8"}, {MNG_FN_SCALE_G1_G16, "scale_g1_g16"}, {MNG_FN_SCALE_G2_G4, "scale_g2_g4"}, {MNG_FN_SCALE_G2_G8, "scale_g2_g8"}, {MNG_FN_SCALE_G2_G16, "scale_g2_g16"}, {MNG_FN_SCALE_G4_G8, "scale_g4_g8"}, {MNG_FN_SCALE_G4_G16, "scale_g4_g16"}, {MNG_FN_SCALE_G8_G16, "scale_g8_g16"}, {MNG_FN_SCALE_GA8_GA16, "scale_ga8_ga16"}, {MNG_FN_SCALE_RGB8_RGB16, "scale_rgb8_rgb16"}, {MNG_FN_SCALE_RGBA8_RGBA16, "scale_rgba8_rgba16"}, {MNG_FN_SCALE_G2_G1, "scale_g2_g1"}, {MNG_FN_SCALE_G4_G1, "scale_g4_g1"}, {MNG_FN_SCALE_G8_G1, "scale_g8_g1"}, {MNG_FN_SCALE_G16_G1, "scale_g16_g1"}, {MNG_FN_SCALE_G4_G2, "scale_g4_g2"}, {MNG_FN_SCALE_G8_G2, "scale_g8_g2"}, {MNG_FN_SCALE_G16_G2, "scale_g16_g2"}, {MNG_FN_SCALE_G8_G4, "scale_g8_g4"}, {MNG_FN_SCALE_G16_G4, "scale_g16_g4"}, {MNG_FN_SCALE_G16_G8, "scale_g16_g8"}, {MNG_FN_SCALE_GA16_GA8, "scale_ga16_ga8"}, {MNG_FN_SCALE_RGB16_RGB8, "scale_rgb16_rgb8"}, {MNG_FN_SCALE_RGBA16_RGBA8, "scale_rgba16_rgba8"}, {MNG_FN_COMPOSEOVER_RGBA8, "composeover_rgba8"}, {MNG_FN_COMPOSEOVER_RGBA16, "composeover_rgba16"}, {MNG_FN_COMPOSEUNDER_RGBA8, "composeunder_rgba8"}, {MNG_FN_COMPOSEUNDER_RGBA16, "composeunder_rgba16"}, {MNG_FN_FLIP_RGBA8, "flip_rgba8"}, {MNG_FN_FLIP_RGBA16, "flip_rgba16"}, {MNG_FN_TILE_RGBA8, "tile_rgba8"}, {MNG_FN_TILE_RGBA16, "tile_rgba16"} }; #endif /* MNG_INCLUDE_TRACE_STINGS */ /* ************************************************************************** */ mng_retcode mng_trace (mng_datap pData, mng_uint32 iFunction, mng_uint32 iLocation) { mng_pchar zName = 0; /* bufferptr for tracestring */ if ((pData == 0) || (pData->iMagic != MNG_MAGIC)) return MNG_INVALIDHANDLE; /* no good if the handle is corrupt */ if (pData->fTraceproc) /* report back to user ? */ { #ifdef MNG_INCLUDE_TRACE_STRINGS { /* binary search variables */ mng_int32 iTop, iLower, iUpper, iMiddle; mng_trace_entryp pEntry; /* pointer to found entry */ /* determine max index of table */ iTop = (sizeof (trace_table) / sizeof (trace_table [0])) - 1; iLower = 0; /* initialize binary search */ iMiddle = iTop >> 1; /* start in the middle */ iUpper = iTop; pEntry = 0; /* no goods yet! */ do /* the binary search itself */ { if (trace_table [iMiddle].iFunction < iFunction) iLower = iMiddle + 1; else if (trace_table [iMiddle].iFunction > iFunction) iUpper = iMiddle - 1; else { pEntry = &trace_table [iMiddle]; break; }; iMiddle = (iLower + iUpper) >> 1; } while (iLower <= iUpper); if (pEntry) /* found it ? */ zName = pEntry->zTracetext; } #endif /* oke, now tell */ if (!pData->fTraceproc (((mng_handle)pData), iFunction, iLocation, zName)) return MNG_APPTRACEABORT; } return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_INCLUDE_TRACE_PROCS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/install-sh0000755000000000000000000003325512115360516013475 0ustar rootroot#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # 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: libmng-2.0.2/libmng_zlib.h0000644000000000000000000000637612005307152014131 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_zlib.h copyright (c) 2000-2002 G.Juyn * */ /* * version : 1.0.0 * */ /* * * */ /* * purpose : ZLIB package interface (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the ZLIB package interface * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_zlib_h_ #define _libmng_zlib_h_ /* ************************************************************************** */ mng_retcode mngzlib_initialize (mng_datap pData); mng_retcode mngzlib_cleanup (mng_datap pData); mng_retcode mngzlib_inflateinit (mng_datap pData); mng_retcode mngzlib_inflaterows (mng_datap pData, mng_uint32 iInlen, mng_uint8p pIndata); mng_retcode mngzlib_inflatedata (mng_datap pData, mng_uint32 iInlen, mng_uint8p pIndata); mng_retcode mngzlib_inflatefree (mng_datap pData); mng_retcode mngzlib_deflateinit (mng_datap pData); mng_retcode mngzlib_deflaterows (mng_datap pData, mng_uint32 iInlen, mng_uint8p pIndata); mng_retcode mngzlib_deflatedata (mng_datap pData, mng_uint32 iInlen, mng_uint8p pIndata); mng_retcode mngzlib_deflatefree (mng_datap pData); /* ************************************************************************** */ #endif /* _libmng_zlib_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_read.h0000644000000000000000000000602312005307152014071 0ustar rootroot/* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_read.h copyright (c) 2000-2004 G.Juyn * */ /* * version : 1.0.8 * */ /* * * */ /* * purpose : Read management (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the read management routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 10/18/2000 - G.Juyn * */ /* * - added closestream() processing for mng_cleanup() * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * * */ /* * 1.0.8 - 04/12/2004 - G.Juyn * */ /* * - added data-push mechanisms for specialized decoders * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_read_h_ #define _libmng_read_h_ /* ************************************************************************** */ mng_retcode mng_process_eof (mng_datap pData); mng_retcode mng_release_pushdata (mng_datap pData); mng_retcode mng_release_pushchunk (mng_datap pData); mng_retcode mng_read_graphic (mng_datap pData); /* ************************************************************************** */ #endif /* _libmng_read_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/config.h0000644000000000000000000000774312115373260013112 0ustar rootroot/* config.h. Generated from config.h.in by configure. */ /* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ /* #undef AC_APPLE_UNIVERSAL_BUILD */ /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* define if you want JPEG support */ #define HAVE_LIBJPEG 1 /* define if you want lcms v1 support */ /* #undef HAVE_LIBLCMS1 */ /* define if you want lcms v2 support */ #define HAVE_LIBLCMS2 1 /* Define to 1 if you have the `z' library (-lz). */ #define HAVE_LIBZ 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* define if you want chunk access support */ #define MNG_ACCESS_CHUNKS 1 /* enable building standard shared object */ #define MNG_BUILD_SO 1 /* enable verbose error text */ #define MNG_ERROR_TELLTALE 1 /* define if you want full lcms support */ #define MNG_FULL_CMS 1 /* enable support for accessing chunks */ #define MNG_STORE_CHUNKS 1 /* define if you want display support */ #define MNG_SUPPORT_DISPLAY 1 /* define if you want dynamic support */ #define MNG_SUPPORT_DYNAMICMNG 1 /* define if you want full mng support */ #define MNG_SUPPORT_FULL 1 /* define if you want read support */ #define MNG_SUPPORT_READ 1 /* enable support for debug tracing */ /* #undef MNG_SUPPORT_TRACE */ /* define if you want write support */ #define MNG_SUPPORT_WRITE 1 /* enable support for debug messages */ /* #undef MNG_TRACE_TELLTALE */ /* but: libmng.dll (!) */ #define MNG_VERSION_DLL 2 /* MAJOR number of version */ #define MNG_VERSION_MAJOR 2 /* MINOR number of version */ #define MNG_VERSION_MINOR 0 /* PATCH number of version */ #define MNG_VERSION_RELEASE 2 /* eg. libmng.so.1 */ #define MNG_VERSION_SO 2 /* Name of package */ #define PACKAGE "libmng-2.0.2" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "png-mng-implement@lists.sourceforge.net" /* Define to the full name of this package. */ #define PACKAGE_NAME "libmng" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "libmng 2.0.2" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "libmng-2.0.2" /* Define to the home page for this package. */ #define PACKAGE_URL "http://www.libmng.com/" /* Define to the version of this package. */ #define PACKAGE_VERSION "2.0.2" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ #define VERSION "2.0.2" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN /* # undef WORDS_BIGENDIAN */ # endif #endif /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ /* Define for large files, on AIX-style hosts. */ /* #undef _LARGE_FILES */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ libmng-2.0.2/BUILD/0000755000000000000000000000000012115353245012321 5ustar rootrootlibmng-2.0.2/README0000644000000000000000000000125312005307152012335 0ustar rootrootlibmng 1.0.10 ------------- Added provisional ANG and anIM support, and made some minor bugfixes. libmng 1.0.9 ------------ A number of optimizations in the chunk handling and reader/writer code. This saves over 20KB on binary footprint! Also several bugfixes and a couple of patches bring it another step closer to perfection.... :-) See CHANGELOG for details. Y.T. Gerard For more information please visit: The official libmng web-site: http://www.libmng.com/ Libmng's community on SourceForge: https://sourceforge.net/project/?group_id=5635 The official MNG homepage: http://www.libpng.org/pub/mng/ The official PNG homepage: http://www.libpng.org/pub/png/ libmng-2.0.2/config.status0000755000000000000000000017231512115373260014207 0ustar rootroot#! /bin/sh # Generated by configure. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=${CONFIG_SHELL-/bin/sh} export SHELL ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by libmng $as_me 2.0.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " # Files that config.status was made for. config_files=" Makefile libmng.pc:libmng.pc.in" config_headers=" config.h" config_commands=" depfiles libtool" ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . libmng home page: ." ac_cs_config="'--prefix=/usr' '--libdir=/usr/lib64' '--with-lcms2'" ac_cs_version="\ libmng config.status 2.0.2 configured by ./configure, generated by GNU Autoconf 2.69, with options \"$ac_cs_config\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='/sources/LIB/MNG/libmng-2.0.2' srcdir='.' INSTALL='/usr/bin/ginstall -c' MKDIR_P='/usr/bin/mkdir -p' AWK='gawk' test -n "$AWK" || AWK=awk # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi if $ac_cs_recheck; then set X /bin/sh './configure' '--prefix=/usr' '--libdir=/usr/lib64' '--with-lcms2' $ac_configure_extra_args --no-create --no-recursion shift $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6 CONFIG_SHELL='/bin/sh' export CONFIG_SHELL exec "$@" fi exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 # # INIT-COMMANDS # AMDEP_TRUE="" ac_aux_dir="." # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='s/\(["`$\\]\)/\\\1/g' double_quote_subst='s/\(["`\\]\)/\\\1/g' delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' macro_version='2.4' macro_revision='1.3293' enable_shared='yes' enable_static='yes' pic_mode='default' enable_fast_install='yes' SHELL='/bin/sh' ECHO='printf %s\n' host_alias='' host='x86_64-unknown-linux-gnu' host_os='linux-gnu' build_alias='' build='x86_64-unknown-linux-gnu' build_os='linux-gnu' SED='/usr/bin/sed' Xsed='/usr/bin/sed -e 1s/^X//' GREP='/usr/bin/grep' EGREP='/usr/bin/grep -E' FGREP='/usr/bin/grep -F' LD='/usr/x86_64-slackware-linux/bin/ld -m elf_x86_64' NM='/usr/bin/nm -B' LN_S='ln -s' max_cmd_len='1572864' ac_objext='o' exeext='' lt_unset='unset' lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' lt_cv_to_host_file_cmd='func_convert_file_noop' lt_cv_to_tool_file_cmd='func_convert_file_noop' reload_flag=' -r' reload_cmds='$LD$reload_flag -o $output$reload_objs' OBJDUMP='objdump' deplibs_check_method='pass_all' file_magic_cmd='$MAGIC_CMD' file_magic_glob='' want_nocaseglob='no' DLLTOOL='dlltool' sharedlib_from_linklib_cmd='printf %s\n' AR='ar' AR_FLAGS='cru' archiver_list_spec='@' STRIP='strip' RANLIB='ranlib' old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $oldlib' old_postuninstall_cmds='' old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $oldlib' lock_old_archive_extraction='no' CC='gcc' CFLAGS='-g -O2' compiler='gcc' GCC='yes' lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' nm_file_list_spec='@' lt_sysroot='' objdir='.libs' MAGIC_CMD='file' lt_prog_compiler_no_builtin_flag=' -fno-builtin' lt_prog_compiler_pic=' -fPIC -DPIC' lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' lt_cv_prog_compiler_c_o='yes' need_locks='no' MANIFEST_TOOL=':' DSYMUTIL='' NMEDIT='' LIPO='' OTOOL='' OTOOL64='' libext='a' shrext_cmds='.so' extract_expsyms_cmds='' archive_cmds_need_lc='no' enable_shared_with_static_runtimes='no' export_dynamic_flag_spec='${wl}--export-dynamic' whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' compiler_needs_object='no' old_archive_from_new_cmds='' old_archive_from_expsyms_cmds='' archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' module_cmds='' module_expsym_cmds='' with_gnu_ld='yes' allow_undefined_flag='' no_undefined_flag='' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_flag_spec_ld='' hardcode_libdir_separator='' hardcode_direct='no' hardcode_direct_absolute='no' hardcode_minus_L='no' hardcode_shlibpath_var='unsupported' hardcode_automatic='no' inherit_rpath='no' link_all_deplibs='unknown' always_export_symbols='no' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' include_expsyms='' prelink_cmds='' postlink_cmds='' file_list_spec='' variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH' need_lib_prefix='no' need_version='no' version_type='linux' runpath_var='LD_RUN_PATH' shlibpath_var='LD_LIBRARY_PATH' shlibpath_overrides_runpath='no' libname_spec='lib$name' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' install_override_mode='' postinstall_cmds='' postuninstall_cmds='' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' finish_eval='' hardcode_into_libs='yes' sys_lib_search_path_spec='/usr/lib64/gcc/x86_64-slackware-linux/4.7.2 /usr/lib64 /lib64 /usr/x86_64-slackware-linux/lib ' sys_lib_dlsearch_path_spec='/lib /usr/lib /usr/local/lib /usr/x86_64-slackware-linux/lib /usr/lib64/seamonkey /usr/local/lib64 /usr/local/ogle/lib /usr/local/lib/ogle /usr/local/fltk11/lib /usr/local/fltk13/lib /usr/local/fltk2/lib /usr/local/fltk3/lib /usr/local/opj2/lib /usr/local/opj1/lib /usr/local/webkitgtk/lib /usr/local/lesstif/lib /usr/local/openmotif/lib ' hardcode_action='immediate' enable_dlopen='unknown' enable_dlopen_self='unknown' enable_dlopen_self_static='unknown' old_striplib='strip --strip-debug' striplib='strip --strip-unneeded' AS='as' LTCC='gcc' LTCFLAGS='-g -O2' compiler='gcc' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL ECHO SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag OBJDUMP deplibs_check_method file_magic_cmd file_magic_glob want_nocaseglob DLLTOOL sharedlib_from_linklib_cmd AR AR_FLAGS archiver_list_spec STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix nm_file_list_spec lt_prog_compiler_no_builtin_flag lt_prog_compiler_pic lt_prog_compiler_wl lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks MANIFEST_TOOL DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_flag_spec_ld hardcode_libdir_separator exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib AS; do case `eval \\$ECHO \\""\\$$var"\\"` in *[\\\`\"\$]*) eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\$$var\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postlink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec sys_lib_dlsearch_path_spec; do case `eval \\$ECHO \\""\\$$var"\\"` in *[\\\`\"\$]*) eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\$$var\\\"" ;; esac done ac_aux_dir='.' xsi_shell='yes' lt_shell_append='yes' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='libmng-2.0.2' VERSION='2.0.2' TIMESTAMP='' RM='rm -f' ofile='libtool' # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libmng.pc") CONFIG_FILES="$CONFIG_FILES libmng.pc:libmng.pc.in" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && S["am__EXEEXT_FALSE"]="" S["am__EXEEXT_TRUE"]="#" S["LTLIBOBJS"]="" S["LIBOBJS"]="" S["AS"]="as" S["CPP"]="gcc -E" S["OTOOL64"]="" S["OTOOL"]="" S["LIPO"]="" S["NMEDIT"]="" S["DSYMUTIL"]="" S["MANIFEST_TOOL"]=":" S["RANLIB"]="ranlib" S["ac_ct_AR"]="ar" S["AR"]="ar" S["DLLTOOL"]="dlltool" S["OBJDUMP"]="objdump" S["LN_S"]="ln -s" S["NM"]="/usr/bin/nm -B" S["ac_ct_DUMPBIN"]="" S["DUMPBIN"]="" S["LD"]="/usr/x86_64-slackware-linux/bin/ld -m elf_x86_64" S["FGREP"]="/usr/bin/grep -F" S["EGREP"]="/usr/bin/grep -E" S["GREP"]="/usr/bin/grep" S["SED"]="/usr/bin/sed" S["host_os"]="linux-gnu" S["host_vendor"]="unknown" S["host_cpu"]="x86_64" S["host"]="x86_64-unknown-linux-gnu" S["build_os"]="linux-gnu" S["build_vendor"]="unknown" S["build_cpu"]="x86_64" S["build"]="x86_64-unknown-linux-gnu" S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" S["am__fastdepCC_FALSE"]="" S["am__fastdepCC_TRUE"]="#" S["CCDEPMODE"]="depmode=none" S["am__nodep"]="_no" S["AMDEPBACKSLASH"]="\\" S["AMDEP_FALSE"]="#" S["AMDEP_TRUE"]="" S["am__quote"]="" S["am__include"]="include" S["DEPDIR"]=".deps" S["OBJEXT"]="o" S["EXEEXT"]="" S["ac_ct_CC"]="gcc" S["CPPFLAGS"]="" S["LDFLAGS"]="" S["CFLAGS"]="-g -O2" S["CC"]="gcc" S["AM_BACKSLASH"]="\\" S["AM_DEFAULT_VERBOSITY"]="1" S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)" S["AM_V"]="$(V)" S["am__untar"]="$${TAR-tar} xf -" S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" S["AMTAR"]="$${TAR-tar}" S["am__leading_dot"]="." S["SET_MAKE"]="" S["AWK"]="gawk" S["mkdir_p"]="$(MKDIR_P)" S["MKDIR_P"]="/usr/bin/mkdir -p" S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" S["STRIP"]="strip" S["install_sh"]="${SHELL} /sources/LIB/MNG/libmng-2.0.2/install-sh" S["MAKEINFO"]="${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing makeinfo" S["AUTOHEADER"]="${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing autoheader" S["AUTOMAKE"]="${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing automake-1.13" S["AUTOCONF"]="${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing autoconf" S["ACLOCAL"]="${SHELL} /sources/LIB/MNG/libmng-2.0.2/missing aclocal-1.13" S["VERSION"]="2.0.2" S["PACKAGE"]="libmng-2.0.2" S["CYGPATH_W"]="echo" S["am__isrc"]="" S["INSTALL_DATA"]="${INSTALL} -m 644" S["INSTALL_SCRIPT"]="${INSTALL}" S["INSTALL_PROGRAM"]="${INSTALL}" S["MNG_RELEASE_NR"]="2" S["MNG_MINOR_NR"]="0" S["MNG_MAJOR_NR"]="2" S["target_alias"]="" S["host_alias"]="" S["build_alias"]="" S["LIBS"]="-lz -lm -ljpeg -llcms2" S["ECHO_T"]="" S["ECHO_N"]="-n" S["ECHO_C"]="" S["DEFS"]="-DHAVE_CONFIG_H" S["mandir"]="${datarootdir}/man" S["localedir"]="${datarootdir}/locale" S["libdir"]="/usr/lib64" S["psdir"]="${docdir}" S["pdfdir"]="${docdir}" S["dvidir"]="${docdir}" S["htmldir"]="${docdir}" S["infodir"]="${datarootdir}/info" S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" S["oldincludedir"]="/usr/include" S["includedir"]="${prefix}/include" S["localstatedir"]="${prefix}/var" S["sharedstatedir"]="${prefix}/com" S["sysconfdir"]="${prefix}/etc" S["datadir"]="${datarootdir}" S["datarootdir"]="${prefix}/share" S["libexecdir"]="${exec_prefix}/libexec" S["sbindir"]="${exec_prefix}/sbin" S["bindir"]="${exec_prefix}/bin" S["program_transform_name"]="s,x,x," S["prefix"]="/usr" S["exec_prefix"]="${prefix}" S["PACKAGE_URL"]="http://www.libmng.com/" S["PACKAGE_BUGREPORT"]="png-mng-implement@lists.sourceforge.net" S["PACKAGE_STRING"]="libmng 2.0.2" S["PACKAGE_VERSION"]="2.0.2" S["PACKAGE_TARNAME"]="libmng-2.0.2" S["PACKAGE_NAME"]="libmng" S["PATH_SEPARATOR"]=":" S["SHELL"]="/bin/sh" _ACAWK cat >>"$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { D["PACKAGE_NAME"]=" \"libmng\"" D["PACKAGE_TARNAME"]=" \"libmng-2.0.2\"" D["PACKAGE_VERSION"]=" \"2.0.2\"" D["PACKAGE_STRING"]=" \"libmng 2.0.2\"" D["PACKAGE_BUGREPORT"]=" \"png-mng-implement@lists.sourceforge.net\"" D["PACKAGE_URL"]=" \"http://www.libmng.com/\"" D["PACKAGE"]=" \"libmng-2.0.2\"" D["VERSION"]=" \"2.0.2\"" D["MNG_VERSION_MAJOR"]=" 2" D["MNG_VERSION_MINOR"]=" 0" D["MNG_VERSION_RELEASE"]=" 2" D["MNG_VERSION_SO"]=" 2" D["MNG_VERSION_DLL"]=" 2" D["STDC_HEADERS"]=" 1" D["HAVE_SYS_TYPES_H"]=" 1" D["HAVE_SYS_STAT_H"]=" 1" D["HAVE_STDLIB_H"]=" 1" D["HAVE_STRING_H"]=" 1" D["HAVE_MEMORY_H"]=" 1" D["HAVE_STRINGS_H"]=" 1" D["HAVE_INTTYPES_H"]=" 1" D["HAVE_STDINT_H"]=" 1" D["HAVE_UNISTD_H"]=" 1" D["HAVE_DLFCN_H"]=" 1" D["LT_OBJDIR"]=" \".libs/\"" D["STDC_HEADERS"]=" 1" D["MNG_BUILD_SO"]=" 1" D["MNG_SUPPORT_FULL"]=" 1" D["MNG_SUPPORT_READ"]=" 1" D["MNG_SUPPORT_WRITE"]=" 1" D["MNG_SUPPORT_DISPLAY"]=" 1" D["MNG_SUPPORT_DYNAMICMNG"]=" 1" D["MNG_ACCESS_CHUNKS"]=" 1" D["MNG_STORE_CHUNKS"]=" 1" D["MNG_ERROR_TELLTALE"]=" 1" D["HAVE_LIBZ"]=" 1" D["HAVE_LIBJPEG"]=" 1" D["HAVE_LIBLCMS2"]=" 1" D["MNG_FULL_CMS"]=" 1" for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { line = $ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} ac_datarootdir_hack=' s&@datadir@&${datarootdir}&g s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g s&@infodir@&${datarootdir}/info&g s&@localedir@&${datarootdir}/locale&g s&@mandir@&${datarootdir}/man&g s&\${datarootdir}&${prefix}/share&g' ;; esac ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// } :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010 Free Software Foundation, # Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Assembler program. AS=$lt_AS # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 libmng-2.0.2/libmng_read.c0000644000000000000000000016532512005307152014077 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_read.c copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Read logic (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the high-level read logic * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - added callback error-reporting support * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * * */ /* * 0.5.2 - 05/19/2000 - G.Juyn * */ /* * - cleaned up some code regarding mixed support * */ /* * 0.5.2 - 05/20/2000 - G.Juyn * */ /* * - added support for JNG * */ /* * 0.5.2 - 05/31/2000 - G.Juyn * */ /* * - fixed up punctuation (contribution by Tim Rowley) * */ /* * * */ /* * 0.5.3 - 06/16/2000 - G.Juyn * */ /* * - changed progressive-display processing * */ /* * * */ /* * 0.9.1 - 07/08/2000 - G.Juyn * */ /* * - changed read-processing for improved I/O-suspension * */ /* * 0.9.1 - 07/14/2000 - G.Juyn * */ /* * - changed EOF processing behavior * */ /* * 0.9.1 - 07/14/2000 - G.Juyn * */ /* * - changed default readbuffer size from 1024 to 4200 * */ /* * * */ /* * 0.9.2 - 07/27/2000 - G.Juyn * */ /* * - B110320 - fixed GCC warning about mix-sized pointer math * */ /* * 0.9.2 - 07/31/2000 - G.Juyn * */ /* * - B110546 - fixed for improperly returning UNEXPECTEDEOF * */ /* * 0.9.2 - 08/04/2000 - G.Juyn * */ /* * - B111096 - fixed large-buffer read-suspension * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - removed test-MaGN * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added support for JDAA * */ /* * * */ /* * 0.9.5 - 01/23/2001 - G.Juyn * */ /* * - fixed timing-problem with switching framing_modes * */ /* * * */ /* * 1.0.4 - 06/22/2002 - G.Juyn * */ /* * - B495443 - incorrect suspend check in read_databuffer * */ /* * * */ /* * 1.0.5 - 07/04/2002 - G.Juyn * */ /* * - added errorcode for extreme chunk-sizes * */ /* * 1.0.5 - 07/08/2002 - G.Juyn * */ /* * - B578572 - removed eMNGma hack (thanks Dimitri!) * */ /* * 1.0.5 - 07/16/2002 - G.Juyn * */ /* * - B581625 - large chunks fail with suspension reads * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * - added HLAPI function to copy chunks * */ /* * 1.0.5 - 09/16/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * * */ /* * 1.0.6 - 05/25/2003 - G.R-P * */ /* * - added MNG_SKIPCHUNK_cHNK footprint optimizations * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - added MNG_NO_DELTA_PNG reduction * */ /* * - skip additional code when MNG_INCLUDE_JNG is not enabled * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditionals around PAST chunk support * */ /* * 1.0.6 - 08/17/2003 - G.R-P * */ /* * - added conditionals around non-VLC chunk support * */ /* * * */ /* * 1.0.7 - 03/10/2004 - G.R-P * */ /* * - added conditionals around openstream/closestream * */ /* * * */ /* * 1.0.8 - 04/08/2004 - G.Juyn * */ /* * - added CRC existence & checking flags * */ /* * 1.0.8 - 04/11/2004 - G.Juyn * */ /* * - added data-push mechanisms for specialized decoders * */ /* * 1.0.8 - 07/06/2004 - G.R-P * */ /* * - defend against using undefined closestream function * */ /* * 1.0.8 - 07/28/2004 - G.R-P * */ /* * - added check for extreme chunk-lengths * */ /* * * */ /* * 1.0.9 - 09/16/2004 - G.Juyn * */ /* * - fixed chunk pushing mechanism * */ /* * 1.0.9 - 12/05/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKINITFREE * */ /* * 1.0.9 - 12/06/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKASSIGN * */ /* * - added conditional MNG_OPTIMIZE_CHUNKREADER * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * 1.0.9 - 12/31/2004 - G.R-P * */ /* * - removed stray characters from #ifdef directive * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_memory.h" #include "libmng_objects.h" #include "libmng_object_prc.h" #include "libmng_chunks.h" #ifdef MNG_OPTIMIZE_CHUNKREADER #include "libmng_chunk_descr.h" #endif #include "libmng_chunk_prc.h" #include "libmng_chunk_io.h" #include "libmng_display.h" #include "libmng_read.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_READ_PROCS /* ************************************************************************** */ mng_retcode mng_process_eof (mng_datap pData) { if (!pData->bEOF) /* haven't closed the stream yet ? */ { pData->bEOF = MNG_TRUE; /* now we do! */ #ifndef MNG_NO_OPEN_CLOSE_STREAM if (pData->fClosestream && !pData->fClosestream ((mng_handle)pData)) { MNG_ERROR (pData, MNG_APPIOERROR); } #endif } return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_release_pushdata (mng_datap pData) { mng_pushdatap pFirst = pData->pFirstpushdata; mng_pushdatap pNext = pFirst->pNext; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RELEASE_PUSHDATA, MNG_LC_START); #endif pData->pFirstpushdata = pNext; /* next becomes the first */ if (!pNext) /* no next? => no last! */ pData->pLastpushdata = MNG_NULL; /* buffer owned and release callback defined? */ if ((pFirst->bOwned) && (pData->fReleasedata)) pData->fReleasedata ((mng_handle)pData, pFirst->pData, pFirst->iLength); else /* otherwise use internal free mechanism */ MNG_FREEX (pData, pFirst->pData, pFirst->iLength); /* and free it */ MNG_FREEX (pData, pFirst, sizeof(mng_pushdata)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RELEASE_PUSHDATA, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_release_pushchunk (mng_datap pData) { mng_pushdatap pFirst = pData->pFirstpushchunk; mng_pushdatap pNext = pFirst->pNext; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RELEASE_PUSHCHUNK, MNG_LC_START); #endif pData->pFirstpushchunk = pNext; /* next becomes the first */ if (!pNext) /* no next? => no last! */ pData->pLastpushchunk = MNG_NULL; /* buffer owned and release callback defined? */ if ((pFirst->bOwned) && (pData->fReleasedata)) pData->fReleasedata ((mng_handle)pData, pFirst->pData, pFirst->iLength); else /* otherwise use internal free mechanism */ MNG_FREEX (pData, pFirst->pData, pFirst->iLength); /* and free it */ MNG_FREEX (pData, pFirst, sizeof(mng_pushdata)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RELEASE_PUSHCHUNK, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode read_data (mng_datap pData, mng_uint8p pBuf, mng_uint32 iSize, mng_uint32 * iRead) { mng_retcode iRetcode; mng_uint32 iTempsize = iSize; mng_uint8p pTempbuf = pBuf; mng_pushdatap pPush = pData->pFirstpushdata; mng_uint32 iPushsize = 0; *iRead = 0; /* nothing yet */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DATA, MNG_LC_START); #endif while (pPush) /* calculate size of pushed data */ { iPushsize += pPush->iRemaining; pPush = pPush->pNext; } if (iTempsize <= iPushsize) /* got enough push data? */ { while (iTempsize) { pPush = pData->pFirstpushdata; /* enough data remaining in this buffer? */ if (pPush->iRemaining <= iTempsize) { /* no: then copy what we've got */ MNG_COPY (pTempbuf, pPush->pDatanext, pPush->iRemaining); /* move pointers & lengths */ pTempbuf += pPush->iRemaining; *iRead += pPush->iRemaining; iTempsize -= pPush->iRemaining; /* release the depleted buffer */ iRetcode = mng_release_pushdata (pData); if (iRetcode) return iRetcode; } else { /* copy the needed bytes */ MNG_COPY (pTempbuf, pPush->pDatanext, iTempsize); /* move pointers & lengths */ pPush->iRemaining -= iTempsize; pPush->pDatanext += iTempsize; pTempbuf += iTempsize; *iRead += iTempsize; iTempsize = 0; /* all done!!! */ } } } else { mng_uint32 iTempread = 0; /* get it from the app then */ if (!pData->fReaddata (((mng_handle)pData), pTempbuf, iTempsize, &iTempread)) MNG_ERROR (pData, MNG_APPIOERROR); *iRead += iTempread; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DATA, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode read_databuffer (mng_datap pData, mng_uint8p pBuf, mng_uint8p * pBufnext, mng_uint32 iSize, mng_uint32 * iRead) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DATABUFFER, MNG_LC_START); #endif if (pData->bSuspensionmode) { mng_uint8p pTemp; mng_uint32 iTemp; *iRead = 0; /* let's be negative about the outcome */ if (!pData->pSuspendbuf) /* need to create a suspension buffer ? */ { pData->iSuspendbufsize = MNG_SUSPENDBUFFERSIZE; /* so, create it */ MNG_ALLOC (pData, pData->pSuspendbuf, pData->iSuspendbufsize); pData->iSuspendbufleft = 0; /* make sure to fill it first time */ pData->pSuspendbufnext = pData->pSuspendbuf; } /* more than our buffer can hold ? */ if (iSize > pData->iSuspendbufsize) { mng_uint32 iRemain; if (!*pBufnext) /* first time ? */ { if (pData->iSuspendbufleft) /* do we have some data left ? */ { /* then copy it */ MNG_COPY (pBuf, pData->pSuspendbufnext, pData->iSuspendbufleft); /* fixup variables */ *pBufnext = pBuf + pData->iSuspendbufleft; pData->pSuspendbufnext = pData->pSuspendbuf; pData->iSuspendbufleft = 0; } else { *pBufnext = pBuf; } } /* calculate how much to get */ iRemain = iSize - (mng_uint32)(*pBufnext - pBuf); /* let's go get it */ iRetcode = read_data (pData, *pBufnext, iRemain, &iTemp); if (iRetcode) return iRetcode; /* first read after suspension return 0 means EOF */ if ((pData->iSuspendpoint) && (iTemp == 0)) { /* that makes it final */ mng_retcode iRetcode = mng_process_eof (pData); if (iRetcode) /* on error bail out */ return iRetcode; /* indicate the source is depleted */ *iRead = iSize - iRemain + iTemp; } else { if (iTemp < iRemain) /* suspension required ? */ { *pBufnext = *pBufnext + iTemp; pData->bSuspended = MNG_TRUE; } else { *iRead = iSize; /* got it all now ! */ } } } else { /* need to read some more ? */ while ((!pData->bSuspended) && (!pData->bEOF) && (iSize > pData->iSuspendbufleft)) { /* not enough space left in buffer ? */ if (pData->iSuspendbufsize - pData->iSuspendbufleft - (mng_uint32)(pData->pSuspendbufnext - pData->pSuspendbuf) < MNG_SUSPENDREQUESTSIZE) { if (pData->iSuspendbufleft) /* then lets shift (if there's anything left) */ MNG_COPY (pData->pSuspendbuf, pData->pSuspendbufnext, pData->iSuspendbufleft); /* adjust running pointer */ pData->pSuspendbufnext = pData->pSuspendbuf; } /* still not enough room ? */ if (pData->iSuspendbufsize - pData->iSuspendbufleft < MNG_SUSPENDREQUESTSIZE) MNG_ERROR (pData, MNG_INTERNALERROR); /* now read some more data */ pTemp = pData->pSuspendbufnext + pData->iSuspendbufleft; iRetcode = read_data (pData, pTemp, MNG_SUSPENDREQUESTSIZE, &iTemp); if (iRetcode) return iRetcode; /* adjust fill-counter */ pData->iSuspendbufleft += iTemp; /* first read after suspension returning 0 means EOF */ if ((pData->iSuspendpoint) && (iTemp == 0)) { /* that makes it final */ mng_retcode iRetcode = mng_process_eof (pData); if (iRetcode) /* on error bail out */ return iRetcode; if (pData->iSuspendbufleft) /* return the leftover scraps */ MNG_COPY (pBuf, pData->pSuspendbufnext, pData->iSuspendbufleft); /* and indicate so */ *iRead = pData->iSuspendbufleft; pData->pSuspendbufnext = pData->pSuspendbuf; pData->iSuspendbufleft = 0; } else { /* suspension required ? */ if ((iSize > pData->iSuspendbufleft) && (iTemp < MNG_SUSPENDREQUESTSIZE)) pData->bSuspended = MNG_TRUE; } pData->iSuspendpoint = 0; /* reset it here in case we loop back */ } if ((!pData->bSuspended) && (!pData->bEOF)) { /* return the data ! */ MNG_COPY (pBuf, pData->pSuspendbufnext, iSize); *iRead = iSize; /* returned it all */ /* adjust suspension-buffer variables */ pData->pSuspendbufnext += iSize; pData->iSuspendbufleft -= iSize; } } } else { iRetcode = read_data (pData, (mng_ptr)pBuf, iSize, iRead); if (iRetcode) return iRetcode; if (*iRead == 0) /* suspension required ? */ pData->bSuspended = MNG_TRUE; } pData->iSuspendpoint = 0; /* safely reset it here ! */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_DATABUFFER, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode process_raw_chunk (mng_datap pData, mng_uint8p pBuf, mng_uint32 iBuflen) { #ifndef MNG_OPTIMIZE_CHUNKREADER /* the table-idea & binary search code was adapted from libpng 1.1.0 (pngread.c) */ /* NOTE1: the table must remain sorted by chunkname, otherwise the binary search will break !!! (ps. watch upper-/lower-case chunknames !!) */ /* NOTE2: the layout must remain equal to the header part of all the chunk-structures (yes, that means even the pNext and pPrev fields; it's wasting a bit of space, but hey, the code is a lot easier) */ #ifdef MNG_OPTIMIZE_CHUNKINITFREE mng_chunk_header mng_chunk_unknown = {MNG_UINT_HUH, mng_init_general, mng_free_unknown, mng_read_unknown, mng_write_unknown, mng_assign_unknown, 0, 0, sizeof(mng_unknown_chunk)}; #else mng_chunk_header mng_chunk_unknown = {MNG_UINT_HUH, mng_init_unknown, mng_free_unknown, mng_read_unknown, mng_write_unknown, mng_assign_unknown, 0, 0}; #endif #ifdef MNG_OPTIMIZE_CHUNKINITFREE mng_chunk_header mng_chunk_table [] = { #ifndef MNG_SKIPCHUNK_BACK {MNG_UINT_BACK, mng_init_general, mng_free_general, mng_read_back, mng_write_back, mng_assign_general, 0, 0, sizeof(mng_back)}, #endif #ifndef MNG_SKIPCHUNK_BASI {MNG_UINT_BASI, mng_init_general, mng_free_general, mng_read_basi, mng_write_basi, mng_assign_general, 0, 0, sizeof(mng_basi)}, #endif #ifndef MNG_SKIPCHUNK_CLIP {MNG_UINT_CLIP, mng_init_general, mng_free_general, mng_read_clip, mng_write_clip, mng_assign_general, 0, 0, sizeof(mng_clip)}, #endif #ifndef MNG_SKIPCHUNK_CLON {MNG_UINT_CLON, mng_init_general, mng_free_general, mng_read_clon, mng_write_clon, mng_assign_general, 0, 0, sizeof(mng_clon)}, #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK {MNG_UINT_DBYK, mng_init_general, mng_free_dbyk, mng_read_dbyk, mng_write_dbyk, mng_assign_dbyk, 0, 0, sizeof(mng_dbyk)}, #endif #endif #ifndef MNG_SKIPCHUNK_DEFI {MNG_UINT_DEFI, mng_init_general, mng_free_general, mng_read_defi, mng_write_defi, mng_assign_general, 0, 0, sizeof(mng_defi)}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_UINT_DHDR, mng_init_general, mng_free_general, mng_read_dhdr, mng_write_dhdr, mng_assign_general, 0, 0, sizeof(mng_dhdr)}, #endif #ifndef MNG_SKIPCHUNK_DISC {MNG_UINT_DISC, mng_init_general, mng_free_disc, mng_read_disc, mng_write_disc, mng_assign_disc, 0, 0, sizeof(mng_disc)}, #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DROP {MNG_UINT_DROP, mng_init_general, mng_free_drop, mng_read_drop, mng_write_drop, mng_assign_drop, 0, 0, sizeof(mng_drop)}, #endif #endif #ifndef MNG_SKIPCHUNK_LOOP {MNG_UINT_ENDL, mng_init_general, mng_free_general, mng_read_endl, mng_write_endl, mng_assign_general, 0, 0, sizeof(mng_endl)}, #endif #ifndef MNG_SKIPCHUNK_FRAM {MNG_UINT_FRAM, mng_init_general, mng_free_fram, mng_read_fram, mng_write_fram, mng_assign_fram, 0, 0, sizeof(mng_fram)}, #endif {MNG_UINT_IDAT, mng_init_general, mng_free_idat, mng_read_idat, mng_write_idat, mng_assign_idat, 0, 0, sizeof(mng_idat)}, /* 12-th element! */ {MNG_UINT_IEND, mng_init_general, mng_free_general, mng_read_iend, mng_write_iend, mng_assign_general, 0, 0, sizeof(mng_iend)}, {MNG_UINT_IHDR, mng_init_general, mng_free_general, mng_read_ihdr, mng_write_ihdr, mng_assign_general, 0, 0, sizeof(mng_ihdr)}, #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG {MNG_UINT_IJNG, mng_init_general, mng_free_general, mng_read_ijng, mng_write_ijng, mng_assign_general, 0, 0, sizeof(mng_ijng)}, #endif {MNG_UINT_IPNG, mng_init_general, mng_free_general, mng_read_ipng, mng_write_ipng, mng_assign_general, 0, 0, sizeof(mng_ipng)}, #endif #ifdef MNG_INCLUDE_JNG {MNG_UINT_JDAA, mng_init_general, mng_free_jdaa, mng_read_jdaa, mng_write_jdaa, mng_assign_jdaa, 0, 0, sizeof(mng_jdaa)}, {MNG_UINT_JDAT, mng_init_general, mng_free_jdat, mng_read_jdat, mng_write_jdat, mng_assign_jdat, 0, 0, sizeof(mng_jdat)}, {MNG_UINT_JHDR, mng_init_general, mng_free_general, mng_read_jhdr, mng_write_jhdr, mng_assign_general, 0, 0, sizeof(mng_jhdr)}, {MNG_UINT_JSEP, mng_init_general, mng_free_general, mng_read_jsep, mng_write_jsep, mng_assign_general, 0, 0, sizeof(mng_jsep)}, {MNG_UINT_JdAA, mng_init_general, mng_free_jdaa, mng_read_jdaa, mng_write_jdaa, mng_assign_jdaa, 0, 0, sizeof(mng_jdaa)}, #endif #ifndef MNG_SKIPCHUNK_LOOP {MNG_UINT_LOOP, mng_init_general, mng_free_loop, mng_read_loop, mng_write_loop, mng_assign_loop, 0, 0, sizeof(mng_loop)}, #endif #ifndef MNG_SKIPCHUNK_MAGN {MNG_UINT_MAGN, mng_init_general, mng_free_general, mng_read_magn, mng_write_magn, mng_assign_general, 0, 0, sizeof(mng_magn)}, #endif {MNG_UINT_MEND, mng_init_general, mng_free_general, mng_read_mend, mng_write_mend, mng_assign_general, 0, 0, sizeof(mng_mend)}, {MNG_UINT_MHDR, mng_init_general, mng_free_general, mng_read_mhdr, mng_write_mhdr, mng_assign_general, 0, 0, sizeof(mng_mhdr)}, #ifndef MNG_SKIPCHUNK_MOVE {MNG_UINT_MOVE, mng_init_general, mng_free_general, mng_read_move, mng_write_move, mng_assign_general, 0, 0, sizeof(mng_move)}, #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR {MNG_UINT_ORDR, mng_init_general, mng_free_ordr, mng_read_ordr, mng_write_ordr, mng_assign_ordr, 0, 0, sizeof(mng_ordr)}, #endif #endif #ifndef MNG_SKIPCHUNK_PAST {MNG_UINT_PAST, mng_init_general, mng_free_past, mng_read_past, mng_write_past, mng_assign_past, 0, 0, sizeof(mng_past)}, #endif {MNG_UINT_PLTE, mng_init_general, mng_free_general, mng_read_plte, mng_write_plte, mng_assign_general, 0, 0, sizeof(mng_plte)}, #ifndef MNG_NO_DELTA_PNG {MNG_UINT_PPLT, mng_init_general, mng_free_general, mng_read_pplt, mng_write_pplt, mng_assign_general, 0, 0, sizeof(mng_pplt)}, {MNG_UINT_PROM, mng_init_general, mng_free_general, mng_read_prom, mng_write_prom, mng_assign_general, 0, 0, sizeof(mng_prom)}, #endif #ifndef MNG_SKIPCHUNK_SAVE {MNG_UINT_SAVE, mng_init_general, mng_free_save, mng_read_save, mng_write_save, mng_assign_save, 0, 0, sizeof(mng_save)}, #endif #ifndef MNG_SKIPCHUNK_SEEK {MNG_UINT_SEEK, mng_init_general, mng_free_seek, mng_read_seek, mng_write_seek, mng_assign_seek, 0, 0, sizeof(mng_seek)}, #endif #ifndef MNG_SKIPCHUNK_SHOW {MNG_UINT_SHOW, mng_init_general, mng_free_general, mng_read_show, mng_write_show, mng_assign_general, 0, 0, sizeof(mng_show)}, #endif #ifndef MNG_SKIPCHUNK_TERM {MNG_UINT_TERM, mng_init_general, mng_free_general, mng_read_term, mng_write_term, mng_assign_general, 0, 0, sizeof(mng_term)}, #endif #ifndef MNG_SKIPCHUNK_bKGD {MNG_UINT_bKGD, mng_init_general, mng_free_general, mng_read_bkgd, mng_write_bkgd, mng_assign_general, 0, 0, sizeof(mng_bkgd)}, #endif #ifndef MNG_SKIPCHUNK_cHRM {MNG_UINT_cHRM, mng_init_general, mng_free_general, mng_read_chrm, mng_write_chrm, mng_assign_general, 0, 0, sizeof(mng_chrm)}, #endif #ifndef MNG_SKIPCHUNK_eXPI {MNG_UINT_eXPI, mng_init_general, mng_free_expi, mng_read_expi, mng_write_expi, mng_assign_expi, 0, 0, sizeof(mng_expi)}, #endif #ifndef MNG_SKIPCHUNK_evNT {MNG_UINT_evNT, mng_init_general, mng_free_evnt, mng_read_evnt, mng_write_evnt, mng_assign_evnt, 0, 0, sizeof(mng_evnt)}, #endif #ifndef MNG_SKIPCHUNK_fPRI {MNG_UINT_fPRI, mng_init_general, mng_free_general, mng_read_fpri, mng_write_fpri, mng_assign_general, 0, 0, sizeof(mng_fpri)}, #endif #ifndef MNG_SKIPCHUNK_gAMA {MNG_UINT_gAMA, mng_init_general, mng_free_general, mng_read_gama, mng_write_gama, mng_assign_general, 0, 0, sizeof(mng_gama)}, #endif #ifndef MNG_SKIPCHUNK_hIST {MNG_UINT_hIST, mng_init_general, mng_free_general, mng_read_hist, mng_write_hist, mng_assign_general, 0, 0, sizeof(mng_hist)}, #endif #ifndef MNG_SKIPCHUNK_iCCP {MNG_UINT_iCCP, mng_init_general, mng_free_iccp, mng_read_iccp, mng_write_iccp, mng_assign_iccp, 0, 0, sizeof(mng_iccp)}, #endif #ifndef MNG_SKIPCHUNK_iTXt {MNG_UINT_iTXt, mng_init_general, mng_free_itxt, mng_read_itxt, mng_write_itxt, mng_assign_itxt, 0, 0, sizeof(mng_itxt)}, #endif #ifdef MNG_INCLUDE_MPNG_PROPOSAL {MNG_UINT_mpNG, mng_init_general, mng_free_mpng, mng_read_mpng, mng_write_mpng, mng_assign_mpng, 0, 0, sizeof(mng_mpng)}, #endif #ifndef MNG_SKIPCHUNK_nEED {MNG_UINT_nEED, mng_init_general, mng_free_need, mng_read_need, mng_write_need, mng_assign_need, 0, 0, sizeof(mng_need)}, #endif /* TODO: {MNG_UINT_oFFs, 0, 0, 0, 0, 0, 0}, */ /* TODO: {MNG_UINT_pCAL, 0, 0, 0, 0, 0, 0}, */ #ifndef MNG_SKIPCHUNK_pHYg {MNG_UINT_pHYg, mng_init_general, mng_free_general, mng_read_phyg, mng_write_phyg, mng_assign_general, 0, 0, sizeof(mng_phyg)}, #endif #ifndef MNG_SKIPCHUNK_pHYs {MNG_UINT_pHYs, mng_init_general, mng_free_general, mng_read_phys, mng_write_phys, mng_assign_general, 0, 0, sizeof(mng_phys)}, #endif #ifndef MNG_SKIPCHUNK_sBIT {MNG_UINT_sBIT, mng_init_general, mng_free_general, mng_read_sbit, mng_write_sbit, mng_assign_general, 0, 0, sizeof(mng_sbit)}, #endif /* TODO: {MNG_UINT_sCAL, 0, 0, 0, 0, 0, 0}, */ #ifndef MNG_SKIPCHUNK_sPLT {MNG_UINT_sPLT, mng_init_general, mng_free_splt, mng_read_splt, mng_write_splt, mng_assign_splt, 0, 0, sizeof(mng_splt)}, #endif {MNG_UINT_sRGB, mng_init_general, mng_free_general, mng_read_srgb, mng_write_srgb, mng_assign_general, 0, 0, sizeof(mng_srgb)}, #ifndef MNG_SKIPCHUNK_tEXt {MNG_UINT_tEXt, mng_init_general, mng_free_text, mng_read_text, mng_write_text, mng_assign_text, 0, 0, sizeof(mng_text)}, #endif #ifndef MNG_SKIPCHUNK_tIME {MNG_UINT_tIME, mng_init_general, mng_free_general, mng_read_time, mng_write_time, mng_assign_general, 0, 0, sizeof(mng_time)}, #endif {MNG_UINT_tRNS, mng_init_general, mng_free_general, mng_read_trns, mng_write_trns, mng_assign_general, 0, 0, sizeof(mng_trns)}, #ifndef MNG_SKIPCHUNK_zTXt {MNG_UINT_zTXt, mng_init_general, mng_free_ztxt, mng_read_ztxt, mng_write_ztxt, mng_assign_ztxt, 0, 0, sizeof(mng_ztxt)}, #endif }; #else /* MNG_OPTIMIZE_CHUNKINITFREE */ mng_chunk_header mng_chunk_table [] = { #ifndef MNG_SKIPCHUNK_BACK {MNG_UINT_BACK, mng_init_back, mng_free_back, mng_read_back, mng_write_back, mng_assign_back, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_BASI {MNG_UINT_BASI, mng_init_basi, mng_free_basi, mng_read_basi, mng_write_basi, mng_assign_basi, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_CLIP {MNG_UINT_CLIP, mng_init_clip, mng_free_clip, mng_read_clip, mng_write_clip, mng_assign_clip, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_CLON {MNG_UINT_CLON, mng_init_clon, mng_free_clon, mng_read_clon, mng_write_clon, mng_assign_clon, 0, 0}, #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DBYK {MNG_UINT_DBYK, mng_init_dbyk, mng_free_dbyk, mng_read_dbyk, mng_write_dbyk, mng_assign_dbyk, 0, 0}, #endif #endif #ifndef MNG_SKIPCHUNK_DEFI {MNG_UINT_DEFI, mng_init_defi, mng_free_defi, mng_read_defi, mng_write_defi, mng_assign_defi, 0, 0}, #endif #ifndef MNG_NO_DELTA_PNG {MNG_UINT_DHDR, mng_init_dhdr, mng_free_dhdr, mng_read_dhdr, mng_write_dhdr, mng_assign_dhdr, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_DISC {MNG_UINT_DISC, mng_init_disc, mng_free_disc, mng_read_disc, mng_write_disc, mng_assign_disc, 0, 0}, #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_DROP {MNG_UINT_DROP, mng_init_drop, mng_free_drop, mng_read_drop, mng_write_drop, mng_assign_drop, 0, 0}, #endif #endif #ifndef MNG_SKIPCHUNK_LOOP {MNG_UINT_ENDL, mng_init_endl, mng_free_endl, mng_read_endl, mng_write_endl, mng_assign_endl, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_FRAM {MNG_UINT_FRAM, mng_init_fram, mng_free_fram, mng_read_fram, mng_write_fram, mng_assign_fram, 0, 0}, #endif {MNG_UINT_IDAT, mng_init_idat, mng_free_idat, mng_read_idat, mng_write_idat, mng_assign_idat, 0, 0}, /* 12-th element! */ {MNG_UINT_IEND, mng_init_iend, mng_free_iend, mng_read_iend, mng_write_iend, mng_assign_iend, 0, 0}, {MNG_UINT_IHDR, mng_init_ihdr, mng_free_ihdr, mng_read_ihdr, mng_write_ihdr, mng_assign_ihdr, 0, 0}, #ifndef MNG_NO_DELTA_PNG #ifdef MNG_INCLUDE_JNG {MNG_UINT_IJNG, mng_init_ijng, mng_free_ijng, mng_read_ijng, mng_write_ijng, mng_assign_ijng, 0, 0}, #endif {MNG_UINT_IPNG, mng_init_ipng, mng_free_ipng, mng_read_ipng, mng_write_ipng, mng_assign_ipng, 0, 0}, #endif #ifdef MNG_INCLUDE_JNG {MNG_UINT_JDAA, mng_init_jdaa, mng_free_jdaa, mng_read_jdaa, mng_write_jdaa, mng_assign_jdaa, 0, 0}, {MNG_UINT_JDAT, mng_init_jdat, mng_free_jdat, mng_read_jdat, mng_write_jdat, mng_assign_jdat, 0, 0}, {MNG_UINT_JHDR, mng_init_jhdr, mng_free_jhdr, mng_read_jhdr, mng_write_jhdr, mng_assign_jhdr, 0, 0}, {MNG_UINT_JSEP, mng_init_jsep, mng_free_jsep, mng_read_jsep, mng_write_jsep, mng_assign_jsep, 0, 0}, {MNG_UINT_JdAA, mng_init_jdaa, mng_free_jdaa, mng_read_jdaa, mng_write_jdaa, mng_assign_jdaa, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_LOOP {MNG_UINT_LOOP, mng_init_loop, mng_free_loop, mng_read_loop, mng_write_loop, mng_assign_loop, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_MAGN {MNG_UINT_MAGN, mng_init_magn, mng_free_magn, mng_read_magn, mng_write_magn, mng_assign_magn, 0, 0}, #endif {MNG_UINT_MEND, mng_init_mend, mng_free_mend, mng_read_mend, mng_write_mend, mng_assign_mend, 0, 0}, {MNG_UINT_MHDR, mng_init_mhdr, mng_free_mhdr, mng_read_mhdr, mng_write_mhdr, mng_assign_mhdr, 0, 0}, #ifndef MNG_SKIPCHUNK_MOVE {MNG_UINT_MOVE, mng_init_move, mng_free_move, mng_read_move, mng_write_move, mng_assign_move, 0, 0}, #endif #ifndef MNG_NO_DELTA_PNG #ifndef MNG_SKIPCHUNK_ORDR {MNG_UINT_ORDR, mng_init_ordr, mng_free_ordr, mng_read_ordr, mng_write_ordr, mng_assign_ordr, 0, 0}, #endif #endif #ifndef MNG_SKIPCHUNK_PAST {MNG_UINT_PAST, mng_init_past, mng_free_past, mng_read_past, mng_write_past, mng_assign_past, 0, 0}, #endif {MNG_UINT_PLTE, mng_init_plte, mng_free_plte, mng_read_plte, mng_write_plte, mng_assign_plte, 0, 0}, #ifndef MNG_NO_DELTA_PNG {MNG_UINT_PPLT, mng_init_pplt, mng_free_pplt, mng_read_pplt, mng_write_pplt, mng_assign_pplt, 0, 0}, {MNG_UINT_PROM, mng_init_prom, mng_free_prom, mng_read_prom, mng_write_prom, mng_assign_prom, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_SAVE {MNG_UINT_SAVE, mng_init_save, mng_free_save, mng_read_save, mng_write_save, mng_assign_save, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_SEEK {MNG_UINT_SEEK, mng_init_seek, mng_free_seek, mng_read_seek, mng_write_seek, mng_assign_seek, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_SHOW {MNG_UINT_SHOW, mng_init_show, mng_free_show, mng_read_show, mng_write_show, mng_assign_show, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_TERM {MNG_UINT_TERM, mng_init_term, mng_free_term, mng_read_term, mng_write_term, mng_assign_term, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_bKGD {MNG_UINT_bKGD, mng_init_bkgd, mng_free_bkgd, mng_read_bkgd, mng_write_bkgd, mng_assign_bkgd, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_cHRM {MNG_UINT_cHRM, mng_init_chrm, mng_free_chrm, mng_read_chrm, mng_write_chrm, mng_assign_chrm, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_eXPI {MNG_UINT_eXPI, mng_init_expi, mng_free_expi, mng_read_expi, mng_write_expi, mng_assign_expi, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_evNT {MNG_UINT_evNT, mng_init_evnt, mng_free_evnt, mng_read_evnt, mng_write_evnt, mng_assign_evnt, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_fPRI {MNG_UINT_fPRI, mng_init_fpri, mng_free_fpri, mng_read_fpri, mng_write_fpri, mng_assign_fpri, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_gAMA {MNG_UINT_gAMA, mng_init_gama, mng_free_gama, mng_read_gama, mng_write_gama, mng_assign_gama, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_hIST {MNG_UINT_hIST, mng_init_hist, mng_free_hist, mng_read_hist, mng_write_hist, mng_assign_hist, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_iCCP {MNG_UINT_iCCP, mng_init_iccp, mng_free_iccp, mng_read_iccp, mng_write_iccp, mng_assign_iccp, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_iTXt {MNG_UINT_iTXt, mng_init_itxt, mng_free_itxt, mng_read_itxt, mng_write_itxt, mng_assign_itxt, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_nEED {MNG_UINT_nEED, mng_init_need, mng_free_need, mng_read_need, mng_write_need, mng_assign_need, 0, 0}, #endif /* TODO: {MNG_UINT_oFFs, 0, 0, 0, 0, 0, 0}, */ /* TODO: {MNG_UINT_pCAL, 0, 0, 0, 0, 0, 0}, */ #ifndef MNG_SKIPCHUNK_pHYg {MNG_UINT_pHYg, mng_init_phyg, mng_free_phyg, mng_read_phyg, mng_write_phyg, mng_assign_phyg, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_pHYs {MNG_UINT_pHYs, mng_init_phys, mng_free_phys, mng_read_phys, mng_write_phys, mng_assign_phys, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_sBIT {MNG_UINT_sBIT, mng_init_sbit, mng_free_sbit, mng_read_sbit, mng_write_sbit, mng_assign_sbit, 0, 0}, #endif /* TODO: {MNG_UINT_sCAL, 0, 0, 0, 0, 0, 0}, */ #ifndef MNG_SKIPCHUNK_sPLT {MNG_UINT_sPLT, mng_init_splt, mng_free_splt, mng_read_splt, mng_write_splt, mng_assign_splt, 0, 0}, #endif {MNG_UINT_sRGB, mng_init_srgb, mng_free_srgb, mng_read_srgb, mng_write_srgb, mng_assign_srgb, 0, 0}, #ifndef MNG_SKIPCHUNK_tEXt {MNG_UINT_tEXt, mng_init_text, mng_free_text, mng_read_text, mng_write_text, mng_assign_text, 0, 0}, #endif #ifndef MNG_SKIPCHUNK_tIME {MNG_UINT_tIME, mng_init_time, mng_free_time, mng_read_time, mng_write_time, mng_assign_time, 0, 0}, #endif {MNG_UINT_tRNS, mng_init_trns, mng_free_trns, mng_read_trns, mng_write_trns, mng_assign_trns, 0, 0}, #ifndef MNG_SKIPCHUNK_zTXt {MNG_UINT_zTXt, mng_init_ztxt, mng_free_ztxt, mng_read_ztxt, mng_write_ztxt, mng_assign_ztxt, 0, 0}, #endif }; #endif /* MNG_OPTIMIZE_CHUNKINITFREE */ /* binary search variables */ mng_int32 iTop, iLower, iUpper, iMiddle; mng_chunk_headerp pEntry; /* pointer to found entry */ #else mng_chunk_header sEntry; /* temp chunk-header */ #endif /* MNG_OPTIMIZE_CHUNKREADER */ mng_chunkid iChunkname; /* the chunk's tag */ mng_chunkp pChunk; /* chunk structure (if #define MNG_STORE_CHUNKS) */ mng_retcode iRetcode; /* temporary error-code */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_RAW_CHUNK, MNG_LC_START); #endif /* reset timer indicator on read-cycle */ if ((pData->bReading) && (!pData->bDisplaying)) pData->bTimerset = MNG_FALSE; /* get the chunkname */ iChunkname = (mng_chunkid)(mng_get_uint32 (pBuf)); pBuf += sizeof (mng_chunkid); /* adjust the buffer */ iBuflen -= sizeof (mng_chunkid); pChunk = 0; #ifndef MNG_OPTIMIZE_CHUNKREADER /* determine max index of table */ iTop = (sizeof (mng_chunk_table) / sizeof (mng_chunk_table [0])) - 1; /* binary search; with 54 chunks, worst-case is 7 comparisons */ iLower = 0; #ifndef MNG_NO_DELTA_PNG iMiddle = 11; /* start with the IDAT entry */ #else iMiddle = 8; #endif iUpper = iTop; pEntry = 0; /* no goods yet! */ do /* the binary search itself */ { if (mng_chunk_table [iMiddle].iChunkname < iChunkname) iLower = iMiddle + 1; else if (mng_chunk_table [iMiddle].iChunkname > iChunkname) iUpper = iMiddle - 1; else { pEntry = &mng_chunk_table [iMiddle]; break; } iMiddle = (iLower + iUpper) >> 1; } while (iLower <= iUpper); if (!pEntry) /* unknown chunk ? */ pEntry = &mng_chunk_unknown; /* make it so! */ #else /* MNG_OPTIMIZE_CHUNKREADER */ mng_get_chunkheader (iChunkname, &sEntry); #endif /* MNG_OPTIMIZE_CHUNKREADER */ pData->iChunkname = iChunkname; /* keep track of where we are */ pData->iChunkseq++; #ifndef MNG_OPTIMIZE_CHUNKREADER if (pEntry->fRead) /* read-callback available ? */ { iRetcode = pEntry->fRead (pData, pEntry, iBuflen, (mng_ptr)pBuf, &pChunk); if (!iRetcode) /* everything oke ? */ { /* remember unknown chunk's id */ if ((pChunk) && (pEntry->iChunkname == MNG_UINT_HUH)) ((mng_chunk_headerp)pChunk)->iChunkname = iChunkname; } } #else /* MNG_OPTIMIZE_CHUNKREADER */ if (sEntry.fRead) /* read-callback available ? */ { iRetcode = sEntry.fRead (pData, &sEntry, iBuflen, (mng_ptr)pBuf, &pChunk); #ifndef MNG_OPTIMIZE_CHUNKREADER if (!iRetcode) /* everything oke ? */ { /* remember unknown chunk's id */ if ((pChunk) && (sEntry.iChunkname == MNG_UINT_HUH)) ((mng_chunk_headerp)pChunk)->iChunkname = iChunkname; } #endif } #endif /* MNG_OPTIMIZE_CHUNKREADER */ else iRetcode = MNG_NOERROR; if (pChunk) /* store this chunk ? */ mng_add_chunk (pData, pChunk); /* do it */ #ifdef MNG_INCLUDE_JNG /* implicit EOF ? */ if ((!pData->bHasMHDR) && (!pData->bHasIHDR) && (!pData->bHasJHDR)) #else if ((!pData->bHasMHDR) && (!pData->bHasIHDR)) #endif iRetcode = mng_process_eof (pData);/* then do some EOF processing */ if (iRetcode) /* on error bail out */ return iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_RAW_CHUNK, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode check_chunk_crc (mng_datap pData, mng_uint8p pBuf, mng_uint32 iBuflen) { mng_uint32 iCrc; /* calculated CRC */ mng_bool bDiscard = MNG_FALSE; mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_CHUNK_CRC, MNG_LC_START); #endif if (pData->iCrcmode & MNG_CRC_INPUT) /* crc included ? */ { mng_bool bCritical = (mng_bool)((*pBuf & 0x20) == 0); mng_uint32 iL = iBuflen - (mng_uint32)(sizeof (iCrc)); if (((bCritical ) && (pData->iCrcmode & MNG_CRC_CRITICAL )) || ((!bCritical) && (pData->iCrcmode & MNG_CRC_ANCILLARY))) { /* calculate the crc */ iCrc = mng_crc (pData, pBuf, iL); /* and check it */ if (!(iCrc == mng_get_uint32 (pBuf + iL))) { mng_bool bWarning = MNG_FALSE; mng_bool bError = MNG_FALSE; if (bCritical) { switch (pData->iCrcmode & MNG_CRC_CRITICAL) { case MNG_CRC_CRITICAL_WARNING : { bWarning = MNG_TRUE; break; } case MNG_CRC_CRITICAL_ERROR : { bError = MNG_TRUE; break; } } } else { switch (pData->iCrcmode & MNG_CRC_ANCILLARY) { case MNG_CRC_ANCILLARY_DISCARD : { bDiscard = MNG_TRUE; break; } case MNG_CRC_ANCILLARY_WARNING : { bWarning = MNG_TRUE; break; } case MNG_CRC_ANCILLARY_ERROR : { bError = MNG_TRUE; break; } } } if (bWarning) MNG_WARNING (pData, MNG_INVALIDCRC); if (bError) MNG_ERROR (pData, MNG_INVALIDCRC); } } if (!bDiscard) /* still processing ? */ iRetcode = process_raw_chunk (pData, pBuf, iL); } else { /* no crc => straight onto processing */ iRetcode = process_raw_chunk (pData, pBuf, iBuflen); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_CHUNK_CRC, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ MNG_LOCAL mng_retcode read_chunk (mng_datap pData) { mng_uint32 iBufmax = pData->iReadbufsize; mng_uint8p pBuf = pData->pReadbuf; mng_uint32 iBuflen = 0; /* number of bytes requested */ mng_uint32 iRead = 0; /* number of bytes read */ mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_CHUNK, MNG_LC_START); #endif #ifdef MNG_SUPPORT_DISPLAY if (pData->pCurraniobj) /* processing an animation object ? */ { do /* process it then */ { iRetcode = ((mng_object_headerp)pData->pCurraniobj)->fProcess (pData, pData->pCurraniobj); /* refresh needed ? */ /* if ((!iRetcode) && (!pData->bTimerset) && (pData->bNeedrefresh)) iRetcode = display_progressive_refresh (pData, 1); */ /* can we advance to next object ? */ if ((!iRetcode) && (pData->pCurraniobj) && (!pData->bTimerset) && (!pData->bSectionwait)) { /* reset timer indicator on read-cycle */ if ((pData->bReading) && (!pData->bDisplaying)) pData->bTimerset = MNG_FALSE; pData->pCurraniobj = ((mng_object_headerp)pData->pCurraniobj)->pNext; /* TERM processing to be done ? */ if ((!pData->pCurraniobj) && (pData->bHasTERM) && (!pData->bHasMHDR)) iRetcode = mng_process_display_mend (pData); } } /* until error or a break or no more objects */ while ((!iRetcode) && (pData->pCurraniobj) && (!pData->bTimerset) && (!pData->bSectionwait) && (!pData->bFreezing)); } else { if (pData->iBreakpoint) /* do we need to finish something first ? */ { switch (pData->iBreakpoint) /* return to broken display routine */ { #ifndef MNG_SKIPCHUNK_FRAM case 1 : { iRetcode = mng_process_display_fram2 (pData); break; } #endif case 2 : { iRetcode = mng_process_display_ihdr (pData); break; } #ifndef MNG_SKIPCHUNK_SHOW case 3 : ; /* same as 4 !!! */ case 4 : { iRetcode = mng_process_display_show (pData); break; } #endif #ifndef MNG_SKIPCHUNK_CLON case 5 : { iRetcode = mng_process_display_clon2 (pData); break; } #endif #ifdef MNG_INCLUDE_JNG case 7 : { iRetcode = mng_process_display_jhdr (pData); break; } #endif case 6 : ; /* same as 8 !!! */ case 8 : { iRetcode = mng_process_display_iend (pData); break; } #ifndef MNG_SKIPCHUNK_MAGN case 9 : { iRetcode = mng_process_display_magn2 (pData); break; } #endif case 10 : { iRetcode = mng_process_display_mend2 (pData); break; } #ifndef MNG_SKIPCHUNK_PAST case 11 : { iRetcode = mng_process_display_past2 (pData); break; } #endif } } } if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_SUPPORT_DISPLAY */ /* can we continue processing now, or do we */ /* need to wait for the timer to finish (again) ? */ #ifdef MNG_SUPPORT_DISPLAY if ((!pData->bTimerset) && (!pData->bSectionwait) && (!pData->bEOF)) #else if (!pData->bEOF) #endif { #ifdef MNG_SUPPORT_DISPLAY /* freezing in progress ? */ if ((pData->bFreezing) && (pData->iSuspendpoint == 0)) pData->bRunning = MNG_FALSE; /* then this is the right moment to do it */ #endif if (pData->iSuspendpoint <= 2) { iBuflen = sizeof (mng_uint32); /* read length */ iRetcode = read_databuffer (pData, pBuf, &pData->pReadbufnext, iBuflen, &iRead); if (iRetcode) /* bail on errors */ return iRetcode; if (pData->bSuspended) /* suspended ? */ pData->iSuspendpoint = 2; else /* save the length */ { pData->iChunklen = mng_get_uint32 (pBuf); if (pData->iChunklen > 0x7ffffff) return MNG_INVALIDLENGTH; } } if (!pData->bSuspended) /* still going ? */ { /* previously suspended or not eof ? */ if ((pData->iSuspendpoint > 2) || (iRead == iBuflen)) { /* determine length chunkname + data (+ crc) */ if (pData->iCrcmode & MNG_CRC_INPUT) iBuflen = pData->iChunklen + (mng_uint32)(sizeof (mng_chunkid) + sizeof (mng_uint32)); else iBuflen = pData->iChunklen + (mng_uint32)(sizeof (mng_chunkid)); /* do we have enough data in the current push buffer ? */ if ((pData->pFirstpushdata) && (iBuflen <= pData->pFirstpushdata->iRemaining)) { mng_pushdatap pPush = pData->pFirstpushdata; pBuf = pPush->pDatanext; pPush->pDatanext += iBuflen; pPush->iRemaining -= iBuflen; pData->iSuspendpoint = 0; /* safely reset this here ! */ iRetcode = check_chunk_crc (pData, pBuf, iBuflen); if (iRetcode) return iRetcode; if (!pPush->iRemaining) /* buffer depleted? then release it */ iRetcode = mng_release_pushdata (pData); } else { if (iBuflen < iBufmax) /* does it fit in default buffer ? */ { /* note that we don't use the full size so there's always a zero-byte at the very end !!! */ iRetcode = read_databuffer (pData, pBuf, &pData->pReadbufnext, iBuflen, &iRead); if (iRetcode) /* bail on errors */ return iRetcode; if (pData->bSuspended) /* suspended ? */ pData->iSuspendpoint = 3; else { if (iRead != iBuflen) /* did we get all the data ? */ MNG_ERROR (pData, MNG_UNEXPECTEDEOF); iRetcode = check_chunk_crc (pData, pBuf, iBuflen); } } else { if (iBuflen > 16777216) /* is the length incredible? */ MNG_ERROR (pData, MNG_IMPROBABLELENGTH); if (!pData->iSuspendpoint) /* create additional large buffer ? */ { /* again reserve space for the last zero-byte */ pData->iLargebufsize = iBuflen + 1; pData->pLargebufnext = MNG_NULL; MNG_ALLOC (pData, pData->pLargebuf, pData->iLargebufsize); } iRetcode = read_databuffer (pData, pData->pLargebuf, &pData->pLargebufnext, iBuflen, &iRead); if (iRetcode) return iRetcode; if (pData->bSuspended) /* suspended ? */ pData->iSuspendpoint = 4; else { if (iRead != iBuflen) /* did we get all the data ? */ MNG_ERROR (pData, MNG_UNEXPECTEDEOF); iRetcode = check_chunk_crc (pData, pData->pLargebuf, iBuflen); /* cleanup additional large buffer */ MNG_FREE (pData, pData->pLargebuf, pData->iLargebufsize); } } } if (iRetcode) /* on error bail out */ return iRetcode; } else { /* that's final */ iRetcode = mng_process_eof (pData); if (iRetcode) /* on error bail out */ return iRetcode; if ((iRead != 0) || /* did we get an unexpected eof ? */ #ifdef MNG_INCLUDE_JNG (pData->bHasIHDR || pData->bHasMHDR || pData->bHasJHDR)) #else (pData->bHasIHDR || pData->bHasMHDR)) #endif MNG_ERROR (pData, MNG_UNEXPECTEDEOF); } } } #ifdef MNG_SUPPORT_DISPLAY /* refresh needed ? */ if ((!pData->bTimerset) && (!pData->bSuspended) && (pData->bNeedrefresh)) { iRetcode = mng_display_progressive_refresh (pData, 1); if (iRetcode) /* on error bail out */ return iRetcode; } #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_CHUNK, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode process_pushedchunk (mng_datap pData) { mng_pushdatap pPush; mng_retcode iRetcode = MNG_NOERROR; #ifdef MNG_SUPPORT_DISPLAY if (pData->pCurraniobj) /* processing an animation object ? */ { do /* process it then */ { iRetcode = ((mng_object_headerp)pData->pCurraniobj)->fProcess (pData, pData->pCurraniobj); /* refresh needed ? */ /* if ((!iRetcode) && (!pData->bTimerset) && (pData->bNeedrefresh)) iRetcode = display_progressive_refresh (pData, 1); */ /* can we advance to next object ? */ if ((!iRetcode) && (pData->pCurraniobj) && (!pData->bTimerset) && (!pData->bSectionwait)) { /* reset timer indicator on read-cycle */ if ((pData->bReading) && (!pData->bDisplaying)) pData->bTimerset = MNG_FALSE; pData->pCurraniobj = ((mng_object_headerp)pData->pCurraniobj)->pNext; /* TERM processing to be done ? */ if ((!pData->pCurraniobj) && (pData->bHasTERM) && (!pData->bHasMHDR)) iRetcode = mng_process_display_mend (pData); } } /* until error or a break or no more objects */ while ((!iRetcode) && (pData->pCurraniobj) && (!pData->bTimerset) && (!pData->bSectionwait) && (!pData->bFreezing)); } else { if (pData->iBreakpoint) /* do we need to finish something first ? */ { switch (pData->iBreakpoint) /* return to broken display routine */ { #ifndef MNG_SKIPCHUNK_FRAM case 1 : { iRetcode = mng_process_display_fram2 (pData); break; } #endif case 2 : { iRetcode = mng_process_display_ihdr (pData); break; } #ifndef MNG_SKIPCHUNK_SHOW case 3 : ; /* same as 4 !!! */ case 4 : { iRetcode = mng_process_display_show (pData); break; } #endif #ifndef MNG_SKIPCHUNK_CLON case 5 : { iRetcode = mng_process_display_clon2 (pData); break; } #endif #ifdef MNG_INCLUDE_JNG case 7 : { iRetcode = mng_process_display_jhdr (pData); break; } #endif case 6 : ; /* same as 8 !!! */ case 8 : { iRetcode = mng_process_display_iend (pData); break; } #ifndef MNG_SKIPCHUNK_MAGN case 9 : { iRetcode = mng_process_display_magn2 (pData); break; } #endif case 10 : { iRetcode = mng_process_display_mend2 (pData); break; } #ifndef MNG_SKIPCHUNK_PAST case 11 : { iRetcode = mng_process_display_past2 (pData); break; } #endif } } } if (iRetcode) /* on error bail out */ return iRetcode; #endif /* MNG_SUPPORT_DISPLAY */ /* can we continue processing now, or do we */ /* need to wait for the timer to finish (again) ? */ #ifdef MNG_SUPPORT_DISPLAY if ((!pData->bTimerset) && (!pData->bSectionwait) && (!pData->bEOF)) #else if (!pData->bEOF) #endif { pData->iSuspendpoint = 0; /* safely reset it here ! */ pPush = pData->pFirstpushchunk; iRetcode = process_raw_chunk (pData, pPush->pData, pPush->iLength); if (iRetcode) return iRetcode; #ifdef MNG_SUPPORT_DISPLAY /* refresh needed ? */ if ((!pData->bTimerset) && (!pData->bSuspended) && (pData->bNeedrefresh)) { iRetcode = mng_display_progressive_refresh (pData, 1); if (iRetcode) /* on error bail out */ return iRetcode; } #endif } return mng_release_pushchunk (pData); } /* ************************************************************************** */ mng_retcode mng_read_graphic (mng_datap pData) { mng_uint32 iBuflen; /* number of bytes requested */ mng_uint32 iRead; /* number of bytes read */ mng_retcode iRetcode; /* temporary error-code */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_GRAPHIC, MNG_LC_START); #endif if (!pData->pReadbuf) /* buffer allocated ? */ { pData->iReadbufsize = 4200; /* allocate a default read buffer */ MNG_ALLOC (pData, pData->pReadbuf, pData->iReadbufsize); } /* haven't processed the signature ? */ if ((!pData->bHavesig) || (pData->iSuspendpoint == 1)) { iBuflen = 2 * sizeof (mng_uint32); /* read signature */ iRetcode = read_databuffer (pData, pData->pReadbuf, &pData->pReadbufnext, iBuflen, &iRead); if (iRetcode) return iRetcode; if (pData->bSuspended) /* input suspension ? */ pData->iSuspendpoint = 1; else { if (iRead != iBuflen) /* full signature received ? */ MNG_ERROR (pData, MNG_UNEXPECTEDEOF); /* is it a valid signature ? */ if (mng_get_uint32 (pData->pReadbuf) == PNG_SIG) pData->eSigtype = mng_it_png; else #ifdef MNG_INCLUDE_JNG if (mng_get_uint32 (pData->pReadbuf) == JNG_SIG) pData->eSigtype = mng_it_jng; else #endif if (mng_get_uint32 (pData->pReadbuf) == MNG_SIG) pData->eSigtype = mng_it_mng; else MNG_ERROR (pData, MNG_INVALIDSIG); /* all of it ? */ if (mng_get_uint32 (pData->pReadbuf+4) != POST_SIG) MNG_ERROR (pData, MNG_INVALIDSIG); pData->bHavesig = MNG_TRUE; } } if (!pData->bSuspended) /* still going ? */ { do { /* reset timer during mng_read() ? */ if ((pData->bReading) && (!pData->bDisplaying)) pData->bTimerset = MNG_FALSE; if (pData->pFirstpushchunk) /* chunks pushed ? */ iRetcode = process_pushedchunk (pData); /* process the pushed chunk */ else iRetcode = read_chunk (pData); /* read & process a chunk */ if (iRetcode) /* on error bail out */ return iRetcode; } #ifdef MNG_SUPPORT_DISPLAY /* until EOF or a break-request */ while (((!pData->bEOF) || (pData->pCurraniobj)) && (!pData->bSuspended) && (!pData->bSectionwait) && ((!pData->bTimerset) || ((pData->bReading) && (!pData->bDisplaying)))); #else while ((!pData->bEOF) && (!pData->bSuspended)); #endif } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_READ_GRAPHIC, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_INCLUDE_READ_PROCS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/makefiles/0000755000000000000000000000000012120335330013411 5ustar rootrootlibmng-2.0.2/makefiles/makefile.bcb30000644000000000000000000001243212005307152015726 0ustar rootroot# # For conditions of distribution and use, see copyright notice in libmng.h # # makefile for libmng - THE MNG library # this makefile is suitable for Borland C++ Builder. # it works (at least) with Borland C++ Builder v3 # Configuration options are now in mng_conf.h # this option forces dll compatibility MNGOPT = -DMNG_BUILD_DLL # The name of your C compiler: CC= bcc32 # compiler options: CFLAGS= -WD -O2 -Hc -w-par -k -y -v -vi -c -tWD \ -wuse -wucp -wstv -wstu -wsig -wpin -wnod -wnak -wdef -wcln -wbbf -wasm -wamp \ -wamb -Tkh30000 -ff -5 -I.;..\zlib;..\jpgsrc6b;..\lcms\include $(MNGOPT) # source files SOURCES= libmng_hlapi.c libmng_callback_xs.c libmng_prop_xs.c libmng_chunk_xs.c \ libmng_chunk_descr.c libmng_read.c libmng_write.c libmng_display.c \ libmng_object_prc.c libmng_chunk_prc.c libmng_chunk_io.c libmng_error.c \ libmng_trace.c libmng_pixels.c libmng_filter.c libmng_dither.c \ libmng_zlib.c libmng_jpeg.c libmng_cms.c # object files OBJECTS= libmng_hlapi.obj libmng_callback_xs.obj libmng_prop_xs.obj libmng_chunk_xs.obj \ libmng_chunk_descr.obj libmng_read.obj libmng_write.obj libmng_display.obj \ libmng_object_prc.obj libmng_chunk_prc.obj libmng_chunk_io.obj libmng_error.obj \ libmng_trace.obj libmng_pixels.obj libmng_filter.obj libmng_dither.obj \ libmng_zlib.obj libmng_jpeg.obj libmng_cms.obj # type dependancies .c.obj: $(CC) $(CFLAGS) -c{ $<} # make options all: libmng.lib clean: - del *.obj - del libmng.lib # file dependancies libmng.lib: $(OBJECTS) - del libmng.lib tlib libmng.lib /E /C @&&| +libmng_hlapi.obj +libmng_callback_xs.obj +libmng_prop_xs.obj +libmng_chunk_xs.obj & +libmng_read.obj +libmng_write.obj +libmng_display.obj & +libmng_object_prc.obj +libmng_chunk_prc.obj +libmng_chunk_io.obj +libmng_error.obj & +libmng_trace.obj +libmng_pixels.obj +libmng_filter.obj +libmng_dither.obj & +libmng_zlib.obj +libmng_jpeg.obj +libmng_cms.obj | libmng_hlapi.obj: libmng_hlapi.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_memory.h libmng_error.h libmng_trace.h libmng_read.h \ libmng_write.h libmng_display.h libmng_zlib.h libmng_cms.h libmng_zlib.h libmng_callback_xs.obj: libmng_callback_xs.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_prop_xs.obj: libmng_prop_xs.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_cms.h libmng_chunk_xs.obj: libmng_chunk_xs.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_chunks.h libmng_chunk_prc.h libmng_error.h libmng_trace.h libmng_read.obj: libmng_read.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_chunk_prc.h libmng_chunk_io.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_read.h libmng_display.h libmng_write.obj: libmng_write.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_write.h libmng_display.obj: libmng_display.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_zlib.h libmng_cms.h \ libmng_pixels.h libmng_display.h libmng_object_prc.obj: libmng_object_prc.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_display.h libmng_pixels.h libmng_chunk_descr.obj: libmng_chunk_descr.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_chunks.h libmng_chunk_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_chunk_prc.obj: libmng_chunk_prc.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_chunks.h libmng_chunk_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_chunk_io.obj: libmng_chunk_io.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h libmng_chunks.h \ libmng_chunk_io.h libmng_chunk_prc libmng_memory.h libmng_error.h \ libmng_trace.h libmng_display.h libmng_zlib.h libmng_pixels.h libmng_error.obj: libmng_error.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_trace.obj: libmng_trace.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_pixels.obj: libmng_pixels.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_memory.h libmng_error.h libmng_trace.h \ libmng_cms.h libmng_filter.h libmng_pixels.h libmng_filter.obj: libmng_filter.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_filter.h libmng_dither.obj: libmng_dither.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_dither.h libmng_zlib.obj: libmng_zlib.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h libmng_pixels.h \ libmng_filter.h libmng_zlib.h libmng_jpeg.obj: libmng_jpeg.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h \ libmng_pixels.h libmng_jpeg.h libmng_cms.obj: libmng_cms.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_error.h libmng_trace.h libmng_cms.h libmng-2.0.2/makefiles/config.h.in~0000644000000000000000000000720612076477701015662 0ustar rootroot/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* define if you want JPEG support */ #undef HAVE_LIBJPEG /* define if you want lcms v1 support */ #undef HAVE_LIBLCMS1 /* define if you want lcms v2 support */ #undef HAVE_LIBLCMS2 /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* define if you want chunk access support */ #undef MNG_ACCESS_CHUNKS /* enable building standard shared object */ #undef MNG_BUILD_SO /* enable verbose error text */ #undef MNG_ERROR_TELLTALE /* define if you want full lcms support */ #undef MNG_FULL_CMS /* enable support for accessing chunks */ #undef MNG_STORE_CHUNKS /* define if you want display support */ #undef MNG_SUPPORT_DISPLAY /* define if you want dynamic support */ #undef MNG_SUPPORT_DYNAMICMNG /* define if you want full mng support */ #undef MNG_SUPPORT_FULL /* define if you want read support */ #undef MNG_SUPPORT_READ /* enable support for debug tracing */ #undef MNG_SUPPORT_TRACE /* define if you want write support */ #undef MNG_SUPPORT_WRITE /* enable support for debug messages */ #undef MNG_TRACE_TELLTALE /* but: libmng.dll (!) */ #undef MNG_VERSION_DLL /* MAJOR number of version */ #undef MNG_VERSION_MAJOR /* MINOR number of version */ #undef MNG_VERSION_MINOR /* PATCH number of version */ #undef MNG_VERSION_RELEASE /* eg. libmng.so.1 */ #undef MNG_VERSION_SO /* 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 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to empty if `const' does not conform to ANSI C. */ #undef const libmng-2.0.2/makefiles/makefile.vcwin320000644000000000000000000000702112005307152016406 0ustar rootroot# makefile for libmng # Copyright (C) 2000 AM(s98t269@stmail.eng.kagawa-u.ac.jp) # For conditions of distribution and use, see copyright notice in libmng.h # Assumes that zlib.lib, zconf.h, and zlib.h have been copied to ..\zlib # Assumes that libjpeg.lib, *.h have been copied to ..\jpgsrc6b # Assumes that lcmsdll.lib and lcmsstat.lib have been copied to ..\lcms\lib\msvc # To use, do "nmake /f makefiles\makefile.vcwin32" # -------- Microsoft Visual C++ 4.0 and later, no assembler code -------- CFLAGS= -Ox -GA3s -nologo -W3 -I..\zlib -I..\jpgsrc6b -I..\lcms\include CC=cl LD=link LDFLAGS= O=.obj #uncomment next to put error messages in a file #ERRFILE= >> mngerrs # variables OBJS1 = libmng_callback_xs$(O) libmng_chunk_io$(O) libmng_chunk_prc$(O) libmng_chunk_descr$(0) OBJS2 = libmng_chunk_xs$(O) libmng_cms$(O) libmng_display$(O) libmng_dither$(O) OBJS3 = libmng_error$(O) libmng_filter$(O) libmng_hlapi$(O) libmng_jpeg$(O) OBJS4 = libmng_object_prc$(O) libmng_pixels$(O) libmng_prop_xs$(O) OBJS5 = libmng_read$(O) libmng_trace$(O) libmng_write$(O) libmng_zlib$(O) all: libmng.lib libmng_callback_xs$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_chunk_io$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_chunk_descr$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_chunk_prc$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_chunk_xs$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_cms$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_display$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_dither$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_error$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_filter$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_hlapi$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_jpeg$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_object_prc$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_pixels$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_prop_xs$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_read$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_trace$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_write$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng_zlib$(O): libmng.h libmng_data.h libmng_error.h libmng_trace.h $(CC) -c $(CFLAGS) $*.c $(ERRFILE) libmng.lib: $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) echo something to del > libmng.lib del libmng.lib lib /OUT:libmng.lib $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) mngtest.exe: mngtest.obj libmng.lib $(LD) $(LDFLAGS) mngtest.obj libmng.lib ..\zlib\zlib.lib /OUT:mngtest.exe /SUBSYSTEM:CONSOLE test: mngtest.exe mngtest # End of makefile for libmng libmng-2.0.2/makefiles/makefile.qnx0000644000000000000000000001434512005307152015730 0ustar rootroot# # For conditions of distribution and use, see copyright notice in libmng.h # # makefile for libmng - THE MNG library # this makefile is suitable for QNX Neutrino # Configuration options are now in libmng_conf.h # The architecture of your target # one of arm, mips, ppc, sh, x86 #---------------------------------- include version.mak #---------------------------------- ARCH = mips # The name of the library LIBNAME = libmng ARNAME = $(LIBNAME).a SONAME = $(LIBNAME).so # The artefact output folder OBJDIR = bin # Location of jpeg header files JPEG_INC = $(QNX_TARGET)/usr/include/jpeg # Location of zlib header files ZLIB_INC = $(QNX_TARGET)/usr/include # Location of lcms header files # (switch on MNG_FULL_CMS in libmng_conf.h if you want to use this) LCMS_INC = $(QNX_TARGET)/usr/include/lcms # default build defines DEF = DEF_SO = -DMNG_BUILD_SO # compiler options: CFLAGS = -O2 -funroll-loops # include paths INC = -I$(ZLIB_INC) -I$(JPEG_INC) # The name of your C compiler: CC = nto$(ARCH)-gcc # source files SRC= \ libmng_callback_xs.c \ libmng_chunk_io.c \ libmng_chunk_descr.c \ libmng_chunk_prc.c \ libmng_chunk_xs.c \ libmng_cms.c \ libmng_display.c \ libmng_dither.c \ libmng_error.c \ libmng_filter.c \ libmng_hlapi.c \ libmng_jpeg.c \ libmng_object_prc.c \ libmng_pixels.c \ libmng_prop_xs.c \ libmng_read.c \ libmng_trace.c \ libmng_write.c \ libmng_zlib.c # object files OBJ=$(addprefix $(OBJDIR)/$(ARCH)/, $(SRC:%.c=%.o)) # object files for shared object OBJ_SO=$(addprefix $(OBJDIR)/$(ARCH)/, $(SRC:%.c=%.pic.o)) # type dependancies $(OBJDIR)/$(ARCH)/%.o: %.c $(CC) $(CFLAGS) $(INC) $(DEF) -o $@ -c $< $(OBJDIR)/$(ARCH)/%.pic.o: %.c $(CC) $(CFLAGS) $(INC) $(DEF_SO) -fPIC -o $@ -c $< all: init $(ARNAME) $(SONAME) init: if [ ! -d $(OBJDIR)/$(ARCH) ]; then mkdir -p $(OBJDIR)/$(ARCH); fi $(ARNAME): $(OBJ) ar r $(OBJDIR)/$(ARCH)/$(ARNAME) $(OBJ) $(SONAME): $(SONAME).$(MNGMAJ) ln -sf $(OBJDIR)/$(ARCH)/$(SONAME).$(MNGMAJ) $(OBJDIR)/$(ARCH)/$(SONAME) $(SONAME).$(MNGMAJ): $(SONAME).$(MNGVER) ln -sf $(OBJDIR)/$(ARCH)/$(SONAME).$(MNGVER) $(OBJDIR)/$(ARCH)/$(SONAME).$(MNGMAJ) $(SONAME).$(MNGVER): $(OBJ_SO) $(CC) -shared -Wl,-soname,$(SONAME).$(MNGMAJ) -o $(OBJDIR)/$(ARCH)/$(SONAME).$(MNGVER) $(OBJ_SO) \ -lz -lm -ljpeg # -lz -lm -ljpeg -llcms clean: rm -f $(OBJ) $(OBJ_SO) rm -f $(OBJDIR)/$(ARCH)/$(ARNAME) $(OBJDIR)/$(ARCH)/$(SONAME)* # DO NOT DELETE THIS LINE -- make depend depends on it. libmng_hlapi.o libmng_hlapi.pic.o: libmng_hlapi.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_memory.h libmng_error.h libmng_trace.h libmng_read.h \ libmng_write.h libmng_display.h libmng_zlib.h libmng_cms.h libmng_zlib.h libmng_callback_xs.o libmng_callback_xs.pic.o: libmng_callback_xs.c libmng.h \ libmng_conf.h libmng_types.h libmng_data.h libmng_error.h libmng_trace.h libmng_prop_xs.o libmng_prop_xs.pic.o: libmng_prop_xs.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_error.h libmng_trace.h libmng_cms.h libmng_chunk_xs.o libmng_chunk_xs.pic.o: libmng_chunk_xs.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_prc.h \ libmng_error.h libmng_trace.h libmng_read.o libmng_read.pic.o: libmng_read.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_chunk_prc.h libmng_chunk_io.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_read.h libmng_display.h libmng_write.o libmng_write.pic.o: libmng_write.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_write.h libmng_display.o libmng_display.pic.o: libmng_display.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_zlib.h libmng_cms.h libmng_pixels.h \ libmng_display.h libmng_object_prc.o libmng_object_prc.pic.o: libmng_object_prc.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_display.h libmng_pixels.h libmng_chunk_descr.o libmng_chunk_descr.pic.o: libmng_chunk_descr.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_descr.h libmng_memory.h \ libmng_chunk_prc.h libmng_error.h libmng_trace.h libmng_chunk_prc.o libmng_chunk_prc.pic.o: libmng_chunk_prc.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_chunk_io.o libmng_chunk_io.pic.o: libmng_chunk_io.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_chunk_io.h libmng_chunk_prc.h libmng_memory.h libmng_error.h \ libmng_trace.h libmng_display.h libmng_zlib.h libmng_pixels.h libmng_error.o libmng_error.pic.o: libmng_error.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_trace.o libmng_trace.pic.o: libmng_trace.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_pixels.o libmng_pixels.pic.o: libmng_pixels.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_memory.h libmng_error.h libmng_trace.h \ libmng_cms.h libmng_filter.h libmng_pixels.h libmng_filter.o libmng_filter.pic.o: libmng_filter.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_filter.h libmng_dither.o libmng_dither.pic.o: libmng_dither.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_dither.h libmng_zlib.o libmng_zlib.pic.o: libmng_zlib.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h libmng_pixels.h \ libmng_filter.h libmng_zlib.h libmng_jpeg.o libmng_jpeg.pic.o: libmng_jpeg.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h libmng_pixels.h libmng_jpeg.h libmng_cms.o libmng_cms.pic.o: libmng_cms.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_error.h libmng_trace.h libmng_cms.h libmng-2.0.2/makefiles/config.h.in0000644000000000000000000000720612076500015015445 0ustar rootroot/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* define if you want JPEG support */ #undef HAVE_LIBJPEG /* define if you want lcms v1 support */ #undef HAVE_LIBLCMS1 /* define if you want lcms v2 support */ #undef HAVE_LIBLCMS2 /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* define if you want chunk access support */ #undef MNG_ACCESS_CHUNKS /* enable building standard shared object */ #undef MNG_BUILD_SO /* enable verbose error text */ #undef MNG_ERROR_TELLTALE /* define if you want full lcms support */ #undef MNG_FULL_CMS /* enable support for accessing chunks */ #undef MNG_STORE_CHUNKS /* define if you want display support */ #undef MNG_SUPPORT_DISPLAY /* define if you want dynamic support */ #undef MNG_SUPPORT_DYNAMICMNG /* define if you want full mng support */ #undef MNG_SUPPORT_FULL /* define if you want read support */ #undef MNG_SUPPORT_READ /* enable support for debug tracing */ #undef MNG_SUPPORT_TRACE /* define if you want write support */ #undef MNG_SUPPORT_WRITE /* enable support for debug messages */ #undef MNG_TRACE_TELLTALE /* but: libmng.dll (!) */ #undef MNG_VERSION_DLL /* MAJOR number of version */ #undef MNG_VERSION_MAJOR /* MINOR number of version */ #undef MNG_VERSION_MINOR /* PATCH number of version */ #undef MNG_VERSION_RELEASE /* eg. libmng.so.1 */ #undef MNG_VERSION_SO /* 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 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to empty if `const' does not conform to ANSI C. */ #undef const libmng-2.0.2/makefiles/makefile.mingwdll0000644000000000000000000001330112005307152016726 0ustar rootroot# # For conditions of distribution and use, see copyright notice in libmng.h # # makefile for libmng - THE MNG library # this makefile is for MinGW32, it has been tested with gcc 3.1, # binutils 2.12.90 and mingw-runtime 2.0 # # By Benoit Blanchon - benoit.blanchon@laposte.net # DLL mods by F. Richter # # outputs LIBMNG_A = libmng.a LIBMNG_DLL = libmng.1.dll INSTALL_PREFIX = C:/MinGW/ # maybe you sould replace with anti-slashes # default build options OPTIONS = -DMNG_BUILD_DLL -DMNG_ACCESS_CHUNKS -DMNG_STORE_CHUNKS # Where the zlib library and include files are located ZLIBLIB=-lz #ZLIBLIB=-L../zlib -lz #ZLIBINC=-I../zlib # Where the jpeg library and include files are located JPEGLIB=-ljpeg #JPEGLIB=-L../jpgsrc -ljpeg #JPEGINC=-I../jpgsrc # Where the lcms library and include files are located #LCMSLIB=-llcms LCMSLIB=-L../lcms/lib -llcms LCMSINC=-I../lcms/source # file deletion command RM=rm -f #RM=del # directory creation command MKDIR=mkdir -p # file copy command COPY=cp #COPY=copy # compiler CC=gcc ALIGN= # for i386: #ALIGN=-malign-loops=2 -malign-functions=2 CFLAGS=$(ZLIBINC) $(JPEGINC) $(LCMSINC) -Wall -O3 -funroll-loops $(OPTIONS) $(ALIGN) -s LDFLAGS=-L. -lmng $(ZLIBLIB) $(JPEGLIB) $(LCMSLIB) -lm -s INCPATH=$(prefix)/include LIBPATH=$(prefix)/lib OBJS = \ libmng_callback_xs.o \ libmng_chunk_io.o \ libmng_chunk_descr.o \ libmng_chunk_prc.o \ libmng_chunk_xs.o \ libmng_cms.o \ libmng_display.o \ libmng_dither.o \ libmng_error.o \ libmng_filter.o \ libmng_hlapi.o \ libmng_jpeg.o \ libmng_object_prc.o \ libmng_pixels.o \ libmng_prop_xs.o \ libmng_read.o \ libmng_trace.o \ libmng_write.o \ libmng_zlib.o .SUFFIXES: .c .o .c.o: $(CC) -c $(CFLAGS) -o $@ $*.c all: $(LIBMNG_A) $(LIBMNG_A): $(LIBMNG_DLL) $(LIBMNG_DLL) : $(OBJS) dllwrap --implib=$(LIBMNG_A) --dllname=$(LIBMNG_DLL) $(OBJS) $(LDFLAGS) install : $(LIBMNG_A) $(MKDIR) $(INSTALL_PREFIX)include $(COPY) libmng.h $(INSTALL_PREFIX)include $(COPY) libmng_conf.h $(INSTALL_PREFIX)include $(COPY) libmng_types.h $(INSTALL_PREFIX)include $(MKDIR) $(INSTALL_PREFIX)lib $(COPY) $(LIBMNG_A) $(INSTALL_PREFIX)lib clean: $(RM) *.o # DO NOT DELETE THIS LINE -- make depend depends on it. libmng_hlapi.o : libmng_hlapi.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_memory.h libmng_error.h libmng_trace.h libmng_read.h \ libmng_write.h libmng_display.h libmng_zlib.h libmng_cms.h libmng_zlib.h libmng_callback_xs.o : libmng_callback_xs.c libmng.h \ libmng_conf.h libmng_types.h libmng_data.h libmng_error.h libmng_trace.h libmng_prop_xs.o : libmng_prop_xs.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_error.h libmng_trace.h libmng_cms.h libmng_chunk_xs.o : libmng_chunk_xs.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_prc.h \ libmng_error.h libmng_trace.h libmng_read.o : libmng_read.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_chunk_prc.h libmng_chunk_io.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_read.h libmng_display.h libmng_write.o : libmng_write.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_write.h libmng_display.o : libmng_display.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_zlib.h libmng_cms.h libmng_pixels.h \ libmng_display.h libmng_object_prc.o : libmng_object_prc.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_display.h libmng_pixels.h libmng_chunk_descr.o : libmng_chunk_descr.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_descr.h \ libmng_chunk_prc.h libmng_memory.h libmng_error.h libmng_trace.h libmng_chunk_prc.o : libmng_chunk_prc.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_chunk_io.o : libmng_chunk_io.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_chunk_io.h libmng_chunk_prc.h libmng_memory.h libmng_error.h \ libmng_trace.h libmng_display.h libmng_zlib.h libmng_pixels.h libmng_error.o : libmng_error.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_trace.o : libmng_trace.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_pixels.o : libmng_pixels.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_memory.h libmng_error.h libmng_trace.h \ libmng_cms.h libmng_filter.h libmng_pixels.h libmng_filter.o : libmng_filter.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_filter.h libmng_dither.o : libmng_dither.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_dither.h libmng_zlib.o : libmng_zlib.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h libmng_pixels.h \ libmng_filter.h libmng_zlib.h libmng_jpeg.o : libmng_jpeg.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h libmng_pixels.h libmng_jpeg.h libmng_cms.o : libmng_cms.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_error.h libmng_trace.h libmng_cms.h libmng-2.0.2/makefiles/makefile.linux0000644000000000000000000001672112115363276016274 0ustar rootroot# # For conditions of distribution and use, see copyright notice in libmng.h # # makefile for libmng - THE MNG library # this makefile is suitable for Linux ELF with gcc # # (this file is heavily copied from makefile.linux in the libpng package) # #------------------------------------------------------- include version.mak #-------------- which lcms version do you use? --------- #USE_LIBLCMSv1 = yes USE_LIBLCMSv2 = yes #------------------------------------------------------- prefix=/usr/local #------------------------------------------------------ # compiler CC=gcc # default build options (this forces shared library compatibility!!) #OPTIONS = -DMNG_BUILD_SO OPTIONS = -DMNG_BUILD_SO -DMNG_FULL_CMS #OPTIONS += -DMNG_INCLUDE_ANG_PROPOSAL -DMNG_INCLUDE_MPNG_PROPOSAL OPTIONS += -DMNG_SUPPORT_FULL OPTIONS += -DMNG_STORE_CHUNKS -DMNG_ACCESS_CHUNKS -DMNG_ERROR_TELLTALE ifeq ($(USE_LIBLCMSv2),yes) OPTIONS += -DHAVE_LIBLCMS2 LLCMS = -llcms2 endif ifeq ($(USE_LIBLCMSv1),yes) OPTIONS += -DHAVE_LIBLCMS1 LLCMS = -llcms endif # Where the zlib library and include files are located ZLIBLIB=/usr/lib ZLIBINC=/usr/include # Where the jpeg library and include files are located JPEGLIB=/usr/lib JPEGINC=/usr/include # Where the lcms library and include files are located LCMSLIB=/usr/lib LCMSINC=/usr/include ALIGN= # for i386: #ALIGN=-malign-loops=2 -malign-functions=2 WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \ -Wmissing-declarations -Wtraditional -Wcast-align \ -Wstrict-prototypes -Wmissing-prototypes #-Wconversion # for pgcc version 2.95.1, -O3 is buggy; don't use it. CFLAGS=-I$(ZLIBINC) -I$(JPEGINC) -I$(LCMSINC) -Wall -O3 -funroll-loops \ $(OPTIONS) $(ALIGN) # $(WARNMORE) -g LDFLAGS=-L. -Wl,-rpath,. \ -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) \ -L$(JPEGLIB) -Wl,-rpath,$(JPEGLIB) \ -L$(LCMSLIB) -Wl,-rpath,$(LCMSLIB) \ -lmng -lz -ljpeg $(LLCMS) -lm RANLIB=ranlib #RANLIB=echo INCPATH=$(prefix)/include LIBPATH=$(prefix)/lib OBJS = \ libmng_callback_xs.o \ libmng_chunk_io.o \ libmng_chunk_descr.o \ libmng_chunk_prc.o \ libmng_chunk_xs.o \ libmng_cms.o \ libmng_display.o \ libmng_dither.o \ libmng_error.o \ libmng_filter.o \ libmng_hlapi.o \ libmng_jpeg.o \ libmng_object_prc.o \ libmng_pixels.o \ libmng_prop_xs.o \ libmng_read.o \ libmng_trace.o \ libmng_write.o \ libmng_zlib.o OBJSDLL = $(OBJS:.0=.pic.o) .SUFFIXES: .c .o .pic.o .c.pic.o: $(CC) -c $(CFLAGS) -fPIC -o $@ $*.c all: libmng.a libmng.so libmng.a: $(OBJS) ar rc $@ $(OBJS) $(RANLIB) $@ libmng.so: libmng.so.$(MNGMAJ) ln -sf libmng.so.$(MNGMAJ) libmng.so libmng.so.$(MNGMAJ): libmng.so.$(MNGVER) ln -sf libmng.so.$(MNGVER) libmng.so.$(MNGMAJ) libmng.so.$(MNGVER): $(OBJSDLL) # $(CC) -shared -Wl,-soname,libmng.so.$(MNGMAJ) -o libmng.so.$(MNGVER) \ # $(OBJSDLL) -L$(ZLIBLIB) -L$(JPEGLIB) -L$(LCMSLIB) -lz -lm -lc $(CC) -shared -Wl,-soname,libmng.so.$(MNGMAJ) -o libmng.so.$(MNGVER) \ $(OBJSDLL) -L$(ZLIBLIB) -L$(JPEGLIB) -ljpeg -L$(LCMSLIB) -llcms \ -lz -lm -lc install: libmng.a libmng.so.$(MNGVER) -@mkdir -p $(INCPATH) $(LIBPATH) cp libmng.h libmng_conf.h libmng_types.h $(INCPATH) chmod 644 $(INCPATH)/libmng.h $(INCPATH)/libmng_conf.h $(INCPATH)/libmng_types.h cp libmng.a libmng.so.$(MNGVER) $(LIBPATH) chmod 755 $(LIBPATH)/libmng.so.$(MNGVER) -@/bin/rm -f $(LIBPATH)/libmng.so.$(MNGMAJ) $(LIBPATH)/libmng.so (cd $(LIBPATH); ln -sf libmng.so.$(MNGVER) libmng.so.$(MNGMAJ); \ ln -sf libmng.so.$(MNGMAJ) libmng.so) clean: /bin/rm -f *.o libmng.a libmng.so* uninstall: rm -f $(prefix)/include/libmng.h rm -f $(prefix)/include/libmng_conf.h rm -f $(prefix)/include/libmng_types.h rm -f $(prefix)/lib/libmng* # DO NOT DELETE THIS LINE -- make depend depends on it. libmng_hlapi.o libmng_hlapi.pic.o: libmng_hlapi.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_memory.h libmng_error.h libmng_trace.h libmng_read.h \ libmng_write.h libmng_display.h libmng_zlib.h libmng_cms.h libmng_zlib.h libmng_callback_xs.o libmng_callback_xs.pic.o: libmng_callback_xs.c libmng.h \ libmng_conf.h libmng_types.h libmng_data.h libmng_error.h libmng_trace.h libmng_prop_xs.o libmng_prop_xs.pic.o: libmng_prop_xs.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_error.h libmng_trace.h libmng_cms.h libmng_chunk_xs.o libmng_chunk_xs.pic.o: libmng_chunk_xs.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_prc.h \ libmng_error.h libmng_trace.h libmng_read.o libmng_read.pic.o: libmng_read.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_chunk_prc.h libmng_chunk_io.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_read.h libmng_display.h libmng_write.o libmng_write.pic.o: libmng_write.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_write.h libmng_display.o libmng_display.pic.o: libmng_display.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_zlib.h libmng_cms.h libmng_pixels.h \ libmng_display.h libmng_object_prc.o libmng_object_prc.pic.o: libmng_object_prc.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_display.h libmng_pixels.h libmng_chunk_descr.o libmng_chunk_descr.pic.o: libmng_chunk_descr.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_descr.h libmng_memory.h \ libmng_chunk_prc.h libmng_error.h libmng_trace.h libmng_chunk_prc.o libmng_chunk_prc.pic.o: libmng_chunk_prc.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_chunk_io.o libmng_chunk_io.pic.o: libmng_chunk_io.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_chunk_io.h libmng_chunk_prc.h libmng_memory.h libmng_error.h \ libmng_trace.h libmng_display.h libmng_zlib.h libmng_pixels.h libmng_error.o libmng_error.pic.o: libmng_error.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_trace.o libmng_trace.pic.o: libmng_trace.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_pixels.o libmng_pixels.pic.o: libmng_pixels.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_memory.h libmng_error.h libmng_trace.h \ libmng_cms.h libmng_filter.h libmng_pixels.h libmng_filter.o libmng_filter.pic.o: libmng_filter.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_filter.h libmng_dither.o libmng_dither.pic.o: libmng_dither.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_dither.h libmng_zlib.o libmng_zlib.pic.o: libmng_zlib.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h libmng_pixels.h \ libmng_filter.h libmng_zlib.h libmng_jpeg.o libmng_jpeg.pic.o: libmng_jpeg.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h libmng_pixels.h libmng_jpeg.h libmng_cms.o libmng_cms.pic.o: libmng_cms.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_error.h libmng_trace.h libmng_cms.h libmng-2.0.2/makefiles/configure.ac0000644000000000000000000001703312115352001015701 0ustar rootrootdnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.65) # define([MAJ_NR],[2]) define([MIN_NR],[0]) define([REL_NR],[2]) # #AC_INIT (PACKAGE, VERSION, [BUG-REPORT], [TARNAME], [URL]) AC_INIT( [libmng],[MAJ_NR.MIN_NR.REL_NR], [png-mng-implement@lists.sourceforge.net], [libmng-MAJ_NR.MIN_NR.REL_NR], [http://www.libmng.com/]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([libmng_hlapi.c]) # AC_CONFIG_HEADERS(config.h) # MNG_MAJOR_NR=MAJ_NR MNG_MINOR_NR=MIN_NR MNG_RELEASE_NR=REL_NR # AC_SUBST(MNG_MAJOR_NR) AC_SUBST(MNG_MINOR_NR) AC_SUBST(MNG_RELEASE_NR) # AM_INIT_AUTOMAKE([-Wall -Werror]) dnl pass the version string on the the makefiles AC_SUBST(PACKAGE) AC_SUBST(VERSION) AC_DEFINE([MNG_VERSION_MAJOR],[MAJ_NR],[MAJOR number of version]) AC_DEFINE([MNG_VERSION_MINOR],[MIN_NR],[MINOR number of version]) AC_DEFINE([MNG_VERSION_RELEASE],[REL_NR],[PATCH number of version]) AC_DEFINE([MNG_VERSION_SO],[MAJ_NR],[eg. libmng.so.1]) AC_DEFINE([MNG_VERSION_DLL],[MAJ_NR],[ but: libmng.dll (!)]) dnl Checks for programs. AC_PROG_CC AC_ISC_POSIX AM_PROG_LIBTOOL AC_PROG_INSTALL AC_LIBTOOL_WIN32_DLL # AC_C_BIGENDIAN # dnl support for files >2GB AC_SYS_LARGEFILE dnl Check for required header files AC_HEADER_STDC dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST dnl need pow and fabs AC_CHECK_FUNC(pow, , AC_CHECK_LIB(m, pow, LIBS="$LIBS -lm")) dnl what functionality we want to add (read, write, display). dnl all on by default. see libmng_conf.h for full descriptions dnl not building a standard shared object? AC_ARG_ENABLE(buildso, [ --disable-buildso disable building standard shared object]) if test "x$enable_buildso" != "xno"; then AC_DEFINE([MNG_BUILD_SO], [1], [enable building standard shared object]) fi dnl we only support the full mng spec for now (no LC or VLC) AC_DEFINE([MNG_SUPPORT_FULL], [1], [define if you want full mng support]) dnl remove support in library to read images? AC_ARG_ENABLE(read, [ --disable-read remove read support from library]) if test "x$enable_read" != "xno"; then AC_DEFINE([MNG_SUPPORT_READ], [1], [define if you want read support]) fi dnl remove support in library to write images? AC_ARG_ENABLE(write, [ --disable-write remove write support from library]) if test "x$enable_write" != "xno"; then AC_DEFINE([MNG_SUPPORT_WRITE], [1], [define if you want write support]) fi dnl remove support in library to display images? AC_ARG_ENABLE(display, [ --disable-display remove display support from library]) if test "x$enable_display" != "xno"; then AC_DEFINE([MNG_SUPPORT_DISPLAY], [1], [define if you want display support]) fi dnl remove support for 'dynamic' MNG? AC_ARG_ENABLE(dynamic, [ --disable-dynamic remove dynamic MNG support from library]) if test "x$enable_dynamic" != "xno"; then AC_DEFINE([MNG_SUPPORT_DYNAMICMNG], [1], [define if you want dynamic support]) fi dnl remove support in library to access chunks? AC_ARG_ENABLE(chunks, [ --disable-chunks remove support for chunk access]) if test "x$enable_chunks" != "xno"; then AC_DEFINE([MNG_ACCESS_CHUNKS], [1], [define if you want chunk access support]) fi dnl disable support for accessing chunks that have been previously read? AC_ARG_ENABLE(storechunks, [ --disable-storechunks remove support for access of previous chunks]) if test "x$enable_storechunks" != "xno"; then AC_DEFINE([MNG_STORE_CHUNKS], [1], [enable support for accessing chunks]) fi dnl enable support for debug tracing callbacks and messages? AC_ARG_ENABLE(trace, [ --enable-trace include support for debug tracing callbacks],[ if test "x$enable_trace" = "xyes"; then AC_DEFINE([MNG_SUPPORT_TRACE], [1], [enable support for debug tracing]) AC_DEFINE([MNG_TRACE_TELLTALE], [1], [enable support for debug messages]) fi ]) dnl verbose error text dnl this should always be on AC_DEFINE([MNG_ERROR_TELLTALE], [1], [enable verbose error text]) dnl libz is required. AC_ARG_WITH(zlib, [ --with-zlib[=DIR] use zlib include/library files in DIR],[ if test -d "$withval"; then CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" fi ]) AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, gzread, , AC_MSG_ERROR(zlib library not found)), AC_MSG_ERROR(zlib header not found) ) dnl check for jpeg library AC_ARG_WITH(jpeg, [ --with-jpeg[=DIR] use jpeg include/library files in DIR], [with_jpeg=$withval],[with_jpeg=_auto]) if test "x$with_jpeg" != "xno" -a "x$with_jpeg" != "xyes" -a \ "x$with_jpeg" != "x_auto"; then # Save in case test with directory specified fails _cppflags=${CPPFLAGS} _ldflags=${LDFLAGS} _restore=1 CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" else _restore=0 fi if test "x$with_jpeg" != "xno"; then AC_CHECK_HEADER(jpeglib.h, AC_CHECK_LIB(jpeg, jpeg_read_header, [ LIBS="$LIBS -ljpeg" AC_DEFINE([HAVE_LIBJPEG], [1], [define if you want JPEG support]) _restore=0 ], AC_MSG_WARN(jpeg library not found)), AC_MSG_WARN(jpeg header not found) ) fi test $_restore -eq 1 && CPPFLAGS=$_cppflags LDFLAGS=$_ldflags dnl check for lcms2 library AC_ARG_WITH(lcms2, [ --with-lcms2[=DIR] use lcms2 include/library files in DIR], [with_lcms2=$withval],[with_lcms2=_auto]) if test "x$with_lcms2" != "xno" -a "x$with_lcms2" != "xyes" -a \ "x$with_lcms2" != "x_auto"; then # Save in case test with directory specified fails _cppflags=$CPPFLAGS _ldflags=$LDFLAGS _restore=1 CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" else _restore=0 fi if test "x$with_lcms2" != "xno"; then AC_CHECK_HEADER(lcms2.h, [ have_lcms2=yes AC_CHECK_LIB(lcms2, cmsFreeToneCurve, [ LIBS="$LIBS -llcms2" AC_DEFINE([HAVE_LIBLCMS2], [1], [define if you want lcms v2 support]) dnl for now this implies MNG_INCLUDE_LCMS in the headers: AC_DEFINE([MNG_FULL_CMS], [1], [define if you want full lcms support]) _restore=0 have_lcms2=yes ],[ have_lcms2=no ]) ]) dnl give feedback only if the user asked specifically for lcms2 if test "x$with_lcms2" != "x_auto" -a "x$have_lcms2" != "xyes"; then AC_MSG_WARN([lcms2 not found... disabling LCMS v2 support]) fi fi if test "x$with_lcms2" != "x_auto" -a "x$have_lcms2" != "xyes"; then dnl check for lcms library AC_ARG_WITH(lcms, [ --with-lcms[=DIR] use lcms include/library files in DIR], [with_lcms=$withval],[with_lcms=_auto]) if test "x$with_lcms" != "xno" -a "x$with_lcms" != "xyes" -a \ "x$with_lcms" != "x_auto"; then # Save in case test with directory specified fails _cppflags=$CPPFLAGS _ldflags=$LDFLAGS _restore=1 CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" else _restore=0 fi if test "x$with_lcms" != "xno"; then AC_CHECK_HEADER(lcms.h, [ have_lcms=yes AC_CHECK_LIB(lcms, cmsCreateRGBProfile, [ LIBS="$LIBS -llcms" AC_DEFINE([HAVE_LIBLCMS1], [1], [define if you want lcms v1 support]) dnl for now this implies MNG_INCLUDE_LCMS in the headers: AC_DEFINE([MNG_FULL_CMS], [1], [define if you want full lcms support]) _restore=0 have_lcms=yes ],[ have_lcms=no ]) ]) dnl give feedback only if the user asked specifically for lcms if test "x$with_lcms" != "x_auto" -a "x$have_lcms" != "xyes"; then AC_MSG_WARN([lcms not found... disabling LCMS v1 support]) fi fi fi test $_restore -eq 1 && CPPFLAGS=$_cppflags LDFLAGS=$_ldflags AC_CONFIG_FILES([Makefile libmng.pc:libmng.pc.in ]) AC_OUTPUT libmng-2.0.2/makefiles/Makefile.am0000644000000000000000000000260112115356634015462 0ustar rootroot## Process this file with automake to produce Makefile.in MAINTAINERCLEANFILES = Makefile.in ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = 1.3 foreign no-dependencies # include the app subdirectories in the distribution EXTRA_DIST = makefiles doc contrib # libmng release @VERSION@ libmng_la_LDFLAGS = \ -version-number @MNG_MAJOR_NR@:@MNG_MINOR_NR@:@MNG_RELEASE_NR@ lib_LTLIBRARIES = libmng.la include_HEADERS = libmng.h libmng_conf.h libmng_types.h noinst_HEADERS = libmng_chunk_io.h libmng_chunk_prc.h libmng_chunks.h \ libmng_cms.h libmng_data.h libmng_display.h libmng_dither.h \ libmng_error.h libmng_filter.h libmng_jpeg.h libmng_memory.h \ libmng_object_prc.h libmng_objects.h libmng_pixels.h \ libmng_read.h libmng_trace.h libmng_write.h libmng_zlib.h libmng_la_SOURCES = libmng_callback_xs.c libmng_chunk_io.c \ libmng_chunk_prc.c libmng_chunk_xs.c libmng_cms.c \ libmng_display.c libmng_dither.c libmng_error.c \ libmng_filter.c libmng_hlapi.c libmng_jpeg.c \ libmng_object_prc.c libmng_pixels.c libmng_prop_xs.c \ libmng_read.c libmng_trace.c libmng_write.c libmng_zlib.c man_MANS = doc/man/libmng.3 doc/man/jng.5 doc/man/mng.5 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libmng.pc uninstall-hook: rm -f $(DESTDIR)$(pkgconfigdir)/libmng.pc rm -f $(DESTDIR)$(includedir)/libmng.h rm -f $(DESTDIR)$(includedir)/libmng_conf.h rm -f $(DESTDIR)$(includedir)/libmng_types.h libmng-2.0.2/makefiles/makefile.mingw0000644000000000000000000001372312005307152016242 0ustar rootroot# # For conditions of distribution and use, see copyright notice in libmng.h # # makefile for libmng - THE MNG library # this makefile is for MinGW32, it have been tested with gcc 2.95.3, # binutils 2.11.90 and mingw-runtime 1.0 # # By Benoit Blanchon - benoit.blanchon@laposte.net # # Note : this makefile builds a static library; although it's seems to be # possible to build working DLL and import lib, I didn't manage do to it. # If you do, please let me know. #----------------------------------------------- include version.mak #----------------------------------------------- # outputs LIBMNG_A = libmng.a INSTALL_PREFIX = C:/MinGW/ # maybe you sould replace with anti-slashes # default build options OPTIONS = -DMNG_NO_CMS -DMNG_ACCESS_CHUNKS -DMNG_STORE_CHUNKS # Where the zlib library and include files are located ZLIBLIB=-lz #ZLIBLIB=-L../zlib -lz #ZLIBINC=-I../zlib # Where the jpeg library and include files are located JPEGLIB=-ljpeg #JPEGLIB=-L../jpgsrc -ljpeg #JPEGINC=-I../jpgsrc # Where the lcms library and include files are located #LCMSLIB=-llcms #LCMSLIB=-L../lcms/lib -llcms #LCMSINC=-I../lcms/source # file deletion command RM=rm -f #RM=del # directory creation command MKDIR=mkdir -p # file copy command COPY=cp #COPY=copy # compiler CC=gcc ALIGN= # for i386: #ALIGN=-malign-loops=2 -malign-functions=2 CFLAGS=$(ZLIBINC) $(JPEGINC) $(LCMSINC) -Wall -O3 -funroll-loops $(OPTIONS) $(ALIGN) LDFLAGS=-L. -lmng $(ZLIBLIB) $(JPEGLIB) $(LCMSLIB) -lm # library (.a) file creation command AR= ar rc # second step in .a creation (use "touch" if not needed) AR2= ranlib INCPATH=$(prefix)/include LIBPATH=$(prefix)/lib OBJS = \ libmng_callback_xs.o \ libmng_chunk_io.o \ libmng_chunk_descr.o \ libmng_chunk_prc.o \ libmng_chunk_xs.o \ libmng_cms.o \ libmng_display.o \ libmng_dither.o \ libmng_error.o \ libmng_filter.o \ libmng_hlapi.o \ libmng_jpeg.o \ libmng_object_prc.o \ libmng_pixels.o \ libmng_prop_xs.o \ libmng_read.o \ libmng_trace.o \ libmng_write.o \ libmng_zlib.o .SUFFIXES: .c .o .c.o: $(CC) -c $(CFLAGS) -o $@ $*.c all: $(LIBMNG_A) $(LIBMNG_A) : $(OBJS) $(RM) $@ $(AR) $@ $(OBJS) $(AR2) $@ install : $(LIBMNG_A) $(MKDIR) $(INSTALL_PREFIX)include $(COPY) libmng.h $(INSTALL_PREFIX)include $(COPY) libmng_conf.h $(INSTALL_PREFIX)include $(COPY) libmng_types.h $(INSTALL_PREFIX)include $(MKDIR) $(INSTALL_PREFIX)lib $(COPY) $(LIBMNG_A) $(INSTALL_PREFIX)lib clean: $(RM) *.o # DO NOT DELETE THIS LINE -- make depend depends on it. libmng_hlapi.o : libmng_hlapi.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_memory.h libmng_error.h libmng_trace.h libmng_read.h \ libmng_write.h libmng_display.h libmng_zlib.h libmng_cms.h libmng_zlib.h libmng_callback_xs.o : libmng_callback_xs.c libmng.h \ libmng_conf.h libmng_types.h libmng_data.h libmng_error.h libmng_trace.h libmng_prop_xs.o : libmng_prop_xs.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_error.h libmng_trace.h libmng_cms.h libmng_chunk_xs.o : libmng_chunk_xs.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_prc.h \ libmng_error.h libmng_trace.h libmng_read.o : libmng_read.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_chunk_prc.h libmng_chunk_io.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_read.h libmng_display.h libmng_write.o : libmng_write.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_write.h libmng_display.o : libmng_display.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_zlib.h libmng_cms.h libmng_pixels.h \ libmng_display.h libmng_object_prc.o : libmng_object_prc.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_display.h libmng_pixels.h libmng_chunk_descr.o : libmng_chunk_descr.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_descr.h \ libmng_chunk_prc.h libmng_memory.h libmng_error.h libmng_trace.h libmng_chunk_prc.o : libmng_chunk_prc.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_chunk_io.o : libmng_chunk_io.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_chunk_io.h libmng_chunk_prc.h libmng_memory.h libmng_error.h \ libmng_trace.h libmng_display.h libmng_zlib.h libmng_pixels.h libmng_error.o : libmng_error.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_trace.o : libmng_trace.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_pixels.o : libmng_pixels.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_memory.h libmng_error.h libmng_trace.h \ libmng_cms.h libmng_filter.h libmng_pixels.h libmng_filter.o : libmng_filter.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_filter.h libmng_dither.o : libmng_dither.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_dither.h libmng_zlib.o : libmng_zlib.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h libmng_pixels.h \ libmng_filter.h libmng_zlib.h libmng_jpeg.o : libmng_jpeg.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h libmng_pixels.h libmng_jpeg.h libmng_cms.o : libmng_cms.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_error.h libmng_trace.h libmng_cms.h libmng-2.0.2/makefiles/makefile.unix0000644000000000000000000000256412005307152016105 0ustar rootroot# # For conditions of distribution and use, see copyright notice in libmng.h # # makefile for libmng - THE MNG library # this makefile is suitable for generic unix # Configuration options are now in libmng_conf.h #---------------------------------------- include version.mak #---------------------------------------- # The name of your C compiler: CC= cc # Location of jpeg header files JPEG_INC= /cs/include/jpeg # Location of zlib header files ZLIB_INC= /cs/include # Location of lcms header files # (switch on MNG_FULL_CMS in libmng_conf.h if you want to use this) LCMS_INC= /ltmp/lcms-1.06/source # compiler options: CFLAGS= -O -I. -I$(ZLIB_INC) -I$(JPEG_INC) -I$(LCMS_INC) # source files SOURCES= \ libmng_callback_xs.c \ libmng_chunk_io.c \ libmng_chunk_descr.c \ libmng_chunk_prc.c \ libmng_chunk_xs.c \ libmng_cms.c \ libmng_display.c \ libmng_dither.c \ libmng_error.c \ libmng_filter.c \ libmng_hlapi.c \ libmng_jpeg.c \ libmng_object_prc.c \ libmng_pixels.c \ libmng_prop_xs.c \ libmng_read.c \ libmng_trace.c \ libmng_write.c \ libmng_zlib.c # object files OBJECTS= $(SOURCES:%.c=%.o) # type dependancies .c.o: $(CC) $(CFLAGS) -c $< all: libmng.a clean: /bin/rm -f $(OBJECTS) /bin/rm -f libmng.a /bin/rm -f *~ core libmng.a: $(OBJECTS) ar r libmng.a $(OBJECTS) depend: makedepend -- $(CFLAGS) $(IFLAGS) -- *.c # DO NOT DELETE libmng-2.0.2/makefiles/README0000644000000000000000000000230312115362660014301 0ustar rootrootFor conditions of distribution and use, see copyright notice in libmng.h or the file LICENSE in the top-level directory of the source distribution. This directory hosts the makefiles for a number of supported platforms. If you're using a system with POSIX shell capabilities, you can use the 'configure' script in the top-level directory, or generate it by running 'autogen.sh' if you have the necessary tools installed. Otherwise, copy the module for your environment (or the closest thing) into the libmng source-directory and change it to your needs. If you create a new file for a platform not on the list send it to me (gerard @ libmng.com) and I'll be happy to include it in the next release! Current files: configure.ac - a copy of Makefile.am - a copy of config.h.in - a copy of libmng.pc.in - a copy of makefile.bcb3 - Borland C++ Builder makefile.dj - DJGPP makefile.linux - Linux ELF (builds shared library) makefile.mingw - builds a static library for mingw32 makefile.mingwdll - builds a dynamic library for mingw32 makefile.qnx - builds for QNX Neutrino makefile.unix - builds a static library for SGI/IRIX (6.5.21) makefile.vcwin32 - Microsoft Visual C++ version.mak - version info for makefiles libmng-2.0.2/makefiles/libmng.pc.in0000644000000000000000000000040012115352206015611 0ustar rootrootprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: libmng Description: Loads PNG/MNG/JNG files Version: @MNGLIB_VERSION@ Libs: -L${libdir} -lmng@MNGLIB_MAJOR@@MNGLIB_MINOR@ Libs.private: @LIBS@ Cflags: -I${includedir} libmng-2.0.2/makefiles/version.mak0000644000000000000000000000006012115352233015571 0ustar rootrootMNGMAJ = 2 MNGMIN = 0 MNGREL = 2 MNGVER = 2.0.2 libmng-2.0.2/makefiles/makefile.dj0000644000000000000000000001363212005307152015515 0ustar rootroot# # For conditions of distribution and use, see copyright notice in libmng.h # # makefile for libmng - THE MNG library # This makefile have been tested on DJGPP v2 # (Based on makefile.linux since both are GNU compilers) # # By Silvio Fonseca - gissi@sti.com.br #compiler CC=gcc #default build options OPTIONS= #DJGPP directory prefix=C:/DJGPP installprefix=C:\DJGPP #ZLIB Library and includes ZLIBLIB=$(prefix)/lib #ZLIBLIB=../zlib ZLIBINC=$(prefix)/include #ZLIBINC=../zlib #Jpeg library and includes JPEGLIB=$(prefix)/lib #JPEGLIB=../jpgsrc JPEGINC=$(prefix)/include #JPEGINC=../jpgsrc #Lcms library and includes LCMSLIB=$(prefix)/lib #LCMSLIB=../lcms LCMSINC=$(prefix)/include #LCMSINC=../lcms ALIGN= # for i386: #ALIGN=-malign-loops=2 -malign-functions=2 WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \ -Wmissing-declarations -Wtraditional -Wcast-align \ -Wstrict-prototypes -Wmissing-prototypes #-Wconversion CFLAGS=-I$(ZLIBINC) -I$(JPEGINC) -I$(LCMSINC) -Wall -O3 -funroll-loops \ $(OPTIONS) $(ALIGN) # $(WARNMORE) -g LDFLAGS=-L. -Wl,-rpath,. \ -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) \ -L$(JPEGLIB) -Wl,-rpath,$(JPEGLIB) \ -L$(LCMSLIB) -Wl,-rpath,$(LCMSLIB) \ -lmng -lz -ljpeg -llcms -lm INCPATH=$(prefix)/include LIBPATH=$(prefix)/lib OBJS = \ libmng_callback_xs.o \ libmng_chunk_io.o \ libmng_chunk_descr.o \ libmng_chunk_prc.o \ libmng_chunk_xs.o \ libmng_cms.o \ libmng_display.o \ libmng_dither.o \ libmng_error.o \ libmng_filter.o \ libmng_hlapi.o \ libmng_jpeg.o \ libmng_object_prc.o \ libmng_pixels.o \ libmng_prop_xs.o \ libmng_read.o \ libmng_trace.o \ libmng_write.o \ libmng_zlib.o OBJSDLL = $(OBJS:.0=.pic.o) .SUFFIXES: .c .o .pic.o .c.pic.o: $(CC) -c $(CFLAGS) -fPIC -o $@ $*.c all: libmng.a libmng.a: $(OBJS) ar rc $@ $(OBJS) ranlib $@ install: libmng.a -@md $(installprefix)\include $(installprefix)\lib copy libmng.h $(installprefix)\include copy libmng_conf.h $(installprefix)\include copy libmng_types.h $(installprefix)\include copy libmng.a $(installprefix)\lib clean: del *.o del libmng.a # DO NOT DELETE THIS LINE -- make depend depends on it. libmng_hlapi.o libmng_hlapi.pic.o: libmng_hlapi.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_memory.h libmng_error.h libmng_trace.h libmng_read.h \ libmng_write.h libmng_display.h libmng_zlib.h libmng_cms.h libmng_zlib.h libmng_callback_xs.o libmng_callback_xs.pic.o: libmng_callback_xs.c libmng.h \ libmng_conf.h libmng_types.h libmng_data.h libmng_error.h libmng_trace.h libmng_prop_xs.o libmng_prop_xs.pic.o: libmng_prop_xs.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_error.h libmng_trace.h libmng_cms.h libmng_chunk_xs.o libmng_chunk_xs.pic.o: libmng_chunk_xs.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_prc.h \ libmng_error.h libmng_trace.h libmng_read.o libmng_read.pic.o: libmng_read.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_chunk_prc.h libmng_chunk_io.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_read.h libmng_display.h libmng_write.o libmng_write.pic.o: libmng_write.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_write.h libmng_display.o libmng_display.pic.o: libmng_display.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_zlib.h libmng_cms.h libmng_pixels.h \ libmng_display.h libmng_object_prc.o libmng_object_prc.pic.o: libmng_object_prc.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_display.h libmng_pixels.h libmng_chunk_descr.o libmng_chunk_descr.pic.o: libmng_chunk_descr.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_descr.h \ libmng_chunk_prc.h libmng_memory.h libmng_error.h libmng_trace.h libmng_chunk_prc.o libmng_chunk_prc.pic.o: libmng_chunk_prc.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_chunks.h libmng_chunk_prc.h libmng_memory.h \ libmng_error.h libmng_trace.h libmng_chunk_io.o libmng_chunk_io.pic.o: libmng_chunk_io.c libmng.h libmng_conf.h \ libmng_types.h libmng_data.h libmng_objects.h libmng_object_prc.h \ libmng_chunks.h libmng_chunk_io.h libmng_chunk_prc.h libmng_memory.h libmng_error.h \ libmng_trace.h libmng_display.h libmng_zlib.h libmng_pixels.h libmng_error.o libmng_error.pic.o: libmng_error.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_trace.o libmng_trace.pic.o: libmng_trace.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_pixels.o libmng_pixels.pic.o: libmng_pixels.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_memory.h libmng_error.h libmng_trace.h \ libmng_cms.h libmng_filter.h libmng_pixels.h libmng_filter.o libmng_filter.pic.o: libmng_filter.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_filter.h libmng_dither.o libmng_dither.pic.o: libmng_dither.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_error.h libmng_trace.h libmng_dither.h libmng_zlib.o libmng_zlib.pic.o: libmng_zlib.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h libmng_pixels.h \ libmng_filter.h libmng_zlib.h libmng_jpeg.o libmng_jpeg.pic.o: libmng_jpeg.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_memory.h libmng_error.h libmng_trace.h libmng_pixels.h libmng_jpeg.h libmng_cms.o libmng_cms.pic.o: libmng_cms.c libmng.h libmng_conf.h libmng_types.h \ libmng_data.h libmng_objects.h libmng_error.h libmng_trace.h libmng_cms.h libmng-2.0.2/libmng_chunk_prc.h0000644000000000000000000003315212005307152015135 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_chunk_prc.h copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Chunk initialization & cleanup (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : definition of the chunk initialization & cleanup routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added support for JDAA * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - added NO_DELTA_PNG support * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditionals around PAST chunk support * */ /* * * */ /* * 1.0.9 - 12/05/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKINITFREE * */ /* * 1.0.9 - 12/06/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKASSIGN * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_chunk_prc_h_ #define _libmng_chunk_prc_h_ /* ************************************************************************** */ void mng_add_chunk (mng_datap pData, mng_chunkp pChunk); /* ************************************************************************** */ #define INIT_CHUNK_HDR(n) mng_retcode n (mng_datap pData, \ mng_chunkp pHeader, \ mng_chunkp* ppChunk) #ifdef MNG_OPTIMIZE_CHUNKINITFREE INIT_CHUNK_HDR (mng_init_general) ; #else INIT_CHUNK_HDR (mng_init_ihdr) ; INIT_CHUNK_HDR (mng_init_plte) ; INIT_CHUNK_HDR (mng_init_idat) ; INIT_CHUNK_HDR (mng_init_iend) ; INIT_CHUNK_HDR (mng_init_trns) ; INIT_CHUNK_HDR (mng_init_gama) ; INIT_CHUNK_HDR (mng_init_chrm) ; INIT_CHUNK_HDR (mng_init_srgb) ; INIT_CHUNK_HDR (mng_init_iccp) ; INIT_CHUNK_HDR (mng_init_text) ; INIT_CHUNK_HDR (mng_init_ztxt) ; INIT_CHUNK_HDR (mng_init_itxt) ; INIT_CHUNK_HDR (mng_init_bkgd) ; INIT_CHUNK_HDR (mng_init_phys) ; INIT_CHUNK_HDR (mng_init_sbit) ; INIT_CHUNK_HDR (mng_init_splt) ; INIT_CHUNK_HDR (mng_init_hist) ; INIT_CHUNK_HDR (mng_init_time) ; INIT_CHUNK_HDR (mng_init_mhdr) ; INIT_CHUNK_HDR (mng_init_mend) ; INIT_CHUNK_HDR (mng_init_loop) ; INIT_CHUNK_HDR (mng_init_endl) ; INIT_CHUNK_HDR (mng_init_defi) ; INIT_CHUNK_HDR (mng_init_basi) ; INIT_CHUNK_HDR (mng_init_clon) ; #ifndef MNG_SKIPCHUNK_PAST INIT_CHUNK_HDR (mng_init_past) ; #endif INIT_CHUNK_HDR (mng_init_disc) ; INIT_CHUNK_HDR (mng_init_back) ; INIT_CHUNK_HDR (mng_init_fram) ; INIT_CHUNK_HDR (mng_init_move) ; INIT_CHUNK_HDR (mng_init_clip) ; INIT_CHUNK_HDR (mng_init_show) ; INIT_CHUNK_HDR (mng_init_term) ; INIT_CHUNK_HDR (mng_init_save) ; INIT_CHUNK_HDR (mng_init_seek) ; INIT_CHUNK_HDR (mng_init_expi) ; INIT_CHUNK_HDR (mng_init_fpri) ; INIT_CHUNK_HDR (mng_init_need) ; INIT_CHUNK_HDR (mng_init_phyg) ; #ifdef MNG_INCLUDE_JNG INIT_CHUNK_HDR (mng_init_jhdr) ; INIT_CHUNK_HDR (mng_init_jdaa) ; INIT_CHUNK_HDR (mng_init_jdat) ; INIT_CHUNK_HDR (mng_init_jsep) ; #endif #ifndef MNG_NO_DELTA_PNG INIT_CHUNK_HDR (mng_init_dhdr) ; INIT_CHUNK_HDR (mng_init_prom) ; INIT_CHUNK_HDR (mng_init_ipng) ; INIT_CHUNK_HDR (mng_init_pplt) ; #ifdef MNG_INCLUDE_JNG INIT_CHUNK_HDR (mng_init_ijng) ; #endif INIT_CHUNK_HDR (mng_init_drop) ; INIT_CHUNK_HDR (mng_init_dbyk) ; INIT_CHUNK_HDR (mng_init_ordr) ; #endif INIT_CHUNK_HDR (mng_init_magn) ; INIT_CHUNK_HDR (mng_init_evnt) ; INIT_CHUNK_HDR (mng_init_unknown) ; #endif /* MNG_OPTIMIZE_CHUNKINITFREE */ /* ************************************************************************** */ #define FREE_CHUNK_HDR(n) mng_retcode n (mng_datap pData, \ mng_chunkp pHeader) #ifdef MNG_OPTIMIZE_CHUNKINITFREE FREE_CHUNK_HDR (mng_free_general) ; #else /* MNG_OPTIMIZE_CHUNKINITFREE */ FREE_CHUNK_HDR (mng_free_ihdr) ; FREE_CHUNK_HDR (mng_free_plte) ; FREE_CHUNK_HDR (mng_free_iend) ; FREE_CHUNK_HDR (mng_free_trns) ; FREE_CHUNK_HDR (mng_free_gama) ; FREE_CHUNK_HDR (mng_free_chrm) ; FREE_CHUNK_HDR (mng_free_srgb) ; FREE_CHUNK_HDR (mng_free_bkgd) ; FREE_CHUNK_HDR (mng_free_phys) ; FREE_CHUNK_HDR (mng_free_sbit) ; FREE_CHUNK_HDR (mng_free_hist) ; FREE_CHUNK_HDR (mng_free_time) ; FREE_CHUNK_HDR (mng_free_mhdr) ; FREE_CHUNK_HDR (mng_free_mend) ; FREE_CHUNK_HDR (mng_free_endl) ; FREE_CHUNK_HDR (mng_free_defi) ; FREE_CHUNK_HDR (mng_free_basi) ; FREE_CHUNK_HDR (mng_free_clon) ; FREE_CHUNK_HDR (mng_free_back) ; FREE_CHUNK_HDR (mng_free_move) ; FREE_CHUNK_HDR (mng_free_clip) ; FREE_CHUNK_HDR (mng_free_show) ; FREE_CHUNK_HDR (mng_free_term) ; FREE_CHUNK_HDR (mng_free_fpri) ; FREE_CHUNK_HDR (mng_free_phyg) ; #ifdef MNG_INCLUDE_JNG FREE_CHUNK_HDR (mng_free_jhdr) ; FREE_CHUNK_HDR (mng_free_jsep) ; #endif #ifndef MNG_NO_DELTA_PNG FREE_CHUNK_HDR (mng_free_dhdr) ; FREE_CHUNK_HDR (mng_free_prom) ; FREE_CHUNK_HDR (mng_free_ipng) ; FREE_CHUNK_HDR (mng_free_pplt) ; #ifdef MNG_INCLUDE_JNG FREE_CHUNK_HDR (mng_free_ijng) ; #endif #endif FREE_CHUNK_HDR (mng_free_magn) ; #endif /* MNG_OPTIMIZE_CHUNKINITFREE */ FREE_CHUNK_HDR (mng_free_idat) ; FREE_CHUNK_HDR (mng_free_iccp) ; FREE_CHUNK_HDR (mng_free_text) ; FREE_CHUNK_HDR (mng_free_ztxt) ; FREE_CHUNK_HDR (mng_free_itxt) ; FREE_CHUNK_HDR (mng_free_splt) ; FREE_CHUNK_HDR (mng_free_loop) ; #ifndef MNG_SKIPCHUNK_PAST FREE_CHUNK_HDR (mng_free_past) ; #endif FREE_CHUNK_HDR (mng_free_disc) ; FREE_CHUNK_HDR (mng_free_fram) ; FREE_CHUNK_HDR (mng_free_save) ; FREE_CHUNK_HDR (mng_free_seek) ; FREE_CHUNK_HDR (mng_free_expi) ; FREE_CHUNK_HDR (mng_free_need) ; #ifdef MNG_INCLUDE_JNG FREE_CHUNK_HDR (mng_free_jdaa) ; FREE_CHUNK_HDR (mng_free_jdat) ; #endif #ifndef MNG_NO_DELTA_PNG FREE_CHUNK_HDR (mng_free_drop) ; FREE_CHUNK_HDR (mng_free_dbyk) ; FREE_CHUNK_HDR (mng_free_ordr) ; #endif #ifdef MNG_INCLUDE_MPNG_PROPOSAL FREE_CHUNK_HDR (mng_free_mpng) ; #endif #ifdef MNG_INCLUDE_ANG_PROPOSAL FREE_CHUNK_HDR (mng_free_adat) ; #endif FREE_CHUNK_HDR (mng_free_evnt) ; FREE_CHUNK_HDR (mng_free_unknown) ; /* ************************************************************************** */ #ifdef MNG_INCLUDE_WRITE_PROCS #define ASSIGN_CHUNK_HDR(n) mng_retcode n (mng_datap pData, \ mng_chunkp pChunkto, \ mng_chunkp pChunkfrom) #ifdef MNG_OPTIMIZE_CHUNKASSIGN ASSIGN_CHUNK_HDR (mng_assign_general) ; #else /* MNG_OPTIMIZE_CHUNKASSIGN */ ASSIGN_CHUNK_HDR (mng_assign_ihdr) ; ASSIGN_CHUNK_HDR (mng_assign_plte) ; ASSIGN_CHUNK_HDR (mng_assign_iend) ; ASSIGN_CHUNK_HDR (mng_assign_trns) ; ASSIGN_CHUNK_HDR (mng_assign_gama) ; ASSIGN_CHUNK_HDR (mng_assign_chrm) ; ASSIGN_CHUNK_HDR (mng_assign_srgb) ; ASSIGN_CHUNK_HDR (mng_assign_bkgd) ; ASSIGN_CHUNK_HDR (mng_assign_phys) ; ASSIGN_CHUNK_HDR (mng_assign_sbit) ; ASSIGN_CHUNK_HDR (mng_assign_hist) ; ASSIGN_CHUNK_HDR (mng_assign_time) ; ASSIGN_CHUNK_HDR (mng_assign_mhdr) ; ASSIGN_CHUNK_HDR (mng_assign_mend) ; ASSIGN_CHUNK_HDR (mng_assign_endl) ; ASSIGN_CHUNK_HDR (mng_assign_defi) ; ASSIGN_CHUNK_HDR (mng_assign_basi) ; ASSIGN_CHUNK_HDR (mng_assign_clon) ; ASSIGN_CHUNK_HDR (mng_assign_back) ; ASSIGN_CHUNK_HDR (mng_assign_move) ; ASSIGN_CHUNK_HDR (mng_assign_clip) ; ASSIGN_CHUNK_HDR (mng_assign_show) ; ASSIGN_CHUNK_HDR (mng_assign_term) ; ASSIGN_CHUNK_HDR (mng_assign_fpri) ; ASSIGN_CHUNK_HDR (mng_assign_phyg) ; #ifdef MNG_INCLUDE_JNG ASSIGN_CHUNK_HDR (mng_assign_jhdr) ; ASSIGN_CHUNK_HDR (mng_assign_jsep) ; #endif #ifndef MNG_NO_DELTA_PNG ASSIGN_CHUNK_HDR (mng_assign_dhdr) ; ASSIGN_CHUNK_HDR (mng_assign_prom) ; ASSIGN_CHUNK_HDR (mng_assign_ipng) ; ASSIGN_CHUNK_HDR (mng_assign_pplt) ; #ifdef MNG_INCLUDE_JNG ASSIGN_CHUNK_HDR (mng_assign_ijng) ; #endif #endif ASSIGN_CHUNK_HDR (mng_assign_magn) ; #endif /* MNG_OPTIMIZE_CHUNKASSIGN */ ASSIGN_CHUNK_HDR (mng_assign_idat) ; ASSIGN_CHUNK_HDR (mng_assign_iccp) ; ASSIGN_CHUNK_HDR (mng_assign_text) ; ASSIGN_CHUNK_HDR (mng_assign_ztxt) ; ASSIGN_CHUNK_HDR (mng_assign_itxt) ; ASSIGN_CHUNK_HDR (mng_assign_splt) ; ASSIGN_CHUNK_HDR (mng_assign_loop) ; #ifndef MNG_SKIPCHUNK_PAST ASSIGN_CHUNK_HDR (mng_assign_past) ; #endif ASSIGN_CHUNK_HDR (mng_assign_disc) ; ASSIGN_CHUNK_HDR (mng_assign_fram) ; ASSIGN_CHUNK_HDR (mng_assign_save) ; ASSIGN_CHUNK_HDR (mng_assign_seek) ; ASSIGN_CHUNK_HDR (mng_assign_need) ; ASSIGN_CHUNK_HDR (mng_assign_expi) ; #ifdef MNG_INCLUDE_JNG ASSIGN_CHUNK_HDR (mng_assign_jdaa) ; ASSIGN_CHUNK_HDR (mng_assign_jdat) ; #endif #ifndef MNG_NO_DELTA_PNG ASSIGN_CHUNK_HDR (mng_assign_drop) ; ASSIGN_CHUNK_HDR (mng_assign_dbyk) ; ASSIGN_CHUNK_HDR (mng_assign_ordr) ; #endif #ifdef MNG_INCLUDE_MPNG_PROPOSAL ASSIGN_CHUNK_HDR (mng_assign_mpng) ; #endif #ifdef MNG_INCLUDE_ANG_PROPOSAL ASSIGN_CHUNK_HDR (mng_assign_ahdr) ; ASSIGN_CHUNK_HDR (mng_assign_adat) ; #endif ASSIGN_CHUNK_HDR (mng_assign_evnt) ; ASSIGN_CHUNK_HDR (mng_assign_unknown) ; /* ************************************************************************** */ #else /* MNG_INCLUDE_WRITE_PROCS */ #define mng_assign_general 0 #define mng_assign_ihdr 0 #define mng_assign_plte 0 #define mng_assign_idat 0 #define mng_assign_iend 0 #define mng_assign_trns 0 #define mng_assign_gama 0 #define mng_assign_chrm 0 #define mng_assign_srgb 0 #define mng_assign_iccp 0 #define mng_assign_text 0 #define mng_assign_ztxt 0 #define mng_assign_itxt 0 #define mng_assign_bkgd 0 #define mng_assign_phys 0 #define mng_assign_sbit 0 #define mng_assign_splt 0 #define mng_assign_hist 0 #define mng_assign_time 0 #define mng_assign_mhdr 0 #define mng_assign_mend 0 #define mng_assign_loop 0 #define mng_assign_endl 0 #define mng_assign_defi 0 #define mng_assign_basi 0 #define mng_assign_clon 0 #ifndef MNG_SKIPCHUNK_PAST #define mng_assign_past 0 #endif #define mng_assign_disc 0 #define mng_assign_back 0 #define mng_assign_fram 0 #define mng_assign_move 0 #define mng_assign_clip 0 #define mng_assign_show 0 #define mng_assign_term 0 #define mng_assign_save 0 #define mng_assign_seek 0 #define mng_assign_expi 0 #define mng_assign_fpri 0 #define mng_assign_phyg 0 #ifdef MNG_INCLUDE_JNG #define mng_assign_jhdr 0 #define mng_assign_jdaa 0 #define mng_assign_jdat 0 #define mng_assign_jsep 0 #endif #ifndef MNG_NO_DELTA_PNG #define mng_assign_dhdr 0 #define mng_assign_prom 0 #define mng_assign_ipng 0 #define mng_assign_pplt 0 #ifdef MNG_INCLUDE_JNG #define mng_assign_ijng 0 #endif #define mng_assign_drop 0 #define mng_assign_dbyk 0 #define mng_assign_ordr 0 #endif #define mng_assign_magn 0 #define mng_assign_need 0 #define mng_assign_mpng 0 #define mng_assign_ahdr 0 #define mng_assign_adat 0 #define mng_assign_evnt 0 #define mng_assign_unknown 0 #endif /* MNG_INCLUDE_WRITE_PROCS */ /* ************************************************************************** */ #endif /* _libmng_chunk_prc_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_memory.h0000644000000000000000000000753412005307152014476 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_memory.h copyright (c) 2000-2003 G.Juyn * */ /* * version : 1.0.0 * */ /* * * */ /* * purpose : Memory management (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of memory management functions * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.5.3 - 06/12/2000 - G.Juyn * */ /* * - swapped MNG_COPY parameter-names * */ /* * 0.5.3 - 06/27/2000 - G.Juyn * */ /* * - changed size parameter to mng_size_t * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_memory_h_ #define _libmng_memory_h_ /* ************************************************************************** */ /* * * */ /* * Generic memory manager macros * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INTERNAL_MEMMNGMT #define MNG_ALLOC(H,P,L) { P = calloc (1, (mng_size_t)(L)); \ if (P == 0) { MNG_ERROR (H, MNG_OUTOFMEMORY) } } #define MNG_ALLOCX(H,P,L) { P = calloc (1, (mng_size_t)(L)); } #define MNG_FREE(H,P,L) { if (P) { free (P); P = 0; } } #define MNG_FREEX(H,P,L) { if (P) free (P); } #else #define MNG_ALLOC(H,P,L) { P = H->fMemalloc ((mng_size_t)(L)); \ if (P == 0) { MNG_ERROR (H, MNG_OUTOFMEMORY) } } #define MNG_ALLOCX(H,P,L) { P = H->fMemalloc ((mng_size_t)(L)); } #define MNG_FREE(H,P,L) { if (P) { H->fMemfree (P, (mng_size_t)(L)); P = 0; } } #define MNG_FREEX(H,P,L) { if (P) { H->fMemfree (P, (mng_size_t)(L)); } } #endif /* mng_internal_memmngmt */ #define MNG_COPY(D,S,L) { memcpy (D, S, (mng_size_t)(L)); } /* ************************************************************************** */ #endif /* _libmng_memory_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng.pc.in0000644000000000000000000000033512115350653013664 0ustar rootrootprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: libmng Description: Loads PNG/MNG/JNG files Version: @VERSION@ Libs: -L${libdir} -lmng Libs.private: @LIBS@ Cflags: -I${includedir} libmng-2.0.2/README.packaging0000644000000000000000000000164612005307152014266 0ustar rootrootPackaging Libmng for distribution --------------------------------- These are some notes for those building binaries for distribution. We're interested to hear about anywhere libmng is helpful, so let us know if you're including it with your application or OS. Also, if your build is publicly accessible, we'd be happy to link to it from the libmng site. However, We respectfully request that you *not* distribute binaries as a shared library (DLL) with any of the major features disabled. While there is support for this in terms of #ifdef directives (in libmng_conf.h) and autoconf switches they are intended for embedded application and testing. The default compilation options support the full MNG specification, and we wish to avoid the confusion among general users that partial support would engender. Platform specific notes: We have a basic .spec file for generating rpms. Send us a note if you'd like to clean it up. libmng-2.0.2/bcb/0000755000000000000000000000000012005307152012202 5ustar rootrootlibmng-2.0.2/bcb/mngtree/0000755000000000000000000000000012005307152013643 5ustar rootrootlibmng-2.0.2/bcb/mngtree/mngtree.bpr0000644000000000000000000001244212005307152016014 0ustar rootroot# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.03 # --------------------------------------------------------------------------- PROJECT = mngtree.exe OBJFILES = mngtree.obj RESFILES = mngtree.res RESDEPEN = $(RESFILES) LIBFILES = ..\win32dll\libmng.lib LIBRARIES = VCL35.lib SPARELIBS = VCL35.lib PACKAGES = vclx35.bpi VCL35.bpi vcldb35.bpi vcldbx35.bpi bcbsmp35.bpi dclocx35.bpi \ Qrpt35.bpi DEFFILE = # --------------------------------------------------------------------------- PATHCPP = .; PATHASM = .; PATHPAS = .; PATHRC = .; DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release # --------------------------------------------------------------------------- CFLAG1 = -Od -w -r- -k -y -v -vi- -c -tWC CFLAG2 = -D_NO_VCL;MNG_SUPPORT_READ;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL \ -I..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include CFLAG3 = -Tkh30000 PFLAGS = -D_NO_VCL;MNG_SUPPORT_READ;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL \ -U..\win32dll;$(BCB)\lib;$(DEBUGLIBPATH) \ -I..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include \ -$Y -$W -$O- -v -JPHN -M RFLAGS = -D_NO_VCL;MNG_SUPPORT_READ;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL \ -i..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include AFLAGS = /i..\..\..\libmng-devel /i..\..\..\zlib /i..\..\..\jpgsrc6b /i..\..\..\lcms \ /i$(BCB)\include /d_NO_VCL /dMNG_SUPPORT_READ /dMNG_ACCESS_CHUNKS \ /dMNG_STORE_CHUNKS /dMNG_NO_CMS /dMNG_USE_DLL /mx /w2 /zd LFLAGS = -L..\win32dll;$(BCB)\lib;$(DEBUGLIBPATH) -ap -Tpe -x -Gn -v IFLAGS = # --------------------------------------------------------------------------- ALLOBJ = c0x32.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) import32.lib cw32mt.lib libmng.lib # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=1 AutoIncBuild=1 MajorVer=0 MinorVer=9 Release=0 Build=13 Debug=1 PreRelease=1 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription=Executable (Console) FileVersion=0.9.0.13 InternalName=mngtree LegalCopyright=copyright (c) 2000 G.Juyn LegalTrademarks= OriginalFilename=mngtree.exe ProductName=mngtree ProductVersion=0.9.0 Comments= [HistoryLists\hlIncludePath] Count=4 Item0=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include Item1=..\..\..\libmng;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include Item2=..\..\..\libmng;..\..\..\zlib;$(BCB)\include Item3=..\..\..\libmng;$(BCB)\include [HistoryLists\hlLibraryPath] Count=3 Item0=..\win32dll;$(BCB)\lib Item1=..\..\..\libmng\bcb\win32dll;$(BCB)\lib Item2=..\..\..\libmng;$(BCB)\lib [HistoryLists\hlConditionals] Count=2 Item0=_NO_VCL;MNG_SUPPORT_READ;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL Item1=_NO_VCL;MNG_SUPPORT_READ;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS [HistoryLists\hlRunParameters] Count=2 Item0=dutch.mng Item1=usflag-lc-d63.mng [Debugging] DebugSourceDirs= [Parameters] RunParams=dutch.mng HostApplication= !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = ilink32 !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< # --------------------------------------------------------------------------- libmng-2.0.2/bcb/mngtree/mngtree.cpp0000644000000000000000000002621512005307152016016 0ustar rootroot/* ************************************************************************** */ /* * * */ /* * COPYRIGHT NOTICE: * */ /* * * */ /* * Copyright (c) 2000 Gerard Juyn (gerard@libmng.com) * */ /* * [You may insert additional notices after this sentence if you modify * */ /* * this source] * */ /* * * */ /* * For the purposes of this copyright and license, "Contributing Authors" * */ /* * is defined as the following set of individuals: * */ /* * * */ /* * Gerard Juyn * */ /* * (hopefully some more to come...) * */ /* * * */ /* * The MNG Library is supplied "AS IS". The Contributing Authors * */ /* * disclaim all warranties, expressed or implied, including, without * */ /* * limitation, the warranties of merchantability and of fitness for any * */ /* * purpose. The Contributing Authors assume no liability for direct, * */ /* * indirect, incidental, special, exemplary, or consequential damages, * */ /* * which may result from the use of the MNG Library, even if advised of * */ /* * the possibility of such damage. * */ /* * * */ /* * Permission is hereby granted to use, copy, modify, and distribute this * */ /* * source code, or portions hereof, for any purpose, without fee, subject * */ /* * to the following restrictions: * */ /* * * */ /* * 1. The origin of this source code must not be misrepresented; * */ /* * you must not claim that you wrote the original software. * */ /* * * */ /* * 2. Altered versions must be plainly marked as such and must not be * */ /* * misrepresented as being the original source. * */ /* * * */ /* * 3. This Copyright notice may not be removed or altered from any source * */ /* * or altered source distribution. * */ /* * * */ /* * The Contributing Authors specifically permit, without fee, and * */ /* * encourage the use of this source code as a component to supporting * */ /* * the MNG and JNG file format in commercial products. If you use this * */ /* * source code in a product, acknowledgment would be highly appreciated. * */ /* * * */ /* ************************************************************************** */ /* * * */ /* * project : mngtree * */ /* * file : mngtree.cpp copyright (c) 2000 G.Juyn * */ /* * version : 1.0.0 * */ /* * * */ /* * purpose : main project file * */ /* * * */ /* * author : G.Juyn * */ /* * web : http://www.3-t.com * */ /* * email : mailto:info@3-t.com * */ /* * * */ /* * comment : mngtree simply dumps the chunk-structure of the supplied * */ /* * first parameter to stdout (should be a xNG-file) * */ /* * * */ /* * changes : 0.5.3 - 06/26/2000 - G.Juyn * */ /* * - changed userdata variable to mng_ptr * */ /* * 0.5.3 - 06/28/2000 - G.Juyn * */ /* * - changed memory allocation size parameters to mng_size_t * */ /* * * */ /* ************************************************************************** */ #pragma hdrstop #include #include #include #include #include "libmng.h" /* ************************************************************************** */ USERES("mngtree.res"); USELIB("..\win32dll\libmng.lib"); //--------------------------------------------------------------------------- /* ************************************************************************** */ typedef struct user_struct { FILE *hFile; /* file handle */ int iIndent; /* for nice indented formatting */ } userdata; typedef userdata * userdatap; /* ************************************************************************** */ #define MY_DECL __stdcall /* get the right callback convention */ /* ************************************************************************** */ mng_ptr MY_DECL myalloc (mng_size_t iSize) { /* duh! */ return (mng_ptr)calloc (1, (size_t)iSize); } /* ************************************************************************** */ #pragma argsused void MY_DECL myfree (mng_ptr pPtr, mng_size_t iSize) { free (pPtr); /* duh! */ return; } /* ************************************************************************** */ #pragma argsused mng_bool MY_DECL myopenstream (mng_handle hMNG) { return MNG_TRUE; /* already opened in main function */ } /* ************************************************************************** */ #pragma argsused mng_bool MY_DECL myclosestream (mng_handle hMNG) { return MNG_TRUE; /* gets closed in main function */ } /* ************************************************************************** */ mng_bool MY_DECL myreaddata (mng_handle hMNG, mng_ptr pBuf, mng_uint32 iSize, mng_uint32 *iRead) { /* get to my file handle */ userdatap pMydata = (userdatap)mng_get_userdata (hMNG); /* read it */ *iRead = fread (pBuf, 1, iSize, pMydata->hFile); /* iRead will indicate EOF */ return MNG_TRUE; } /* ************************************************************************** */ #pragma argsused mng_bool MY_DECL myiterchunk (mng_handle hMNG, mng_handle hChunk, mng_chunkid iChunktype, mng_uint32 iChunkseq) { /* get to my file handle */ userdatap pMydata = (userdatap)mng_get_userdata (hMNG); char aCh[4]; char zIndent[80]; int iX; /* decode the chunkname */ aCh[0] = (char)((iChunktype >> 24) & 0xFF); aCh[1] = (char)((iChunktype >> 16) & 0xFF); aCh[2] = (char)((iChunktype >> 8) & 0xFF); aCh[3] = (char)((iChunktype ) & 0xFF); /* indent less ? */ if ( (iChunktype == MNG_UINT_MEND) || (iChunktype == MNG_UINT_IEND) || (iChunktype == MNG_UINT_ENDL) ) pMydata->iIndent -= 2; /* this looks ugly; but I haven't figured out how to do it prettier */ for (iX = 0; iX < pMydata->iIndent; iX++) zIndent[iX] = ' '; zIndent[pMydata->iIndent] = '\0'; /* print a nicely indented line */ printf ("%s%c%c%c%c\n", &zIndent, aCh[0], aCh[1], aCh[2], aCh[3]); /* indent more ? */ if ( (iChunktype == MNG_UINT_MHDR) || (iChunktype == MNG_UINT_IHDR) || (iChunktype == MNG_UINT_JHDR) || (iChunktype == MNG_UINT_DHDR) || (iChunktype == MNG_UINT_BASI) || (iChunktype == MNG_UINT_LOOP) ) pMydata->iIndent += 2; return MNG_TRUE; /* keep'm coming... */ } /* ************************************************************************** */ int dumptree (char * zFilename) { userdatap pMydata; mng_handle hMNG; mng_retcode iRC; /* get a data buffer */ pMydata = (userdatap)calloc (1, sizeof (userdata)); if (pMydata == NULL) /* oke ? */ { fprintf (stderr, "Cannot allocate a data buffer.\n"); return 1; } /* can we open the file ? */ if ((pMydata->hFile = fopen (zFilename, "rb")) == NULL) { /* error out if we can't */ fprintf (stderr, "Cannot open input file %s.\n", zFilename); return 1; } /* let's initialize the library */ hMNG = mng_initialize ((mng_ptr)pMydata, myalloc, myfree, MNG_NULL); if (!hMNG) /* did that work out ? */ { fprintf (stderr, "Cannot initialize libmng.\n"); iRC = 1; } else { /* setup callbacks */ if ( ((iRC = mng_setcb_openstream (hMNG, myopenstream )) != 0) || ((iRC = mng_setcb_closestream (hMNG, myclosestream)) != 0) || ((iRC = mng_setcb_readdata (hMNG, myreaddata )) != 0) ) fprintf (stderr, "Cannot set callbacks for libmng.\n"); else { /* reaad the file into memory */ if ((iRC = mng_read (hMNG)) != 0) fprintf (stderr, "Cannot read the file.\n"); else { pMydata->iIndent = 2; /* start of the indenting at a nice level */ printf ("Starting dump of %s.\n\n", zFilename); /* run through the chunk list */ if ((iRC = mng_iterate_chunks (hMNG, 0, myiterchunk)) != 0) fprintf (stderr, "Cannot iterate the chunks.\n"); printf ("\nDone.\n"); } } mng_cleanup (&hMNG); /* cleanup the library */ } fclose (pMydata->hFile); /* cleanup */ free (pMydata); return iRC; } /* ************************************************************************** */ #pragma argsused int main(int argc, char *argv[]) { if (argc > 1) /* need that first parameter ! */ return dumptree (argv[1]); else fprintf (stdout, "\nUsage: mngtree \n\n"); return 0; } /* ************************************************************************** */ libmng-2.0.2/bcb/mngview/0000755000000000000000000000000012005307152013656 5ustar rootrootlibmng-2.0.2/bcb/mngview/MngView.cpp0000644000000000000000000000122512005307152015736 0ustar rootroot//--------------------------------------------------------------------------- #include #pragma hdrstop USERES("MngView.res"); USEFORM("Main.cpp", MainForm); USEFILE("README.txt"); USELIB("..\win32dll\libmng.lib"); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TMainForm), &MainForm); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } //--------------------------------------------------------------------------- libmng-2.0.2/bcb/mngview/Main.dfm0000644000000000000000000000711412005307152015235 0ustar rootrootÿ TMAINFORM09TPF0 TMainFormMainFormLeftÌTopOWidthNHeightúCaptionMainFormColorclGray Font.CharsetDEFAULT_CHARSET Font.Color clWindowText Font.Heightò Font.Name MS Sans Serif Font.Style Icon.Data þ è( @€€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ37337w33w03s333s3w0s3337s7s733s33333333s077333373333333337773733s30w3ss737s3w3s37sss307s330s333077330377s730ww3s077w3÷s÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿþüøðàÀ€À?øÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMenu OFMainMenu OnCloseQueryFormCloseQueryOnCreate FormCreate OnKeyDown FormKeyDownOnResize FormResizeOnShowFormShow PixelsPerInchx TextHeightTImageOFImageLeftTop@WidthiHeightiIncrementalDisplay Picture.Data ‚TBitmapvBMvv( €€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùŸÿÿÿÿÿÿÿÿÿÿÿÿùŸù™ÿÿÿÿÿÿÿÿÿÿÿÿ™Ÿÿ™Ÿÿÿÿÿÿÿÿÿÿÿù™ÿÿù™ÿÿÿÿÿÿÿÿÿÿ™Ÿÿÿÿ™Ÿÿÿÿÿÿÿÿÿù™ÿÿÿÿù™ÿÿÿÿÿÿÿÿ™Ÿÿÿÿÿÿ™Ÿÿÿÿÿÿÿù™ÿÿÿÿÿÿù™ÿÿÿÿÿÿ™Ÿÿÿÿÿÿÿÿ™Ÿÿÿÿÿù™ÿÿÿÿÿÿÿÿù™ÿÿÿÿ™Ÿÿÿÿÿÿÿÿÿÿ™Ÿÿÿù™ÿÿÿÿÿÿÿÿÿÿù™ÿÿ™Ÿÿÿÿÿÿÿÿÿÿÿÿ™Ÿù™ÿÿÿÿÿÿÿÿÿÿÿÿù™™Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™ÿÿÿÿÿÿÿÿÿÿÿÿÿù™™Ÿÿÿÿÿÿÿÿÿÿÿÿÿ™Ÿù™ÿÿÿÿÿÿÿÿÿÿÿù™ÿÿ™Ÿÿÿÿÿÿÿÿÿÿÿ™Ÿÿÿù™ÿÿÿÿÿÿÿÿÿù™ÿÿÿÿ™Ÿÿÿÿÿÿÿÿÿ™Ÿÿÿÿÿù™ÿÿÿÿÿÿÿù™ÿÿÿÿÿÿ™Ÿÿÿÿÿÿÿ™Ÿÿÿÿÿÿÿù™ÿÿÿÿÿù™ÿÿÿÿÿÿÿÿ™Ÿÿÿÿÿ™Ÿÿÿÿÿÿÿÿÿù™ÿÿÿù™ÿÿÿÿÿÿÿÿÿÿ™Ÿÿÿ™Ÿÿÿÿÿÿÿÿÿÿÿù™ÿù™ÿÿÿÿÿÿÿÿÿÿÿÿ™ŸùŸÿÿÿÿÿÿÿÿÿÿÿÿùŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿStretch TPanelPanel1LeftTop¯WidthFHeightAlignalBottomCaptionPanel1TabOrder TProgressBar ProgressBar1LeftTopWidthHeightMinMaxdTabOrder TMainMenu OFMainMenuLeftTop TMenuItem OFMenuFileCaption&File TMenuItemOFMenuFileOpenCaption&OpenOnClickOFMenuFileOpenClick TMenuItemOFMenuFileProfileCaption&ProfileOnClickOFMenuFileProfileClick TMenuItem OFMenuFileN1Caption- TMenuItemOFMenuFileExitCaptionE&xitOnClickOFMenuFileExitClick TMenuItem OFMenuOptionsCaption&Options TMenuItemOFMenuOptionsModemSpeedCaption Modem speedOnClickOFMenuOptionsModemSpeedClick TMenuItemOFMenuOptionsModem28k8Tag€pCaption28k8 GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModem33k6Tag@ƒCaption33k6 GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModem56kTagÀÚCaption56k GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModemISDN64TagúCaptionISDN64 GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModemISDN128TagôCaptionISDN128 GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModemCable512TagÐCaptionCable512 GroupIndexOnClickOFMenuOptionsModemXClick TMenuItemOFMenuOptionsModemUnlimitedTagÿÉš;Caption UnlimitedChecked GroupIndexOnClickOFMenuOptionsModemXClick TOpenDialog OFOpenDialogFilter"Network Graphics|*.mng;*.jng;*.png FilterIndexOptions ofHideReadOnlyofPathMustExistofFileMustExistTitle Open fileLeft8TopTTimerOFTimerEnabledIntervaldOnTimer OFTimerTimerLeft`Top TOpenDialogOFOpenDialogProfile DefaultExticmFilterColor profiles (*.icm)|*.icm FilterIndexLeftˆToplibmng-2.0.2/bcb/mngview/Main.cpp0000644000000000000000000005261112005307152015253 0ustar rootroot//--------------------------------------------------------------------------- #include #pragma hdrstop #include // for : malloc & free #include "Main.h" /****************************************************************************} {* For conditions of distribution and use, *} {* see copyright notice in libmng.pas *} {****************************************************************************} {* *} {* project : libmng *} {* file : main.pas copyright (c) 2000 G.Juyn *} {* version : 1.0.1 *} {* *} {* purpose : Main form for mngview application *} {* *} {* author : G.Juyn *} {* web : http://www.3-t.com *} {* email : mailto:info@3-t.com *} {* *} {* comment : this is the heart of the mngview applciation *} {* *} {* changes : This project is a converted version of "mngview" - AP *} {* - AP - 15/9/2000 - revisions ... *} {* - made the callbacks calling convention explicit *} (* - Moved the defines from "project options" to "main.h" *} {* - Added Readme.txt to the project - Please READ IT ! *} (* *} {* 0.5.1 - 05/02/2000 - G.Juyn *} {* - added this version block *} {* - made the initialization part more robust *} {* eg. program aborts on initialization errors *} {* - B002(105797) - added check for existence of default sRGB *} {* profile (now included in distribution) *} {* - added mng_cleanup to program exit *} {* 0.5.1 - 05/08/2000 - G.Juyn *} {* - changed to stdcall convention *} {* 0.5.1 - 05/11/2000 - G.Juyn *} {* - changed callback function declarations *} {* *} {* 0.5.3 - 06/16/2000 - G.Juyn *} {* - removed processmessages call from refresh callback *} {* 0.5.3 - 06/17/2000 - G.Juyn *} {* - switched "storechunks" off *} {* 0.5.3 - 06/26/2000 - G.Juyn *} {* - changed definition of userdata to mng_ptr *} {* 0.5.3 - 06/28/2000 - G.Juyn *} {* - changed the default icon to something more appropriate *} {* - changed definition of memory alloc size to mng_size_t *} {* 0.5.3 - 06/29/2000 - G.Juyn *} {* - changed order of refresh parameters *} {* *} {* 0.9.0 - 06/30/2000 - G.Juyn *} {* - changed refresh parameters to 'x,y,width,height' *} {* *} {* 0.9.1 - 07/08/2000 - G.Juyn *} {* - fixed to use returncode constants *} {* - changed to accomodate MNG_NEEDTIMERWAIT returncode *} {* 0.9.1 - 07/10/2000 - G.Juyn *} {* - changed to use suspension-mode *} {* *} {* 1.0.1 - 05/02/2000 - G.Juyn *} {* - removed loading of default sRGB profile (auto in libmng) *} {* *} {****************************************************************************/ //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TMainForm *MainForm; # define _OR_ | # define _AND_ & # define _DIV_ / # define _NOT_ ! # define _NIL_ 0 # define _SHR_ >> # define _SHL_ << // Prototypes for static functions - the LibMng Callbacks. static mng_ptr __stdcall Memalloc( mng_uint32 iLen ); static void __stdcall Memfree( mng_ptr iPtr, mng_size_t iLen ); static mng_bool __stdcall Openstream( mng_handle hHandle ); static mng_bool __stdcall Closestream( mng_handle hHandle ); static mng_bool __stdcall Readdata ( mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32 *pRead ); static mng_bool __stdcall ProcessHeader ( mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight ); static mng_ptr __stdcall GetCanvasLine ( mng_handle hHandle, mng_uint32 iLinenr ); static mng_ptr __stdcall GetAlphaLine( mng_handle hHandle, mng_uint32 iLinenr ); static mng_bool __stdcall ImageRefresh ( mng_handle hHandle, mng_uint32 iX, mng_uint32 iY, mng_uint32 iWidth, mng_uint32 iHeight ); static mng_uint32 __stdcall GetTickCount( mng_handle hHandle ); static mng_bool __stdcall SetTimer( mng_handle hHandle, mng_uint32 iMsecs ); //--------------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- static mng_ptr __stdcall Memalloc( mng_uint32 iLen ) { mng_ptr pResult = malloc( iLen ); /* get memory from the heap */ if( pResult ) /* Added - condition */ memset( pResult, 0, iLen ); return pResult; } //--------------------------------------------------------------------------- static void __stdcall Memfree( mng_ptr iPtr, mng_size_t iLen ) { free( iPtr ); /* free the memory */ (void)iLen; // Kill compiler warning } //--------------------------------------------------------------------------- static mng_bool __stdcall Openstream( mng_handle hHandle ) { TMainForm *OHForm; /* get a fix on our form */ OHForm = (TMainForm *)mng_get_userdata( hHandle ); if( OHForm->OFFile != _NIL_ ) /* free previous stream (if any) */ OHForm->OFFile->Free(); /* open a new stream */ OHForm->OFFile = new TFileStream( OHForm->SFFileName, fmOpenRead _OR_ fmShareDenyWrite); OHForm->ProgressBar1->Position = 0; /* Added */ OHForm->ProgressBar1->Min =0; /* Added */ OHForm->ProgressBar1->Max = OHForm->OFFile->Size; /* Added */ return MNG_TRUE; } //--------------------------------------------------------------------------- static mng_bool __stdcall Closestream( mng_handle hHandle ) { TMainForm *OHForm; /* get a fix on our form */ OHForm = (TMainForm *)mng_get_userdata( hHandle ); OHForm->OFFile->Free(); /* cleanup the stream */ OHForm->OFFile = 0; /* don't use it again ! */ OHForm->ProgressBar1->Position = 0; /* Added */ return MNG_TRUE; } //--------------------------------------------------------------------------- static mng_bool __stdcall Readdata ( mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32 *pRead ) { TMainForm *OHForm; unsigned int IHTicks; unsigned int IHByte1; unsigned int IHByte2; unsigned int IHBytesPerSec ; /* get a fix on our form */ OHForm = (TMainForm *)mng_get_userdata( hHandle ); /* are we at EOF ? */ if( OHForm->OFFile->Position >= OHForm->OFFile->Size ) { *pRead = 0; /* indicate so */ } else { IHBytesPerSec = OHForm->IFBytesPerSec; /* fake a slow connection */ if( IHBytesPerSec > 0 ) { IHTicks = (unsigned int)GetTickCount(); IHByte1 = (IHTicks - OHForm->IFTicks) * IHBytesPerSec; IHByte2 = (OHForm->IFBytes + iBuflen) * 1000; if( IHByte2 > IHByte1 ) /* Added - condition */ if( ((IHByte2 - IHByte1) _DIV_ IHBytesPerSec) > 10 ) { Sleep( (DWORD)((IHByte2 - IHByte1) _DIV_ IHBytesPerSec) ); } }; /* read the requested data */ *pRead = OHForm->OFFile->Read( pBuf, iBuflen); OHForm->IFBytes = OHForm->IFBytes + *pRead; OHForm->ProgressBar1->Position = (int)OHForm->IFBytes; /* Added */ } // end else; return MNG_TRUE; } //--------------------------------------------------------------------------- static mng_bool __stdcall ProcessHeader ( mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight ) { TMainForm *OHForm; /* get a fix on our form */ OHForm = (TMainForm *)mng_get_userdata( hHandle ); /* Added */ OHForm->Caption = ExtractFileName( OHForm->SFFileName ) + " [" + String( iWidth ) + "x" + String( iHeight ) + "]"; OHForm->OFBitmap->Width = iWidth; /* store the new dimensions */ OHForm->OFBitmap->Height = iHeight; OHForm->OFImage->Left = 0; /* adjust the visible component */ OHForm->OFImage->Top = 0; OHForm->OFImage->Width = iWidth; OHForm->OFImage->Height = iHeight; OHForm->FormResize (OHForm); /* force re-centering the image*/ /* clear the canvas & draw an outline */ OHForm->OFBitmap->Canvas->Brush->Color = clGray; OHForm->OFBitmap->Canvas->Brush->Style = bsSolid; OHForm->OFBitmap->Canvas->FillRect( OHForm->OFBitmap->Canvas->ClipRect ); OHForm->OFBitmap->Canvas->Brush->Color = clRed; OHForm->OFBitmap->Canvas->Brush->Style = bsSolid; OHForm->OFBitmap->Canvas->Pen->Color = clRed; OHForm->OFBitmap->Canvas->Pen->Style = psSolid; OHForm->OFBitmap->Canvas->FrameRect( OHForm->OFBitmap->Canvas->ClipRect); /* make sure it gets out there */ OHForm->OFImage->Picture->Assign( OHForm->OFBitmap ); /* tell the library we want funny windows-bgr*/ if( mng_set_canvasstyle( hHandle, MNG_CANVAS_BGR8 ) ) OHForm->MNGerror( "libmng reported an error setting the canvas style" ); return MNG_TRUE; } //--------------------------------------------------------------------------- static mng_ptr __stdcall GetCanvasLine ( mng_handle hHandle, mng_uint32 iLinenr ) { TMainForm *OHForm; /* get a fix on our form */ OHForm = (TMainForm *)mng_get_userdata( hHandle ); /* easy with these bitmap objects ! */ return OHForm->OFBitmap->ScanLine[ iLinenr ]; } //--------------------------------------------------------------------------- static mng_bool __stdcall ImageRefresh ( mng_handle hHandle, mng_uint32 iX, mng_uint32 iY, mng_uint32 iWidth, mng_uint32 iHeight ) { TMainForm *OHForm; /* get a fix on our form */ OHForm = (TMainForm *)mng_get_userdata( hHandle ); /* force redraw */ OHForm->OFImage->Picture->Assign( OHForm->OFBitmap ); return MNG_TRUE; } //--------------------------------------------------------------------------- static mng_uint32 __stdcall GetTickCount( mng_handle hHandle ) { return GetTickCount(); /* windows knows that */ } //--------------------------------------------------------------------------- static mng_bool __stdcall SetTimer( mng_handle hHandle, mng_uint32 iMsecs ) { TMainForm *OHForm; /* get a fix on our form */ OHForm = (TMainForm *)mng_get_userdata( hHandle ); OHForm->OFTimer->Interval = iMsecs; /* and set the timer */ OHForm->OFTimer->Enabled = true; return MNG_TRUE; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void __fastcall TMainForm::FormCreate(TObject *Sender) { String SHProfileName; mng_uint16 IHRed, IHGreen, IHBlue; /* word */ OFBitmap = new Graphics::TBitmap(); /* initialize */ IFBytesPerSec = 10000000; OFFile = 0; OFOpenDialog->InitialDir = ""; OFBitmap->HandleType = bmDIB; /* make it a 24-bit DIB */ OFBitmap->PixelFormat = pf24bit; /* now initialize the library */ IFHandle = mng_initialize( mng_ptr(this), Memalloc, Memfree, _NIL_ ); if( IFHandle == _NIL_ ) { MNGerror ("libmng initializiation error"\ "\n"\ "Program aborted" ); PostMessage( Handle, WM_CLOSE, 0, 0); return; // was Exit }; /* no need to store chunk-info ! */ mng_set_storechunks( IFHandle, MNG_FALSE ); /* use suspension-buffer */ mng_set_suspensionmode( IFHandle, MNG_TRUE ); /* set all the callbacks */ if( (mng_setcb_openstream (IFHandle, Openstream ) != MNG_NOERROR) _OR_ (mng_setcb_closestream (IFHandle, Closestream ) != MNG_NOERROR) _OR_ (mng_setcb_readdata (IFHandle, Readdata ) != MNG_NOERROR) _OR_ (mng_setcb_processheader(IFHandle, ProcessHeader) != MNG_NOERROR) _OR_ (mng_setcb_getcanvasline(IFHandle, GetCanvasLine) != MNG_NOERROR) _OR_ (mng_setcb_refresh (IFHandle, ImageRefresh ) != MNG_NOERROR) _OR_ (mng_setcb_gettickcount (IFHandle, GetTickCount ) != MNG_NOERROR) _OR_ (mng_setcb_settimer (IFHandle, SetTimer ) != MNG_NOERROR) ) { MNGerror ("libmng reported an error setting a callback function!"\ "\n"\ "Program aborted" ); PostMessage( Handle, WM_CLOSE, 0, 0 ); return; // was Exit }; /* supply our own bg-color */ IHRed = (mng_uint16)((Color ) _AND_ 0xFF); IHGreen = (mng_uint16)((Color _SHR_ 8) _AND_ 0xFF); IHBlue = (mng_uint16)((Color _SHR_ 16) _AND_ 0xFF); IHRed = (mng_uint16)((IHRed _SHL_ 8) + IHRed); IHGreen = (mng_uint16)((IHGreen _SHL_ 8) + IHGreen); IHBlue = (mng_uint16)((IHBlue _SHL_ 8) + IHBlue); if( mng_set_bgcolor (IFHandle, IHRed, IHGreen, IHBlue) != MNG_NOERROR ) MNGerror( "libmng reported an error setting the background color!"); } //--------------------------------------------------------------------------- void __fastcall TMainForm::FormCloseQuery(TObject *Sender, bool &CanClose) { BFCancelled = true; /* if we're still animating then stop it */ if( OFTimer->Enabled ) { if( mng_display_freeze (IFHandle) != MNG_NOERROR ) MNGerror ("libmng reported an error during display_freeze!" ); } OFTimer->Enabled = false; mng_cleanup( &IFHandle ); } //--------------------------------------------------------------------------- void __fastcall TMainForm::FormShow(TObject *Sender) { FormResize( this ); } //--------------------------------------------------------------------------- void __fastcall TMainForm::FormResize(TObject *Sender) { /* center the image in the window */ if( ClientWidth < OFImage->Width ) OFImage->Left = 0; else OFImage->Left = (ClientWidth - OFImage->Width ) _DIV_ 2; if( ClientHeight < OFImage->Height ) OFImage->Top = 0; else OFImage->Top = (ClientHeight - OFImage->Height) _DIV_ 2; ProgressBar1->Width = Panel1->Width - 8; /* Added */ } //--------------------------------------------------------------------------- void __fastcall TMainForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { /* pressing will freeze an animation */ if( Key == VK_ESCAPE ) { if( OFTimer->Enabled ) { if( mng_display_freeze( IFHandle) != MNG_NOERROR ) MNGerror( "libmng reported an error during display_freeze!" ); } OFTimer->Enabled = false; /* don't let that timer go off then ! */ BFCancelled = true; } } //--------------------------------------------------------------------------- void __fastcall TMainForm::OFTimerTimer(TObject *Sender) { mng_retcode IHRslt; OFTimer->Enabled = false; /* only once ! */ if( _NOT_ BFCancelled ) { /* and inform the library */ IHRslt = mng_display_resume( IFHandle ); if( (IHRslt != MNG_NOERROR) _AND_ (IHRslt != MNG_NEEDTIMERWAIT) ) MNGerror( "libmng reported an error during display_resume!" ); }; } //--------------------------------------------------------------------------- void __fastcall TMainForm::OFMenuFileOpenClick(TObject *Sender) { mng_retcode IHRslt; OFOpenDialog->InitialDir = ""; OFOpenDialog->InitialDir = GetCurrentDir(); //@@ OFOpenDialog->FileName = SFFileName; if( OFOpenDialog->Execute() ) /* get the filename */ { if( OFTimer->Enabled ) /* if the lib was active; stop it */ { OFTimer->Enabled = false; Application->ProcessMessages(); /* process any timer requests (for safety) */ /* now freeze the animation */ if( mng_display_freeze( IFHandle ) != MNG_NOERROR ) MNGerror( "libmng reported an error during display_freeze!" ); }; /* save interesting fields */ SFFileName = OFOpenDialog->FileName; IFTicks = GetTickCount(); IFBytes = 0; BFCancelled = false; /* always reset (just in case) */ if( mng_reset( IFHandle ) != MNG_NOERROR ) { MNGerror( "libmng reported an error during reset!" ); } else { /* and let the lib do it's job ! */ IHRslt = mng_readdisplay (IFHandle); if( (IHRslt != MNG_NOERROR) _AND_ (IHRslt != MNG_NEEDTIMERWAIT) ) MNGerror( "libmng reported an error reading the input file!" ); }; }; } //--------------------------------------------------------------------------- void __fastcall TMainForm::OFMenuFileProfileClick(TObject *Sender) { char SHProfileDir[ MAX_PATH ]; GetSystemDirectory( SHProfileDir, MAX_PATH ); strcat( SHProfileDir, "\\Color" ); OFOpenDialogProfile->InitialDir = String( SHProfileDir ); if( OFOpenDialogProfile->Execute() ) { if( mng_set_outputprofile( IFHandle, OFOpenDialogProfile->FileName.c_str()) != 0 ) MNGerror( "libmng reported an error setting the output-profile!" ); } } //--------------------------------------------------------------------------- void __fastcall TMainForm::OFMenuFileExitClick(TObject *Sender) { if( mng_cleanup( &IFHandle ) != MNG_NOERROR ) MNGerror( "libmng cleanup error" ); Close(); } //--------------------------------------------------------------------------- void __fastcall TMainForm::OFMenuOptionsModemSpeedClick(TObject *Sender) { OFMenuOptionsModem28k8->Checked = false; OFMenuOptionsModem33k6->Checked = false; OFMenuOptionsModem56k->Checked = false; OFMenuOptionsModemISDN64->Checked = false; OFMenuOptionsModemISDN128->Checked = false; OFMenuOptionsModemCable512->Checked = false; OFMenuOptionsModemUnlimited->Checked = false; if( IFBytesPerSec == (unsigned int)OFMenuOptionsModem28k8->Tag _DIV_ 10 ) OFMenuOptionsModem28k8->Checked = true; else if( IFBytesPerSec == (unsigned int)OFMenuOptionsModem33k6->Tag _DIV_ 10 ) OFMenuOptionsModem33k6->Checked = true; else if( IFBytesPerSec == (unsigned int)OFMenuOptionsModem56k->Tag _DIV_ 10 ) OFMenuOptionsModem56k->Checked = true; else if( IFBytesPerSec == (unsigned int)OFMenuOptionsModemISDN64->Tag _DIV_ 10 ) OFMenuOptionsModemISDN64->Checked = true; else if( IFBytesPerSec == (unsigned int)OFMenuOptionsModemISDN128->Tag _DIV_ 10 ) OFMenuOptionsModemISDN128->Checked = true; else /* Added - changedit was the line below ! */ // if( IFBytesPerSec == (unsigned int)OFMenuOptionsModemUnlimited->Tag _DIV_ 10 ) if( IFBytesPerSec == (unsigned int)OFMenuOptionsModemCable512->Tag _DIV_ 10 ) OFMenuOptionsModemCable512->Checked = true; else OFMenuOptionsModemUnlimited->Checked = true; } //--------------------------------------------------------------------------- void __fastcall TMainForm::OFMenuOptionsModemXClick(TObject *Sender) { IFBytesPerSec = ((TMenuItem*)Sender)->Tag _DIV_ 10; } //--------------------------------------------------------------------------- void TMainForm::MNGerror( String SHMsg ) { /* get extended info */ mng_uint32 iErrorcode; mng_uint8 iSeverity; mng_chunkid iChunkname; mng_uint32 iChunkseq; mng_int32 iExtra1; mng_int32 iExtra2; mng_pchar zErrortext; char szFormatStr[ 256 ]; iErrorcode = mng_getlasterror (IFHandle, &iSeverity, &iChunkname, &iChunkseq, &iExtra1, &iExtra2, (mng_pchar*)&zErrortext); wsprintf( szFormatStr, "Error = %d; Severity = %d; Chunknr = %d; Extra1 = %d", (int)iErrorcode, (int)iSeverity, (int)iChunkseq, (int)iExtra1 ); MessageDlg( SHMsg + "\n\n" + String(zErrortext) + "\n\n" + szFormatStr, /* see wsprintf above */ mtError, TMsgDlgButtons() << mbOK, 0 ); } //--------------------------------------------------------------------------- libmng-2.0.2/bcb/mngview/MngView.bpr0000644000000000000000000001200412005307152015734 0ustar rootroot# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.03 # --------------------------------------------------------------------------- PROJECT = MngView.exe OBJFILES = MngView.obj Main.obj RESFILES = MngView.res DEFFILE = RESDEPEN = $(RESFILES) Main.dfm LIBFILES = ..\win32dll\libmng.lib LIBRARIES = VCL35.lib SPARELIBS = VCL35.lib PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi bcbsmp35.bpi dclocx35.bpi \ QRPT35.bpi # --------------------------------------------------------------------------- PATHCPP = .; PATHASM = .; PATHPAS = .; PATHRC = .; DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release # --------------------------------------------------------------------------- CFLAG1 = -Od -w -Ve -r- -k -y -v -vi- -c -b- -w-par -w-inl -Vx -tW CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\..\zlib;..\..\..\jpgsrc6b CFLAG3 = -Tkh30000 -6 PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ -I$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\..\zlib;..\..\..\jpgsrc6b -$Y \ -$W -$O- -v -JPHN -M RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\..\zlib;..\..\..\jpgsrc6b AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /i..\.. /i..\..\..\zlib \ /i..\..\..\jpgsrc6b /mx /w2 /zd /dMNG_USE_DLL LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpe -x -Gn IFLAGS = # --------------------------------------------------------------------------- ALLOBJ = c0w32.obj sysinit.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=2057 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [HistoryLists\hlIncludePath] Count=8 Item0=$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\..\zlib;..\..\..\jpgsrc6b Item1=$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\..\zlib;..\..\..\jpgsrc6b;..\win32dll Item2=$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\..\zlib;..\..\..\ijgsrc6b Item3=$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\..\zlib;..\..\..\libjpeg Item4=$(BCB)\include;$(BCB)\include\vcl;..\..;..\..\zlib Item5=$(BCB)\include;$(BCB)\include\vcl;..\.. Item6=$(BCB)\include;$(BCB)\include\vcl Item7=..\..\delphi;$(BCB)\include;$(BCB)\include\vcl [HistoryLists\hlLibraryPath] Count=2 Item0=$(BCB)\lib\obj;$(BCB)\lib Item1=..\..\delphi;$(BCB)\lib\obj;$(BCB)\lib [HistoryLists\hlDebugSourcePath] Count=1 Item0=$(BCB)\source\vcl [HistoryLists\hlConditionals] Count=3 Item0=MNG_USE_DLL Item1=_RTLDLL Item2=_RTLDLL;USEPACKAGES [Debugging] DebugSourceDirs=$(BCB)\source\vcl [Parameters] RunParams= HostApplication= !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = ilink32 !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< # --------------------------------------------------------------------------- libmng-2.0.2/bcb/mngview/Main.h0000644000000000000000000000615312005307152014720 0ustar rootroot//--------------------------------------------------------------------------- #ifndef MainH #define MainH //--------------------------------------------------------------------------- #include #include #include #include #include #include #include #include //--------------------------------------------------------------------------- // These MUST be defined before we include "Libmng.h # define MNG_SUPPORT_READ # define MNG_ACCESS_CHUNKS # define MNG_STORE_CHUNKS # define MNG_NO_CMS # define MNG_USE_DLL # define MNG_SUPPORT_DISPLAY # define MNG_SKIP_ZLIB // we don't need the zlib definitions here # define MNG_SKIP_IJG6B // we don't need the IJG definitions here #include "libmng.h" //--------------------------------------------------------------------------- class TMainForm : public TForm { __published: // IDE-managed Components TMainMenu *OFMainMenu; TMenuItem *OFMenuFile; TMenuItem *OFMenuFileOpen; TMenuItem *OFMenuFileProfile; TMenuItem *OFMenuFileN1; TMenuItem *OFMenuFileExit; TMenuItem *OFMenuOptions; TMenuItem *OFMenuOptionsModemSpeed; TMenuItem *OFMenuOptionsModem28k8; TMenuItem *OFMenuOptionsModem33k6; TMenuItem *OFMenuOptionsModem56k; TMenuItem *OFMenuOptionsModemISDN64; TMenuItem *OFMenuOptionsModemISDN128; TMenuItem *OFMenuOptionsModemCable512; TMenuItem *OFMenuOptionsModemUnlimited; TOpenDialog *OFOpenDialog; TTimer *OFTimer; TOpenDialog *OFOpenDialogProfile; TImage *OFImage; TPanel *Panel1; TProgressBar *ProgressBar1; void __fastcall FormCreate(TObject *Sender); void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose); void __fastcall FormShow(TObject *Sender); void __fastcall FormResize(TObject *Sender); void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift); void __fastcall OFTimerTimer(TObject *Sender); void __fastcall OFMenuFileOpenClick(TObject *Sender); void __fastcall OFMenuFileProfileClick(TObject *Sender); void __fastcall OFMenuFileExitClick(TObject *Sender); void __fastcall OFMenuOptionsModemSpeedClick(TObject *Sender); void __fastcall OFMenuOptionsModemXClick(TObject *Sender); private: // User declarations public : // Data - was private in the pascal version String SFFileName; /* filename of the input stream */ TFileStream *OFFile; /* input stream */ mng_handle IFHandle; /* the libray handle */ Graphics::TBitmap *OFBitmap; /* drawing canvas */ # ifdef TEST_RGB8_A8 void *OFAlpha; # endif bool BFCancelled; /* or app-exit */ unsigned int IFTicks; /* used to fake slow connections */ unsigned int IFBytes; unsigned int IFBytesPerSec; // Methods void MNGerror( String SHMsg ); public: // User declarations __fastcall TMainForm(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TMainForm *MainForm; //--------------------------------------------------------------------------- #endif libmng-2.0.2/bcb/mngview/MngView.res0000644000000000000000000000155412005307152015752 0ustar rootroot ÿÿÿÿè ÿÿÿÿ( @€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿŒŒŒŒ„‹‹‹‹ðw€w€ˆˆˆˆHK···ˆˆøˆøŒŒŒŒ„‹‹‹‹€w€w€ˆˆˆˆHH¸·GøˆøˆøŒŒŒŒ„„‹„G€w€w€ˆˆˆˆHHHGDøˆøˆøŒŒŒŒ„„ˆGG‡w‡w‡ˆˆˆˆHHHDGðw€w€üŒŒŒ„„ˆGDøˆøˆøøˆˆˆHHHGGÿÿÿÿÿüŒŒŒ„„ˆDGDwDtwøˆˆˆHHHGDD‡t„üŒŒŒ„„ˆGGDwD„øˆˆˆHHHDGD‡t„üŒŒŒ„„ˆGDDwD„øˆˆˆHHHGGD‡t„üŒŒŒ„„ˆDGDwGHøˆˆˆHHHDDD‡t€üŒŒŒ„„„„DDwHøˆˆˆHHHH„D„€üŒŒŒ„„„„ˆDHøˆˆˆHHHH€€ŒŒŒ„„„„€€ˆˆˆHHHH€€ŒŒŒ„„„„€€ˆˆˆHHHH€€ŒŒŒ„„„„€ˆˆˆHHHH€ŒŒŒ„„„„€ÿˆˆHHˆˆ€wÿÿÿˆˆwwwp€€€€€€€€€€€€€?€ÀÀÀÀÀÿÀÿÀÿÀÿàÿüÿ0ÿÿMAINICON èlibmng-2.0.2/bcb/mngview/README.TXT0000644000000000000000000000110712005307152015213 0ustar rootroot Please note : If your project includes the header file "Rpcndr.h", then you will then have to define "HAVE_BOOLEAN" before "libmng.h" is included. Why ? ... "jmorecfg.h" has #ifndef HAVE_BOOLEAN typedef int boolean; #endif and "Rpcndr.h" has typedef unsigned char boolean This >>MAY<< affect other libraries used in the same project that depend on the jpeg source - especially as "boolean" is used in structures (possible alignment problems). For example "Sam leffler's" LibTiff can be built with the Jpeg codec. Just a little something to be aware of !. AP - 15/9/2000. libmng-2.0.2/bcb/mngview/MNGI.ICO0000644000000000000000000000137612005307152014753 0ustar rootroot è( @€€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ37337w33w03s333s3w0s3337s7s733s33333333s077333373333333337773733s30w3ss737s3w3s37sss307s330s333077330377s730ww3s077w3÷s÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿþüøðàÀ€À?øÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿlibmng-2.0.2/bcb/bogus/0000755000000000000000000000000012005307152013321 5ustar rootrootlibmng-2.0.2/bcb/bogus/bogus.cpp0000644000000000000000000002447412005307152015157 0ustar rootroot/* ************************************************************************** */ /* * * */ /* * COPYRIGHT NOTICE: * */ /* * * */ /* * Copyright (c) 2000,2002 Gerard Juyn (gerard@libmng.com) * */ /* * [You may insert additional notices after this sentence if you modify * */ /* * this source] * */ /* * * */ /* * For the purposes of this copyright and license, "Contributing Authors" * */ /* * is defined as the following set of individuals: * */ /* * * */ /* * Gerard Juyn * */ /* * (hopefully some more to come...) * */ /* * * */ /* * The MNG Library is supplied "AS IS". The Contributing Authors * */ /* * disclaim all warranties, expressed or implied, including, without * */ /* * limitation, the warranties of merchantability and of fitness for any * */ /* * purpose. The Contributing Authors assume no liability for direct, * */ /* * indirect, incidental, special, exemplary, or consequential damages, * */ /* * which may result from the use of the MNG Library, even if advised of * */ /* * the possibility of such damage. * */ /* * * */ /* * Permission is hereby granted to use, copy, modify, and distribute this * */ /* * source code, or portions hereof, for any purpose, without fee, subject * */ /* * to the following restrictions: * */ /* * * */ /* * 1. The origin of this source code must not be misrepresented; * */ /* * you must not claim that you wrote the original software. * */ /* * * */ /* * 2. Altered versions must be plainly marked as such and must not be * */ /* * misrepresented as being the original source. * */ /* * * */ /* * 3. This Copyright notice may not be removed or altered from any source * */ /* * or altered source distribution. * */ /* * * */ /* * The Contributing Authors specifically permit, without fee, and * */ /* * encourage the use of this source code as a component to supporting * */ /* * the MNG and JNG file format in commercial products. If you use this * */ /* * source code in a product, acknowledgment would be highly appreciated. * */ /* * * */ /* ************************************************************************** */ /* * * */ /* * project : bogus * */ /* * file : bogus.cpp copyright (c) 2000,2002 G.Juyn * */ /* * version : 1.0.1 * */ /* * * */ /* * purpose : main project file * */ /* * * */ /* * author : G.Juyn * */ /* * web : http://www.3-t.com * */ /* * email : mailto:info@3-t.com * */ /* * * */ /* * comment : bogus is (quite literally) a bogus sample which creates and* */ /* * writes a totally valid, be it somewhat trivial, MNG-file * */ /* * * */ /* * changes : 0.5.3 - 06/26/2000 - G.Juyn * */ /* * - changed userdata variable to mng_ptr * */ /* * 0.5.3 - 06/28/2000 - G.Juyn * */ /* * - changed memory allocation size parameters to mng_size_t * */ /* * * */ /* * 1.0.1 - 10/07/2002 - G.Juyn * */ /* * - fixed copyright notice * */ /* * - updated MHDR simplicity flag * */ /* * * */ /* ************************************************************************** */ #pragma hdrstop #include #include #include #include #include "libmng.h" /* ************************************************************************** */ USERES("bogus.res"); USELIB("..\win32dll\libmng.lib"); //--------------------------------------------------------------------------- typedef struct user_struct { FILE *hFile; /* file handle */ } userdata; typedef userdata * userdatap; /* ************************************************************************** */ #define MY_DECL __stdcall /* get the right callback convention */ /* ************************************************************************** */ mng_ptr MY_DECL myalloc (mng_size_t iSize) { return (mng_ptr)calloc (1, iSize); /* duh! */ } /* ************************************************************************** */ #pragma argsused void MY_DECL myfree (mng_ptr pPtr, mng_size_t iSize) { free (pPtr); /* duh! */ return; } /* ************************************************************************** */ #pragma argsused mng_bool MY_DECL myopenstream (mng_handle hMNG) { return MNG_TRUE; /* already opened in main function */ } /* ************************************************************************** */ #pragma argsused mng_bool MY_DECL myclosestream (mng_handle hMNG) { return MNG_TRUE; /* gets closed in main function */ } /* ************************************************************************** */ mng_bool MY_DECL mywritedata (mng_handle hMNG, mng_ptr pBuf, mng_uint32 iSize, mng_uint32 *iWritten) { /* get to my file handle */ userdatap pMydata = (userdatap)mng_get_userdata (hMNG); /* write it */ *iWritten = fwrite (pBuf, 1, iSize, pMydata->hFile); /* iWritten will indicate errors */ return MNG_TRUE; } /* ************************************************************************** */ int makeimage (char * zFilename) { userdatap pMydata; mng_handle hMNG; mng_retcode iRC; /* get a data buffer */ pMydata = (userdatap)calloc (1, sizeof (userdata)); if (pMydata == NULL) /* oke ? */ { fprintf (stderr, "Cannot allocate a data buffer.\n"); return 1; } /* can we open the file ? */ if ((pMydata->hFile = fopen (zFilename, "wb")) == NULL) { /* error out if we can't */ fprintf (stderr, "Cannot open output file %s.\n", zFilename); return 1; } /* let's initialize the library */ hMNG = mng_initialize ((mng_ptr)pMydata, myalloc, myfree, MNG_NULL); if (!hMNG) /* did that work out ? */ { fprintf (stderr, "Cannot initialize libmng.\n"); iRC = 1; } else { /* setup callbacks */ if ( ((iRC = mng_setcb_openstream (hMNG, myopenstream )) != 0) || ((iRC = mng_setcb_closestream (hMNG, myclosestream)) != 0) || ((iRC = mng_setcb_writedata (hMNG, mywritedata )) != 0) ) fprintf (stderr, "Cannot set callbacks for libmng.\n"); else { /* create the file in memory */ if ( ((iRC = mng_create (hMNG) ) != 0) || ((iRC = mng_putchunk_mhdr (hMNG, 640, 480, 1000, 3, 1, 3, 0x0047) ) != 0) || ((iRC = mng_putchunk_basi (hMNG, 640, 160, 8, 2, 0, 0, 0, 0xFF, 0x00, 0x00, 0xFF, 1)) != 0) || ((iRC = mng_putchunk_iend (hMNG) ) != 0) || ((iRC = mng_putchunk_defi (hMNG, 0, 0, 0, MNG_TRUE, 0, 160, MNG_FALSE, 0, 0, 0, 0 )) != 0) || ((iRC = mng_putchunk_basi (hMNG, 640, 160, 8, 2, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 1)) != 0) || ((iRC = mng_putchunk_iend (hMNG) ) != 0) || ((iRC = mng_putchunk_defi (hMNG, 0, 0, 0, MNG_TRUE, 0, 320, MNG_FALSE, 0, 0, 0, 0 )) != 0) || ((iRC = mng_putchunk_basi (hMNG, 640, 160, 8, 2, 0, 0, 0, 0x00, 0x00, 0xFF, 0xFF, 1)) != 0) || ((iRC = mng_putchunk_iend (hMNG) ) != 0) || ((iRC = mng_putchunk_mend (hMNG) ) != 0) ) fprintf (stderr, "Cannot create the chunks for the image.\n"); else { if ((iRC = mng_write (hMNG)) != 0) fprintf (stderr, "Cannot write the image.\n"); } } mng_cleanup (&hMNG); /* cleanup the library */ } fclose (pMydata->hFile); /* cleanup */ free (pMydata); return iRC; } /* ************************************************************************** */ #pragma argsused int main (int argc, char *argv[]) { return makeimage ("dutch.mng"); } /* ************************************************************************** */ libmng-2.0.2/bcb/bogus/bogus.bpr0000644000000000000000000001227412005307152015153 0ustar rootroot# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.03 # --------------------------------------------------------------------------- PROJECT = bogus.exe OBJFILES = bogus.obj RESFILES = bogus.res RESDEPEN = $(RESFILES) LIBFILES = ..\win32dll\libmng.lib LIBRARIES = SPARELIBS = PACKAGES = vclx35.bpi VCL35.bpi vcldb35.bpi vcldbx35.bpi bcbsmp35.bpi dclocx35.bpi \ Qrpt35.bpi DEFFILE = # --------------------------------------------------------------------------- PATHCPP = .; PATHASM = .; PATHPAS = .; PATHRC = .; DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release # --------------------------------------------------------------------------- CFLAG1 = -O2 -w -r- -k -y -v -vi- -c -tWC CFLAG2 = -D_NO_VCL;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL \ -I..\win32dll;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include CFLAG3 = -Tkh30000 PFLAGS = -D_NO_VCL;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL \ -U..\win32dll;$(BCB)\lib;$(DEBUGLIBPATH) \ -I..\win32dll;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include \ -$Y -$W -$O- -v -JPHN -M RFLAGS = -D_NO_VCL;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL \ -i..\win32dll;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include AFLAGS = /i..\win32dll /i..\..\..\libmng-devel /i..\..\..\zlib /i..\..\..\jpgsrc6b \ /i..\..\..\lcms /i$(BCB)\include /d_NO_VCL /dMNG_SUPPORT_WRITE \ /dMNG_ACCESS_CHUNKS /dMNG_STORE_CHUNKS /dMNG_NO_CMS /dMNG_USE_DLL /mx /w2 /zd LFLAGS = -L..\win32dll;$(BCB)\lib;$(DEBUGLIBPATH) -ap -Tpe -x -Gn -v IFLAGS = # --------------------------------------------------------------------------- ALLOBJ = c0x32.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) import32.lib cw32mt.lib # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=1 AutoIncBuild=1 MajorVer=1 MinorVer=0 Release=1 Build=9 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription=Executable (Console) FileVersion=1.0.1.9 InternalName=bogus LegalCopyright=copyright (c) 2000,2002 G. Juyn LegalTrademarks= OriginalFilename=bogus.exe ProductName=bogus ProductVersion=1.0.1 Comments= [Excluded Packages] C:\Program Files\Borland\CBuilder3\Bin\DbX35.bpl=(untitled) [HistoryLists\hlIncludePath] Count=3 Item0=..\win32dll;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include Item1=..\..\..\libmng-devel;..\..\..\zlib;$(BCB)\include Item2=..\..\..\libmng;..\..\..\zlib;$(BCB)\include [HistoryLists\hlLibraryPath] Count=2 Item0=..\win32dll;$(BCB)\lib Item1=$(BCB)\lib [HistoryLists\hlConditionals] Count=2 Item0=_NO_VCL;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL Item1=_NO_VCL;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_USE_DLL [Debugging] DebugSourceDirs= [Parameters] RunParams= HostApplication= !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = ilink32 !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< # --------------------------------------------------------------------------- libmng-2.0.2/bcb/win32dll/0000755000000000000000000000000012005307152013640 5ustar rootrootlibmng-2.0.2/bcb/win32dll/libmng.cpp0000644000000000000000000002017012005307152015614 0ustar rootroot/* ************************************************************************** */ /* * * */ /* * COPYRIGHT NOTICE: * */ /* * * */ /* * Copyright (c) 2000-2007 Gerard Juyn (gerard@libmng.com) * */ /* * [You may insert additional notices after this sentence if you modify * */ /* * this source] * */ /* * * */ /* * For the purposes of this copyright and license, "Contributing Authors" * */ /* * is defined as the following set of individuals: * */ /* * * */ /* * Gerard Juyn * */ /* * (hopefully some more to come...) * */ /* * * */ /* * The MNG Library is supplied "AS IS". The Contributing Authors * */ /* * disclaim all warranties, expressed or implied, including, without * */ /* * limitation, the warranties of merchantability and of fitness for any * */ /* * purpose. The Contributing Authors assume no liability for direct, * */ /* * indirect, incidental, special, exemplary, or consequential damages, * */ /* * which may result from the use of the MNG Library, even if advised of * */ /* * the possibility of such damage. * */ /* * * */ /* * Permission is hereby granted to use, copy, modify, and distribute this * */ /* * source code, or portions hereof, for any purpose, without fee, subject * */ /* * to the following restrictions: * */ /* * * */ /* * 1. The origin of this source code must not be misrepresented; * */ /* * you must not claim that you wrote the original software. * */ /* * * */ /* * 2. Altered versions must be plainly marked as such and must not be * */ /* * misrepresented as being the original source. * */ /* * * */ /* * 3. This Copyright notice may not be removed or altered from any source * */ /* * or altered source distribution. * */ /* * * */ /* * The Contributing Authors specifically permit, without fee, and * */ /* * encourage the use of this source code as a component to supporting * */ /* * the MNG and JNG file format in commercial products. If you use this * */ /* * source code in a product, acknowledgment would be highly appreciated. * */ /* * * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng.cpp copyright (c) 2000-2002 G.Juyn * */ /* * version : 1.0.5 * */ /* * * */ /* * purpose : generic dll project assembly file * */ /* * * */ /* * author : G.Juyn * */ /* * web : http://www.3-t.com * */ /* * email : mailto:info@3-t.com * */ /* * * */ /* * comment : Autogenerated file with the libmng.dll BCB project * */ /* * * */ /* * changes : 0.5.1 - 05/14/2000 - G.Juyn * */ /* * - added this block * */ /* * * */ /* * 1.0.5 - 08/20/2000 - G.Juyn * */ /* * - version-number & copyright * */ /* * * */ /* ************************************************************************** */ #include #pragma hdrstop #include /* ************************************************************************** */ USERES("libmng.res"); USEUNIT("..\..\libmng_hlapi.c"); USEUNIT("..\..\libmng_callback_xs.c"); USEUNIT("..\..\libmng_prop_xs.c"); USEUNIT("..\..\libmng_chunk_xs.c"); USEUNIT("..\..\libmng_object_prc.c"); USEUNIT("..\..\libmng_chunk_descr.c"); USEUNIT("..\..\libmng_chunk_prc.c"); USEUNIT("..\..\libmng_chunk_io.c"); USEUNIT("..\..\libmng_read.c"); USEUNIT("..\..\libmng_write.c"); USEUNIT("..\..\libmng_display.c"); USEUNIT("..\..\libmng_dither.c"); USEUNIT("..\..\libmng_pixels.c"); USEUNIT("..\..\libmng_filter.c"); USEUNIT("..\..\libmng_error.c"); USEUNIT("..\..\libmng_trace.c"); USEUNIT("..\..\libmng_cms.c"); USEUNIT("..\..\libmng_zlib.c"); USEUNIT("..\..\libmng_jpeg.c"); USEUNIT("..\..\..\zlib\adler32.c"); USEUNIT("..\..\..\zlib\compress.c"); USEUNIT("..\..\..\zlib\crc32.c"); USEUNIT("..\..\..\zlib\deflate.c"); USEUNIT("..\..\..\zlib\inffast.c"); USEUNIT("..\..\..\zlib\inflate.c"); USEUNIT("..\..\..\zlib\inftrees.c"); USEUNIT("..\..\..\zlib\trees.c"); USEUNIT("..\..\..\zlib\uncompr.c"); USEUNIT("..\..\..\zlib\zutil.c"); USEUNIT("..\..\..\jpgsrc6b\jquant2.c"); USEUNIT("..\..\..\jpgsrc6b\jcapistd.c"); USEUNIT("..\..\..\jpgsrc6b\jccoefct.c"); USEUNIT("..\..\..\jpgsrc6b\jccolor.c"); USEUNIT("..\..\..\jpgsrc6b\jcdctmgr.c"); USEUNIT("..\..\..\jpgsrc6b\jchuff.c"); USEUNIT("..\..\..\jpgsrc6b\jcinit.c"); USEUNIT("..\..\..\jpgsrc6b\jcmainct.c"); USEUNIT("..\..\..\jpgsrc6b\jcmarker.c"); USEUNIT("..\..\..\jpgsrc6b\jcmaster.c"); USEUNIT("..\..\..\jpgsrc6b\jcomapi.c"); USEUNIT("..\..\..\jpgsrc6b\jcparam.c"); USEUNIT("..\..\..\jpgsrc6b\jcphuff.c"); USEUNIT("..\..\..\jpgsrc6b\jcprepct.c"); USEUNIT("..\..\..\jpgsrc6b\jcsample.c"); USEUNIT("..\..\..\jpgsrc6b\jctrans.c"); USEUNIT("..\..\..\jpgsrc6b\jdapistd.c"); USEUNIT("..\..\..\jpgsrc6b\jdatadst.c"); USEUNIT("..\..\..\jpgsrc6b\jdatasrc.c"); USEUNIT("..\..\..\jpgsrc6b\jdcoefct.c"); USEUNIT("..\..\..\jpgsrc6b\jdcolor.c"); USEUNIT("..\..\..\jpgsrc6b\jddctmgr.c"); USEUNIT("..\..\..\jpgsrc6b\jdhuff.c"); USEUNIT("..\..\..\jpgsrc6b\jdinput.c"); USEUNIT("..\..\..\jpgsrc6b\jdmainct.c"); USEUNIT("..\..\..\jpgsrc6b\jdmarker.c"); USEUNIT("..\..\..\jpgsrc6b\jdmaster.c"); USEUNIT("..\..\..\jpgsrc6b\jdmerge.c"); USEUNIT("..\..\..\jpgsrc6b\jdphuff.c"); USEUNIT("..\..\..\jpgsrc6b\jdpostct.c"); USEUNIT("..\..\..\jpgsrc6b\jdsample.c"); USEUNIT("..\..\..\jpgsrc6b\jdtrans.c"); USEUNIT("..\..\..\jpgsrc6b\jerror.c"); USEUNIT("..\..\..\jpgsrc6b\jfdctflt.c"); USEUNIT("..\..\..\jpgsrc6b\jfdctfst.c"); USEUNIT("..\..\..\jpgsrc6b\jfdctint.c"); USEUNIT("..\..\..\jpgsrc6b\jidctflt.c"); USEUNIT("..\..\..\jpgsrc6b\jidctfst.c"); USEUNIT("..\..\..\jpgsrc6b\jidctint.c"); USEUNIT("..\..\..\jpgsrc6b\jidctred.c"); USEUNIT("..\..\..\jpgsrc6b\jmemmgr.c"); USEUNIT("..\..\..\jpgsrc6b\jmemnobs.c"); USEUNIT("..\..\..\jpgsrc6b\jquant1.c"); USEUNIT("..\..\..\jpgsrc6b\jcapimin.c"); USEUNIT("..\..\..\jpgsrc6b\jutils.c"); USEUNIT("..\..\..\jpgsrc6b\jdapimin.c"); USELIB("..\..\..\lcms\Projects\Bcc-5.5-static\lcmsstat.lib"); //--------------------------------------------------------------------------- #pragma argsused int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) { return 1; } /* ************************************************************************** */ libmng-2.0.2/bcb/win32dll/libmng.bpr0000644000000000000000000006020312005307152015616 0ustar rootroot# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.03 # --------------------------------------------------------------------------- PROJECT = libmng.dll OBJFILES = ..\..\..\obj\libmng.obj ..\..\..\obj\libmng_hlapi.obj \ ..\..\..\obj\libmng_callback_xs.obj ..\..\..\obj\libmng_prop_xs.obj \ ..\..\..\obj\libmng_chunk_xs.obj ..\..\..\obj\libmng_object_prc.obj \ ..\..\..\obj\libmng_chunk_descr.obj ..\..\..\obj\libmng_chunk_prc.obj \ ..\..\..\obj\libmng_chunk_io.obj ..\..\..\obj\libmng_read.obj \ ..\..\..\obj\libmng_write.obj ..\..\..\obj\libmng_display.obj \ ..\..\..\obj\libmng_dither.obj ..\..\..\obj\libmng_pixels.obj \ ..\..\..\obj\libmng_filter.obj ..\..\..\obj\libmng_error.obj \ ..\..\..\obj\libmng_trace.obj ..\..\..\obj\libmng_cms.obj \ ..\..\..\obj\libmng_zlib.obj ..\..\..\obj\libmng_jpeg.obj \ ..\..\..\obj\adler32.obj ..\..\..\obj\compress.obj ..\..\..\obj\crc32.obj \ ..\..\..\obj\deflate.obj ..\..\..\obj\inffast.obj ..\..\..\obj\inflate.obj \ ..\..\..\obj\inftrees.obj ..\..\..\obj\trees.obj ..\..\..\obj\uncompr.obj \ ..\..\..\obj\zutil.obj ..\..\..\obj\jquant2.obj ..\..\..\obj\jcapistd.obj \ ..\..\..\obj\jccoefct.obj ..\..\..\obj\jccolor.obj ..\..\..\obj\jcdctmgr.obj \ ..\..\..\obj\jchuff.obj ..\..\..\obj\jcinit.obj ..\..\..\obj\jcmainct.obj \ ..\..\..\obj\jcmarker.obj ..\..\..\obj\jcmaster.obj ..\..\..\obj\jcomapi.obj \ ..\..\..\obj\jcparam.obj ..\..\..\obj\jcphuff.obj ..\..\..\obj\jcprepct.obj \ ..\..\..\obj\jcsample.obj ..\..\..\obj\jctrans.obj ..\..\..\obj\jdapistd.obj \ ..\..\..\obj\jdatadst.obj ..\..\..\obj\jdatasrc.obj ..\..\..\obj\jdcoefct.obj \ ..\..\..\obj\jdcolor.obj ..\..\..\obj\jddctmgr.obj ..\..\..\obj\jdhuff.obj \ ..\..\..\obj\jdinput.obj ..\..\..\obj\jdmainct.obj ..\..\..\obj\jdmarker.obj \ ..\..\..\obj\jdmaster.obj ..\..\..\obj\jdmerge.obj ..\..\..\obj\jdphuff.obj \ ..\..\..\obj\jdpostct.obj ..\..\..\obj\jdsample.obj ..\..\..\obj\jdtrans.obj \ ..\..\..\obj\jerror.obj ..\..\..\obj\jfdctflt.obj ..\..\..\obj\jfdctfst.obj \ ..\..\..\obj\jfdctint.obj ..\..\..\obj\jidctflt.obj ..\..\..\obj\jidctfst.obj \ ..\..\..\obj\jidctint.obj ..\..\..\obj\jidctred.obj ..\..\..\obj\jmemmgr.obj \ ..\..\..\obj\jmemnobs.obj ..\..\..\obj\jquant1.obj ..\..\..\obj\jcapimin.obj \ ..\..\..\obj\jutils.obj ..\..\..\obj\jdapimin.obj RESFILES = libmng.res RESDEPEN = $(RESFILES) LIBFILES = ..\..\..\lcms\Projects\Bcc-5.5-static\lcmsstat.lib LIBRARIES = VCL35.lib SPARELIBS = VCL35.lib PACKAGES = vclx35.bpi VCL35.bpi vcldb35.bpi vcldbx35.bpi bcbsmp35.bpi dclocx35.bpi \ Qrpt35.bpi DEFFILE = # --------------------------------------------------------------------------- PATHCPP = .;..\..;..\..\..\zlib;..\..\..\jpgsrc6b PATHASM = .; PATHPAS = .; PATHRC = .; DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release # --------------------------------------------------------------------------- CFLAG1 = -WD -O2 -Hc -w- -d -k- -vi -w-par -c -tWD CFLAG2 = -D_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;XMNG_INCLUDE_MPNG_PROPOSAL;XMNG_INCLUDE_ANG_PROPOSAL \ -I"c:\program files\borland\cbuilder3\projects";..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;..\..\..\lcms\src;$(BCB)\include;$(BCB)\bin \ -H=$(BCB)\lib\vcl35.csm CFLAG3 = -Tkh30000 -ff -pr -wuse -wucp -wstv -wstu -wsig -wpin -wnod -wnak -wdef -wcln \ -wbbf -wasm -wamp -wamb PFLAGS = -D_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;XMNG_INCLUDE_MPNG_PROPOSAL;XMNG_INCLUDE_ANG_PROPOSAL \ -N2..\..\..\obj -N0..\..\..\obj \ -U"c:\program files\borland\cbuilder3\projects";..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;..\..\..\lcms\src;$(BCB)\lib;$(BCB)\bin;$(RELEASELIBPATH) \ -I"c:\program files\borland\cbuilder3\projects";..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;..\..\..\lcms\src;$(BCB)\include;$(BCB)\bin \ -H -W -$L- -$D- -v -JPHN -M RFLAGS = -D_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;XMNG_INCLUDE_MPNG_PROPOSAL;XMNG_INCLUDE_ANG_PROPOSAL \ -i"c:\program files\borland\cbuilder3\projects";..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;..\..\..\lcms\src;$(BCB)\include;$(BCB)\bin AFLAGS = /i"c:\program files\borland\cbuilder3\projects" /i..\..\..\libmng-devel \ /i..\..\..\zlib /i..\..\..\jpgsrc6b /i..\..\..\lcms\include /i..\..\..\lcms\src \ /i$(BCB)\include /i$(BCB)\bin /d_NO_VCL /dMNG_BUILD_DLL /dMNG_FULL_CMS \ /dMNG_STRICT_ANSI /dMNG_CHECK_BAD_ICCP /dZLIB_DLL /dZLIB_WINAPI \ /dMNG_OPTIMIZE_FOOTPRINT_COMPOSE /dMNG_OPTIMIZE_FOOTPRINT_DIV \ /dMNG_OPTIMIZE_FOOTPRINT_SWITCH /dXMNG_DECREMENT_LOOPS \ /dMNG_OPTIMIZE_FOOTPRINT_INIT /dXMNG_OPTIMIZE_FOOTPRINT_MAGN \ /dMNG_OPTIMIZE_OBJCLEANUP /dMNG_OPTIMIZE_CHUNKINITFREE \ /dMNG_OPTIMIZE_CHUNKASSIGN /dMNG_OPTIMIZE_CHUNKREADER \ /dXMNG_OPTIMIZE_DISPLAYCALLS /dXMNG_INCLUDE_MPNG_PROPOSAL \ /dXMNG_INCLUDE_ANG_PROPOSAL /mx /w2 /zd LFLAGS = -L"c:\program files\borland\cbuilder3\projects";..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;..\..\..\lcms\src;$(BCB)\lib;$(BCB)\bin;$(RELEASELIBPATH) \ -H:0x1000000 -Hc:0x10000 -B:0x60000000 -aa -Tpd -s -Gn -Gi -M -wdpl -d IFLAGS = # --------------------------------------------------------------------------- ALLOBJ = c0d32.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) import32.lib cw32mt.lib # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=1 AutoIncBuild=1 MajorVer=1 MinorVer=0 Release=10 Build=1440 Debug=0 PreRelease=0 Special=0 Private=0 DLL=1 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName=PNG/MNG Group FileDescription=libmng - THE MNG library FileVersion=1.0.10.1440 InternalName=libmng LegalCopyright=Copyright © 2000-2007 G. Juyn, 2007 G.Randers-Pherson LegalTrademarks= OriginalFilename=libmng.dll ProductName=libmng ProductVersion=1.0.10 Comments= [HistoryLists\hlIncludePath] Count=12 Item0=c:\program files\borland\cbuilder3\projects;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;..\..\..\lcms\src;$(BCB)\include;$(BCB)\bin Item1=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;..\..\..\lcms\src;$(BCB)\include;$(BCB)\bin Item2=c:\program files\borland\cbuilder3\projects;..\..\..\libmng;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;..\..\..\lcms\src;$(BCB)\include;$(BCB)\bin Item3=..\..\..\libmng;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;..\..\..\lcms\src;$(BCB)\include;$(BCB)\bin Item4=..\..\..\libmng;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;$(BCB)\include;$(BCB)\bin Item5=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;$(BCB)\include;$(BCB)\bin Item6=..\..\..\libmng;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;$(BCB)\include;$(BCB)\bin Item7=..\..\..\..\jpgsrc6b;..\..\..\..\lcms\include;..\..\..\..\lcms\source;..\..\..\..\zlib;..\..\..\..\libmng;$(BCB)\include;$(BCB)\bin Item8=..\..\..\..\lcms\include;..\..\..\..\lcms\source;..\..\..\..\zlib;..\..\..\..\libmng;$(BCB)\include;$(BCB)\bin Item9=..\..\..\..\zlib;..\..\..\..\libmng;$(BCB)\include;$(BCB)\bin Item10=..\..\libmng;$(BCB)\include;$(BCB)\bin Item11=..\..\libmng;$(BCB)\include [HistoryLists\hlLibraryPath] Count=12 Item0=c:\program files\borland\cbuilder3\projects;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;..\..\..\lcms\src;$(BCB)\lib;$(BCB)\bin Item1=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\include;..\..\..\lcms\src;$(BCB)\lib;$(BCB)\bin Item2=c:\program files\borland\cbuilder3\projects;..\..\..\lcms\src;..\..\..\libmng;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\lib;$(BCB)\bin Item3=..\..\..\lcms\src;..\..\..\libmng;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\lib;$(BCB)\bin Item4=..\..\..\libmng;..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\lib;$(BCB)\bin Item5=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\lib;$(BCB)\bin Item6=..\..\..\libmng;..\..\..\jpgsrc6b;..\..\..\zlib;$(BCB)\lib;$(BCB)\bin Item7=..\..\..\..\jpgsrc6b;..\..\..\..\lcms\source;..\..\..\..\zlib;..\..\..\..\libmng;$(BCB)\lib;$(BCB)\bin Item8=..\..\..\..\lcms\source;..\..\..\..\zlib;..\..\..\..\libmng;$(BCB)\lib;$(BCB)\bin Item9=..\..\..\..\zlib;..\..\..\..\libmng;$(BCB)\lib;$(BCB)\bin Item10=..\..\libmng;$(BCB)\lib;$(BCB)\bin Item11=..\..\libmng;$(BCB)\lib [HistoryLists\hlDebugSourcePath] Count=7 Item0=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\src Item1=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\source;..\..\..\lcms\src Item2=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\source Item3=..\..\..\jpgsrc6b;..\..\..\lcms\source;..\..\..\zlib;..\..\..\libmng Item4=..\..\..\..\jpgsrc6b;..\..\..\..\lcms\source;..\..\..\..\zlib;..\..\..\..\libmng Item5=..\..\..\..\libmng Item6=..\..\libmng [HistoryLists\hlConditionals] Count=30 Item0=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;XMNG_INCLUDE_MPNG_PROPOSAL;XMNG_INCLUDE_ANG_PROPOSAL Item1=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;MNG_INCLUDE_MPNG_PROPOSAL;MNG_INCLUDE_ANG_PROPOSAL Item2=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;XMNG_INCLUDE_MPNG_PROPOSAL;MNG_INCLUDE_ANG_PROPOSAL Item3=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;MNG_INCLUDE_MPNG_PROPOSAL;XMNG_INCLUDE_ANG_PROPOSAL Item4=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;MNG_INCLUDE_MPNG_PROPOSAL;MNG_INCLUDE_ANG6_PROPOSAL Item5=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;MNG_INCLUDE_MPNG_PROPOSAL Item6=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;XMNG_INCLUDE_MPNG_PROPOSAL Item7=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;XMNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;MNG_INCLUDE_MPNG_PROPOSAL Item8=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;MNG_SUPPORT_MPNG_PROPOSAL Item9=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS Item10=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;MNG_OPTIMIZE_DISPLAYCALLS Item11=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS Item12=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_DECREMENT_LOOPS;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_OPTIMIZE_FOOTPRINT_MAGN;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS Item13=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS Item14=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;XMNG_OPTIMIZE_DISPLAYCALLS;MNG_NO_OLD_VERSIONS Item15=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER;MNG_OPTIMIZE_DISPLAYCALLS Item16=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER Item17=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_OBJCLEANUP;XMNG_OPTIMIZE_CHUNKINITFREE;XMNG_OPTIMIZE_CHUNKASSIGN;XMNG_OPTIMIZE_CHUNKREADER Item18=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_CHUNKASSIGN;XMNG_OPTIMIZE_CHUNKREADER Item19=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKASSIGN;MNG_OPTIMIZE_CHUNKREADER Item20=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKASSIGN;XMNG_OPTIMIZE_CHUNKREADER Item21=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_OBJCLEANUP;MNG_OPTIMIZE_CHUNKASSIGN Item22=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_OPTIMIZE_CHUNKINITFREE;MNG_OPTIMIZE_OBJCLEANUP Item23=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_OPTIMIZE_CHUNKINITFREE Item24=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;XMNG_OPTIMIZE_CHUNKINITFREE Item25=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT Item26=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;XMNG_OPTIMIZE_FOOTPRINT_COMPOSE;XMNG_OPTIMIZE_FOOTPRINT_DIV;XMNG_OPTIMIZE_FOOTPRINT_SWITCH;XMNG_OPTIMIZE_FOOTPRINT_INIT Item27=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_SUPPORT_TRACE Item28=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;x_MNG_NO_16BIT_SUPPORT Item29=_NO_VCL;MNG_BUILD_DLL;MNG_FULL_CMS;MNG_STRICT_ANSI;MNG_CHECK_BAD_ICCP;ZLIB_DLL;ZLIB_WINAPI;MNG_OPTIMIZE_FOOTPRINT_COMPOSE;MNG_OPTIMIZE_FOOTPRINT_DIV;MNG_OPTIMIZE_FOOTPRINT_SWITCH;MNG_OPTIMIZE_FOOTPRINT_INIT;MNG_NO_16BIT_SUPPORT [HistoryLists\hlIntOutputDir] Count=2 Item0=..\..\..\obj Item1=..\..\..\..\obj [HistoryLists\hlHostApplication] Count=23 Item0=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\mngview.exe Item1=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\MNGJNGportal.exe Item2=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\gif2mng.exe Item3=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\mngview_push.exe Item4=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\mngtree.exe Item5=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\mngdump.exe Item6=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\lm_diag.exe Item7=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\eMNGma.exe Item8=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\bogus.exe Item9=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\TestNGImage.exe Item10=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\mngrepair.exe Item11=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\Test_lz.exe Item12=D:\Triple-T\Software\LossyPNG\Bin\Test_lz.exe Item13=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\SlowView.exe Item14=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\Bin\eMNGma.exe Item15=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\mngpromo.exe Item16=D:\Triple-T\Software\mnglib3t\libmng\bcb\win32dll\mngdump.exe Item17=D:\Triple-T\Software\mnglib3t\libmng\bcb\win32dll\mngview.exe Item18=D:\Triple-T\Software\mnglib3t\libmng\bcb\win32dll\bogus.exe Item19=D:\Triple-T\Software\mnglib3t\libmng\bcb\win32dll\mngtree.exe Item20=D:\Triple-T\Software\mnglib3t\libmng\samples\bcb\win32dll\mngview.exe Item21=D:\Triple-T\Software\mnglib3t\libmng\samples\bcb\win32dll\mngdump.exe Item22=D:\Triple-T\Software\mnglib3t\libmng\samples\Delphi3\mngdump\mngdump.exe [HistoryLists\hlRunParameters] Count=3 Item0=sample.mng Item1=roilion02.mng roilion02-fixed.mng Item2=usflag-lc-d63.mng [Debugging] DebugSourceDirs=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms\src [Parameters] RunParams= HostApplication=D:\Triple-T\Software\mnglib3t\libmng-devel\bcb\win32dll\mngview.exe !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = ilink32 !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< # --------------------------------------------------------------------------- libmng-2.0.2/bcb/win32dll/libmng.dll0000644000000000000000000063500012005307152015611 0ustar rootrootMZPÿÿ¸@º´ Í!¸LÍ!This program must be run under Win32 $7PELÆ’FàŽ£ @00;@@`€DHP/°G”@°”w UPX00€àUPX1@þ@à.rsrc@@8@À1.25UPX! ­éŸ’™‚k(0û–&ñùþÛÿ¡ôp`Áà£ø‹D$ÿ…Zqƒ|Ûüour€=t$èV¨º%þþ¯ý€tº!R-4X3Àé)æþÿýßÓsWQ+¿øg`¹œ¼ ;Ïv+Ï¿ûvûüóªY_?rÄR‹T’4ÙCðíZjžàYhÄ£üp™{ðí÷ t tfÀÆU$ëþÚ‚ƒ=äkDPjPÿýläà&yUoƒÄƒL÷oû­uБ¼ê8È é‚¿íÁŸT_ ñäáðÃ̹¬Ð~ö÷ Ét@ÁFs ¸â"eìÏ7Qj@*Æ Àu5WVPwì·{ý5b8W_^_Ó\Ã.yßü£6ƒøŸžÃÇr¦½ßµu¯tPdÌ=ò¼öZƒGÃÇòptý¾…Àádg‹,‹‚ÃòßÙìp'PGÃU‹ì¸ÛýÃ]SVW‹ðQˆ$‹†Ì%„‹¿ÿûÿX‹‹ú‹Ö’ÿ׋Ã#uî3Ò3ɉ–>‰ŽÐ†’÷n €<$óXcÔÔ†’gFØWÜÜðpaFàZ{[MûÛ_PS‹ØV‹ƒ@q:‹°`„ö=íð¿dÒtVRÿ“ÈKhp/˶­4P+¬‹@¡ž‹ƒŸ³ š°  ŒPy‚ÃoƃÁ.!“Äç½ß¹‹È#‰ƒÌÉEÜFÞ9y ÞßYàä½Ë¾Iè“ìe#3ðg—<óƒôÇøüm#ßç!À  NNNn óvNNÝ™äyì(Ï DH/GŽL_P\fǃ9™}†‚ž  ÏÛ99!"·$(Èçí¼,,Å04¼3òy8<@BÛa‡DéFHáqÍmJß\+ÉÁkÞzdÿhrÁ#rlt2ÉÉ;x‚|€„¹àLˆKŒ“gFŽ£”˜uœòÎ H ¢¤ "‡¦¨ ä󨑬°É´¸|û<¼À_ÄÈø"#‡ÌÐ/ÔÓL=Øì“ÜÚ@täàRùà¥6È‚lÜ™@äæ^6Z4òXY³ðŒœw ñWôø½#“ü D eŸ‡|   òyL™  wn#O$ % &Yg’‘(,0x42Òn 8R<@8[e/ODÕå”Y»³ç-Æ€˜Uˆœ, ?Àš¤ÃQþø‰UüÞöþj‹ñÿ—¨¨Ø…ÛujXºÇ/ø€AÔL`ëp€} ñ·ÿ¯õ‹Mü‰KëEVk‰Cƒ{˜yï{Ïu$yt ™S+¬‹ð¾.*«áR‹{Qÿ/Š`ß ‰sŠE ˆC }‹ü€ßûS‰S!Á‰Y]Â`„?ç¸Ôz9‡°Ã“viY –¸ÿƒ°+¼ÈÑû©3ÿ3ö‰Eü‹ÿ¿;áÝtß¿: u„ÉtŠHÿ÷ÿ:Ju ƒÀƒÂ#uä•ÂÀ Â}ßÿÿþ}{ë~K‰]üë ‹óÁæƆë ðÿ¾‹#ß¹;}ü~§‹7øeŠVˆSŠFˆ'ÏA{}ÿŠNˆ ë Æ©2Æ'†,¾OÆ2™ï Uÿ‹u hTÖã÷ÿ˜ cÇ SRdfXà5M Ã4Œ´ûñ!8CP RT†X|wpCVW#{^y÷M\iQ`dh ¿ü»¼Klð? pš™™™t™™@ùúË/x,eâ|XÝ?Æ3u·»ž  ¼ÈŽÍV !!Œƒˆ#Œ<ûÚ',‰³¼Jµp{q°²¡:ù´¸+¼M ƒ ò/ÀÄ̃ 2ÈÐÔØÜ 2È àäè2È ƒìðôä ƒ øü9yò vpAäŠè l:BÚjŠR`×&˜±¨Ÿüâ<­0Í#“Oå3…ËÑ,,´™À ÜÖ„ˆdÛAŒ/”A˜œ Md¤¨¬øÃ^®6ÞHù@r#ÍH󄈌•÷8p:— àÇ)š÷â$šœ J d¯v;9À¤ t¨©¯¬[ÑmS lñãt%®Žæ3ED8‹ *|Ât ¸^šÅ÷³¯!Õ` æÄ€»˜œÏåÈÙt-„˜á˜hæ¿Óyju0QÀ‹ƒp8`oÄ‹“l2dH&y?xtx’ådˆ„2lö·ëÑRÓ»¨ñð#“¼Érh Ç¼¸ù#.$2äad²9äˆ0…~] S K ·÷ïC¼K; Úœ,$(ŸC,F0r²¼ï<K@DH"çÀLñ”*›‘«Oœ&=ksa¤G @‡|âƒ$(ÉÉ3', -.ÉÉÉÉ/012ÉÉÉÉ3456ÉÉÉÉ789:ÉÉÉÉ;<=>ÉÉÉÉ?@AB&ÆÉÉCDEyFä}FFGLP2TÉÉÉíU VWXÉÉÉÉ`abcÉÉÉÉdefg3ÎÉÉhijYÏwÈ3lptƒxÒÂÉË6“|s€<—Ht #apœª°±´u6ȸ¼‹À=Ä6È ÃÈÌÔmAÐØòBÔ¸íÝû–äÈ ƒ èìð9¹ 2ôø{ùüΓ'ºq7dAÞ­ dA^/$04A8<@AdDHL#¯y‘PÝTÿ=XÇò² ̃\¿`Q#d 2È •hlpdaƒt/x|@€ƒ„699ù=/ÃA˜œ óÉÁyw¤‚ ¥G¨A6¬°´ 2Ȱ¸/¼ÀÄcÐ ƒÈÌÕä•Ð_ÔØÜòä°Aà/ìðA9yôøüròäÉ È ƒ ¢Ð9\™+ä‡$(™2È >Q( /™Á ƒ¼×lptRŠ x™aƒ òsŒ”£7 B‘˜™™-´B“¬•^ ­ÐÈ•‘.ÀdAÄÈÌ Ý*4•.™B‘AÞ=Üà• rˆYÀÉ䎋 —B+taY<ƒ¼ÈÉ /\(È XÒ¡ o…X,UÈRrXÒF]¥ÎÉ{‹ÃŸ˜™qx¡‡]ÂÕfÏ5âoM‹mëÂñN‹ØPÇŒ¼F´ÿš¡ ‹C\TˆP`¯Ð'–tz‹‹‚>† ¸(RÿÐä.qÚí^ãç…öQ>~j|BɃ¾ÆÛÞuk#Í…´ÆI«ä¢¬E´1J®’¸¼·#Ü;Wu îtW !—œ<à ±ÁfWɰ‚õEž §8ënØéƒ»hÿû ÝtVÿ“„Àu¾…P ÄãŸ_„‹ð˜ØsbQ?ð(޼«ë=€¾lçB¢n˜ü•4=8ã¤{Èôeê[@ŠEPCR«l¤‘%7»‹¨½ñ[ý%‹Ff7V($³~jˆ²»•9 |‚ÝÆÃ-€¸iA·! #ä‰P(XéÞÆ€F¤_@¦¤ ¤èQJŸ°<áÆ‘™è€uÙ(,…Z©Søw£$BtV/Ñ\­+#+lÂP„â#ÍÉ A‹ÛÍä«>З§ƒ¸EØuí¼Ä”)D¬Aj%#´,WÈ{;¸RÀ˜Æp…4Ýo˜AA†KœàŠ ¨Ü]'¿æéÛ;rƒ»ó–\ÃIù`µ íE6c€¾®)ÆC??à’Q°¢d’ˆ† Ɔ°ï4`ŃÇo”¼JD¼r•\%ìø’WÉUür „S.WBàjò ÀdÑZ)wXªißÃ@6…\Q‹„™ÿ’C†ëš°1Vu‘¼ë7 ©gå-“' ÉÛ ‡-È«¢Ûo¯'y©ä'Dì’«ä*øüê%¯Ç­’—Dh PG’G'ÿé ‹C:Ìø-‘L œ$O¸7&4á ð–À…ބɉ ðeu h6{Ë„Äñ +®4ò…Ù<‹ö wK?\XÃ+¤üë WÓU…‚)_÷.±ëOk*rh+‚ÓOáÁφ*-EÍq™w’!9HXHF^8š–.<ıén¬Š³Ú«*L± ÀU$Љ#•¶TØžV*0sá®`':o"å^CÁE3ë>%0ƒ 3hÁbøíëI[Áˆ£Ï Ç#"‹ØƒnÉ¡º{ÅÝqA ÈC¥EÁ¶š-S§l!ªõ};³vi×"à‡ %‹C `nŒö;ÆsCÊK8l^1—Äs í„èuÅ&‰³ØK‡MC^Ó$£äPƒR$4—âJÉ$4GVÈ%G #Ô2!ƒ r!Cȧ:ÉðG%H+G '%HÈ%WÉ%HØ2!ƒ $r!CÌÂWÉôƒÄì¢}Àð†.ÆEÿ7) ‹ðƒ| ¹~ÆC€¾ß@Ž•ÆD‚7·%‹žî(¯ŠÿøOO:E …® ŠS!ƒúÓþ À‡,ÿ$•6`)2 \6MeÝi78ÌŸý¯Š‚¦;{$Œo`(f—÷¾5;K,)ZEC0o|šy/Nef‹S4ßû„2NP\€z0õ%H\½ìøŠQ1„Òú7%;ywûû­¾W‹J,;ËŽ÷@ÁÿO­Št(÷mÇÈ‹Á€Kyž·Öïºé˜MÉ­š$ïŽÍÄ4¶ÿ§†ÿwƒ÷ß}ÑŒmŠ:S6Ÿ7ü‚J‹Ï+K$‰Mø@+C,™‚Áà‰Eô1<9༒ý¼ø\þQ(;UøîøäY–cƒÛC,ôÌV,®ôÂ0F.¶NÃmôEøƒ”<8k×M+SoUð‚åÀ€,ìktkîrpßcywb§[RÁG°yuSSð~H÷,øð|BB}=;ì~2+SÁ –ì,+}$#ìôà4,ð“u€}\‘þu‹[ô U/ýÿ‘6·ÿJ;žÒtBs‡Ïˆ{u9¯0‰¾à”] <°ÓБ‰Ž0ÿSŸ8ûWj€{ u‰sëkŽ:ê¡p8‹åhûRG”ÇHŠˆ˜MŒWeˆ ň2N.ƒ, œ8YY  ¤€5ЩwÌÍ— {å:Z›²OÈÈE¬°ÈÈ´¸ÈȼÀÈÈÄÌÈÈÐÔÈÈØÜÈÈàäÈÈèìÈÈðôÈÈøü¾)ä/ë2ÅF®%¨?¬%CÉP°¼P2” ´¸ %CÉÀÄÌÉP2”ÐÔ” %CØÜCÉP2àäè2” %ìð%CÉPôø49” üÑpDϺɈw`¯U3 ÿ‰0’‹ÊùÑ5„†ïÿþ¿Xùtƒérztx tsItpëYù~ïítid@"ta#^2YëByölù»tM6`FtEBMVt:Yþþ~St2ëÀdt(HPjt y#ð€vC*rðë4?LÁÕ9y] tgïŸ+&t$ë µ0Ì+&L¦8ç´Ë÷ÚfäfSPMHRpá5ØTÆ­|0T{™bÿŠˆPVÇÙªß N€oO¾¦’)3,ä–âç‹‚ pT/ƒŸCnHµ„OWá¶CWS;‹Ø÷ eE €À‹ð‰s+zP ö´¹ÀºáÅn(s\¼··%Br>a½Ð‚S w)·8²Ü d†/`#d``®ä```  BÏ·¼‘h l_22ÔWpt`_22x|ƒÄø]ÿÿ†™oUø‰MüßmøÛ-`E;þ`ÞÉÝXhùYY#„GG¬ÅƒÄî§î?—¬p2È øx®ªÏŒ´©dŸTû€·‰ˆa ×L%¶h’Ÿ€ˆ°Ç‹@÷? %CÉ ÉP2”” %C ÉP2$(ç5éÿ‹P ƒúuŠ€T¬ÈlÕa³wU\„`V6ûÈbƒx sWYä¨%ÏXc*y†@dÐ<šà_'õT||š¹ôœî…@# G–‘÷7 .%‹ô>]⸠‘º´”þö%ECDÀ°ë°O¦­’)eWf”JBg¡6”|Š@,4?¸xÑ8‡ f—P·À% ÕßË·ÔÑ‚@TrE°Ó?V|—Š€€” %o?‚Ð.º1ƒW„?þ#¤`~WÝ$L` ìüGÝ@hW22ÈPp|Ä• xS¥€ì?HHÝChØ °fBn/|;äØ(^PÃGå d™pàx8bXÉM§Œ;ªjç§ŠÉEˆ¦0LhJOÄQRG4¯>Ejb ãˆLé&‡´DO fª\ˆçï ¶áJ/ßD©/   ‹Ú9ô§ßS$RV׋K KŒÀïÆSÆwÕVÈ!rR ËMŸ‹v‘|÷?J†’ÄÈÌ’¡d(ÐÔE‡Ø÷”7PjCh€? %Cɰ±Àä"9”  %É¡ÝÞÒ­pÿ?á!ô*‹×3ö·š$ŸþŸ‚;)r ‹VPSWÿŸF‹ß@×[Àæ4Åxˆ¯Q@äRoIy¥Ò :d«R'B9*ÎÂy¿žߟ"Û`Mü‹Ö%ÿVÞ“¸¢wÎg „kDFàëÁ7ÿDNEIu‹ƒ=RDHI«Ç6¿ Ju_KM¨Wi#(YŒ'Èî¡^‹Ðe'šcÔ'G‹Âºé:®—k‡®H(Í,ó÷.!GlˆLÅ÷ *„8€OùP<\Qèä)@8·räù0™NOLCN!§%*œ,rÁä a/‘(”œTaæ48#ªSuP÷AP7ä&$,kxÕÂä ÏMƒ¢eN2ë#8˜%M;“r)÷ÿg’h‹ÑÁâÒP8;ªÔp×NÜMMP8˳´ˆ ïyïñ>( ,/³¼²<04ø<Ë8<Á‰|˜1ªŸwCSIDàÄ#‘ø'rˆ&^¡KCÆ„Ç:G¯lB:K«jŠU“2ßOÕ9[!MARFL6ŽT»'…ùÈUB5ˆá6ŠH7ˆYÞ5988Šˆ,Ϥ<@HDL<ÏòHPL›TP $¸X‰LRäù0çEVOM.¨D¡ËÇWÈAŽbPI>$JŒ`ßgÃŽ’ ÿwASÇÂ1 Ïx®o ,]'Œ íGR§‹ðÓÎÜ>W Mé;X,r7?ÀÏ€LÁãÛXûuG«ÃÍÑ󊈋X‰ úkׯñZíç‰QAùé $(ed,¦(#@~ÔïKEES!¢@oIPXe&Š„“8ôgIRPf¿²CDn<ܯgADZ•§T!±.§yB„iã0Š*9y4—70¶ ùÔJ§a ‰A`É7®wDŸ<3R»»|ªS'MORPй„*§&9¨ÿ6PÇW;"@æ­}‹ Y;ö pˆÛ=]/ÂâÌð[ÅŠ¬L 8š,Ã(%_/]âMˆ. P- ZV£‡œúQKYBDqê„î.È;EROÇ °‰äbF Y!5G(Áá.ãÁ‹Á”˜äã›âç!߈WY£ENGAg#€g¯Â3pÆP,éÒ¤­ãë2¯f(4¥¶•Ü`Ð@:¬ç0 J~TNveõ@ÃìZ®£wí¸:&Ë[ŠÍdfd‰ñMŽáä  “‰ôcˆóþÈSo?¹,&`;fçˆáÃÿ¥/F(9‹€(•8[Ÿ²u»•›Qÿ»U…Ét 9x9œ­Ì…úÖùpA&ÔõÝÐ%ô\‹#°3 #ðIºšä•À?ä[„Àõ0Ûý—ëiUÔ¸RNÚ´/{ÜL[úÐ\ùKM¯J(–ŠFÄœüò›ßþ“ˆA04ŠMˆJ1ŠUˆP2l™Ý2 39$4¯õv5‹å*hÁT·ÕK²UÁ] ¿H%yÅÀ§Tøë}º¢ÿf‚àÎVRÿ8À¢àÿ…ö”Á‰r,ƒá҈ˀ žRÞƒÁ0¤çQPANÄÚ ‡ §ÌÔá^+ ä^+ŠfEº»ç¸A–@SìX@0˜ íbç¶HñýíƒâˆQú‰p,t>üX¢ø x0…ÿ/ˆ¯Ã V8@> A‹A0P_ŽEcC×_ëPr_lºÜ¹jZYER„L0)'}É­ûÏ< ø`±uüí`^—J€`^EP¸º í` 8Á^XËÎÁ«æêû…›üŠßˆ§¾nª—)‹Û*/ ,Â[,/f‰\žË÷pE$2M(iÞ¹Š4L,6K ¼0I8/y÷m0ÝR'u-E4P‰#ÜÀÂ~ù:ÎÅdî§0g’ 'a0a0ê‡cºgLpÜ™W‰#ÜlðÏ<åÁ$s@€W Á<Ó° _÷ÀpŠ eù÷„—JeùEº0˜8÷eù!ÎÃX÷¥Mnøp‰r(®y0ÒFPòÁTaZBøÓy, 'Íe,ä†T|AWcÙ4 ’“‹4… וygngn9²9gnTzgnrØì nZŒ(QªP@R™?ו,M,AQHOšå #,0HR¨U,wJÀñj¤Gj¤&ˆ…—Eºxµ`™£qRµ1+9SM*—ŽÑ>Ùn8@pÕ55c4GvUƒ­Š¿H_ªII¼JºvKˆpgRÅaçK7hA¦É,./0ƒ|ø $ÀJ¹M489Äp•·9xo•xJºàP¤™x †;X?n ¡ 'î Çœä,0/t«”ÀœÄÖRý*…8Oð †KòSy€¸[PØOµA I¦á¸KGcbóKG‹(:úO¿$³Kël;/røÅ!l3ÛR‹B8¦¢Ž˜óÂqrüX9`H[[>î ‰H=$ /õëPË(0øH;„åÍõ8 É8^uz$OñVÉz$Jº©&3`‰u¡ÔÇRIW1‰øtAÁæñ,u%’,¯ÉN{*%{*5ñVJºÞ%שhR¯È—ÈJçk µ®³%0ºŽ·27á•I}o•€}Jºàrò‡}:A­;Xw|T EOa‰q,A³45•,³65(7³F–vªÄ044@8\`YDR%gADÂ-R%JN5k÷‰&t–H Jf]R¥gy!’[.(5f-ï–,6¥207uäD/,׊!'q«HãMt!·":ç[ܹjp =rR“T®QëBÀp‹=7‹=ÉÈ‹=ºAA^0#T—Œä`8J|'5ü×!QºPES!$î\*R!Á œ‘·äUN Í ëe«J"å`ÎLkR5êP(9MFÀ»¯É«äDèèd˜ Slº`˜…K@ÅRߪ°B'™E 1?ަOVSt±?GN ºÈPIR?¼jÄ+{¿{„ €2Æ%`¿R•'š€@ÇG’K^$GǼëbÁLPúÈ/?;J,%‰ÂA‡ȸ±zyÞH¾Æ@ò¨ã¢·‘LJJE¿’*yÕ€’ˆ¡„ÚJºÀÏU` Rç†דE/½Ur“EJº[UH HïSu‡4XÝià™¤Y‹‰,0D®ÿ4©Œ—‡r†S”HW”Hà ½UJº:'pgª‡aRo@~ÈC-ÁæCa5Œ¤r¨Ÿ•P¡s™€Á£RœÈrA™/(àMü‹ÁÁàý™‰è pÏÉ(^–)m–)"7ôVJº°ÅR¸s–)X—d€k/¤MpÏ* ¯,6ùÆ@²¢0.á´g 2:$ß’ÿA AŠU0ˆQ:à 0O—,YÞ*9—,Jº[@$ÇR«¢ÇN!@Î0˜i€¼J˜i˜ibAÀÏ! ê—O;P(!Ixðÿ}Áâ‹X,ÚŠE㈛±JS@KHCÞð$? À$#_Þ{8©'K,‰{ù ?»OQƒ{’å 40Æ«n‡™|Á…’W™|Ž6Àž£mz@[‡p‡\ ‚xèp(|·àä*™¸rÕNI (qY4Ï_3€ƒÓAª¥£+ß vä¨q€$@” ¿"8‰H4¬ÚD¡µƒÇS÷@.@&5DBo@ÞWÄßO€x%=Xu j†‰ Ÿè¹Ã¢½¯Où‹ÚmSxno[øì#‰8׉XH•5ôã£G_ ‹J¡RÿÙ÷›‰l¸—øˆMþˆUÿÁáÛÿß3ÿ¯EøP¹\®`º ½šàõ÷Ë&úá]øÇC ÖÆC$Óòôj C%Áþ&éky‹4(6C,#0YÞò¤K1G2#3i­½e 4s5z67Š8ß³¥9g:©jƒù‡öƒ·‰ÆŠ‰í«ÿ$ü {›vƒõi¬%WÓ4MC(<€}v¿›ab׿+A'ääý 4¿4-&gØík'ƒOƳ5‰»ª÷mÉ0ï߃”ø¯} -˜–Âõo@W­$ÓÂÇ­± s*ŠÃnŠp’æïJižOŠ–Dïóï=ŠŽEK>ІFC?5G;ˆ,#@H¾X<ó~Ü·´èT)E¾Ÿ`‹–¸“XL޼‹\䙑gYÀ`GÄdddddÈhÌddddlÐpÔ™ÛltÑFûCØç0;)G‚ääÁlZ¾Ü9|r:™€€?‹VløðtI“ŒRPIà¼0iëWi|¤Ùæ3àQ‹·IhŽGH*f‹äf‘#Ÿ9ˆŽæ‹Š’ðàȆ背ÄUFU€¸O¼Y†W§§SáV!tÿ¶©KHéFðº”Ñàlo‚Lò7˜œ§×MBŒÿQâV™)ø=Í?GG}]Ÿ U‚³ñYWSÝŠ«Á…ðM%0ɘ½?tc‹‹Q;Òp‡âÝA‹rÖœB1ò×|`# ((Ù'©+ù$€CF ÞýÇ ‘j`ÂZx¡—¯VxL<±wï:M ܽK„¿KXës'žt÷kå‹F5 ë#ŠçÈÅDWfÚÓêÛí”{\‹S1:‹¦HD\[ ˆ‰¬#Ì^»F‰B (S–¡×'„ŠƒžeøB3c;w#Ãñrf;uóÃ7ðù;A4úŽu á~ðÞƒ— #€~1u E‘7 5αdîqе£¯ðR¹™°-.¾º°IO–Í7ð×EúCU$=ð}ˈSN K$%‡3r±üÏ(€}—å}yë ‹N(M!KF,E'C.¿¸+V(7ÛN,‰KF0Ëò>k0#448Ë8å Q6FF?‡›€ñ´MkGr…µ$iQ0êØ4Hµ Çž–ÀÅ[OyÚ#Ò/@@7ÇžI.ƒ ži/A¯àƒG ¶MôÓô÷m 9ð½EðSu “cÂtS Þrt#ä&qðj{ð¢À/Qkd½›¨Wq1°˜ë¼ÿí7‰ƒÀƒÂ˜ƒáü;ÑrìëÆ9@øÒœ;ÂrïÖJΆL}…è Þ1‰S€{9¤)¼bœ79::Óüˆå]·" X€0ñêâŠW4–O)G<p»zœW@ D,ÆGÿGFFžiG HJL#žFFNP°O–·‹Âš3™TX Nl.å;< ’‡#Ä"Õ€¶à1àžéÄí{Je–“yžgBŽ‹†ƒçyžç–“Ž‹†žçyžƒ–“Ž‹†Kž yƒ–“’O[*µvL[ðË¿ƒøvBƒèOF÷é`ë3V¼Ûg·NÐJ:hv ù Z;yĵÂÏŒÜ6 iéXÉxV‘jÊ3/¶|`|D …ÅYÁ¦iš)3=GQÅ¡í!y¤˜ ™ š&ÁaÈ$R¡µ“ŸÍúB•nņ“䛦 ­ºÅ¡T©RíÁtdª3ZQ›8½Ø¢ ðúä[ÓÆÜ´“´‡Hɽ!yÈ\¿ À€Âù–<äÔÃ8ǰa¦iš¦©yƒ—ßyç“¡8˜Ð¸°8d(ŸçÒÈlÕ B†`j†Gøž»Q‹D¡m”,'v ¿½{{1€‹”¬ v4tff‹žöƒ€GÿS(R¼ öIú6ÇO‡WFÂÙÞÿyDŠT×tfįy­`ÿ‘ˆ4B@ž“N=¯í÷* çùD³–,–€8‰†…ÿB‹ÐJ;fw—ziácõEËkÿ[³Í ­ƒ{,uÄwÃÛ±œ·GN(ë4Lu ÿÔwv»wttσé;…ˆ´{S 7VPH½ *(Ö$m?$œàÙ‚F§(Phmò^ 8$4‰’‘a#H=î‘4 ýW9K(Î(äáŠýROƒáÿŒüþA3ÍÇÿÿû”6 ,Ñ‚ûÃ;³‚ºý5˜qÞMäÛ’ÉŒVä4Zf\fƒêÃ:P"3ÁŽqg†à2ÑE)¼VŸ#t'¡Æ±îh*艫 ´íïR ¡e îN‘ÄíÝA{„4Ó ìÈìô·wvÈü •ƒ<E;o Ýã,rÃO˜!b¥‰ñ1;\e`! ‡ñ 5à¿‹ˆØlsýÿ|Ét‰J ‰Që Ô,—ˆ»òBOÄ,#ïJÈÌ€¸Ár··ìW׸ kƒ¸ÆoQ8˜½ta0cy,o9x‰c#ŠPE§Æ#R)P¶Q?¾}¢P‹$Ç=ÏÝý³BÈA0±@¾Àýº | öÏC 2…ÐNljð—V¥ ÆýØ3ö‹ï;‚ê3`@»¯&qnJÛï‹Êq@þhÚ×#~äÃŽ´¼÷Ÿ#g $ ¿×¥š×""z˜ ©‚-Ë1¼ù¹bÂèãØàð1‰dŠ™á x¦ÁƒØ_!x—ÉÇ0Vœ4‡œIÞQG|”€&·aøE\PWY]ÌS ÿ‹ $ˆQ$ƒ¿SV‹‡tžgÀp"‡¿aÁ`E“ïC[ C•Ã*!òÆÎœÏ½||JFiQ€€@N&¹|€€ÍÃaÁ†€yó‡^‹Ã96x$·QxÜ0Š ã»²Iž†cÍwÆ–IF†Ž–dB†ŽVsÈò°ÁW¾ŽU22ÈQ†¾¼„É––½|²ŒS|î’#9‚¾ÃL•D 9»–‘Sˆæ û™´=³‰ƒcë\2ÆÕŒZŸÞK|ªÑLhtÓsj€ ý[P¹,«]$’§Zqó†šà/‹4F‹Öe‹‹ °·¬øÃ°¤N ›* ÿâSƒÆ$Ÿ¦ÄÆ€Îî¯ÀBfJ ƒÂ$‰ˆfURr*¸öpPYÃÔ|$°´ !ƒC"%Ÿç°´¾à¯ ›WÉú€¾7h||HóB(Æ‹Wø¼Æ‹ÓŠO(ˆK ‹G«$+J±€z«p‰ƒD™‚mƒ®ë!$ÉÏ€í"÷ ÷ò€¿Cž ùah$ÕDÇŸ‘CžDÇNF‹V–W>…0L4#80Y–eY<4@8De<…eƒæF"“èÏõ×íHf)ˆGšvb"æR$fÓ'ÍEèÖø¿òó¨>섘ÙÙèØr„LH@{Šn>Ɉn<4?íXN>—88E1GÒIšN@8>ŽÑ8®‡<#F'Ž›¥™48 ÿ+øiu _:Õ€¸ÜÞS’ƒz$ QÜ4[ØpüØùQœha1?h”Ùqx"‹t=¸ÅS3Šs)G>‘ðÉYZƒ 1†ÿÊÎ&ø ÞM5ræQ×Òu /¼ £R ¤»;oæÝÿuðŠY :Z uè)W¥…È€«´™n‰’îÐãšù^sðû;ïèÄ2ú)z<:r Ç&y7¦@ÔØŒËÃAë1?<;cŠåÁâO#A7}‘7‰tqJ9 爳t$AÎeÜb-¨Âáp'5/ÔÏÇï¦lÛ M™ÉÃ-0NŠˆÞçßOŠ“V#Š‹ N$5!ÂYF%"&m$y£{´¢Uƒ(y5,‘ed0044 ò¾§8»8V<5<ƒ0¥p’±Á#Ëì§Š¿ˆˆ#$2²Œ, %!&Áƒ@eö@(50@0yòä048L8ùcÃøÃ02ÚWh€Ü$ I.TÇ|ǽë´ëK6—Ñ‘S:¼iŠŠK(ŠS@Ýv¿=/*V:QŠCRG Z[?&86 ŸäM+ذ¹&$QÒQ(*GÁl;²R KÃ_kdB&ähPÝ4{¥)h†("2* /ÊÁ,ˆZ-·C.Ã&Y–ey#/'0(1=Ák)š£,Po0iÞ‚÷#,PC-v.Q/0Ÿ «1Î4¬S8Rš(Œ,hÊ*¢¤Š%›¦i&'()QtÈwÐ0º cR"ÀªøP·ihÞ‡¼£·L@Bä(òDŸF#G'm&Ã7 ™_Yh|à8Ó‹]s0k©i0Ë<4ö04R°d¤R8<^è i Vn04„Xަè?Já÷— MW-?¢¤!#ËM" $x»ã€¸à§pë$ kF†éF1¢R† (²K×ò¸B>Ch”á&~5ÏßF‹Ù‰S0ãP—NÇ÷àS§ª×+hØ^š‹í kpëÔ§9ÃkG5&/骔?wŽäPèh¨âqxâZ¿q@‰ž>o(‰k~Ôx‰ /u³ÝmÒ„ÛtÃM*øÞ‰n@¦tF|D‚ @ó‹—äH¶ w'ÜágÞjW; ³kFšçÀu.†Ç†-ŒÄ-9.¢´ZÿŠÿQ‰$¾5$Û¹¿–ð§:þ3ö%‹Õ/ïþÁ¦—Â~Y“}yÿëßQ5ñ³4¶Æ>ë ] üOMÑù;û}˾إJ…‘ø'j(VT…tÿ¥Æ 30µ ½¾‰Ôu‹BILç·C*7ùŠB0ˆƒTF–ÙáJ1ˆ“#2V3ÿìü[WR4ˆ“XS<t'<tòbêÿ#<t<t<õ eø„K‡ƒUqd¦` ÝÏ‘ €»u Jk‹öÔv³ª¢y!ÓcsVAä?d W—ä&8Xø‰‘A0IƒzÁB\:“V=Át5¹€xO&W ¹)#,ÏE™…°±,Ç#M6NÓ‹S W)W•Á+z¾!# Š“ˆêe#íõÙãêíE ‹K¡ŒDãÛÆ« Ÿ;"v¸…ÌÑí×>ƒ»Ì* RzQv"D0 I®ãÃuJõùC0L”ˆ¯B5´IDñׇÐõ&Õ8±&–¿õÁ¹O÷ñYwfØgv3_.{ÏM½$[Q]ujügÈ`­QWƒÃ0S}(Ò‰yÖ¹P6=5!/¼ÀpECë^(Žr.S µ‰Š¦ãQõ  ˜p¹‰z(™¼ÓƒB6M  ;œ)‚ 5ÕjÀ *GªÎ!ÇL\g Q9èK-‹ƒø÷#p\ÆF;{B,ƒÂ0˜§½ƒÆHûº„Â3àVeÀMm{x%Èݘ“…NHQ|æä`C’[°étjàj‡Ÿ 7¼;kv ¾Ãx2 ‰†rPRÆTV§À/ëHi$ò9+5#¿‚Á‹@):Ãñ¤¥dÀ@¿1`ä%”+eòÞ ÂÃK0$· ¯K“§­¸«/ueäd’.&É€´U=\5†9.óëfoäääâëViŠ‹‚‘¯äƒë*óE8€|bB,Pë$œMÑ!A€È!‡¨017ð¯ý¾J(CÉ÷Ùˆˆl0±0{3#SÇÓE8ˆaRêÝ%ý,‹A\‰†Æ@=Ï‚±0˜ƒ –èdÁÄ(`\_ È8Erx0X%YM>evòXBX\4YF–‘`8dm$\µ‰KDÛ†7·â4¯@PEQ@ää?HjÀ!ÅhM_–ã:;ZûÛ÷Ûˆ‰mà˜H×Y)Œß¾tUÆAA_CÓ¾k¡;t ܇©^pïWfLf‰‘†(B.wšf.ˆ0ŠKŠCš2ŒïQÿ…orÞ¶˜ƒø‡;AÅòþþ‚Å6o[ÿÿ"ÿþSë\ ë9ŠB*ˆ„y".ð.Ž!O.M“I&02¨ÇÐv ˆ k FK­GBV……Ž_7Au­k ÷ÿç½a@.,ðP©•úë4u‹Æ¹=j’æv(u' t™ Q·jƒãÖ>±ëyÞÔ/]%7GÇ8Æo ¦ƒåw8‹êß´‡ÛvoùðVŠKykâÁ‘ C³ùoä=F U [†-! ² ² Ä÷à·COÝw‘X%.´U 2€|¦ÖäÚ÷ÆpDŒ ‰8^xÒQø5Ñèý[JäcyU’G,ƒ{,úý)ås,‹[iÛvûU>ñŒjK)éA€àwëUVØ$Æ™o>E(‡2É*,.0·È!2˜Í|ÃïC# Éð§¯86ã1s{ýZ§X8Sò4l²ðâ5ŠNK6C7k±Á‰‘CÞ156ÚÓp™%W+×öÂõ;¿aÐ; tÿ7fÆìcÍ õW¸s ³%5<ôÞ; >IFL@7CD,ƒ,ÃH L ‚eyƒPs7l[»8xÁêůT!¥è€ø[‹KT¥Qñ"•„Cñ{ºñø•+ýC‹CT8—ÚvAálá4DÿM/wèÍkéµtMoK)?¦iÚ/ `U39?æöošEKë"ÆC)ë ë(Îmäë ë¶ŽUé {¦#ÙÌÎ@ÏHäÿGÑuhª/ ŠÁFŽ‘ÌB'Ñçx¤ƒDƒ¤©0ˆÅ„€ëQ:Èÿÿƒqà”‚ÏМù„â§p‡.=ÃÐ3¨, v#•˜Kõ/zÂüV@u„ÞRy°þ-t3…?¯,QP(RÈÈ#•è‰7Á„ÏÑ4ü“ب!J–$%`J2S7È(Kõô€ö<ð8û… `ìŠ ˆMç€}çt! È Qiwï×ñ'–ŠYˆJ)xÈ?™ £Ãú]ìHC‰Èc!6Qx=è?/‡JF³`å°¶¥õ8ÐÛp0‘àÃÍ/áàM:ˆUæ#æƒ÷ÿOoß}ÏùuLÝuG;du>€{ru[?Z?au1fÿ™n^{t uŠSŠKÒ¼ˆúW¥’ÑÂð8úc–ù¤Hž;u2¹¹¹yMu-Nu'Gu!-uœø»¹1u.u‘€ù0´}2ôû%²|X+áuQ¹¹¹ùyCuLAuFCu@Hu:eù»¹Eu4Ou. Fu(RB†"ÊÇÔ‡¾‰‰íÆ€ €JÂ.FÂI´ŸOèO:ð­‹z(¿ª ‚‡±'üöÒнÓÇSÈ铨ÚgŒ3¿“ûwà ¼Ò¸ÀG7&Çbë’/G.n)}€z+y ½tž—`¡?,—B¿+ˆˆèÌP t—ÓL5FÐ÷÷˜g ?°_È€tãºA“›nˆÔ$'9ÓæÃÔx·ààñá‰îËÔú#¡q`qÍÉ¿ô©å]ˆMïd’ÔRtU&r ݹÿpû»IµÓû±Óü EÑÆh\Z'êÿÀ ÿ»INKƒÀý…É}åï%Zù_ãþ°‹²²FŠB± ;È~pÈÜO;‡ûW|X‰]èƒm§ ÛÅ^I+Ù­ïc uÄ#íO»[ë uØ ýÚ+;]ðvýß½Iœ r;ÁÇä—´ý/ÆËÔüŒ¾&AˆŠZˆ^wßÄ A 틾‚wS  Eäq}Øy¤Ù¨úu.ïîóî¥àŸ½û|p›™uàܾK4BKAwàFxéëW ž7ØrûÜŸ ÷|5tÜ‹ð98¸ûØÂE¼V¦ØÜD°Ë ·råp8#;íP€þÊ‹ †¿—êDëcCèv]ÿH¾Hn@v<v3ǹ§…‰µ!:á…¿É$ç‡Ͻ+ÆUÑÕIˆn¸¿“XýŠN ÚÔŠŽï±/Ë…MÔЇ~¸Ô›*P•RRxbn·QÊŠUïÛÕ¦TŒ"` Q—8ˆK&ÄìÏߤ£iô8 0ƒÿrŠBà÷Çtƒ”ºQhWmÃûW6ÁMâÒ«o¬z_ Y,6x(:µ4‡L:ôÆØì‡ø/ ._r‹Ç¹‚`ªslmYD|BE'y–eXMyOŠ,ñ‚V~ˆSSˆ´XÅ‘wÕo˜_Gþ…7°î@ ž?Ë ——ß… t ttðï·— tzu°ëmufG¼bkµVXË%ËŸ=sJ< Ë%Ë%. ¸%Ë%Ô |R„YÜ?*Ý‚öv C(ëfÇ €§+þÙ%þ6~0*ë‰S*Mvoð ˆCûa4GŽ=“..׌ò0.05e’Cž 22e’Cž 44š‘Cž606&9äY88‹A–kv:0hØ qnS<Óð/ŠOˆKÈ3€ È3< 3< ,È`:qÃ3í €{,ÈMƒ÷Ë :sé('8õ( ‡Õè¨nÈ ÐE²&ëÆ_3ÛÎÐp<¨þÝôƒ}ÐN:t@ÔÁàP‡(§(´ÇnÐ*TݾJ}=¡Àˆc®ÿƒÿ TamŠˆUó€}ó§;ä@nK++FLÈ!Ëòò,,F>‡†ì‰MèäUzñà«EÞ4ÝyàŸlMòƒïŽ®f¹|ÿÎ`uæ<r×ÑÀš®&wC6û[Eœt4™]&Ë Kèä ‚ï“AÆ»qã(„ "v«dY^kÞ;Eäv,UÝO«dywB¼@;’¯’7ÃvE.#!“ëcÐ :U¿£¸/ýÿÐ+Ö;×~‰}Ø3ÿë&+º“F­?}øñ>¶uÿ¯LŠëˆ,|êä¿ïìZè4yµ¼OÁK #àUÞ¾å-¯KÝ'؉؄5é™8áBkKa¥Ã]ì@áRV§‹ÓBú›‡%ØÜƒÃ uØF$A“nb…ÎüŒÐTTBùiü/25°=öƒº uÙ%zª[vä1iànR3Hžt-Pçäë«‘÷ƒ¸$êxäÝ‹ù´K‹ ¿‘×HIu 32›àÇ@ Í!Jx ØèH Ã>­7Ú‹ˆ(lQIWBç‰/òôˆ¤RF ‹Ù‰;Бꀰ(©RëÙÀ@æ× µ'”Ÿí8ÑÁlàÛuÓi{r0;”vO BQFÈÉ}8æÚpÉÀ-«ÅMÒ;¬³6~,‰{[ZKEÀ;r Ÿí0ƒ{0Å&«y¢KN0‘6Q†÷ø°ä’wÈ÷Çé6pŸ«²üõòÂ4ˆmV8‹k,2D0¡K—ÇÉ Xƒ8¬:¤Až8&IÓ<< ÆpŸvÔ=Î0‡(É2!,,(!Ò4,,04É24404ƒäDÒ4Tz¶0ËÉ@Šˆ'ì¬s“4e• ¸×0*­óÓ8M’ÉE—i¬„ò‹ÀÛF1 ! ]<)Cr²»DD>€`K ©ÁغÁ_gDtApŒ*X´ÑËx@–Ù><@…í¦h×<@@Uƒ1D3"iš‡ÖDHH@ÕÂD€—ª )ä×£ ä cáÛEàlFT4=ƒÅˆP}7è¿U¡àL5„ÅI¤Oú!˜#Og !¤ïëcÀ:=UÁ牖ƒò@ƒ{@)W@ ÅP.{KïŠN!W~SAPffÂfO–‰Å**ø,#¡:u&@D²LÁ<ÿ-88"VHÃ8V8ò¦΀'Hó({­-Í(<ëjëh$ÍD,,EKƒ8²<œF))Ų,o#4455qƒbyË66#77q¼Œey#@@Dy˲<…HHLL#P‰ˆ–ePTT9¢.ZTs=D²LÑmXX HIÃX(XDÅÙ‹ò;´aT¬!(7Oê Ê/|î'J€)f‚„¢ÚŠ:3ˆGDåÀ)uWÅ‹ô¤×‰^0ŸVštG1Â[éuØDØR›.›`á¦'Rp?‘„ÓIëFqÃ$GFÓ‚ú;~,r¥'§8Ö ˆÿG‹Ç—~{(š÷Aµ*0¡Šê "H‹`ÄdO›P²ïDnx€(‡@%-@öTE€—…hÏ€H2Ië$_ UÑïKYBB S©,"!ËÁ9ó00"rtKÅ# ƒçØ÷€UÉ€3…@Ÿð,8EŸ#ù‡((™ ò ,iš)d,v,,eYš,WH )À‘Bƒd göƒn–!9 (r¤'€VpÇ"È߯ƒw…s(AV,•H'µØ,P-8 ±aèOÉO¿3Û°L ÿ¯sJét Ñêò ƒ¸í¿ÞëAÇ|é‰CáO)­£©|ׯ€L°J /­¨{0½D€¾0¨K!ÖÆ$`ÉÇ;5ÿ÷U}!±BŠ@3ËáfÁaw ŒŽä#< o ~|ß‹Ãîû3 Oä ΃Êÿ1§Ž¿’ ƒðÿ×–÷÷ˆÃÁáâÑÿÞ5!ЋÂÃݶ-`G<â(f y~Ô¶!é€GˆaØæÝ‹€âK&yIÃNùùŒ’ù·'‚-«ÈïÊÂâÙØ‡¤ ¢J}]ôføð+ã„Ú°øRí‹ð0 ãƒ?„Ïž¢‘&â!Þœ‹»­‘÷&IØ™}C‰Mü˜;á@ÆÄm[ :“\0‰)˜b= ÇÉ ÿZÚ·ÅЋË€‹PûfGÖQ?ÛZÊÊç½;ˆgà‡kÇ2mÀû¼L1YÀÑú‘¼‰W±œ„, ©I7}uÅÄ!—¾’  $Ë=ƒ>'Ã0\œáÏ=;#Sâ4âŒ>ü ÉÈ‹AÑéL1¬=iPÿAáàwy þT‚8x Òº='5 ÿN]½OjeÁUØi…wŸ”‚]ƒÀ;g#®ØžsÖ'ºlk+(§„êÿ ÄR%zhBƒø u+j‹‹]|Mg‰Á©‹øV4×íC¸5Ç#ÿ¡ýd!rçQjÏH°+°À…%l¸%Ú*€Àp>½ Ïh)»?föQ´'`›;uü™ö‚3ßð3O²Ù^A¶Á\}@ +fËåÎÁÏ}N “x1Ü0¹Ãð½Æ™~`Á~ QWÅ<|ëk;}#dÈg8ëO™RM] ÏÂ’©Ò£7ÌÖ‘‹:{]ÁE â!€öUTqö |5Mìꎫ ¥§óÿWàðg wZ!EK8?µ@uÏ–…[¯v^t&=ìFžåÙÃTJ¸A­¤ßò€U Å䀾 tÿò І`øˆEãë*+»ƒ ¾¾01ë•]ЖU.UãUÀ©æ™ì[g.ÐA»ð¥f2;ýÞë7t·WÏŠWˆøþ Qf÷CðtG;i'£Jã‘ iit(@t€šµšŒÂw˜ #°ØÁÃTö=½_RøâpêöÄ€/%õðHK ;™v9áA \ÆS/¼ ~÷+‰ fÿÊÉFfƒx a{){0,뇊 kÿFÁ­;Sr 1‚oÈ€1ÕSØ ,ŒÒë| #ïdsCCΤ qtAté0G- ôU˜ú©"‡Û­¬³„щ )à™ÂÅUì2™±ÈníP¯ç{{Qv`Öëôi˜Š÷ø+}ýìª 4¬–;ú‘ˆ!õ±É›(}úÇUÜÅØEÜ“ØP6ÁãwÔ_Q‹Ïõ»Ð ‹€5¡#Lu´8{C•„Ï£’<ëdäýÔ@‚Aƒ‹â8¨^:f%4Ð`ıS· Êæ`ıöRÿÈ„Üí·ðä zK r$…ö¿Ã=xÀ'4L‹V±ô NúS8É«>u=«ÒZXÌ AräeeIuäïˆKöFg~’{ u—ÃA=¼v ‰>Ë5.òä ,€#€ž`Ù*UŸ†…Qlucåžj«));¼*ˆšx¯Ô¼°Ú~ N èÙÆ \Ë3ïhÒV #üåÙ—¡úZJtëq›AunVÐdD5ÎgWÖ:Ú/ã » uO>%,¹®¬Pà‡ÛÎ9Êßôø‰ÝŸg—œë2`î38 oö±ëgA2 °¼‰8ìZcQ÷tFäj8‚d·>9"V ‡u12H ?÷8&e·L½ ãYWBÆS+Æ'Fl¨íåýÏ ŠS2ˆV #3 }$þ0 V‹Í‹L'ìÔÌÂN!ÏQ³K@P È=ëÏx©C“‹¨(Åqÿ?ÜHÅyQVÿtÿ0ëŠGˆHYYƒÁ·ežäU½P™Qb‰o€zN¦¹M 0AØ,;üšJ ›ø€{(¥àVŽt8q 6%C×Ö÷3)¥xPÞ°XJAW3íd=PË­¼ÜIJëq¹ža@ÔäX¸V–µK”ºÌ”qV±G6V]ƒ¾¶Áèìÿ8*;Kìꇠý”Ããñ ðA†Éÿ„Ì‹WɃrǰØWÌó<ÏOGWOGš©_6ffKû¢À : ë@½+Ïý@UGúÇK'V ‹ÊOÁH3ì»AiW8:óNÄ´e%1´ìxC>ßG@ŽE«Òt2Å_&ByG[;*§b(w,<H/™×,#0Q9.›Yšƒ-:/!ù°¸™)OS11Étc¹””ª„)A/n°ú½ŒrêÑO4Q—ëè‰5 ßB°Ÿ‘…Ás6Ù9´D …8Ø„(-ôW¼?ïˆQ+,ƒÀS0࿜tÆ ‹_83íëk2r€ãM Ër0ñ¼åEÞ  O 7ä ²Ddd fÀÿKáE;o4r—X•š!ÉĘV×E‰ÃØßê±­*`‹]x· (°À¯¼·*y«÷K×ÝqfD3,Õ Îòá8[”´2/t;ŸC0%ÙíÔ–.uµ‡­@{5îù¦ª67#@„'%º`0ÛI½[g*„° É<67Ó'åtr)eØD“‹L 5œÔ°Pys9iŒ'Q™>°ðéÝ”éÎëζ -ÜI_4ÜÇCO¯TrÞœ‰ WÏ S9Xqù,ÄŠ\r04%Ó· ˰8ã³ÙØÁIºèÎZVÃDDZ¥†'H"`·{žŒt Ù°*R!@WÏPCŠ@“¿‡y{WÄø+t8Ë+÷=«j#ˉ‹…ïûRAB–*oÞP©üøÒÝÊ­Sż‚­£ÛQÕ¢ŠA±-U&é µGŠ¢M ? ü4’ñ'€~÷¯báßud°÷_‰\—3÷ˆÆGs„ó÷ÿóþY(€ër !(ëUŠˆŠ^ˆ_u?oy Wë;h«×ÑGL™K€ŸåÙ6Wë€ÒÛêa¯Þ‹ÂHˆ¾š©ú÷B;Qbd0 ÊŠ­Vü!Jˆ€R‹v†RÅ¢Q¯—„#/$† o01µùÃJ%EjGæëŽrõ¢k0çtÈU"d•Gù0 VH34gz𑇠‰\uØÎv£ÐËüˆK/y„j‡s|¬éˆ!O¿±X°„¶Œ´#©Aº½"0¡V©Ž“ð;1ÐÇ;³’†îîO­41CJ‹ƒJé®Õ“Hàn¢õ¦FH†ìíAÂe¤ Zc„MebWà ¢âÁ§õã÷+±+ÊpEàhAßR<¼£ÝàÌø$Ð((ö­ ãSD%ü 7o!ñ:Ø+uðtw(¼u}2 ¡;§+l,ôI€´¶„7ß1ï³ žè˜ »Œ“ˆšú«eý+È+Ïùs!AФ›½ƒ<µ§‘¼[€Œ+=gl‡÷Å‘plÐE×¹hà!RÛ˜~‹‘íTNá,)™ F(ç0î@9 û-&µv¶lk2­Óv\C× aä˜9ÀgÃ;S¾_3xÃ)zUÕ^B„³lWlFƒ›l™÷CãtÝ<ÀwC6;siçGw ÿ@ó Ál'wŠn·*„åïÏ&è6ؙۜnÉŒÄv³)jC+ÂÑE(ó„ YŽtœó°ºàx°µ!Q˜Š³Û þR}“^D«€à£ëQ±›Ôhk°¸ *°\ yN}›²€lTïÁDL\-m Žëë3¯(W6Œ Ë &dndŒ ,»@Ih€(rȉ\SJC2r…“R$0y“€`-äc …ÚÍ@ä@À³±ŒüäJ_Š“Ò“,Lå ¥™ßå‘„†—noÇn¦ Ò,ÐÙâô6mëýNo…NëFë=}°Ìë4¥+uppë"qëmÀ pT!ië F!e®ƒBr[RµI„íë¼–(š³§PqV´2Ï@9ä"h˜mÙTk[{PX†££pc4O+<8¾h_lVäiª áp|ÿ  Š+aìik€ÍÅU)û¾L×,ÇWV“˜³è@‹œta·búf`Ü;4$­ß}@n[Õ =G¬'k,)gCž‘ûüëP5J‹5®3òBMŠÍØäÕÚ¿n  t]ˆŽâ‰iuý9v=¤ç — @:È]¤XÀ²Ž“­å8±-¡$ÇÞâ8-Þ4Å ¤Ä;‹‡áÏ‹hg$‹X"xkýíø¶õE@‰ŽªÀ(Ò=…·Q‹³0RèÐ:¦S±C\$‡Ð4©%´;t^c›-±++q„¸h Uõ­¼Äíƒ>…Ðâ£ZºÞa92{ë*3JJ‹Q-Fïʹh¡Åº†¿T×™Ký‹Ÿ='¸2lO`U“W ‚Ð‘Õ ö+et…€[•P#…yõÊÂ1#|r‹v{î1Ý€ U·ßB‡J-S")iM0W ç¤Á-dÇÖ )ŒaRžia‡IU$V  Øu†¡“¬ÞÝÁÀ‹õ·,Ž”ŽFÇÚ—4* ² .=©ï¹ètj/Ht—‚îå1ëE»H€³ŽlÚÐQò޶´*@1*\áÅ&G+‹ÂQšNØêUßö€“ç´Ü§êL2#ŸÏö;ƒP"ƒ•“D“Hƒ÷~ž=‹:S»+ÏQeH’oëϳDÆPWVuøÑ%6¹×‹ól€s‰“ÉÄ7ð"·uS ,N ouc¤-d,H+\ÅFnsyj®z‚Áa§sSŸsEÈ—Á‹g3F¿>%ÿƒ všènþ†¨®ÄU¤¨übüÃüÿÁ%ìr;ðs ‹ø÷×þGë‹þß©;Ë+øUŒÂv ÷Ð+ÜÈÀ“Ãt¾‹8)‹‚“`ÉzË„U°;þs±¢Çë¸ýøøŒáL÷§Öc—\Ð+ÃÆR¨”D,²ËNÏAšg ðǸÁz.Yu4úçýê=`[;{Üú*ˆ÷6Pøê‚›«/§ø ™4©Ehá-›ty)gŒø~Í7v¬8àYKÅ*ÙÛ4ßtnM0uÑjö™·gäƒ úxcêšæË-çgÿP©/iGPNnÇ€ì ÙÈ 9°`üÛ8árBNÔäê¨ 9±í•HóöÚ°Kœ ùsv5þj4O–O^4RÒœ6ö‡ žï…°tfíHkƒÛ‘tëAD-1:mm‡ ‰C©EñÇÌÁ‘sŸßx»Ñí´¡]¦É ¡­ˆ­Éj¯îîÀ¸±=5uæÀݵ~uÞH01Ò,ôì½ø’éùÇ;¯^|·S<„ë‹éP1 .&&Áq¡O¾r`¥>Xƒya(sK{ôÏ=‹—„¢uJy™‡< B3››„B #G$L;FýžøzH,;Üé~ùÈ'€¿JL5\QŒ<»ÉX1Ë.),,.ˆ7²Ä¶dx§TNöþ58;P4#¤§<;H@Æ­ŒòÝ4‰8¡FF–Ùz;<Èk@_vì˜ë\³Pƒd~ j³‹|{4‰Ú«}&8Ú}w¡Ó–xN<‰Ž¾@k#ïMN@'È(Ÿ†sí(,w,L»-¹@å!‰¦Ý­á+Ô>!‰PÝÊu6ÞãÚ¹ë —á+.¸Zz…´±—ÁŠg |óˆ<ê[Leï.ZßIP£(T€óÝ!,Å­Xä†`HñQÛOcÊÁ®`êqì¶Y."€Z}€¨“ƒ 2Óû#Õ«h™KUv ãeš“ÍøÄ:ø¤¿¢ÿ¾@<8Ò÷Úˆ—mÑܨqmo¼<Â2ÈKä;PúyK›‰oE(>¼ä] 1µxœ?Œ`—PæUÉK^;¬U\@(@+°(Ñ“ÇRÛëvû±ONØlõKë&ï¬61*E%Jž©œœ²‰0‰<5\Ô€!‡¸0€žÑ ™œœu ɉ`—€È `&è…&¶‰älåd9y;Ȭ«N–“°´_9i“¿Š; ˆ‡T²X(–“åd\,`0dd9YN4h8xN–“å<œ@ DÒ6½[¤;E£²HËÈeäôLìPøN–‘TX/I‘ \œ Ý6r¼ãKŒ¼3´ ‹ C3ȬÈ(ƒÀYƒ ¯àSQ“¸ s‹ •,äCTâÌ%ƒÀÉ1µyr3–ûƒƒj„‚ÍU{`°ØäƒU`œÛŠÑUFú°[±ONõ‚{cTKGîEé´©7H7ªÄG©ƒc M¢KƶIáQ!QBœ³ØÉ#  d»´7–tÉ&=¶R—ŒI»9 Í%ÿ¸·„.O£ Ö ôŠxHæ$`<ì\æäøÊX\'¾¥õe½“¾˜{ñICàí· ÙD;CD!?·ŒÿSD‰WDÆG;ùWHC÷ÁúHëŠÊ RF*Î÷EÄ;¤;KDrÝÄ»€f‰—dOŸ‡‡‡›¼­<‡Pk9H}³2»\x ó†ºÈ‘LƒN~Ƈ[û~ëay×\³…<žb'Ü} s  ç6—ˆ)T Q‡ð0n!S<-ÜpG{H n1>U“ˆ— @†.²à" @ˆ Mn# ”ŠŠSŒÐhYÞ ›==¯²ÌÞZ‚cT+>d9±QË>“§äÝ­„o [`ddä] GddhddddhllpÈlddpttÿ?Fn§Á?›éþˆ‡x@ˆeY|@‡å[——|Ó‹º ‰¯^QR#䙉¾22”‚·‹‡dÑÍ9‰Æt GwݦÝÐ2Od]ލ×uïaѵæAB’$ žÙbeSØ.×”i–Ëö)?“ë’”—«9”H”½MÓdǵ£\íABŽ”?“Í?D&ëd·¬ëyNš·X,kLˆ@Ûbé9À4èu.#yn#ÍDl"GøÉ‘9 ¤Ì òäyÁGú •|—2n˜ —©–œ¶f¹Ù•!.ІzI p`Ÿ yÃ4u’-`L5³%¹fó48ߣú{äç’e••v•ØÊ0¦iZ»¬Žý y[D6„[û\B.ä-:\]‘WÁØo§ÕYÚ< p‚NȽ ©$^¬^Ò<™B*„ÀyšŠÉì(Z ‚í2›½õš%”fî1Wȃö± ™£ 9±_£a„H[Àü›uF•¦B$ËO`\†dØ8 !Wì„þ¡˜)8"x€bí=DÉ£¬,c34àdNç3 ¥bÍígXeëV‡´ëe š·Jôe>Á]ìrÁu0¹u%^†â¹é\ “gƒ¾ b5•³.ÊËŽ±tŽØÆ†yŽñA‹†üÓ††JÀS(‰–òÀ<ðºŽxW‰†¨„Í4–4Ž Yã„oƒPÀé¾è&Ï3íøséOãQ‹Å‡¯ÂƒœŠhÜVr¯QsuWŒWޤƽ ³¡r ùÈ1߯øE…ÿk,r¦‹†* l'÷8@n £]À¡³‰Ot·ä&'XŒ$sGÊ»@GÜÆ ÆëŒ…q¢€K8+³—HN@a‹GŠðûg&ˆŠ“CVŠÈû¼oMN3EF5FŒ,#ËGH%Fd5@‰ís‰ÏBN ×DF vžï¤=5qH0<ë,‘º‹·.ô Éd#LÀ9ŒÆÂm›P7†Ñ86G9>75ÀTÑØ‡ê‹é6¶gn_Ÿ i YDypgì;ì4Öw¬ìE™d’åëDðÈðYN–!ôÌHÁ’çô†:l …q19 Á¸S«tÐ £%yÕÆµzhVÓF´1Žc›ŸŒ†#¥ÅŒ5Oí)© ‹¨ü˜â(%ŸÍֺѣâ£iÚZz~¤ H-$¶¦úP¾4Øü¨ýﯹàó¥%¢‹„ëq¾D.ýqbkA3D„QV¾T>ù!¹5 ë;¾d0¹HN~B0ë ¾€LÓƒ cL™ŽÄhá@ˆG 8%°•9u8^ÈÈfFìü7&OÞ/<“/ßΜKàˆI!74ìsÍñAçRŠ‹T ÛÕE0 P3V)Cœ“WXyñ†$v ÆWwësW’ïǾÝuI=Q\¥ˆJ9:7ìçØëFYu—JY~Ž-³“GQ"¡u6Ä×J¸òŒ3±ˆìe@P0:3"ð„ñH1:à`è9ˆè’< Ó,1M è–¦ÂBÃÖ[? ‚‡,Øéu j_­³ÚÐ,ôŽTIxD\kcvxEOì ™-EF/zÍ·ÕÀCá^ÕÀë*~` ~kgøDVÇC¬Š`<Ú¬“³F“¬IP·'Ož€ˆŒ/4.Á ”qJŒT({%„I§„Gž.gù1ùòt ‘&®Á+7ç_øvc2¦kDJ‘]ʘ ‹a{†Ú& )Ö4ÈØlU·â˜N„ô}•6ÄÐC˜ $Å60¾+„ t$Æâ¢i‹y§`kq%J нjëFÔ°+:΢\aM^yÃAàÅ@“ßžGtQ.n„OÓc‘,CóVM £$™$ ¬ÐÈÙàä(^…šŸËz¿uÇÕ"u_%F@W•ZÈÙó×~ä´ó4P.(åF!œ ×bÐf†’';ÞbÙ’Û\€#¶Ù€ùº„•ÉÀŽ<"ß W‘!9îô³¥3$ôø‡ aˆæ—§@éB8tÎïØ… …à,ï7ß4¸˜)ýyÛãÀ½€n#o˜ª@3ŽÐj;´$3»Æ…úö(ÈF ,†Q×—yðèϦüeãÓ‘‹F$;1úlLvÅ!…0 —ŠÔjûîG”. ÄvÈ n ¯VF›ìtŒÌªàÄD˜%5+(¾HÈà‰³ 0•¹˜»ô S"a—iB°»~ ib§=#A)‚qû~H„A á’².9xiå¥DQ5˜M&Ž„™ú¡H«=ŠV!€X ÎÝd$'‚â¿Z'ÚÉâë}!‚Fƒ`[†^Ç)ª90ÿ'XÍÀõ¥ˆ𯀮jùnÇf9•4[÷ A’”‚^²²=¨ÃyÞ#7"°S‚€fíP(4Þ7Û9A,Š‹2û8f6!ˆB070fß64"ùJ88"ŒÌF'Þ˜zZ¬¬ž’!h#Èë)›€iŠg¸M>Ë;³Wƒ÷«Nòä =ørÛþónšfiUBMEJ .ì(ÚŠŽ'Ò\uN©;.šj,­B¸,T0~Çó»‹ÖBDÉMADÍÛóò"‹E@DG N!0'³HŠ_vŸìýZ3IŠó<J]\ɸ¿>¨KQÆ âG[ ®4a@DréÅ@¾XžÿƒÏ;§ðǀέ ‘)iŽŠT5²)Š Ô{p˜A* y’f¢HéJ3:¤­üC)iž¼ë0Ž¢ÁbF`MÔ¶€T7ñÑlcgSBö.³JBÀu-vYÙo°Àà ÉÃI\®{bâvlŒ‘K¦–ÛÐÀ¥fx?% ,ìZdr/ã!CF#s×°áî$€ÍðÂt.URëtPR=  *Kã“Ûep Q¯v@h°@Vƒ.§ö á¾LO±– $Vºé¼3LHDMHø‰ut TJ49:uCBÞtÎ%ØD ƒ0x<­‹oƒˆÁ(…ѿزS#Þd[In@˜ïºÀzàíê…íô $t: Ôaíž‘;îv{ƒÎIb…¦æ¥/ÿÓ@¡ ø"¾FUwÕá·ð³‘×åÞ€{Ó/(&ösuQrƒÅ&ƒÞ<Ö¼ÃÃE(E/ °aÓš PALÆ!YÐtÐ[_‘ºA`3FnÇlããw&ù~mýæ±]f;ûrFfC‹†,IÀÜ€sÓ„b€Q“3T2>Aørïë–Ôeì–H(PØ–‘ç CŠsº‚ imófÏO–)äfF ë–p€:C0»=2{ö×8ï<@ëpFF†;²2R@šžC#_éu)ÛHh Ó¦/óiCiƒ~9Ð÷Pª‡b¼!½ $'‘³±©ï »¨n7Îî;ƒZÛùÒÜì§¹ƒÏÿ0“Þ­ÙsT4&‰=‹&‰?IÌÂ?§ŠÌ<´B !…šfÇ€ØÀM tìû Zfÿ³ÿ~V§+¨Àï;t‘—òÖÍx˜ZÀ.fñ}#] &è.¯×t3 ûìobþ?‹îf÷‘~»ëP«·ÀN|E£}»Ruf{gy€st ›ÀACa_%Ààa=÷Àš¦<A*­Ø¯gß„', «‡fp°@¥R™o].(Ž"»û2C {—Bp|Á¹W¦Y6Mêðº (˜áÀèëL!FBßÁ&ù@13Rë-º Æ]C#¯û,ï`ëI=Hù3 ƒ†‡~†W\ Ø ÑŽ!^ã2i}S: “³Ð ¬QÝTJò¶‰ÈõQè@2ë$k ¥*©*ÝÅT,ƒn€@X&à¯Ûhãfe's‹>;7 “ÞÉy²MNÒ  ¼ì‰1’+> DÀ3ƒ$|;"` å7‘7Oòüq‹ƒPŠ‹a‘‘‘`efgù†Rqd,#ï6b7c8 EŒ5­[Ìv— ƒa_9ä"`$d¶MQ ±¤r£ YB¶"«µUæÆ#8Idíƒa»`yFFFefg8Á ‹VÙël-@žcµ“R ·j3µó*¬¶É…”ä9ˆqƒƒdy.pjXˆ€0Me€!¾ë8}/“9ˆƒ!c2rt®$< Jà‰BÇz6Ã¥ÅÇ ˜‘¢EEx™a¥ËøDYŸåã-\Íhd›¶Ü%'@YëÆ}º{¯j|G¯é%'¹M^9¼ä;4çÉAH½4ç6$9@§Psë+̤Aeh•VÕ¿CŸÏ3°qª¬'¿8¿Ó´v%Æ(€thön0M\Pu àjNž“ç ^ R ã9yF:N+ ÷1«Rmšƒ—` u ±ë;`N¾)u ÔŽ㇄0š”°ÁñžñWO<tòvKJýwäȃpõ"À3Àl𦵅({ocWKÀ 2õ."…%2 …@ 6ROE.Ð#SÀO À 5Aø¼F? u$ä„@ ýïXF ð çÀ;«ÞœB°M÷éèä7 œé˜ç°)ØJø}‹aó74œCžƒÀƒF4Ž¼ÇŽ _ ‹Ãæ†YSðóÞ(l%\•%›£Gâ-á±ÀÌÝI³^¨“ð-8Ž@)‹ºDàr[ô'ˆÀH9Ó»ˆ€zÔb<¡{ÖÄÞ†e¼NA•dæ†Tõ‹F@Û¹¡ˆFŠAC–Ù&WG3WäÐ&@c*•Ù¼7u_9癑öŽë22Â:Ùi¤i2“ßC–C–9T0a‡¼C–1`7Gb8‡,‡,c2e3‡,‡,f4g6¥[N âtJ¥~БØ5mÇ;’Z$àw:UKnµ*ܸÑ*¶´Ã^ÞI]ÆáTòN´5ï o fP´‚8.4¨c°7 wIx!2uëx6d@&##Á±£¥w<»C $Ÿ ëÖ ¡HNAËàµé ­¦`Âa%iCB õ‹7À}(v\;TAŠV;¥cýX¢;ŠF<Ø<5ˆè&E:B·"‰BDdúÆnìPóHë‹u€7EôòNDÐʾ;SwßV-ÉpÖjoHi#›§å× JM‘J†ÇŽlžLU‚LŽNeˆ ó¶NWiP˵+â.mîVH½€A;è ò ±C:O©ÄÑç(Ém:¡ ì ™u'1,óü.ýÒ뺓@æxTQë.7"œ:\]¥ëF…ï™g|-¸ìr×'Ò}rGÇ'·×‹@&¹½h:V0sK "áC€~1ã›X+ ñ²²qù…8ëò´éåuC3;se Z7„_±‰€ t ¹=í˜ @h 0ì̵“›? ¯ÙÄÍu$tȽ’ftëœ@×]χÂ¥Ê̱µŒ&÷8`—äð:ç»j¨€ûVxþ€EeÓ´"È`:•ð4Éønšxï^HÓ]ô;ÈË{ø übÛôî† ”€ "‹,}ôvh7[:3,„ oÓ;ùøü@“wÈ Ãº\µèì–AžËð¯ðìè³{´]‹S´¤iÞ_´èìðžF–çèºÜ àäe9YQäp àÒ–÷žÜ@}Üàä†àËÈ CÐÔØ ,Ë #ØÔÐ ËòÐÔØ¼ÌðƒÀê ęȖ繌̽Ì,Èm 7YÄ™ƒ,‡˜kÀ¼¼ÍÛ<,ÀÄÈó̶äÚëqí¨¬° ò´¸vJ帴<ɰä–vÞÓä¬C¨ä¨¬/¦Y°´¸‘.€È¡%¨¬¨;Žhröv‰ë uH `’ NÐdêþ;NDv‰ ·°H­ww´´ð!“uþfm+ aW>‰£ HçŸŒàŸ oˆCñˆSErù¾ … ]KFECH¦iÚåUSJ.L$ð Z¨—p§LZe8àCç[Êë=·6q0•‘‹A!7C¢¼ $¹D3§¡¥lìÅw`s臿S´ Cs_‡ Ë×há"/VäžÔàMÞë;çžÉ.'‘‘¶âxxx6XÞnÐ@ã.CžvèY‘¶“¾³N†éÔjÜB‰±ä@Äaáj´(o3AaŒQ–þG&. ]ÀBá¤NqåÈ’^I]¤Jy%IÃFTÍKBÛ.ASu†t ttN˜ bxßL©m¦µRÛ:aÛ‰t½·Øl†38ÎA\ñd¤ÝŒGŒ˜M[ ±?n‡ &ù t ç°vÆvoOg}I+X·ÝÙc&BfŠM2bÈȼàv%º.Â8N0œE^޽Ê(Q(~J@,~µý,øœ$`ú76ëF”ƒãI¦–ˆX [õk³3Òfm”X0?fw³‹b#‰o\ì„àfQ‰i&eÇ9ñR8ŸÇŠý|HÇûUôæ ´Mêôÿ@9äÀÇôôô&ÌsBsô2j`ÅlÄ`‡þJ¥´RåÉíE¤R½ÎÄBïvYdMà{8”÷,UäßÄTdWú‘hLjE߯îZï ·5²íÏ`)ИذּÑ^“¶Þƒ rrÑ+Puà–7€}ßœ/*k°%Á‹uKkOÁ”i)ë–Fli)@·´j¯#%º¥µO0Ð-­Om@plP™IH3}ë#-Du;RäQÏ)ë u¤É,/uÜëz錠 ê¸Ö€Z¡_ 4‡Ó+@yZšO [ûÆÆÐéJ$à¸({šcÍàß;Ø (LuspŠGS$k6Ç>ÌXU ÐØFÄPšyøÖÍ9k!†lÌoÍø†&› LÝ<ÛúøAWTÏH­ƒûO ³²^©–æG•äêeOQ ¥Ä•ÔÀ"À,ÁÎ.ïàs\)Ä(q;ƒå %õL~c 6QL}µeÝ…H,å¼]È[ƒÈU7BñÚ6RÃùƒûp ïÐ1vÀCB‘‹W +•Ð\‹E¬: #Ë;I@Äç´K2´“;ƒäaˆ©}- =È“·%™NÄ‹ÄpÞ’‡ož#‡´TùžÀ Þ‚!틞 @ðªCÈ]ÅHQ‚Ñfј¡ TŹ`†‚­¡ R•‰}f(Hqd¢È|$ø¬ÕRñc‹C1K½£=–"GM‚/ð Òz,I+¡nøDÇEè0yëÆ6Èì#E‹æjê‹`ÞífÍ+äTÐ/ ¥ÐØðN"SÔæMÐzPAÈ+|‡KEÔ‰7äò¾£È³)É3Èù¶ÐÈkFƒÂ@Žä»ÃÂEŽí¨ÈRe˜ <4ûÃDmì¿X%ÈŒà *ü­!&…߈“!‡.J3€÷º+EÏ3ˆ-ÄE­`sl—»%- Æ!%êƒR#ËÁ,?ÐhÔ /ò2 P Iè¡8'u} eXÁÈR)JÎÕ³i Uê ì“¦$|‡‹Œâ ÃJ8Lzt ›IÑpTXBê Q‘3ïBj„ßbƒÇ$©ðu¿\4 ‡ð ‚Œ÷£qŸq!b u÷kÓadÝ,8E&#>6ÂÐ[m!OˆDÂscÕ“: 5F"25 ÄïÐ~ƒ#b;ˆn%¥/T| ƒ¸Hu ×ÌgÀPˆH&HT= 2ÈLP!J&HäOPwÁ1ð×Å耾¸³£žï)êK®†XÐy.ø®Ù¢†¸(–†ñAÂx•÷ê3 ‹®‘–¼ÊDm†PºïR+Â4Yâà¿°¾öŠË‹ÇAñ¾ÅN wÓࢾ¥wŸc ?Yý‰|­@$ÀŠ–ŠÃ÷–ÚÛ"³6xSOâŠA%ÝÏ{P;ëd R#8Cá˜Oy°,XõQ!´lËç¿ ¥c÷ú¬…Í´`F‰BÊô¥Û$#Õ*̼"8 M›RRPŒa“ƒc×4OJ ´»bÚHëk¿ØÈî;‡®Ç±}Ibá LîöÄ —f ·Àk¸åý) ÷ê LºÑ¼Ñ„¾5¯Ñ‹œáo¿)ÁêÁè\ÁøOˆKðƒC ™ý@†â;nÿŽ º(#L}#v3 ÈíË×µJTâ‰Ô„•0ù€ÈŒ¼ŠíafXÉÓÁ³ð!ìëi#Ï)£¡ Šƒwit\Òƒ¶>xWúÛ‹ßf¿©f+_Þk×+8%ÿ×fÚ¯Ãù¿½€ÓJ‹ßÁÿ ûˆÿL$H(x¡j}°Å¯dŽä7DȰº)4 Ìïo3òÑ·È€¿°Hˆs xçÑ‹—¾;—wý4S½“£XÆë"‡a‡=B:#‡_—8÷Ú{7‚ø#9S÷tŽf°&·Ú­¿ƒGïYÔ· LÝAÇðŸ.,DÃQ„pë8‘`nÍŠ.©#ÁÖ[ÌÕ·¼5„FË Ç…Èò¶dÙÌðdô"A·ÿ½B³A^ÂÑ €¿r ËJêŠÞ@ÏRF¹²£Až£æš-'›t)å¬)Š£V’# I@·…ïýMC¶;Vÿ;A}:ʈ.S]“Ýž€‹Æ ·‹‹oð‡.*‹Å±½ èÿMròd&ͦ,0…gMGÇ|,ˆZb,÷º,Œ)rTÓyz•ÔkÖõTìl¦â‹Íô é)2Á—À ¾¹Ÿa\0ÊÐ'f¸w4$q±“Á–O÷¼ R w;{AÎ #P¸j˜–ýÁZž+Â÷éWG$z«vÉG˜÷lbTÊ‚·Ø $Úÿ͆agbáOÐûLü^™$L ÑýÂUwi&3êìO>ì CÇÃ<ùƒÆßõ×#² ‡¯¹™ãç§ýüUã— oM&M"¿Tfüb¼nˆž…ì±|œ$´‘ÜòµœÐúB…‘Žx(C. ƒ¨4LR~8à®0»pŸêf½îŽÅÓ$-|Õ‹lQåLJö9m:íÕf}f1‰.nUéè8°ê`(p4‹Ë–¦0(£ý•u€‰`g쟬дSýÅ'¾·÷í+²ÿ*Ðb!¢ùâÙ-ŠÁõ‹êõT¬Î|÷ò+¶sÑŠñOóààHlñŠ 1È»¸™„6®ƒÂ3žìp0L-7²<3ÃSuMr. ‡|µ»{ ‰òv‡Ï•W}WsØyÀ‹%}ZþqÇã’87ž»¹wø/—‡yÀAbg‡cÀ1`w[ÂS!9¹’èèê'À€ËO¯§ä ¥ëxÒÀ3^ôµˆ3¥‰Eaûÿ(#ÀÿËÌMOFEÆEÿë6¹îµ4p”̯Zý+P÷ëƒÀQÇã£ìp%º;aIè0üIÍÒˆ]…‹È:À45ñ 9r ûyÿÔ¿$—<9vS›224®ä‚5ÔÓ0äB{‰ÝÂðª2KÓÕ¦ ÿO7ÑOØUMOv±ƒÂ8+ÃZŸ€AÕ‚M4TOn¢àt ù¿ok ÓÍ7Š»i`lm*§³h\Ö ƒB†<&°¸däJž“œ)9tµ!$GÁ«z>ÿ=‡†Dˆ¯lt4ħšç l~Aîm FÏ&9Äœ®áÙ!1ý®Ùø(Ä©"ÅØ*¯€Lb­Ï! qF®¬J.#ØD!+)’@š!¯’I9 Sò"dÙøÙ!9B˜é­o<‡øŠ¬‚äHŽÙÒ!R…¼ÙÒv2Dˆ¯Œ<È%S…Œ\ˆOÈPÆEÿ„øÏS¶ë6ˆ]µ„HȯÁäÝ‘9â<#4ˆ„µC@¯Ý‘Ú`É!ܪ’ç)ÄN¶Os\Hð‚¸+Ã-ê›UUiß…W7r¸Á'.ŠPò=À^¹H?&‚äy²p’gq‰BQ¯Â£«@A¿çùRWÄ€¾‹–ÕHÕ‘–dNŽŽ?Ìs©wR"†V††‚-52V7YÛàôk–`ಷ'²¼ "³–‰Úg€`Ó^D€àX+L.†(ÐÎdøyy賿ëVŠÕ8º‘ ˆKbóFØšT W!p·Ê#?l ˆ €'_’ Àm„?RÈn½L5ÙÎ<ë;ú|ž¹ã3Pp†’ IþˆGá^Gµ´*̈›ˆ“B½×î +ÈÉÒL  ap—­O‘Äf®GWtI#Þ¬¾=P Ëh«mÜ0Q Ç s!Ë!0eSÉH gY–gJÿ0 0 s ƒá=œ ÈI4IÓ JeÒ $#ÿäC¹ (‹Çž¦¹$(GB–fH($GÙ7d>ð]Cš‹O@™d’)€EMÚ T’ _ÈÙŒ–¥"Ñh ããq%8v„óF¬qÖ‡³Ÿq‘‘é¸Á™S÷ãF#,’eiW844¹H†88,È‘eY84,ãÉ3$ rÉ! ] ËW–#yÄ6sšky‹ )°XqQ•.\ÇpøïD‰UâFtÆ<׊+WŸðIŽ€ºá–R GàyÄ3y‘Š€z›ÛB,;Q•É“ˆG å-Âì1ޏ/pŠ ÜÞ°f0‚ˆGŽA‹˜ = ªG°Àv?ØÆ™÷ý+Ø.€¸ø }¤1÷=ë žÀ!vdŠsC±‘¸ÅxŠ€ oœÀÁÈi’§m'0L¡Ì€†Ëq§¶æÀ‹|½„ñtÊ‚Àè%åB_±Ãg—\ŽÿKˆ 0Æ@1¡ŒPÐÀý7ÏAëg¾é5 ºiXÖF#©ƒÊÑò˜}¼ÔÁ¿g˜?Óù#úÇ…ÈË vᇉøH0MN}žðÂ$Ë×<Ã1‚ƒ'š°ùð6 q³/6bНŒLáˆL4 0ø™x»7y€ú´FÇjŽaöǃ \:ÉǵVZe"ù§xt5p+Í9åà'°ßKŠÊÉ€+…ùˆ•ézX¦Ú¶(‹ÍùyÇ:»ŒÏPxÏ~ä*xðNH—}¶“㆙VROÈÑ’ß Er!޹hˆ3Û¨ÅG$Z$åswè æ}6°  Ùè Ìûáå¸ÔQ‹ÇWdÕùYƒ0 EÖðO‚T£õë3ü Öƒð…zìÂÆCÿp± Ө摄y Z•Ǿ/5²éè&Š6* ¹Ç…'€æÓ<ó‡Nuë`ƒpÑo¿·7E…!ÄOk+×? CtRX ÅZa”À–9Z£ÙJ>ÇÊÁ™O¾/¤ãšÿšà3Ÿ92ãˆâ³ôÇr’éBPi‚áõÒ÷âk€fw ư†• ¼ òã ÍiND«$ÁÊbÅ—!ˆlÉJÒ} ‚²Qà „ˆÑGÔ$r!Ú‘rÈá™h™ @œùÖº—î!B ‡VìZúñ¥E#×Ñú Ê´&9Ü…ñ B·í~/½ƒp-ìCQù¦wŠîùûD5ÙÅC%¨q´4Õ† nnRie02ÈÆȘªÃ5L@ˆQëF§9XT²â.9’‚c"F$H-@& DãH.d(•×ì@ŽdBA/ ^uÀ‰Ò3dªTJ…ÓÕ`HbA_Üô‡ø&Š€âøÍÁù ÑáCœAò2ù€áü&£}!»Áú*7Kq?‹ÊÉ«íä!—´ÿtÒÔÙ:ÈýÉ‹è%{„!ž]È£u*æÐ}@ñ$øÝ/ º„‹ÂâFd$à-Ô{YùȈ †³‡uDBPŒ¼B 3íð{mRø‹‰lÄÎáÞl©7°žf ª8ˆHH¥> 9yÄä© n¡÷jÍ•B®g /\°ÔÍ• — €™ÆÛ%/LmNPá…­@ÿ0Ó"˜$ø;#ÂÁ¡±ø Ùˆwe‚OÀuGà…Ž½&eÊ-bh³~¨†‹Bî<,ć㽞˜µ7ï‹­”%çâ ÂppÂ+tSÉøœµø¶á0Y=5ºT7QKÙJ0[Ÿf­³ˆG`¬È·ÈÑÜPM&$ȇl‹…øB‹7ÂÊ„€¾`Rõªä  îʆ‰Ðì…¡<,Ð^yö$ú“Êfº‹Ðïˆ Q‡J‹ÈOàl,ÁçI…¹ÝˆÈ!È&˜ˆÚTåDæ:j±Dé>ØÓ…•ÂÒÅ­}‚k2!ÿ€’)9G5‡#×Û`l|×@ÿúú(:“Ø[Ox%dèÿ‡}_\ÿ9¹ ûž‰×y¹ÊþFœ_ƦÂ`”9}ûH †Î¤ ‰äR˜©AÉ °XÉSë“B  ©° ¸p³  y!CrÄ5€È##.×kÜ$Ö_\0CAd`Ä p @N†O§NzO5ÞujDŒLtlŒØqq¦¾ l'ä+y›¦“B'wŒAN€U2t#Ú›Áu2\°{©¸FŸ¶@K@"xÊ2Ee„zÏDÔ¡¦9P9 àpÄŠÓŽOfjjK’$j%Mø·i€_áf ÈÆQFIsÒˆx1ÈÁ´kÝ!nÒ·ÅØ·Õ¸ÌÂo¿€÷êÈÁ´°aÖ< ¹’Fž@ #l%òC€¼Û ¿r›42(( 爈 y À%²¸ùÁr\æØ;Ñ Œ4œaø_–Káàfb&à„=qš‡p'•àÂ$#ôNH[ÉÃ`"ŸÈ W­‡”ŇЗ{âÁÁ¥Ðfß8p­ª+äDX7qÚ,>£È ׃3Jqpo,AäàŒ8kˆ#N,™8¹Bž{F,Íò`©‰wRÚk$Ï`ˆ4´«Þ"r§§­:%ŸC~ü l ]ÌúÌž;T¡2äl0e.¬epŠ÷ ÀšLÒW°¤é þqÀ€SµY>ÏÐ12³.­!Wú…ÂÃX@¤Ž±øT+èäg0Yy8ÅfÐv4 3,KOrñd  n˜H›1äy®6661PW“b˜ñ–UŸf¸æÉ›} ”2+È¡ÑÂl18DN1ÈòŒªì&01²\12ŸL¤Š[{´sukÇ}81xaÁEUC¢¸%^‹Âº¥'ZäXa kE.¢Vеã}ÐCyã’yUïbý-%yIӼРå"這+L;Á‚\›uoBš*¼Ø³L{d@d Ô9B¦RHÅÑ H“4ÒÉÈr$$$…’+)À ‘å&©,,¤ùÀ,q °í€”w¿C:wºÎ 2€°®‚!ò¬É©Í›´;4QW÷€!’:&® ‚Å „<éN?ùB0Í2È0•œL$0pH30#t3Æí¡e\*`¡ÉCY—ÚT—ÊDú{]Nö’\~)—¢¡„ê€è2««Â@My*rÕªIa+*˜ª;p&H“ä4563%WMe48È%M884ç¹Ú5›:::H56yž+<<<È ø¤6^4Šö¥s²ƒe¡–:Æ)Ã)ÈÀ¤gHß’C’¹BŽ !ÚxRb „Ø!Úäb ïÿ8!j( Å¿î¡Dš‹Ð™h´˜‡L3QáV“@9’ ˜_o]eHŽiH¬Â™Òe B1RÑúm\@>øÁá­RB ‡é— <5ä˜Ëi Ãq%'í욃ø{øôDÈi{È5‡[„‘ ©Î@¨•~Ò8dXSµ°jÅ«‰£ßÈÌÀÐ0#'§äRCg3ì3pÿ“Õ6ëXÛÙ"§øõâ1­Õ <Õ¡¨h«¡Õ”*áÀ±#„M«„»)0@®ª»mH WÆŽgkãÉy °ðU‹r(W#þ ðh"CW†U"yà7W"-·9ãÈ@Wä@É#þ ¯#ïUG)}W#&“IÝQQ@LCP€W؇Â\v“rX¥XÉy§…‚Ÿ45ÄÀ3ó¦“PUë);k—AÙ &;~ìWŸwÙTC„‘œ‹ c4´5aà1‰³Ì³L2NpØ+n¡ã¹c“tK‹¯ûþõ½«Àðç»’+«f{˜’€ú~yjWV¡wÁ§uÇFƒR;³Œrµ¿ÙS‹eM[ÒëI•r$É.j ‡2"cY^Ò3t$2 0Ê IîéÏQ‹LÅò =¨ BÝIÚ cDÆåÓçB$*s˜+˜®Cz·Œh~ ‰ ­ ð]õHöÑxàENÍë†Ù‹3¼L–ÁX\õ$Ž2 x:ñ1Öû™h<¥‡Ùß6`#Ä¡5MÙ“s€{ÿä`#‹†ë3‹D°ó“gÀ`ÂHŠL¼E˜ ´¼qÞjþiƒGmªIˆÁ²ëf4‹„Ÿ >º*EúªH@„ÏÒ(å‹Ã-RAïNO' ÅȰ)yËviÏ M&ÂÖbÚ×Q‹ÖÆ€²oóÿƒ9ø …Gª¹†Ú]òÖ ÿ9Ãj“Â8¬¼}áxÃÚž-z\[ŒŒ<œˆǶÞtB|nŠˆùYVó.íÇ ÙóáN¡%ŸJ/£yš4L NÅ-l‚›tb”‡Å£8RÁ¢¹÷šö]Šë'öôZòÓ¸6fBWQÝ%äŠ1©ïôL…Ñjٰ͵"ÏÈϵ}Êxä7a-°f‹•·8Aä¤uEäûŒÈLQu7…NvWpXNI2m– kW”]WÅÇÆŒRçØh ëVb)³cñУ• ¶©6É0#·ƒZÂ|®‡¸L”i´ï-tFn¹‘‘Ÿt'7…w0u?iu>Ú÷sM×þ1$HˆI–k+RiJ >LÌc™¼øqûÄÙŠ”TˆVGÆFÊÝð!SÒ™‘àPÐë ¸dB ž…ëg[1Á¶¥Á$Y䊽ŠTJÕцCŠ.'MK9¹°±±RTÁ& C&BXÍaìtG Ÿ¥2€ó§îA7»B©×š®bdäöºµ¸¸íLÀõÏÇwG¹yÇu?ÇE‹×Mcdª¶ÿV€Ù2Rˆý€›g"ñвAÆ‚VPm°Kg#ƒåo8˜K« °b€ÈgžBqŠ}’àâPCúéC/ #á° sµõꇹF²€ÇtåƒZ7¬œED¨ W"ŽaÐêÃØÌö;f ׈Úó#…{='ëêµö¶ä°å²œÿñõÓî‰;òí%öBÂG¶»` ²Àhá8©PX"Ê/D| CËåp뮥öÓý‹Í: ËdUànÀê;¶w9 ‚?ð d ÈÈP ]ˆˆÈÈš²°2ôÞÚqÓ) CûAˆº½ìv²±J¯Á·´cdd»»{ö³·°Ñ€ãò÷«¹:¤iðÐÒTÖ)“© Î òE;«Ú‡Þe·‘ˆ˜©`ÏæÏ™‚ƒ›ÝݱřÜ]„‡8$}A‚Ë늣vݽÂ֞˩#AäÙ§³³ r%¸úî2ÝÍøj{UƒÀ‚ˆÀkqÕVø¥ÛTL!{:äj …¾ ™ :hUÈÕo¾-¹¢—‹ºíŠžÛ‰àÃ5’/*jqE'Œ[™‹ÝU« 7e9É%·GS“ ¹™ª`rÓ··@–+×6ëaÑ“ø " œ:³fOˆˆÅÁßQRûe`Äb…Ì€66V°Ï…Ï& ¾x‘ˆ9ÎÈ;…ššáì‘ *]ïƒ5&`£Ž­Œ]5V¥á›Crv Ÿ Cªe!°…‡™Ø‹Ð=‹9¦+¨ñГ“‘ˆ°ªŠ8Äã{NEˆ3$‡ ÿ²ãZhOÛÛ9@9—Mð€^&XòVpL°û²²Aw€;å_FõGª­ °5·4%W´SXh!/ì…;D†ŒU‹ÕšÅÑÑ|r¨ˆ ýù²ü\h¡7`˜üù4RÀû¯"5ŽÕ8CÆ…Fº£A Avjñó‹¹ ÈÉ1Ž¥Jc<¾'*'CÎîÊ/û¨†ø,ˆ  '¼ëT’„AHHþû)à c‹å«©Ôð>ü‘ypàƒäÕÁæ-ÍkåEÓ¤-‘áç ¹ËL¼- ­ë `LÅý—ÑûI#î°Ÿk ŸG ÁûI•Lm2íGw¡¥g…L-5Ó»bÓfâG…ÐÁúŽCgGK2Õ½¿äÿW! ®bG · ¡6Bof–+'ht•ØÑ—:’©6J½¾HX¿M#dªå«XBún ÂóÂ=à•„°hÁX0Û)¸B/sApÌén{wOÕÁK‚4QCíF[Ì&c®Å€£ ±¥!³ôKøÿÃÃÛÒ¼;àŽ'vŽ Ž(¥Š·9³ÆöÁ~»0 ë~AÙKI=tÿ“ Û—þˆFGS(râi‰v¾ž&Šÿ"K£¸–d dÔ@!O3FžIê—®Ò×ééÌ‹ˆmë€/ôd¿2Kf‰1*²?C;˜]¦óA¯Ø&h2&Aíb»³¨ PF5Rz—s‹þv|€jã;Š¢tËFÿpœ‚¹µG,5¤#¹Ãðv,yΆÓGÏPø+ÆCÿô†/c¢ Cž‘åÀ¸C5¬±?P¯á»o¸ê‹˜)ë"ä]cÁj Ï—ïÚVóAÑÿIf ¦O—ր"E&·GF®øƒ¾¿–Ò!Ú¤‹° OWdäó@GLjœ¼÷þ?¨RbjˆEXÞaÏÈs€S„Œ ÄœÐïŸ84XÈH¾Ž@`ìp• ·ÃSCL<^•yµoá4Û†ŽÐA*i!¸0¾ð˜´tC…5l­¢°å$³€c(uaæø„›oõ,çÒ-ë ×Ða£ºŠÐëÒ½ki?Ãë?„3 j7L,ò‡ œis’øÅÆ… IŽ6Û@Á*•ÆÓ†Qà¾l«V€ùJÝr*@žié¢UÀó¥ÂG^,3|â°y}¯‘ "2¶ yº&À‹px{¥‚ s`ˆN³À rË”et¢u0‹Î"Be,>ÄÓ…þ_<Ù‰;ÑuäÇÍú{ä%T„#C\²@"î•$í†#jUô<wWN3Òýß¡ˆåh±T”­ ©aI)£,#¹€°—Ï åÖ`>{w © Ü‘P\,ûw:# r‚Ì£’škx2™wTz±àkIj„À‰/ƒÈ4<°ðT<„À¸le•y­ŽÒël;ÍÙ–åQúÆCÙCC ˆ!0»¹4N(»»ÁÃ!^ÍG’ºåIÁK2‹g_F; ÃR„JÇÃÀÌRºÌÁ¯§Ã0 Q—(`*— EáÕ;ÅQ\€¸˜P#Þ/¸„e':xKµÃÒaxÙ‹,$ ;Ýß§nL ;q pGeÂáÇB[Ú&”GQOå‰+oÿ8WÒ ‡3ÇŒŸ©¨²æ[RInÏx\@(’Š›ź¥ÏÿRÑtKã§Š ɼ%ßij\à¸nÿz<3LDÏ1‰„Êt% N^ï¯J3 “fä¤ L"N P„/cu.!„P¡]/Ì!B_"c hbã"mJ)µ×1ÖÕ:µ ?×0äP?rYKê¹=ˆP¶TDŠ< ¾!uM‹fLõžiûL"SÖH óÈA@‰šQ!„ N†åý9íZ +  YÐb ¹±Õ“Ì1Ÿ°ñör…i„\°shØe ¸9‰+ÂŒM~Î sËltâÑô u’Rapbdq@›AõWL@] 6NÞâÚÿÏŠLHˆIj¶\{_JcŽÔ&ßWëÆG°`% 2t“1A‚›ÐëÿoÆ‹<<Iê€P‘¤¼Ôzšnä‚Ú›1ó¥ã I­@ ÎÁŸbÈE0Áq&]b8ÏThaò@†€Ðu•S•À–b…ß ¦¢4Ÿ“§ “Ñ6Yjƒü2ÖÑgcÂØÒß`ƒøáEí4a]9I½t*‡÷4ï·ŒÝÛ)‹8GÓ4MÓV¡eq}CÒ4M‰•­ç¹MÓ4ÅÑÝÇÞvÜGÖ¤z¤{ãÐ{rB}p~¤y»œØ‚ëv „j·æIól†^8ˆR_xž4Oš‰F`€:DŠsÒŽó ›¦5M/M˜&Éù#4MÓ,\kz‰KvB†À%@AòB& @BØÈ„œCHDà/dB^xEÐCB&äbïF˜È‹]ì4;lwGÜe#q „Ø—€aI»÷9äK“€êc eÓb!ˆu6 ½ˆPz;é Ö¼-eéh;8J\Sä‚ç°P,N@ š·çÜ4XM(Ò¾k]d¤]»lˆ>&¸\dBF&Ô`ðè`ddd˜¶+çøãO ‹ •¶•­ë‰Ë(Wùlw„>•~ å'×#7sÜ.+ÒÊ‹'ÐÈ w‰ˆž‚x¿}3õuMé;€%ÜÕÄ{¾ˆL7œ;jâ¬ý:xÀÃ@Žw$Û óÖÆ“"Éjn%Gã`q*ÚqP ™“·AÆ›=œk;š77˜é"w¥ ˜‚=Y·ŸÔד( ¾ÐŒ¨;Ðsw;so‹«‰ºTݤ‹ú£Ñës™Z;þvCÁXB½uÞÉ"—(ô콋HML,FAdïô…w½ ˜‰Ñ¢.ú^ÿ€Þƒ¸7 ¸F ¨tÿ[À%Mu\jw{ ¼\늂×ùJJtC!¡‡a#ƒ$ Ÿªi,.v_‡†ð0«;7}†þ.Ss;Šˆ@³ïº·;ÞMI;ÑÿÇ¢Úë þÄ;Îv ŠFˆA™¶¿@wöGB€rÅí°¥°b7ÏAl+À  iŒõ@`'½1rA#ô­ï“ÆFj „Ïî(-q*Ý}üo¨¦÷­9¸;m }}þ(H$ww ³]kÒR‹¡?Á-ô:u»Gû~SŠCر¿‰öëG)>Hø_Hß+‹ÓÒQ÷ê8½ ÇCÏcßVY0g×ë‘Sð’ Aÿ‚°*JÂ=2•@ç¿U2$#GUUid9x0P1‹]ç¸ÿ7ËÐ~QŠ@ˆÐEzÑÿyƒ×Úeo=ø~ ø‹Ç\"96¸Ý|@Šcóã Ò,,ãEEAG†8—uUŠã¹A˜6 2d¨¯¿ÏvŠGõÇSÃH ÆÏwêdŽ•Ë«²0ßu]º¤÷N=ô®CEì’°CÌCˆŸ:ß …äË¡„»¹uß»4õùŽÚUÓ×:ÐÈÉßußë#ÙÑx‚ç×Y(dR˜ Sri&Á0U:m,Ó.Uoð\ ÍAXVT:u3ÜáÃ~ëA<±I–‹Ã3+êøMMņ…l´þÿûÑv+õgÞ3¤ŽOÒVù "MòM8®,és/ Ò!ë]K;]t¶±9úUQY«ûÓr¼Ø1Åo}q<²¸XX÷»©0|ç‹ …~9Š>qø‘ZZÏè ÷¸,Ã÷~@H MCƒ™@ .-9hIh û¡‘¥îð·D´‘ãŒIóɉMMMM!8È‘žtUŸ %GÛ‹×ÑÁ¢Õ!mÛð¹âGVëëGÑÁR±4RWgH®’ÿ}ºÉ£c-JO2!ÍbE¾sdÂ2ul _>º·€©%?í‹uøW^Î~-2ZÎîs´9Û¾ÎF2WhL´4ð«'Eò±’FFðÈ@rÈ%ððˆÔÈÃðÉÒ\½ÝQKúÒU%òq?cððÉÕH+G–ÁÜg«Ø\‹D…Š@’Lt¿Ûé 0,¯-2ÉP˨ȑ4ÝCÔ¶ð𰓆¶½`f‡@íZW™¿’)»ÓB†—a‰ÉÈ«ç#_·äƒÆJž‹ŸLÑdÃÒäȉU"ó@È ! Æ32,†” Ò%¹Uc1Ä?r¯"Äp?î‡y‹ ¯wï Vã €ÿÉ7¨qOèÕÏá7ÔT,þ{†BüÊ\t]ZSÕw4’XMÀ˜‘÷Ïá×~EŠJYY#²Y×âC¿×ƒ%˜6G1LC= CO-ÈÈÏð𼃈·!"ÒW¹I9™<ã³®ðð±(À*dH¦˜¯ððzpCAdŒM\“”fÜ{™7!>AŠ@ ËTKÅ„Óý_m‚ «8¿w:BÿÐR¬h¬Ãå˜$b’}ð@–‹PZ'õŒÄ ~QÌ`.N”®õò²{› PÄËS ?aQǦë%š0ȆÞrMXD>ß“ž†Fx´ áÁ¹@è6Ç â o]}½›NB3ɣňÏ&!ë ·¦Ìzг„ÁYk³ÍÛŒ`Q~GCFAprÇHkßëôSW黣»d Ù@RwX‡‚®Ñ)C:ÍÔ¿©;Ó} PQ¥PHì®™¿ 2³ S+ßÒå‘V°ßÙ9¢!ð}µxkB2\ õ"ì`*sðïGa„<ˆ´±zJYC‚^†ƒ™:¶·žÍ+†Ï/ÆÀp¸dÕl °–³›?c ÝZ¦ÀáÈËçt|Ãßs×6ü`ur“ëlÉk…L1,g-ÒÁäeW¦Ã] :açäÆÝ­ÈÕÃZ}iH@ÑøÊÐEü~Nªñ) ŠçÐ` ™éW €û‘Agº&¿ëZ–£ØU«S“GÃò’lG…VèºV¯Ç¦1È•M›¢ëc0&k GíÛ >ÀëYÅíŠiÑÉG­“ QˆµïG2—š×ææ @ 9ò!C-ÁápXA€7Äç’77WŒ¸LÕ÷‰WôbAŽE îU‡}8Ÿ:£œ¿CGÛVZ¡*@N½à®Ç«Ž!:MŽã|F[V®@“Ê^ß§€‘)&}]¾ÏÉÔoY´GÙ8³rGãä.7D¼-¾k¨+î¿´ëfC·[N_Fœ á¨]éF©•¨ÂWSoá #' 4Ê„S»ð™÷ûËvU‹>C]8wòØ ÿ»ðÛð„„Ë R[1Õ;/™uƒÁ«Yvà Õ‚C]šÔË{étzŧð f;6ÔÀCßQ}α¯´CÑ_ïëj7fÃAÙa^¿RNç>X‹ÏÉÇbp ôP:MJŽÝÚœCž»ë×P±nƒ!µÿru«?]òp8×c\)ºÓG‡ðž{^“ÅOP#A×½€yÒag@½3mð×ÅòëQrÕþÖ”§Y¾Eð~9;ðöY; l*Ž'‹6s 9ö½¥ìëo)}“e¢]_m K$¬Š¦‡J“GC7"‡;FþMS’¯ÎwÞƒÃ(RJF“W“tå™ÑŸÞŠm¡°VSÅN h g#‹å+]"Çݲµ¾HMŽCøñD´àŽìȵë<­ÑÆ«I­­Ñ ¿¼m‚¥woFQ§ÐFšÁœAP­ÄnÅÞ¯<±€ Isl$ɪM–†)ð¾ë`¼†1C~%Ó ·ÉQŒ£;m™&©¤Û/£[#g]EtQ¹úFSM~ N`suN;uÕÒ·sŒÒq¢é‰u{±Ð]«x§x#€Bô’áKI9yK:zz4Ãô­Îs+O~›L;ÒSXÈ'N÷­äªY P{(dd©fè§ ddgläEüLP´Ñ H5)k¦½'8þ4J0TË!ÃÉôÇ¿ar€|Ü=u‹–ºÁèÿÉmLDcB±§6 Ze¬G®Aš„æŒIÿ#±~uFCGm°XD˜8³™ÝU5‚K?j ¹cHUN²\Ð÷rM»ÓË‘]´.ºM€È~,|éOrò~kË~9;:zËê‡|zÛë!A[CVK8´ Dè ÉÑ¢?GìÉÈ!ìì©çì³m¸c$AÑùBÑä®äè¡Õð}c[ììðX¬Hœ®™én)+Ä|‹ 9‹èÞ(˜ÝKìÚ hæMAš—W+q‡›2ÉQ!(û+CÚiù»d’æNJÈìr‘“—‘¶P,hÖÕ ?¹[N eþÿb(¥Åö äƒä‰d,ÇÆù2?ÔƒÃ{”4'"7>Õ@˜"6;o#ÆÀK{F¹¦äB–#ý+d"¹ ’Kš—;/À͘tÑ«Ð@ EÂý mZOí°šw‡&×h¡„ ¸ä诺¹’Iš˜˜OB'ÙË`2’˜4Y(ðŸ„Jüþ%z @×íu#¬¡NN¦WOGt0½–V}G‹– ÈGG³.ù’gKCC™Ž$@‰7Ý4 Æ7³‰¡-;È4vš¸lwùœ[ÞìØÏš‹M ZÎöÉ·‰½ÔééÕaÒFž ÆÃšä ÃÈÂ` bQO„ ÈÄk Oá- Õfj¿…ÆdOš‹È*ÛceýF‹òwj:öítÔ¯¥aÁ‚ñnòå,•›ƒèÑÑÆÿóžŠáK oé\ÍþêÁîÅEí'ÖŸ†£uÕ-) œzÍ&zXsBaD œ|«ýU˧‚Í(Š_Fä¹"ý7Ü•YÖñçp’ˆ,“VG1Øx]Ð×ó(2ËmCI©®é>»ÜÖ]é«êðÍò!в!ËW^W^-2Q—Ž&ùPp÷ϾCG  —Kíý+'éc€|-9 ®ÇÈ•ÈGGÆxÊZT##d׃‘ºÏ´…ɉ_ÉŒN#ˆ~hßàhíˉ˜Ö~ƒÁüÓ ë9‹1‰ÂÑÀKk¿ @„9ß[yõk‡J‹ËÝâ•îW¦m‘‹…‹q•!ï›%—ͧˆÉ玬ˆ /0„<3I(BFBNjÌ·ÍîJ¡ÎÓ³°¿&â7ñ{3¼º‹9[Á×$N+LÒ“'wJ—ÀedäØZ_ϘJ;6X–QÓzÓÖzA È´Óˆ&~S‰9‹z„‰y8%9ß;ÞÛ‹Ù€PmáÛ¨'á/SwIóÃÍAòp-èx¦ñG„ê½l›wœjÑø$˜rc³ܘwÌÒ~Š.³Š°ƒòl¸ @ñÒD}»$eBEÑû©¿cªk|ðüë3./FЏ—…ìGÝ3±Öàâ °J—ä'ÀÓº ±’„7‹œ=‰û³œî=€äƒÀ ’v“|I^67+œõ;Ãý¤B~íAFC¬2Û¤(ÓI˜J ð  IŠ@á /”):+ïÌÚà‹Å+ ™3Â+Â>ª5‡ÇF;´ìÂþw;J{ŠhÌH;9d Æ›Âà‡‘`_ÆeŒp‡âÜLWˆ€G°VY¤ ë¦iëµðæç÷ÑDë të¨ë Ò먜€ÕVZÕ¢RÅR”cÀ&+É6p¸y ¾YDñŒn—}üBÂÊzkÍ|“´aŸ}ê~qh}Á¿F8»|g;ó}x0…ÍøØÄB*IËpŸ™ ¾W7ØÄ·£ !ëæ¹†€Bµ<ÝnšaëQKë|;õëÆ©5lëÇšMb§qÄÃÔØD^"O q§lõEDͲŽÄS\…“ä ‘ïC#¯|P) ÈÎÍŠƒ˜vH ÆÄŸÓÑÁ£aj}M|YNhx¦}Z[PºXµ#PRý! ²»(放0÷/ ±B¹Ø|óó¥Thh¨³o~Klh33@އ¶“4xO ]’ °Ü´hd`TRÛ„îrJˆËúL`DÌ8ôNÄ~¿Ç;ç#lN»°Y@ F‘XSdò*M`X d!XÀúePäSXÅÐÀTO„J÷‰#Q–Ž,•‘ZQø1 ”¾,¢…hµ–f'Ï™EŒ<=ïòðTw"Nq™0'#Dd‚äc¨†W{ƒÜDSåDÎ`ê“X«U„¡É(xñˆßm -¸rÞi­DIÝ%— y^‰E7UÀè‹Ë„,Ï‹`MEɘ[ŧ²!Ë h°l!˸pȼ²t3ÐìÚP`—ÓWñaˆ}É–¼±è\ dY˜l§)»§ Èr„,ȰÌr„,G¸ÐÈ· ÈÔÈÝÄÝUØ#oyÀ¨#ðœ$0\ •ñ9yø ƒ3´xöÛ:ÝFhÜuø«üøðNUE”Bæ¸O%]ŒÕéþÁžUŒã˜QEààHCŒrV[Èàë{UD ªGëe |&,[’>Ûè ’3wFj¼ ð?Óʃ¿qRR‹@dÀALAîÀ#™Ã·ð#dyžÀŽÉùó“¬Go·x 4§,,ˆò‹Û|¶‰vEüë|2\œ‘ Ïxˆ’ðÈåâCÏðpí 8‚tTóÓÜ®6µ‰78'ÉŽÄ‹{"oVxýž€NV|ÝØ|ýf¸6ßàž‡z"ÜNpÜ~hß ŸVžäª:tcƆ䄱Ã~4ê¾å©CäÝ¥“ÛËÅ€Y·›¾m$…çØ Œ*Ø^"a bQç’$ü·~Á0Ë»l–¼üè«8¯‡”ímowœÝN€÷CÂ?S€à‘¸‘t=Þhâ—䊜lˆIÞmZ…S‚@`¹Ú$ìq;y—]k¤…[„n ‰Ãtj ´RTÙ#íDü.¬ j,¯<øÇÁÇ€h å îl{ÂÜ48‰€pQ Zà4 ™OÛÄÐÅߨŸ™âŒüNj8BR¿Äh|}ƒH ] a%k%¹ä‹Z‹Èºª¬`àˆ¦æÝ›I|%LÞ§Òu.%ñ·!»MX"jiôž0’…'„ÿóÎk‚€†Xˆ8¦ƒ]S€–ì+¾q_ä/€¦}Ã~‹3” n€< †<Ï6À(K`«!¨CPx"&$x NGwœ/BTŠQT´Ä†¤¾'î<—6~~üuIfÕ´iY“Û’_ 0Q)W ª€á§iÜ@!¢Bq1=Ö'p.œ³<«u+`D—í)î°bƒtdQ œ‘‘‹‹‹_NŸ‹-Lv$Œ8·5©³Gí"„À|ÃT˜å<&’´'™‰Ïë* $rº á­‘bRXу㾻jUè…9þmƒøûj—o )¢O”I~ÿø‰]4ÿ›”hç÷;8mЇóÀg‹ƒ{Œ Eçö|Òˆ „)€Å™hz¨­™Â% V~ç쩂ד„# ƒ\˜o.I¿éHÀU »/ýG?[ ‹¸~@Ú;Xv+ÈÂCü ‰™à P-|7ë)'ÞÉ•°Äô®R&ï] ÿ÷ûƒs ŸÿP‹JQÆ,2¤ƒ> ÞO€K±gg>rO¼1h„ÞÉa¼ æÀsÀȵG.jmÀjrظáиs¼dᜋ“2gÈÈ W2ÌÌÄ €L ÄÄ€M ‡´´ùdB°t°‰Ä‚׉?XS}_ÅA‰A£ë°ÈòS;rö¾ Ð Ü\Ú‹ó1¾wsÜH÷±p‘ ⯋ù*LÁò)Mœ<¼šîí‹ï¯à&ú[üÑ+ðè"&ë)³…[¦‡öJ†îÞC ˜ãþ&‹ð+ pÊ5Ã+ÊÀ£O#Î;‹–v!çzÿŸv Wgk+ý™|@oð‰~?Ö;ýwVU­2Ïõ(‰È‡³ÇöëK.À°wŸH+«wK ò¯ W“á³i7“V÷u+÷ï²i8„íá›»!x¬VÈ_?›€Š×cmpWdB.vü¦à:»tƒ¬¬GH; sâ%]@ •t5‚¼ä  ~ÇË Å u&#ƒz(Ò Àg ùë$×C€ˆƒ‚ÀÚ–&¿äË^ìé—„Ò¬xÍP1œIafÓëY¡ºÅk n°H¦køÆ¸ íƒy‡µ!ç#ÜóŽàótX uOo dßYÇA@Ç\‚‹K\õüHuÕêžJ@ÞµÅ!AÁƒ=y—DÕ X³IŒW +?‚‰PÁ ;PtrœŒœ¼u* X€·ŽA2AS±+±Ž×È "þ_ŒG0øRpŽ´Ý@qb5 ¨8XÀãfjçø­Àá)%|Õ¥‘ îà×P s¿ƒ"õY–PJ‹~¸qÃ:« ½P0ÒVŒàØw(¡s•–÷8†í†£Ý'ßQøÅíÄ€ë4|gHmu©~ 9ÓpÐåƒã¢F–¶•MÒø`8ýx_;˜¸x)x,d%G¼ëU¢aKÏa9 ×kƒÐaK®„«„Á&}ë Xûm¬à»_x ¡"MW@,%×EWçÈ\‘ÈÄÈÄ‘<#—ÄÌJN.9óìðÉ•4/ôðôô<'ÏÉôäìrä''òìðèð|`m%™çð É!‡èìðy‘<‡èðôð™§ìððÄAž“AìÄðÒ¼‘/ü‡a2ÄäVíÊKc`Ñî  µ2òâÀ k ÄX‰ ­kOs"9 ôð ÄÏ%Ï$ìÄð 2È ÄŒLÈ€ÄÄÖ–<“ìÄÁ<#Ïk?2ľÜ€Äƒ ÁXãHˆu- mä<_r„‘]Ä99ÄÄ9¹äìÄðyN&ć#™`K4#¬n §9u ³ ƒ3ä0<ðnó—•l©‘+¹ÄÄAèaròðŽ(¹ •Äc¥-$G-"þ+΋ûÁïçãÝ„Ò Ò² û{ûØûñ"rëûÿï6Ý!é Ä÷Än“ j¡u/$Þ†s=ëÚÚFq»p1~Eÿ-ì§žm¹‘8×f ßÁ¡…°êÃÎ Ì m¸[ÂøîFm=±³Ù»ÛÚÂ[ Ú*N+#‡rÈrÈ! rÈ!‡ B8‡¢¼xC' H‡gÿ Ü9?”ÓAœ†“½d°«C4L6Ê;8¬5J¿«mî €©¯Ø½0:ïÈÅ8y+9®Ø4ÉÁC®ØrÈ[4 D†®Ø>Š…9g`“wÄ€bäÃÓ‘ÃŽpÀãß$Ça8q'‹úôß5ü0ñ‹÷‹Æwz‹ÀÖÂÁ¨ôÝ ÁÐDÏÈ‘CáâÈ?ûÑHÂØ+×ò«vîž-þâÿî$‚;Ã7îñSa½\ È}Èa­!ahEH4+ºWOC ~ˆÂ‰G;дXÂá¡û4ðW €Õ$ÐæOüG( lŽË„Uü÷ï ë„&{Ãë3j"ø˜ÊìstWÕ†›Ûu“FXbë6Š3Sx„10ßjÿ·­ c\6±+øx/¾…ÈÜ· èx ^ƒÂ Un¸ŒP#6 ÿqNxÅ7¹ŒpN!í™ú‰)ˆ«Ù‚€Lpβí?θú1ýD ŽIƒþmÄàLñÿƒîŠB3Ø”í¢`÷™&Û-©GA‚Gµ<ÿßÁ±š[NCuæ4϶Ú> »ï±ÿ?^÷Ðë¶23ðBæ]4³II8“c‘qø#§uàƒù AŒûB3tcðÁï]í¿:`ÓÞé ‹´³ B´¶À‰ˆ»¶G ¡Ø-î(P4ƒ©…Ç¢ …ÑôÿrÅñrH!"êølŠ¡s¸Ô 0‘uçE§kÀÛ,ÒÜî™Z÷#÷Dg·%oç«Áà3¶òÝð{¼±:‹d3÷"S 4è.ÉÞ"ÝQÉP$˜,¢žOw€\p­6ASàƒ‡ S¢Š± ԕ܃La©¢"{ ´–(e.O)ä‹È/¶yúéÁê áÑ#„Ñ› áþ˜Ît>s3ÉÔw‚6&3ÑꈧÎsK9Áxkµïê ÝE|B½|‰_e(<þƒÿ |éXCÂ’¶SLPÞÜ_x‚náé|Ç…*b$7 Î öí  …&‰ÒAØ^|¶ìßïó•LE€À˜U€o'¢„Ä7Itøas×ÑþmØbG³-oS%ƒ_8´Yu©«1MN ©„^/ÂýA„ãsj[Z éó55A¤?|Åõ«µ „Š:ß´0ð±u9vØß? ¸úâþÇÒÂG yþyVð?J* ÇF 0sæ²¼ JN(#$$HãM¡}ƒ ÿE‚WC‹Ð} Äü÷]ï3Úíë~ òŽ!ö1nÉ0 *ƒu$D=;°ï|P–ã ; ¶å ~#Z¹T^|Ú :ÀiR ÄÅF(• –|ü ĉ^‰3½hS›á˜ ]\[÷}„ȧÓâ),J˜ç}·4%EùÀ0PL‰8!Ö]l ßà5HÚX¹»É³»Ù‹uÞ!8&qÈ 3!@LDXø o'³ÁúÓ଱gÁwd¹ÐEÞÓ¸‡×*Åé –—€· @ CeYDÇCñ²SšœõFV¶ŒÕëBgÒw ïÂä‚"‡ "IVK•Þ[ܘ"A5„îU)“;“Êú$2BEëèŸÓâ(í× ‡2¿ ŒïEtÖ‹h5 VWƒzÞJÖÑkCxŠÆ-™IM*tE8„ŸÞ‹_e ôñ „Ð8OÊõ\‰G c|óþs¢PC,-.;œžêðv `[+KV÷QÂde‰sl^g½\S8‡vÈ€“:KX°ÿ•R3Â#CT&úlñìç<(5Hyt5Lüþîþ7Ñ#S7#Dÿ4Q54#Ф#¬¿@_f‰0…¢0|KÀCœ4¡6Î L¼’<7#xx…M.IP.°@,,DJGo#C$‹XÑthêXÁ^f,f›ï½¾%_1f#Çf1¸@:2O#í°;—_˧Ø‹pû9¸ºWK²5|± FoUÿ£|ƒÿ«PŽ2cã ¤ ”Þ2áXy[;tÈ)·ð'à j[ý!÷w;žbA[‰¢Þ–^­…Žz† ÏÌ&4Œ0!Œý rÈ’^F|‰¾Á0ŠOîÂó¯&Þ$q&Ÿ–w‰Ð!Ð#é~EÉH|–ü Ÿ‘HX?ÁðõÅÁëÈË …íŠßæµz‹)‹R^0u$P¹…ÏtP0+ø}¼SîHÿ@›X— Q8ìKAø[ˆ )@UÀJA’ý;ÙIäp;òv‹ò€—êt7'@¹ÿßSšÓC SBs)s` z]K)q•C¦y™À>P^Ü4Åt¿èÛ ÅoUŒ ˆ=} ‘Axôx1 ðtòò.ðs~{-À';u^‹¡”N²¿ƒg9‹ 0Ôê²ç1wS(uz‚PG“ àÇsŒZLɼ(cHÝo: ÜCÆoØŒ¼™K‹‹CS2B ÈÁaÂ>NµMƒ»ú Z»?îô•±õ’} 0Á~E¼+ëɈ ¯ñ׺À Ÿq  Y°¾sZZƒ:…z,=Üm¿:ÁþÁwCt&™¤$ì¶àF]ƈ ß`s\p`ŠRI)Hå‹…/‚%CÈûž ¤¹K²²ÒCÎÖ‘Š— Q à¸-o¿Á;ú QZŠ«$=WE³¼%j,Q4ãpSBP¾7¤¡Z ºEI„úÄ0ƒ½á ðUð™E{#“Ž‚VÒ¦¢°„}‘ub`Ïü}øø`' ÈlÔÉ {¾,]GQ•¸ À¡xõY+·‹Ã¯‹ÑN0;Pp]<1¢eV–%Ugy”(×?EÑ-*½Y¼jøAë`";qu=h.ípIt"0;v+ /RÉ€Uø½iz1ÆÌ˜#±Hó{6üþ% Ž•þ*t( Et#4E”°I°[g 3ßqtþ’Gc âdB$32%³ ÞS$#D@¯l$S8Vj<ôì¸ý¸Ü‡g;8QšEs‡f¼ÍuÙ tRƃ´8EJUÙ9)ã–ÙhD@P¤GL‰3AiU¤c=¶‡¦'"]©€1Iâ[°sµÒ›äqç8K16’ÄÉ DƒUþKZø†ê1JD#&Íí’D ‘’^üîS8A+_“‰tðjÓoéIßÑéËùp‰»“Þçƒ@Lƒ¢ÑxÍ D|2Ûo$$ ƒ0õ¸ Ä#¾ws8ê_XC;Îs‹ñ5‘ °]TK)$.÷6ÂÇÿ ïÏÖ8|•5uJ‚9 ùT ¿fTbWÿs땇p¯,G/GžŒƒ@…“gØv&Ú“’3QÆÑC|[lE\×!)tºÆx*h8hªHO—ÒNéä”P|NP¨€l¨x˜S:™x°‰Ùóî+ý±X,ë°ÓvCêyí¿+l+ÚÛH }@üg¤š84„™8Š\9ÿ~Íþ·ˆ7Š9Âbkx;˜ ûÞ”rÁlßt;È `ßÔ‹p84$_>:RëiŸ¥}>ÿŽ:.„÷­FYa|‹FA ƒ û:u<4,ƒ 2È$ wðÿ ;Ñw¼‹Ú+ÙS»JYƒ´êŠþp;û_<8À‰pƒûF}1¨*ø!£—$#\ÚtõvwH(^‰L v ÿ½Wk6…/èPt‹Ï½rxJÕ‹¯ WX8Þ‹¸÷,sËßÇüCê5Á‰c¸ŒÑ&Æ2UÁȹËù0†ý÷+ù¹Æ+σù}½ŃQ6OKsõ\¥¡ƒ]ÁÿQø}3(r{<+{tlë00ãZ­AJ}œà¡þƒÿ%OïéÆ;Clwpa8yžÒ!èîÕßÇp ™þl)k\xX 8k hàáYw;Çw& ú¥f+β%·ÓÏHuá£O@N}áþ‹+ƒ}=U£Û;ºÏaÅ tðäïºÁRr%"1”SN]YàÚ¸ãÔöê"T éU…J::Šs™Rƒ…é"ÌWVëW÷†Ø# ƒè¾p{Ëð¾w#ÏÂ5t! Ä C¤¡n!Óàà%+áte í/ÌÁt\[gérõ+ÂwC+Ð'tlj<ýVå§K]§\|SÒÎ ºS\Ø»XP8‰Ü˜ ƒ9›˜]àÌÒËžª‘'1—ðâ ׂ–§,`ƒ £ë*@ÁC0ë[ŠÇT3÷R-µÙA/‚t!ÀþëàBšZŽÁl6õ&†ì‘=!—h¸5…=_²©@@…` Xk”(”kÈl#S4]×­ÜA]ð.fT¢έCK PMt@q`v¡+Æ=`Yœj=P¥@ÖE¶çÐoø­`ëÙu¼+Ö9¬’, Apkëá1`ï"FŸŽDh²‹Z[C¿» ÀÝ nŠS` y€ê3ܼ[Jg 9˜ˆÞ`½DÈØŠ{ô CøUÿ„´³õdv ,ò1(£eö"ÜÒýŠˆ{ó Qà*g ÃJ;“¨x¼ ‰‹ã)µa>ë`;‹ªwYsSÿ* €à!ÿ<ÁàÏlÇ1án¸"áQ\#K49;ÂûßNíòœH3¶=¯ëJŠu¸ŽŠ!²4ÉÒ½`(›= “X\‹««r9ëV'Š%í7oL%fÇJ“Oœa8;‹ËÓ¨·¼$Jâÿ·™—4+ÎÑ;Ævq+ÆBCNïöÿL¹ u÷‹Ó+×ë`Ž v?DÒÚyM Ú TFŽf ûš;DR±:‰ Ò •AÜà¯é#™à³í½'B)C *Dwæ§5Bþ B$…ãÔ†dCBŠ=äB.Úˆ´¥5 \,U@¡\,Ž]iL¶¢Oc(‘ô@X!JöižŸ^Dëk…/iš#DÐ0 †¥ÛzY ¼ òÅ=ô?MBtëðÐ §„¨ s ËÖ8ÃM&,É»ºí`Áá)>Áà ¦,ì°‰3{K!òœv¡$’´…:…¾kkÚTT N +ÖƒÁë=ó¾+€+È—ÝP†jÔNÒï®ýu+Ãøë +$¸#FBÃ"VƒH˜Ä¯³—`‚øs7ÄDŒ4R÷0Ƀ0ò÷z^û€mëJåÝ ï0à(Ý$à+¤\€çðÛwÛP *H(ÇH0'80JË{Of<lPLœk"Pÿ]ÊT!ÿ2—ûÛ ‹wíŧ°Ñùa1Sʾw ãß>æN#Þ8ÓãX8P<¡ ç{’‘W 6èÆ®õ%ö¬þ¢s-¼gC×½„#C¾µ[?¹0%5ò ”„§à¿büM‡±’µíuAôàà÷ÞÏÕÎ×? §Aƒþ0ý}®~%œ Ùþ~Bv!¿û»õðÏ_ë‰p$®4 $\¥ð˜¦³á jÍ%0èCF_ùL ™ÏïDZPçXḠ'úŸXD¿–„º.‹K$óÁÈ .*““¥a¼5@òûå}…Æ4{'7g(Ã’=¼Ûzø0P,ê÷+qÂk’$P·$%EiÈGGcÀT]K׺—,‰ŸM+ Ç^ëø;÷ÉþWcÎprdÿ{+÷ìák"V¡<¡^–7ISS{ž‘àÛ²0;¹u-;Þâ5I/,ï©#…ƒˆ~8šj#ÎÆtèÚÀ³DžÓQf—3;šŒ,øZm; mÇ@øÄ n!P JÂòA$D8ènÁ ÂMü6oŠ£N‰DsÛ}nÿDã½ôè[Ô1ù‡<÷ã'‰ÜÖ7‡N8³l–˳9b:ÞY;ßY6Ëe‰<$=ºO>ÀY6Ͳ?Á1@œ–Ëå²wAîC°D:F„›e³lvGã~H¡“I˜eÓ,ïøJ ºXðˆ ™¾À¬>s"6©¼ü,0„GÎ"O Üî#›Uðÿ#BrÞömÿýtJ}ð‹ðN@0¹CMЊՠp爲ð[ñj|UÑj`PAò~A¬3öí§!uºX΃ƒÑf\®àÈt á »•Ž$àDá!a¢Âꆻ έ<>mCž˜Ÿhƒà»øÆòÒ>UBSÁmð;K„Ä„MàÒÀÁåØÐ†]96¡v_nŸ‡ƒ¸?‡C:h‚ug˜^‰_¹w âöEñr‰ äÅ PħUƒfÑÒ>¬q'à4M°òA‚}ŠûŒ'`‚)1‰\\üÁ O!ŠÍUЈM!Eâ“̲èEYQÌ\¤!ö^™L!O] ¦ (FÂ¬Ý :ff ÷Ó3Í we8‰5&„ï@“;Ój¤i¦ínR÷ÉM+äd*2<B«8aÖ‚À.¾5‚ ía`æ òõÐíMõœŠ›¹ftlW©îL0•@ ‰dº°1ë50û,Qûê7ë}‚T@hÈ /¥‚'7ä9Àà;}ä{‰ [ä»ÌlwcHl?òã¶Ñ½í+P|Ec÷q÷gv y3A+'«îDM%ºR%c@9o_D Þ7äÌEû®Ý+Û,k1ä)½¡—8ìÿš\ËN@S³ª{8I|T~0¤äŒÚp_!(€ØÿqÀ\ íÂÐ ãw…+ø@v°ÿ‰™ŠG°à= dØ9ÎwÀQˆ[!æNSwå M¿Z (Dh0 ‡qŠ%>ía؇ajÈ<)÷ÌaâÊ#Â\ß`ÞEäJ0» —2^Ò3  &¬´P pN@°Ñ-1L£ \'Ü]m¦'¬ôHEsú+òêOUâÉY‚OíCp¡uw´#Éy'¦×ݺ¡:ud8 ‡·é3ùÈǯ‹Sn°yi)~Šû®¼t<ùupûáû’p°tÛú8ÀÝbdòûSÿ1‚MõÓ>{ɃCÓëOœª'Ë;¡ +`±*׉}䊯ðCdÈv!×9.ƒë)B¹}å=MЃ×ÿ¯æÛø=Ý3q;?‡þŽ;¶°D;kóÓñìKÌl‹ä“ãñ“ÈêúÖèÈaŽRÊ~eÛ³Å1Cå6Û†ž°E¾åSPX‡X¥·z-)C‰Ò°&øp¡RÂÏ€…)ƒÿrk°H C’rbÀ".Êø×£?ÿô‰Pü‰ zì)0R çîèDÇæÚÊh¶ ‰EøJ%¦ù2… ü,ƒ/yÅëò¦Iͼ÷{ð€}àŸsöaðum½àÙÜúâ•)®EÜëÝÈx-œE#gÓ«§EÞKÕ‘wPmô#àTᇈÞ?×a3ë¦Çc`Nt3ÝwìtvŽªG¥Å†¤Bƒ/@+ð: H[. t @½….=hé¯à¼n }+è¼i5(xt>_Ë¡ 1;sHøH®îˆ‡#!bs™Ó’ÇXP†ri»È+ä(PÈp°E~­iDKÈ å„äâ!™w"ÉAÈD0&F 4«Á2L—¶½seš;G‰(Ìøu3²_²KD;{v5wÀë#+5ûËÞË0;s)(&¿4ë07¾oÑ@;esƒëß9ƨœuMä(ïT(ò¬)Þ+ñT°?Š"ˆ @ÿ[ÿÁëÔø-uðéQïÙA¸`È5¬’ ÷Ì]8Ô<ØôE{â‘ÁƒB]»Eô‹ÄW>×è3èJ CJA¸Í.t9—Ä]! "+=I¬«ë+1l²C°è}ˆë51v(…èk»#`íÂ<[Bnàáåä˜îu@Á%;¹¸æ…s9t0[PÙJækÆÁmßâ¨à;¢·„ÿCÍ·`¬ÖˆEÔ5ö¨˜ï¬Xg¼´"1¿V­|ƒ;ðÇÝ}*TOQètÙæHá&œóíãkÏîQìeaTüÙ)ZºìAk0™âEw?¡4è*€+Couw‹!Unž1DTcP ƒ”¹¬?j4¡ÀK<ª‘ðí¸ÌB€¦ˆo¼¬,É",;á ¢áC DÔ¡˜xnðÁÔg2e ¡˜ä‘{".#´‰áŠœÄÁ™1¨(ã2ÿ2Î"> Ÿ„ì}<@‹_Ø t/A+Ðu"9x,:ØsÔý€Åûa‹W±Ç ÀàëF²vü˜%¡áÖ+Ðn4™w °ª06¾g/ÎÒI ®S,f X·d÷8öe‚Õö@ ‘X¨ –É&C7JŸuF'@<a:Áu,ãse—H\<Ô;ý_CHwPÀ:¨Ûë ,ükÐ+û‹ßFBëì†.þYrË‰ÅÆ@«A7°ÆiŽ~=^ò^4€Ÿ`{<s1û#<žF—?kyØB”’0 \%ð9 Ö¹ÂÎËD{áQL?APl 2!EW› ø Qt’¯I¬šh^4—ñK‹7$~JåCZ7‡Î|Òi ôUEôEœMá„ÂfÇP¯¢þüôvïø;ÊvŸ@ }7(B]œ÷NzwñÅcº„*}-שì¼fz o&† ÿMìS‚îþsîÈVÀðÕ©AÁð}?'8ÆEÐ@ÑÓEÒà_©¥ ƒÑ+$S&r 6+ð–úCŽ‹ ³÷Ž?žã¼C¼Û ÿ9[ î VðêÝðsÅF ¦ðgÍ8,ø OžÒ‚+Óo Èþ¡ƒÈÿ¥Ïá/~Ò X°ttG½í M…~P…þŠA@# l]œ]ü f’žAÃlprã‰v1\kÁ¬Ã‹?®'ÙR8|œEø‘}x%ÃùCBEÃ|¸ÏxÞ üdÙë7 UÄÈ—ÑÀ½ßÂÈä5mÈÄ"5ÍvžêÄH`ÁÌš,:  Àr,Å[€2TØa§ xMHhEÌ„óŽM%KØï. xÓãžMàI+Ô©ãO ,-}à°êrÃGHÅ™%Q·~ŠUô*Uä£#ÐÅ—±ÑÀ} Ôßvué¯%~9ÄŠ©ˆMÀ Q MÈ.)ìxå5UH`†ìçÈ+, QÜÜï÷Û)Uä‹ÞÓë$e}K<¬­¶„™¢uätIqÄ+D!…òuúðwx‹ÊI#ñò~xá &²çLUœC8¦îù;”_àì„Ævq ©! Êø¨–÷¡ôè†ìÔ#ÖSØN¸¦ä¹dEo0:Âò;Kô_éš+È OMœ+‚ǎѰ @ùtœ1íÓ;7rèE•ÊK1µà‰øÛ \Â&؈Š Š]èˆ\Šeé,ø+Ê}.Áù§Uú¤]=LšúAx¼á”ƒŠ*ÍÁ±°¯s_Ì#:0(tè–‚ôûÁìeëÌjdÄÖÓê5G —‡¿M ³Â{ÂäH#ð¡]àŒ+À³ Œ ® RÀé±CZ)—T˜Gãx“ƒe\nà‹Çƒ ,òÓ¼¡Ñ$è#,@º¦yæ‹08TfÛ!Bæ€(‹Ãˆ˜JÍ´¡D‚»GˆµˆÒWz·Y¡BKúD|ï0Èw™vø1ƒ|ò*| E¯L€yv*á\o¬È ¨%3òˆ° —ESöŒEÿ;‚L&4$öŒûŠŸÙX' ŠVEK;°P*nðk}O°`ʼ°rò‚ý;šf;ºr6/uýFå¸:œ8»ö5û wF<_wAºa auŠ_ÙÃVÆv"ÿC‰¼˜ ðè d7ŽXú$ðÀ}l‰Œ<·6š)?ØBË2‚×vBŠÍ â•vH ëðSŠ8?Á< Üp/×Í~òÀr’T@¼uª”‘Ji<Ï6,‘B"f×hJ=*2­cWÏU£|å âÙžoBU'%E\?ÐÂ3þ¥`(ÿl‹<$åí ÜWü•,tú|‹û+¦lZ|½©ví{.fSžf™a±`‘ޝúFºô ˆ‰)¯–¶³ÓÙí?·\Z¯Ó–“‡àÑJôæaŒ ¯]n4ÝœàÑ£þPÿQ<ëJì“ð «f»tö*Yó· I-ƒ„Q>úÎÞ§,Bƒl‹•¹ßêp9ÿP<çà’õ$t^æÕ¸Æy…0h„ˆµ;¥ÅgÌÀüAÁCÁ1߸Ž3ú“òÁ峋ê+ï<ŽÓï‹-…‹´à¼~”¹†Ï;ˆƒÃìB¥‚5ŒFáà ðlK*ü™¼?fÓåf ¨lR¸ÿw?hL Q]Šˆ(9´.M5·]¤ÝUIMÚ¾ +qïìqÓý»Ÿ¸‰ ´Ç ì¬ëq }v?K…>«Q&)^œ)"™‚༱‰’£@p‘«à·¸¾uQ ƒ\s.ɨ¼qœm¥>kÒo?}wƒÃýY‹ëbc!TðÕÛSI;ÇH–û˜!fï[²ÁÿKã˜?º"^SHƒ|ÖÂÀÈ 'WÈQrÀ¤(!œÆd“)Ä ä(9 Äd™’+tõŠë–õrò!Ûö¿—\rrò¿¿$%¨æ%Üù(ÿÔHZâB¯°‚r|UIì~ì@ÚÆ$(0Gܸ°P¥@i}êiƒqµr[ÃîQL ߸|jýàЋ³°;Ö}rzà ¾©Î;þ@è‹òÛWQ'Ëæ³Òs‰Ã/Q^Š‹Ù1Üð<Õ‹^Ó‹22²Œú“ƒƒ•w³;fäAfîáâ2A™MMmrËøJCøÈ”\ÿoàa œÿü’I® Güëø„•ohP;IXš¯ ¿¾“¤f: »Í!Ç7þãŒ‘Ë›|'©}ôŸç»’›!8{{Q_ž!Hì1{_Ë\¸/—ƒÿ»###³³!/lHÙ× »¬g×çEB@|ŒA¼OaúÂüIcJô!ø˜ $Ùˆ Ó‡(\Àíuã)¾‚»õË‹]Ê}iñÌphëÖiƒ¯5×ÕP}HER‚ẮZ± ¯PÎY~š YÁúÖÈ»±P͘·×Ș§æ°:Â) ‘óŒQ va,ñ¥¤J6Pp-”«úÀ÷a9×fà(tL?··Jð00_*C/HC’+SJ÷G]V„ãMÁC$¶¯ßIZ?Ös-`P‹ÐƒÀ ‹œV>+Â¥#ÿ: MÖ¸-È;Ñ~m¾ÖÚó ¿Ê‹þ× ¥qÑR¨aJ>)“×¹‚‘ÇîZ· ,±gX¡€aöevXB¦~W 4BW•t,K²á#Ä_.ìlÉ$ Qx‚‹¨tq*-û ޤðóÁêð¿³ëW O;Ár™.¨!(£Ïº¡ÇXIWZ€©©ï¹ýti…°0Êq0Í;;…dÚq°#Í,°!ŠÛAG‚ÙP¤”üƒä÷é¹ÈÈHì [(DÉAkˆÔtï•\ˆˆƒ‹“TÔÅB¼ABŽÜ—J V‹£A€ïxDµt`Ä_ú–ÖS ˜¤çºÏ´sÄ€gëk™°“S…îðÒu «|ë;AWHïÔJ¶‰Ùˆé¥6úÌýìã × {däY®ÐÒŠÑ#ດgìawB ƒ¸@ ‰Ñ ®y‹u\F4Y˜¶<…´üdbÈÞAJ1ç–S&W59˜YKíA7p—¸¤€» ÚH8@” ‡ Ò!›P-Aš‘öi8J :«Pzqº . ÌÚx~tVj‘N``Æ_°( €gDSÈz"JwY*? ‹U¶hâ·ÛÈÀ;ð|F'áûGAÿ3÷c(ËÈR@5Ù·Öï}åC|~ÁB2¼~¡Þj)™æûLu‘Aní;Ò,ú|`,9Bš‘(@(·Ãi. ýäûv'À0,ü¾} ü)˜ÝM~kÒ¿a€´.0 Eè0A>KŒèXØ0ÙÂ'»Ÿh+á¶1é¢é™d44o 4KÀ}·°?„Ÿ~iyÝL‡6Ò<‘8G 8 êô K÷‹ Ë©¦Ah/,à9%3Ö‚ûëCàd–à@¥á8¹ähöØÝÆ;\Ý’¨_»B‰}P ËÛN»Ù) Bîë+@Í$àØÑàÓF·"ðìŒ X““0 ïÐi `àë2ÒN±¼  > ‹Z©¯*íâZ›ˆ 1Z®ÃLUr5 H!9€D‘çz¯ÊÍTËg=@“8ø´Yú[ÄSsò|C~z„¥ý#1"éÁåG²½Å«èöÉòš~ë ‹ê;ó|$B…}½~™AB08ÁŽuô¤Ó¯cÁ„™÷|×(< 8‹š¤Ådv7ˆˆ29 Ú `20)$"…‡÷ET(o0„ð` §øšP£)}‹WG¬%þéìýÇÇFø÷øù^VuÖ ?N½5dÜSœES‹Í?ñˆwžhñè‘ë~…Å6Q€Ë°Çެ¿›i C)뉯œàïû …`–hêÿRC 5‘!ŸÄùÝqMd,¢ËDå=nþ÷q'äžeY–øìøìà,ï òO É+ è^ÆýÜ•¨g˜Õ$ð‚åΈìÞÁ Q·Ê!ÈÏx‘ßÁJÑ7Ì‹€5ÁO¢#zØìõa¥ ºÐ;]ü}GZ£‡o+Gå½4ï íÐðÈÈë@!2ò=ð~ðüb¿¥­OAägÚl EgÊ^þüKø}ø+]ìÉï-57ð[¥{dù>ËëDEì~ìøc³— !à['ÁÉK» XÛÈ §p¬Yv ‰‚èe>‡\»s§è$= kÓ&£Üc A›€ëÆÄ‰;MÔ}’á»Ç5èƒ×ïÌÿ+§ÁŒŸzô'±ø?…^8)e™†w»2u/>ÔŠ#B‚§ñÑìÀ<6| ÁÉ/‚¦Äý¯dÀôqºmÓ(?ß0ÇEÿE±Óª}îY–‹ƒUÂÙÄè¤#hd!ÄÊñ¸·‹’+xâPÛYçÅc­aÍt«»ô}¦’; ôL+Ù;&¥µµÙ»KLŒRÍ¡  zóUéñ&ž‚)ñd‰.ÂeÂén ´ÅN}.¡c†à-ÇÃpD9v>Ü\û\ž`%Ðìuئûïð;1} ‰1iç}àˆò±'ZÌ€øEàÄ-ß}ß}Ð f"ƒÄ#ϾÏOp&»+ÔðK÷,ð•gèÿ@MM0n˜‹Yß}5ƒ‚Ýïl$ d„ˆÅmì¾/aHPÁ}üøÖ¸\KAÆš# XõqvY¸„:ŒÀÖÃKm B8>³Çwö|jø‘¾RP5¡Ö¥i_¼P:ò8Áe®ee­A\lM¦ì_Ch„3¤_}@[_FÓX© t’ 2^ø 1Ã0A; þïƒú|ïCƒû|ÊËscÄÀ¿uwà%0#€¡®¨Hþòpèðãù(0ÄÁ—àÊóc*ðï—‰¢žLZ2ƒá ÷–]×vY0zðCë¹LC;€›%Ñ!zØ4Ô@* iñVE Â¾fð,¸¢‰Qh’þn°Ì4.´Š§ˆô×q(‰w§ àŸ’p@£{8E,ÃTŒ·- Ŝ`!h=5´æA±M¼g™;D¸(´ï%o¦Š°A¬,ƒ$³7¨,ƒ ²Äœ Ä>¤wŽf œêš2<Ô$˜)àúE¼HKtÚaz¼I{è 0óÙ_ Èý(Àáa,&ªP Z:»€5CR)Rq;Q®S;¤;*ÿYÔ·Hx°­Z€Û}Ǭ+úÀ¨+òº+Æ8ཅ}¤Ýf#hÜ‹^Üf×zî=ÜôLÆ-¤;Ê–Þmu¤RäðIÖð*Ü©„|bJÏòó°ÃQð‰]àØÓØ®p·4ìt¤¼È˜,£È Ô#Ž­© Áê‹À‡xôNf6®1fÌϼT–X´fÓ,GOéñÄœ )àHÄšýYðceö2hü]j‡£û¶¹@g;È×Á]*âÿ3ŒÙ ð÷Þ‹ú÷߉<±ýþ¯k‰@Eø|é0}h›ÿ©=3ö¨uFÖ|áL=]k·MHÞLJTØÀ™X/~è·£‘®¦˜Sû ðÔ ûêž*¿’Q¢mž(ŸT#C^c~Xk|gX$7²¾.”}X{ Û+çìƒ)tùXu9²]¶ >h€ëP”„ññJz‹¾„ª}‡€û°.U8ÒxÉ­ ~ÿÿ~99Óÿ,»"9³:‹~pÿ<'x‡OÖ ´ WÍ=FŒ¨tÍC WH (RYM@ãsAõ%ô6$j"3ÿ†dOàqhÍPW¾ ¼ ÆÁê ,èN-ÃÎÁNOLŠ‹‡û]j,ûËCÈð¸Cð»³P‰Ç Ø­0…Êúº° F3V`ßàéx‚ ÇA/Šxvè´2C~S]Î9þÿ+-¶£žT dwpºG2æ™û%ÍÃ(N‹{`‡B†Ù«‡ã.ïÙ9jW¼KQãÅÈú'~ëÖ±ÇaÀp2C{Ò–°„qpìœÇÄÎišé -2§ vÌþÂ/gdtéÏrüž_1 ÿcS-4Y @—Û ž&æÿR$Là‹H ¨ FßC @vºfqádà¡J­˜ÜÖ Ïáeï˜@v‹‰›rŒ\÷ðÇB{Ìÿ4$’ñ®%Ä“D‰ ©0MK„“oWÖ 'b }Y·+¡ÆËð‡%Ô@ü V#{v¾MƒL+©‹Ø€¼W/%GÉfÕë‘t€‚l_³èÆ1ûpæ;Mvç7ÔdeT>0é¾³¸jƒ¸ððEÁJ~ í©C&ñ‹ˆìI£.­í;Jª€ôÎ PÉœ­ûAHÆ´ØJ.©v¹›˜2m#X-¬xï}.é÷G×Jt?ëW`s5M>¿äå5»ˆ‰H8uÇBkÒlÿèŠ+šÙ^Ûb9T8(¡äBì^?ÔÖrˆò°TJÀÁ•!ÚHhVÖà qä¶z¾‹N –6çø‡i?°Äfg=¶Ûïy‡YÔp‰Ô‹W|°žÐsë™SDj3~"%÷k@²MäÞOoüÜJ;„×&è]r ¦…KüKH}kµPJ¡T†òˆ.ï»B‹RS-doP÷wC4Ûà~m+ 3àÍ„PNÞL–QÍîf;Ê”9(Ð@ÿ1™ÙßCã5s ;o|çë6|3ÙØlËg7>Ðϱ8OÍx/:Èö¼ï[?}Žo9éjÖØ‰Ü‹Æ0â‘EŒ3–è#ÃÇ×EÔ™¤;Á}ÂgæËV¹oà SthË{PC×Íëx8‡M\ц –=˜ôÉ*òFB´¼äq¦F/(‡¦(O<¹§¸SúP"“T§0 3^ʾ6/±qâP@È|þÀ§ Z5A  š»QÙ%¸uAAãÔ9jËÊiMøs’žGéÉ`¥!œÖ@ Ô(z„UœÚà0=H±Àz_·ôFX„÷óI =»J]9ŽÅË+Ó)ä3¼Kc´ÅÐÐÔ(Æ_à}~ÅœÐÃ0SÕXjðcÇ+3uÐW_û#fƒ1µ9ÁÁâlvØÂÇÜó)m!Þ=0%Ý;ÌJ€}aK¡Ž&@¡*|ñf’îªÎ¼|‚ÊÐ)%¯%¡wĈU§ô ‚ŽxCBƒw 6äºM¸ëoaÁ^¸A}Ì´¨`JÐ7ª8HK_6:–GB=\ð €8Ø~)Øò%‡N´—Æð"nÏsürÆP+NS¸†qy/ñÈ_¼3èØT ³|Lé8…èôvnÝ}${À#Wç\ ŽÍºuÈÓôTj‘ø˜ô¡ÃõB®jz ˜þp´æQPפäB6L‚@åãÖ¬1aR¦é…ÓÃ-‡kŽô·Œôàn~Ÿ2Ê! E½ñ‘¯14/ÖÍ%ÐU˜s-¼+=%ƒÌû×>Þ6F®æcØ€ª1~Üë9}rú2ŒQBµhoŠÝðöÄOD˜ë ‰«Cèêâ'?A‹uÇN«ë7X1[Å©8 ¼d¡H Žào:YFNýø ꪣ²ì‰­êT–Ö_Ù“:¿þŠÖl Pw‡„Þ@’êì\¸Wõþ¹ÿBNéˆÍjh!†°ôám±0dœÇpˆAj ÖÏxuF^@Ôx@ä Ñ '¸­[l›÷>¬P#R·¨O‰8ÄNó ~Ç-wøTË‚øÂë2hŠç‚DV¼7Rß0´m‹Ø@_Lê'‰Ù‰Jƒø |îƒ1Å@ØzÙ‡‹³\b =ì„™[Fá«xÜLÇiʃÖF–åbòf/=ïI¼"ÍŒóioû 3«ïù]i¾¿Qÿ€8цf³‘”ë•øF©ôÀx¯ÜawUE‚ÍÑ.èŽR-ôMúQ„# þ XaÞ ™W‰ï5ü[!u³Jva&¾}4¾m¶hE«uèÁᇑÆ<Ôƒ‡¾5ÒN¶¶rYO ¯áÆ"7=|}ˆoðqüœ°Þ ¸È!ðX‚5ôÁûˆ±Ï?t“çd샃÷¾7½"Œ? ˜ÆSŠwt/ùù? „‹ðîÜì ‚y\M¡Â0ì‰'·–B¨ðR@$ÃU+^Cþ? ™8ÀÔ;u‡@Îò4ÞšŠXøað>ôBŒs°ÒSÁº¶å-€A~rÀ' yB6Èàð‚ä Aö +»X¤b%ø,Ì»? 7j‰²b°=1B}à6„¸´XΨ˜ÀÂSƒù¾`^À  ¿ýñŒŸ[+ËÀ+ó"ƒû +û}µÁ Ñð‘” %èä% 2àôU¹X°"W—T™u$ëþQË ×ÀpIH2ò î ŸÊ‡Dy©l¢{@:½0š×ˆ ‹„³ìN+;OHF[mÁÀÔCõC‰(¨àhp¤hþ7±‰ ¡rí-¼PŒfœ8 H!Ãáýö PzƒÀô‰@öÝ^IÚÂ;<&râ¡ 3ÒI< x…VœPÂ1}Ja¢ž ±ÿÂsOd¸¯)ˆÂÇ•w‘{½`†8j¡?ŠnB w‰ˆŒ0ñ"¯ý-°n‰‚ë£L £*ŸÛÀ˜”“ƒàüaà‘‹1i×P*‹5Œ•ñ0öæükß'ï£0‹ÆUˆ€[aÈÇ-Šõ€# +ÆPUâüÇD¥8ÎËsü˜8ÁÁÂô1`:(ã˜ç€æ Y~}hÅàp_y„¦ð¸U°JGÂ'U 'á¥Û_y;ʆ¡¼öög’8+@O+ò‹ö‡á(áƒê ¹K‰¯¾¬Ù)0+‹¹ xo¤à<‹Ká™ «¥5&GvPJáu ËP ï ÆÆ8T½'“{-]%ÄAY‰¿–`—Dë'þgò+3‹!eˆÖ‡×&1ÐÞLã3wŠ1ÙÖÏ¿0Ü,G2Vy›æw¹î)d h‘¤£üÈqO{ŸâÀÂu4%X„£ÒĶ>5’~X+{ƒ÷`iä h`ëdûfçâ743J5Ö9õþÓL I÷Ñ#Ñ‹Âg÷ Ó¡ë=e;÷Ýîc¯¡P1H3Æ6ŽÀj‹×1²8«Öm?aešk™Ó¸œ±¬úÞ À+~VSÀˆÈO¬ˆŠŒƒ›ÓÆ,;°Ra#Y5 ßc´v]Qq ‹›,N$(…jü£@,¿ƒRQ;5,8 èD¡ –md¥HT†Lwv£ Ù¡¡3F·xñ_üß«C߯8J÷Ò#òù‹þàƒÅ*&—;UüzNëŠE D:)Œ4þV‚v¾×5rPÅO+˜ëC1j`+Lc/ŸÄ†Õ1!ÅÿU[¬CL“Þþ‹;+þWYëL`GDˆ¨5Mäa³R uÅC Ùï‡0YZ=»©¬“бW3È˾.Fÿ¡nÂrÌaò¹;Û~æ­M@žD”ƒëqF¯{ËvM‹Â½ô`ÙY£©áêõÄmòóósÆ,|¿}‹ú+ù—ëCÿ‡°`]ÜTƒ#Ó‹3†áÀ°VRk)—¡aÁÛLD‹ P¡F‹ô°:+Ë& Ç=;D“v@Û¢°VÇP?q†7vQ‹,)¿‰;¹†Õ÷}W6!€‘#êg|ÿ|hCkÕYÀöÁ'8Pü”/€4< ‹Â5 p øÏu < 1¸ë3áÐÛ•öy Þƒe‡ƒ;{ZYs´7“†ÿƒLHVù@Ñ Fš áÔÁÊ;ïX{P ‹H,ðŠóQGT|_¥8Êä|‘u'¥?,;ћČŒYòx¬’ ,w"Û %‘ /'\­%c»pûðà^ÓãüÓjB|‰´Y;d›0&<à¸ÓéÂuü /;Á_Áƒ þX Ë×dý…f'‹Ãí¡Ò=ThM° €^¹T“XÝ´¢óÄ…QfÃ;C2l³Õ-P(uxpÈ ƒ h`X ƒ 2PH@ƒ 2È80( 2È \A°Àl\¢§1‹,;ˆŸ‹øHá_éÁ‹;Ú’Ç“ÛßHÞy;vn g““““`YRK““““D=6/““““(!Á›“ 뎉§1<Ñ)¸T×UØ„ÓÿpóhŠbìY_@ò3MçY‡åKE3g %ñu\´ v ¸ø1Xku)zH#Ÿ+› ’ßÛÇ—ÄöFÛt˜wŠO^m–tS‰»)×uvÈ'hl“,íZ^á šƒø BŽs ™(Ûø€1ãœ0F©ET`–…¬ˆ8ÈÃ!Ö — ôäiVÍŸI æ3+£KõøÀ@™Ø’Ï3ûGöAKö?øÁ;Bk»/ Ïó]útJQ ‚Sb!Ëš+'iNÈl »±ÈÁñø }oG Û=;x”.€raxAw†5$?Àì2E(søG}Õèd?‹6‰}èWèF/9u?…çY–÷RU1èì „ò(lNs—Ë :ðnboUŽÂëVësP§—Ât =uhùíÏÁÃ2<ˆuÕuÐ…€€<ÆîïÁn3Î ÖËt§ðO°, ô‚Ë ÷"‡Ã÷°9VMønИ뛇»Ô3IEX×À 3/‘IÅ&%d‹‡f1£™m«~…ÇöĬϔ$™ƒM2~íðÖ—ùüô&êL#×öƽ(‹K€‹?ƒN t¶nC pÉlÿcLVoRÆ7`'÷Çñ:ƒ˜3ö;EÈT?àwj[ŒÓ tá†>ˆP×t àŽ&¬ruF`á™-Ž ÷VÕ=Að)9¤"ºù<ͧx!#ŽT¸_­€}hDú)ZïûÄV~P Š£[_—$ÜM Vq(ì›pIWܸtb|p58œ¼‹2þbii¤¤­`t fÀ}n·#1ˆÿÑ$+aÛ€ø'> lõ¦I¸dÑe·¨Np@‹:)œ³ÇÙ 9å±ÿ°m3 ïjž!±b¨ìéy ΀ õÐ6ØeU‰÷m ís+¸=|®† #ÿÒ´<œ€üN8%'—Œ: .dƒ´§ ïס„5¥•F;Œ‰ÇÛÁp ÄZUß öëÚ Íü®¶ŸTYÕh¤ÜÐÌ\¡<"¤‘UßÇPá.ì„æ”ïØ »à{$£¸ ÇIs*{Är‚Qœ'­PiwÂsŒ;æúíš}ý/™ n‹=Îúï‹ ,žÃ&£¡RUЧ{Yýk‡¼šçø¥hÀúñ $Y¯o± œ:RÁSÞÝÿqÕhq²nÌ^‘Šc÷qÜ‚´J×XZ¢Ÿ^Î^—Á7¡”@É+ß{òœ¸ä WôF/ô…g ¢&Øh«Ô%ØñtK:°o¾ðÃëF-ó5SP<À è¦?yfLQÆ F¿¡uO• FñÎX“•=‡FpSqnx!/("ÿ¨Ñøy¨ÑtŠé¸7‘U8•X±M G‹C¹¢œëe–U®H<âvX‰«€xž†T®d§bÛawV-c±@DÌðtL%.†/9+îðaèÓ±}É¡ û¯w¨¼cBá1f+hEgÀ&ãÆè25O€ »ØÌ©ö§ò á©tÍöMà(à«(Y—P¯‰ú±ƒÆÂàfø°†ƒ÷ŽÓ˜ÿÔ9¤TøMŒ… Y*|ÞHtÇJìÝÄ)…ÇŸã HhiOÐ\2‚×W2r@.@œ¡pÕ2a/® &?\BGîC÷fcó ÿ Kê/­«¡oß>:ÇV@Ðï¤ýâ¼Wwî‹ðdfƒK‘êÂJ9‰3‰½Ä†>•{ Ç2«Ö ÿª:‡“À[«"$ÇÈ‹wo»t&J}GÁ,ÀhT[ Yð¾SR ¡°fñÈ! «¥¾gCÿÕ£PtW‚ +íá̹zñY`íD¨0ÐeÏx¯Gu ú¸/vNp9‚ ·lI|"üjHBµ5;u.)!($¹C#>ôÇSÿO÷£……ù‹sF)à{Ý'Pc§à†ðŠè‡àÞ½HÄkÑX¤!.™~—|í‹=7B}-‘‘öÀð¿ àäå£EØÏƒÇÉuÀÅ$KæþVbÄa🠊A {ß,è4[üÕ MÇJ£tˆãxË +Ð@»XÕ¬ÝâTò 5A”ËØJƼþ3ë9Jç˜ÊДkØÀ½×/H©Þÿ6É/·€)»E|¬„ÜŽÖf SöÐ º‚/ Æ‹‚0ÜœÍäøM;)¬ ;÷û°8}ø+÷û€Ð]¾ñr_݈þ+úkD©º¹7¥ÂÕÖüðk^ÿ áô6¬ìŠ`ÖÓ˜p@;Fw‚Û¨yN…xûà ëcð· Y’@tŠBøVo ¿ÑN ÜCA:Î3OŠ8=Ï‚“Px·r<‰ ‹´'_ÙGf•uÔ…iÐ aYŸ¸AÄh¯*Ò.x{WWÖ|¤0Üù¯Ø- xcМöY·—…(þÕ$þb£Â@‹Èë{Äà1ñÆuÁNÀx𠬋}-J€à'^#A•cÀÿØ_!ðë±€û'µ);îe'©\ÑÇ?þ}¿=u¾~ 4°„Y+øChä_þJÀŠôÇn€KQa8½¥ò£:Wu&­MWÛ*wŽðšôKP3tX”Iâñ¸]‡0'ZtS3ÈW,'{Ã\L[Y‚P‚oÿR“8Ã2ž`%’)V3‹ÓY9\8€?V+®4ÞPl‰>ˆÃunœi° 6 ~å üž»$Ç\é:×rOgœ×Ÿôõcwƒ<˜i ƒ=ØH‰w(65› ¨£.<[Fh`°˜¬E6f™ªÛÉ¥ tàYh}Ó¡P«îÐR !øM J‹™?‚;ˆ,wê QYKƒÁˆßZãzl8/eX˜Õƒ:aB Ì3|ï•Àȱ!L‰¢ÑJ íØ „ÅX4 öڱȕ‹}¬>±ÀuïÐ-ÐwbÀ¸Ã¡XìÓ¶Ëñý3Ï wb!esn @Ø[E·¡4[È@¡ =ôÃPÀçt HuÐñ®VUóŒóbC€ MúëX‰ÚüléV:™¤Ý)]Ä.±HöÆy€ÉÏk¾ €u€ @ÛCëë4øZÒCƒjCähN—õºJ^Œ§£x4|´h’îhlqâŒ[ŠÇR‡àe­‰vÕYÂÐðÃ`¦ÒJPEÏÆÔŒ3ÖE [ÀÑBI¨ƒàÆ`, (È ,!§‹|ø'x-@Û¿§$}<ŠF'6<-öƒ @!už@ % "裰µ €¬C7 ÈYïÖe"v|Ä‹ õ˜?ë¹C‰¢E ìNÓðøVh™‡ „Û÷à9‘Mjöp–£4jõs`NžØôÜG¾?øy€v¢¨,ë&ïµ%øÿßÿÿCÀ#~Þ­LDÃ@X†×þc÷||û*7–ª–ª¤ƒúu܉»ƒ°lØë÷Ûa€[g߬}ß7ÇbjàMSQïk0G% PŠÁ²»iÃñ=)¿˜v¾2ÜK |Ÿ€b=u%¸iÐêÖÒuÝ€t*#Æ_h¶hPBRIå²pBjº& paú¢ƒr|ß3ð\uç'⮆„/_ÊDë —à„5*®¤!ñÚ|Bt‰¾®ÒH/—vvÁù‹ÇHÖ×*A_kŠˆ¢¤„E/ÂÂI|ìpe{ Ï'l<qñ±óâL,¶œµSJy' áü©·G#0d­Gª‹p0ÿ\gÐÇ,kYHñëǰ¥‚õÓC S,,p’À±ÆÛˆ]ÿÊ€þ4OçG~AÓDcôåÿRÛŸwÀ —ø7öGíí&<¸ ÍW©šÐ+4w¹øú™‚Y¨§¨y8›AO1 îo \È•¨PË"ÿMøÌÊ:]çt5ÓôCÛR5DSÀ1Ž‚èö± …$0˜w€?1IˆÞóL"ê狜:U™#Ù†…\VP˜ÿÖ´e‚±›¤»Ö¹pùÎLb`ƒé¾ 4xTÄÒDánñu(ïÏ ‚‚‹;‚>ÿ£‡q&ËsÌlÞ`{WÒaÂóÏfÙNžbÌ}6δ¼·×´˜¦k^ÎñЄ[kÞÖt¸Í?ðþ ƒÎ¿‹}zG^ºõŠ˜b0ɈEç‚¢ÁìS^ ’ eÀÐêð U€¤ÿ$!o;Æ3-¯æß‚2 ï6öøSé4]MùÊ3ò>XOë5+32gdyƒ*16ßjy–ó 8¿ñG6V@`ãOæi´%-a% ÄŠ¤£ô ™é6DÄÒ•®ÍôQRAÏwÄ2ë~u ´UöcÃdΆÀv‘„ƒt©¹]æA| Z XÜ©a!usŒ%ô ËEDzî ¹7‘œ÷šxAÜAëB=5p™5ŒØCUJü¿µ yÞ)1f2Øh¡Uân·aŽ•“æöå\rì@-U,—²BMA‡B›y•O¾aœN¯ÅUC`‡;ŽoÎý6YD»2+ !ñ.)Ì%CÞ`¶RÌáˆý÷Ì®àµÕ VƒPvgÃ%&Àލç<ž ;Ä![_uR\ëƒøwHÂUĉ¼ ÀMÄj)†7 -'OÄéÃ:þ°MÀë k f#ÁÀ@IM Gd˜Öðë Gäx†Jð6¯6u¨[ú÷|Àˆë&ZÀ0ú-˾PAÙüì_g ŠU¾,Dë3ù‡t"„ÛtLGk =0`OÙŠ0úPŇ/ …ùÆ0 Ít fC0˜e»è@ÑK†!$u$Yk8 Wë+EeboUB¸C¤AUnœð‚âˆ>]‡¦óÈ Ó¯1Eë!^:탼Q¯ax I¼õ=†—‡HMÉ£'åø.NÄUja)œCÝÀy’Ìè½¶î'€û^ËxÁ¡TBºˆ]çŒ4"þ-áÔÈ)²Òâ¿g¿YHàTœe]t9 -uÒ ð'QáEç~ËýLí!Æ0ëiþ 8þ{+Š:Øß랉#-åLÈ\ŠÃëP\ì]?v7$CbÔéÚÄ"þÞÓâ)Dá#ЕÄ{U.yÈÏb3ÉÿWy«Â‘¨ð|3¢&ÞeJc ¶ŸÁît¯djÿÂ#ÖÚg²àSˆ%ðýWÜ„–Ò uñ”p–A$§<,í9p B¼…Šh?@Cbƒ¹ øeû–}N„FãPZبµ [%²ˆnL±ÄGBÀƒû+ñÛ) V0Óã=òïë¨Cuj¿0uC³ÄÞÖžXþu3í­Eèñ¼˜xX;ˆ.<𪑄N(°¨¾¼?u¼Œæ¶þ@GÖ“³ÝªàÛ GôÚ| 9Ïû / äë*#azÏ[–7S©‰UA}§ûÌW –ZžcKÉPö†-ŽÖÁi=þè¤I±$ìÕîÆ™RP ·e_‘Hä™ÛRœô± Ír ìJìKA)XZQ¼Zhã-àu¡Å:ÛïÉud z† kÄÑ =¸nºX Ã[¥ëßG Â_Sc<¶Û,s Ü÷Ø™Y´=‰=ÉÿCtA„º2Æe!±  ¬5U€ÂZ·œx—³uGþÿüv °äÌ4Ç–Ã)Ù°àWFÀ3†T^b¬"Vµ'ß:c ×™lÔ}‹¶?<~¿ÃÆ·QhìÔfciGA 6Ü4MPGkTÙÀ‹„ÿŒ7 ½Ù‹Áô ? ÿ÷°ËgcÕðÛ|Õh\Ê8Ý´‹ý¤£¶ÿGSºhèGÖ’G‡¨ISe¼©¯I@¿`Œ¨;ˈ 'Ô[xÛ|ëv9^k'IßÈ‹@@C¡»{JDñä_žCà³¥…ucÿýÃ@“<ºJtú%Ïp¤1.aD9È*¸+(¶—‰6yöRg@ ¼‡]º†Šª5Bª¹X¸¼•~A*°­¨[bFPGÀÓz¦È$‹Ø†Ô²¡¨[± €¨7bèþ¿>$á¹úù¡¬ ?WÆèƒ=¬9ƒ\¬¬Vr’¬!Q¼: ¬WŸ¡¸pç¬äv &Ž‹—A炼ä­ÏÑǬWÈ$H+Tbîkÿ”aG sð\zõ:X•çSTçq‘=­CíP¾¶?PP|a ö¥¬È Yx —Þ]$ÿ\ßV™`œ ^{£… dÖK_Þàÿƒú }€Â0ˆ 7ÁîIÚ¸²H?áT€BŸ7ļú’§ÂŒ¼û‰…û  Hæß.D•M ‰h¨ #ý˜ÅVé»Ûòû%Ó 8FÔö€8 …‡òE>œë~ÂË•¶‡ÈPé$oSr…$Pë±%B€{ës¸PGøîƒÊ›÷Šì‡VDÉ¿¼MäpÔÉþÇ ŒEæ0ú9’ØÂEÔË€Á²ÇÙ†RŒA¯^ŠxùwÒmÙÚ¦iM{ùj ´ÊͲ5ËÛ(;MÚøÑå²i–ÛÚãGݺޖ­išŠúJá©qÍr@3Ú@Ng \î0 ¨ÏŸÀIFÞÉT˜ˆ7“:ì÷+u’ˆ]÷·„g3ƒçß:ÏXß’ gy´ßçû¡9¸SE¨hãE bºÐ}# õÃZT} ç÷Ø}†ßðUÐŒ‚gè–%iø} žfh0@Æ)ì`û6TÓE+€Ãж+ «\bDÇðÀ-„Ìš;u VÀï$rü»¸<»£;ø S/9´ÏÔBrì ÿï%é >‡6«~»-`<ƒig7ù­½ˆ7“G3uò™¹2uÈAÿü1‘Cf‰6þ‰Y;¸8s˜®F2{íIcÊ $.Ð< Äé‚€ÑP9V4Xf¨;±_HE‡”bý<$PŽØi¾í¶ÜžÌ­?*¹ÒÙ¦„É7ÔtkÔµ›Ék^¢$^›¤b.fdf5Îû Y¿EÎi›vgek(¿Ð5f‡<Ð SêÁBy!ÿ.ܸõXØÚø·„§¥ÜÕþ>ŠÄC§«PQÓ‚‚ C‹„».ÿuÜàåhquGûV/¥‚fR-黎Û@y€:-ñ¶Dÿ÷MÄëîý-ýìå舡÷ˆº-ܯÚÄŽLxVÄ«l>WðÏ{‹Ñ¸‚ 8ƒía7_¸hxÆ…(0 ßîÕNûÃD>`cºÃð8Á– Ñ7k¶#MOuA…ÌɃ…¥"äc+8Ï„Àm/иŠkImó!L;Z*aõ¶ W#‹Í×ø’¢(?@`¶XëÍL3»„0ÄäA8 Ï`4`èÄÓ|z°h H à’룸 fŽØ‚Nèëg‚&Æ{BbÕ `îÁL#’‹×PNñÁâ€âÜRS‰î¤I4‡0ѽŽCÍ | ‹ƒááoÅ€LP(‚hëX ç/˜~)E\©,>M9mÀM/ŠÀ~oXÖ+Uð7tm–åÝ"=8 vUM–àÌX _%€âkð8±×ƒâô-¬ó¡€ûo!–±= T%ÿK^W€U@­•4ñƒmüÎyÒw+©Iæpp°?<+„á dQj gxžcüä¿@!!lìEÓj0GiNm‚Ïa`À)2ž`î ·Ç» t°,ì™_+u1s,…m×~ïŠRëÀðë?a"®­Õ¨ƒ°Á+æ‘pÙU¼£ Ô¡Ê´ ¬A9,ÜÑøÈ‹G½‡€BÚœÁzËÁ°1°.?´À_á­v°8” Ë}Š@YÞöZ^´A0|ñͬ¬7Ò´²êû‹Ã¨Ã¥ÚòëÀ>Ô)Õ§àÁkT~PMUÀ®` ,À‰ ð¼Kü»üä¿Èáá›&—Äè²CœU‹•4I7­!vÖ³fÈÈ»ì…3uS ´V‚)D /<슄hÐAB|²ƒ½þâ4i{:©÷SVdBbCöÑgàbfšä!qŒÍªˆF;ŒrÑdhg ïoa6Ô@GFba cÆç-Œ…5ÁóI¸ÅqNßø q,á£é7<„€¿‚bÂã#‡ ý"æù¡Ãã³lšæÊÚâ]åfMÓ4Mq|…›êͲi–ãòúä 4MÓ4"*2:Ï4MÓBJRZïDBÄÈÁI ÅÈ4M{>¤„'šjrzÓ4MÓ‚Š’š¢<Ò4M­¸ÃÎK1'Ë2²Ä»6u,›Ö4äïúå©ÏòÛåjN¯êLv˜7·?J ”&Õ ^Äò)Oœþ´ÏT’:+‹H ‹,½ ­±Øf.í‡PB,A /Add,048dA<@DdAHLPATX\Ad`dhdlptxB“A|“Ëííœ5‚„Hˆ’K.y@Œ”K.¹ä˜œ .¹ä’¤¨¬°¹ä’K´¸¼m÷C.À¿A&Jkg*îRDÂ="qÉ%‡$&(G`:µîg¡§-,ËìC8âÿËÇÌn¬æ V±­u€ÚØ÷Žìá4MÓ4ØÍ¹ˆÓ4MÓ€®£šLÓ4Mx`Xph¹°A>˪Ayf. $ÁAd(,éý' YsE:’C®5= K¹ä °áaœ¡§‰Äp0¿)ŽÄ êtJŸ1³¼üPt!ë'K ƒ<½ÔƒËØÎ»_3À†XžvڃĵQl$±ÂÔdHišÖLâ(ô öhÚà¦ø‹ *ú$2KYÐõµþáp¨wøSh´ j3žŒÇÂ9æT‹W}ï¯ ¶VS' €hƒìÀ´·JRqPK;!¦YßhòSe®ÎØüУ—Ï$=ð’{¼ iVj )òRòB&”ÄØWÔר2'~9À§€QS}j(3°gò<ì66óê6§ôi î5¿’ÖÃqM²Í#ÃëÁþ®=Ü» RÓQ®œ´þ1é$‡Kè> €8‘®ž OFÝt,{Hz4å|Tå÷îÅa ‹ žÒs»‘v›š MPH> Q`Ïã0SvÛökÚ˜b 9d\ l f)á“¥öGÚA4«xŒå 6èö‚c>ƒþ"‚† Žð‹P¡#¤;dsSRLÐ]À§Á!4nm7Ë;ºqV‰ài£P……VCHKÚYø~ƒøzŽo‹úàxÆë}@@Þáô3ÂÿVÆuã+ÆxãA¹D¸B$¥1J/‚nÿm<ë:sœ@ Vë%Í •@*8=¹kQ‚FÇÐÊÁïªux!JȨg‡Äô] +ÃjBq±@¦-A¬ÖWÄ ’š°ÛÓ3!îÞ$×#CmP\Ø7èÿ9üAÚ'j“Xß7 ƒ[p„Ÿ{ "nþÏì¯ýqÙäëv,Þ‰áØ`$›öDá븅AtÙðs„K ÙÁ,·ßÛý0Ùý€L3Ùlü€dóÁ£üß$ àýÅc?¶kÅ,$Ë‹do|Éßs=öÇ—Ü%h>ñ›Œìë÷í? — ¥O† žñt,ƒfß_ë ty{€ €¾·˜t|s” ñ±œ>T\±r u*ÇÁ‡£S ëý0¶¸ { ð?SäV cŒåÛÿÚ_\øµ"ìÐí—zѰ"ÄÐäÐé?»ü¯Áµ$¨ã¥(¸îÁŸ÷?Ü}ñ¨z’ÁØÈ ÙúÐîÿ/¾è2Å’Þùë-ŠàÐì€ä2å ?\ÓXäÔø@t3‹6ÜŤH]YŽ›€d¡‚èe–ç’þHUtÀK€†wµHÄ_jLéãÛãh|z³Ì láV°0T—l_œîL"ê³—?ÁeýûÙôÛÞUªÁ)›ÿ‹Óï ôSE Mý èF §{ß}ôˆúúÓ‡5»øTOöЛ´Ð÷ß((‹÷ÃþAôá>@Ûmö¯‹ßÃláz/tîàûÛ*ß8›a ‰pe¸ø‹ÇGÛ(%3À›ßày›¡p„߼ťSøXŒŒ`ÿ…x£ƒ“uèsšÂ‡!…}rÆáTÖ-Fï+/”n }¼ ]¼½á–‹Ǻ4\ߦˆ›-…#CÂZVƒúîÿ|¯ÒƒGÍëKŠ< Å´Î-‹ë=ƒ¸ýEöU¼›âR›ÂÙ @€û‡øSß'/P[fÓȦÅ€Ó÷þ÷ÿ ù|fÃ~%=} h²%  ¦¹¨Šà î"°XGÚ„ÃïW«À¼Ïr1~t8½„-nsݾù¦0±‡gëç¸äHÀ³Ïý'xÿèSÆEèæ»Öî#ÃtNf;«óá ¯ $m.øÌ¶{àë#/ À}ÃÌ/Žþ7ÇdGÃn xŸØ%_°»¥Â3ºÛ1 p5“a+ÜÓÏ^ÖèÛÙî ›Ûâ—ñ9 áå}êEê å×-kÞä%¾êžsÞû~šáàħiÜÛ}îþp§ö›@r:—àïèô•÷û+r±r$­`¶­cÞç‹)¿ð”)!î KÏ‘àug 3;f-ÿ§ƒ¿e?r TÈ< r"ñ`$C„øZm0ËwKA[øI^p!kæKd_ñ Ÿ­ëàúÓf‘fA"»¡UI:La€¼5’Š] ðßï€ã“âð GÓÊþÈ| Yœ ÿoâsõØÊëñó¤ @!F c‡²¾ Ò¹˜FFº½ ýFô)û‹ ^×ké©6Q5á1¶köNàAúlÇjÂ_¡¡¹ë`¿þþˆó{]á¯îU# å½þÁ…Á „èÉsrħxäà¦2èrKFnÃúwðì‘IžôÙ_D¡súFaP&â1ï€\ mAš€€Fë㪠—|”×ï𛩃ÂÐF_0À…›|9~âÇ-à£1-Ç_)ÇæÅ?éäh †€ ì‰Ãh7trabÉŸ†ì¼úÒ/¹~@j?Vº|QþCÍ;™Ž¬³B f9€yÃÅ}S ú±Ð]g)|ë‚(iãô]ÊÞkÕDjz$"0huOµÚ¹\ hÞ)ìßZèˆÙ]ìÙEÝ]ðë›9¨ÌI’QÝ­  °V,R¦}þ H0m§^ë.\v&åJÊÎpö“"†ÍEå~F¼;m ¿W+…ø¥…M|ME´QA l ¡üWÂÆ-C÷ÞÝÜPÛ¿Œ÷ˆAZëë•æPàIŠÇCV.pøUÜÇçUK /ja0 y€âëŒç(-ÜÀeIÓÈÔ¡-QPÂu¶V´Pa—îÆ‘%›ÖžÝ6ìE†ËPêFÞ‚Oé8ñÅz H¿˜Ya¿'užWHÞå9 f_$m¡Æ0Ápjò×Nÿ÷ÑY£Gt guë O;÷½Ðп£Ýÿ0tñ WØË[¤w{™ÐoûEömJó}(~(þ’~ÿ_$M€á߈M÷€ùFuéø÷ßvºO™!4ljOÉ"!LI}? ¢ûð}E«Gÿ3j”&>kÈR2°0jÆüèÇ!uŸíþjuÛ6À8ƒ¸`¸e ‹øµN¿ˆÑ‹ó‰œT‹Ñ‡÷Áé<‰9·i<ï²þjh–9oo ñvÁ bFt+ G…±˜þý'aÃ䌨ñúñf?@×A(‡÷èï3vƒ0CŠU7C#UÏt F÷á°x»öEÈë,N…?G@ ï:«ì³;³}H\üŽþ+Ï‹ù÷0ˆ÷σªÐNtë €ÞèÃtSÃ@¹ðþÁ=K`ºÐ •Ò³@}‹—šÂ „-aÝ C|2{¬ 'uö›!MQ6U—ë ŠE¾«¿Ò€â €ÊEpyC@ët[8lÚ+CáH|öp³mM dî—™©ýÆ;$ã4ú!qE¬(lKƒ±½°§O ‰Ær×ß_Ð@>ì—sÀ þÐÇC&k‡®8ýUJa·¶Àÿ_mvôš¢÷fÁù ôÒêGûë ƒ©yÖÓ‡pþSþîɾ P;Sþu4!–Ì4œ“7E‘Ü xz€…àƒéÀƒ"P&&ä 9!“Ìœÿ´9¢!!—t~ÐT)ø9òÚèòèèQºˆº’µ”-¤RA GƒG‹{[ÃÅ,„Rt ÆÒɤ2±¨#Ž0Ô¤FóW?GC¾+t Þóœë²®m;å UGr4¢úQõá|t ÿø ëY¤H°T^”¦`’ýïì#Çì̈ãüÊÖ듪ضèt=rô{’ÖV?uï×”v r'8×”§lÍ9‘ºN°› )GPž¶ÓI•O j:ÇÕë4+_d¤é7O{b{%da¯¼fƒþ!Æ+¦!ÓkÛgQ6ïËd <`hô8Á¡¼ãQd=Z¼Ü €ÞöjøxE÷öõT˜Bkôó¤¾xh!"²óePƈs„VJèMÌgÓ±X «D‰+nÖYj a”,öO®ÐpáÔPû94(+uÜ@á%uq²GböŽ£õ÷Aî*lOCž«G*½7u õæû–g8Ë{„NêcB`rE;%øØu}¯Í¯yV_CÖá φ뤋뗷è[ºû9Žë0|,ÓââàÌ…Û·Ó¾½à±±ôóË7™„fúúviü/þ ùìÐF•)D¼¥¬ £@*„pÔtĬO1ô‰OñÈSŽ÷d®31 í’_ž {ÏIïȼ™Î–}»eéþÕz¢ïYJãà4³[e~w_•Z³¼axA}$†\?¼<\ÃâeÁ”‰G°ô•Æ3®+-Ót!ÿ˜7‹× ڻЋûÆ-oÅûDò~³Uó­”p> 쀎b‰¹ö]óeå]¬b³ùª?óZQ¸°E )*Yß1ñ7A÷Ì B~#'<ÇAoŽÍsâë ˜EEäG‹¡6|õ»ëVp~I¾hm>+ÂQø4.$ÖYÛO62jtÇ&Pï—¶êL2Ð} ÛmÜÐD˜aÛÞùPë É~ÂÙvˆ Ùà½Ùì ¹a¼4v艡A±€Üðàk€6@Ðräzp÷qÖðzu˜æ|%"=yë å¼D±èÇuÂ',°ÞD¼Fu«¥¦Q3ÏγŠª–®¤ò÷‡¬‹œ0× p“‘-B¤UÀÖ)M,ÁUF³Í†(ò…BÿÌ2ò=,N#B&9亾Â@&9ä°´¸N!À×Ï&¨Ùÿ5Øîo Ô< ÔfJÿsÿ®ÐŸ­3hêŒÝ–:¨ÉÀ_o ‰ –¡Nü*N5ø óÛ-ü9ù%gwCPÙl ÂjÇ$<dó|øIwa€'Â,(„‹JSj02™v˜wxÆyÿªr\»¥€YÅ:ÈÒþŒÒJPñâËøgiÐMEÐ3d8,Š#ï#‚8¬ÑQ& q/‘¿&QȆpÏw©ß|¼½tF}A™ ì+¿?~ŒJJÿW¿Œ÷+uƒò} ì…E‹Þ }“ o°— SþýÞ†Çà<ÛmàôÞñôóë íìAÉ+ó õ»W[^ŠÚ,.:ÞÙCs$ƒÕØ GäRR~L_áØÇÆUþ/ÛEØ™OªìC±OÿQ{v ÜÝ ³OqGrîêSRS¢´ŽâÕQ?0â$zº:×íÚ²€7¾9Ke̬g’t¶0mƒö¶Ûšh=tëqèà/à³þÑÐ òÒKO-x‚‚æ¨zü伿û•0 C1ñ']»Š;¯÷‹:ïÁ³f++ÚC~ Ù–äMÜQ@Nä ÚQ—6h4Ë“\­ Ž-!UbZš•QD¶¢››%SArHv¢Ãr4טÒÿŸ-µRÒw§úBò 5! ÈfJKÛøqÜÒ´ßô/]ù«0‘C1ĈlE¿P×L´ Ñ“Ñn“\ÃÕ\$Hf £Œqàs‹Ç„ï ð‰uä@ÝHPGR?ÛÝ9âßÚ!]ðÁP|øxày{ÎF²oûWxìì ñÅ—ààÁKwÝrÛ 2†½*kë !N,IÇ–ïYÝHƒ±àµKø6×ú¼ìƒÂØ))¬%ܸE® %L$²÷&˜hB¸‹Â!ÒSú¥Â÷Øz¡—¨/‹Müo„³mÒ]ô0ÿ5fütÛ-LÅw¥zÑø^²}6ä–X'b@lv€dŠ”@ž¨[n Ø=Ä(䃅Å €ÿ?å€a?ïERUÄ/u >„Òœ¼ùýB 0…ñüuÑ0…îxäìPV:H*hÀ”¾"Vµ.ß_Бx °×¯@¡ÛÆB=¶|k4r‘yâýøÇ†•"Mòëc±iYBynª_ PþY;Ã~NŠ Âh,×nðL!Öº²¬€ ×dýlÿþ¤@ãöæcå ¼“€ ÉŠ ½(9™ö;Á~ï>¾¿÷H؉5´j0…£ Ã8p g È–|@çÄýŠ0¹³LMTSê åPZ5®e¤¶ooõE´í""ƒât?tº ïMA\(…í&;$öƒ¨ù@ßc _€xátgaS¡I 9Ÿ¢ÌÑ ""w÷¸[{¬§¡)˜Ê’¹+¢ËFó†À8¥Iy 4‡Ð $pŠ„Á«çÀB÷ ÂFå>© ùOcè D /#ïŠÚ; ¶!öHIÒŽ†€: RCòÌÏO Ó†Uê :×›BÐÚŽ=XèÓÑB‡^ºbi`/M82Jõ%/Rwt {@_•¾[ÄïÐë'6Áã@ Þ;Ëu†íþ¡Ð@ë *N)e‡c½Ç­ÚÐÚ¿LxˆÀ1?Q.IÂú¨ú%˜ `NÿNk‹ŽZËÔRhÜóCÙ'ñDN:83œCÂbIòEàf—¬k\D¦í·Â#Jº=óQjÿŒ†…ZŽxj\U7OÖ¬Ry€Øj:‚Ÿj']¬ëCì nm¶>»P³ƒW>ëg ðÚïÞQ¯ü)³höS:2Z`d…´¶¡)_N Æý‚“ë!cÿt¡ü‚6W9 VÁ J‘°É[û$Œö´ .mjÙn à¬ïhYT ”YNRY¿EFQÏ3ØÆlP) ëxg°¾ì !!EP-xÛh¸T·î$¸‡àh$hAAÆ àlüý‘Ôࣗt2t&´Áwý½WÀ½$Ã#W¡#ÑÄ”S‹ áʃ`h4¶~ÁL¾ßVŠhPÿÐÈÍ$9„pÌK ”®§  &àõHçö!ã$Q ˜<·"-oí– Gÿ”8c…Å»õ‚jêY‰SàpÁú+øOWR™š·”䇸ˆÄ÷Ö‹pü+Öd*ðÁøïwíhoUò ÛóÉ\öÚhÔÓ „x_Ø ÈÀP3ZwìàU÷& â’À'ÅŸ7baþS@øÑéãüÍf­†àf«âø8lñ@eècldûdÃj ´XˆÔ[`„o&Œ‹óèpÐ_‘ö÷·¡WLæ[ $ñÌ{@¤òÊ" ƒ<óÚT -¨O¬œZKCnº²›ˆ>$PY18x«O"€Èµp /’ÛµK UÃAÑOÑE»ÀðBF §ÐŽðÔk)Dò$°QÂÄeà–ðÇ3<2=t”÷£ßZpG* y©{@H0†zðG å:p!YX‰(ðãïØx‰p ‰`gH ¦¤•ûæï†$ ÈÎìÿá‡ß!‰X-;“;nó0ÿ5´‰% R cwv5E‹% eÖ! °£ßZ0ØÞ/é;A/q4,coàP9¹‹)ƒßO‹y©q vPßaúaÎàkõdZâïœØkXìɦ¡Ôp÷}[¤H‰ 4f†Ö­†ï©¨{0òô’Z£ˆ0 ¼±Ö¹¸ -ö ôúÄ[ósèØ€;…c½øh}”tµk؉ØÒ]<øktéy§@ë œÔŠÕÆ"ªNFŽ€æýzuê^j‘ÜC4N„†ø«’¸;‚}(–âÿ>mt.è;]WÅFGº±‚ßCéë1çNwJ{›[ñ?ç°‰[»4LÁ»ü Þ“îSx‹+›0á#œ æ´~Ï&¹^ hÙÃu£l h REaaf•OÙÝP2QÊÂÀ; Gã¬óLŸŒ³œØúc608áÕ3ÿö_ºù‘!À&tVéÄ{BIuƒé©y¯ùÀlqt&]hbG’¾{ö¾tcIt:p.K‘ 6»HÆÌyƒÀ9ä…*i„Èó»x%…eÏ!ÏsR‡I4Ϧ=?»1 ó<Íó#ü&!ICl‹4˜\¸-L_€Ñ0-U¿Ž‰˜t €xV~¯8G^àüh?‹ …‚hQ?Ÿ^òÍßÒ·û&÷×!y KPXf-PYÇx(ô¸eðBÑPÿõÁ>ÿ€=$xsXLu›X#.NÄ‹ó ë=êÆB¾4YÌÚ¡ ²-,à9h6nctÇö·»(VëIøwLá¦B‹_(®2j(Ð ÓÒÏ‹Ð•ÓØåBppS3ú¦‰k¹³q øª³¿Ü1rmã¿åðǰŒ~ÿÍdo¥wl%Q©·ŒJSJFGyðÏöÏr;t6oJ!àáë({ë²aј·“–xÖk"^(¢RCœÔë—0QI p[4nŒ×‡!†I†ˆ®6¬t¶”Päz€ŠZgôC‹]è5Þp»[ɱp+¡XY 0¡ÍèF%·¿.¡Ý,}ÿ;Î "Rø¨˜ì ¢ØõÆ/;xeK 7“‰;§ ­jR Xo wAæÆÊñ ƬÁJëÿÓAÃUü Kh_Œä°é1èk¥*5ÿ5±Û õ2GV?í=8`ã+‡ìOè qÿP40À×4f>|ê2-!?Wlœ08h„l`…ë6o:ZØdcñ‚Û~Øh¡0Xÿ YIÝÒC_ølÈ=°Ê¿†1²Z`=|“ÿôã·€t‰|Që60Á=¡N³ÔA°œ¹ê+Ñc« V8Wà½Þ"|·a$ÿ ðuC±¡Àšã7ipàá†Vl>WoñFcûCJðN¶ÿ’&}ûÌl½uoûa€QC~!ƒîé÷Ço[+ò/ |ƒ­ßB°ôG%;ñãhaëïFÓ·yOXؘÁø'þÄKk}Ho¬Í$+Ï k÷6â%O[¢DÄâàf×mBÀ'@Y¼Ò„ À=|‡7ŸÁóÔu,a$ºõ&½ÃG1WC• þ5ÏmüÔ¦Þ‰ÛVºðñÿÿÃÓƒõËð.Ö$³B)±°¬‰ACð§Ti Vl À.D—ÖbÍÏqÿ©rëУƒeýÎø:W™v¡H&yFP9šÇÆqït û½a6304VRgMÛudŽQU•p’õ¢ƒ¼$Dë㡽ˆöið³T£ú£ ê0p‰âÛÀ¡˜4™¤ól#a¾¤ú®V…LõTjž1@ ›ýdjV÷pfããbø5@#R×4ÎD8f&ºÁ3™ßªÜÉ &Øéë€ÀñvùþT,7UgrMC;àMò»>SR/ýUÁµæœ þ¡Àú™îǺ§GCŠÆAãâE–G¬!™Ñ€^ßðVGð¤r¶S âÈ2zE«­ð›¯W°&^–øúˆ ¶ô¤02o­,{&…jJsoï¤jÿîR sQ Þ·mZøPöJòI ð}<?ò™Fðˆs l^È—OtLœLœ)$LžLœõ|œðüS\N58Ä swÐö' K‰ÚuŒÈÙ[¤%ƒˆpN\]À÷Ü>g)ß/;˜ua ¸öþDy[iƒ×ˆJ›?g°i. «èçpð÷ …åWj`°¿ÿ ^öà tFXÿv]Žq»7Ej‹-O†Z=Ù°Õ±S@D•öïöŽ]Ñ#.ük$7@#k 'ÇlyoEý  W!Rª%'­à3ì@ `£uŠæ‹‚Hm¹^˜%Øh„7€8çiÙÀÇ"-ï?#dƒãKt "¨† Bð(ë/W‚n `àìÞ!”W‹ÏÀ~·)hëJv¸à¦; Ï»Ðmh0ÌïæëTÇRö³ë!¥[ 7h.7›Š#¯-á<{'W« ºö) Í×N\ªüf„ 1‘VN’ô6Œ ùh÷4ŸøK®ñ*Îï@@_hŽœJ8ØQXjTÛDHxp|… þG_A8ÝUË¡äÍFf¡Lœ |–b#´ÛšÔJxå/o!™')¸ƒ\“÷ÆzfË~Éç% ƒæN©“¡å­ìyxŸa(Sƒ<63Â8ë3Þ)%OÓü¹,Éò;EÓJ>2çE@žwúNZBf?ë%Å DÞkw¶ü#ºaþÒÜ’§Ù®!pgD•ä(RÀ¸Ì¼2B9Ó‰…Id*š!0¬;mˆU$7Ì(8 DËСNm]‹3¡CSøÞ!0:EÔBz‘0øIÁøw~FF$NYh£ }*ÐZMиù>` rf‰y}ï^¡ !Ô÷sf™AØü‘μ€p3(ÍYfó1,ÇBœ/`W 4IAf$8Ú›evª 5$ÆBEÆ›ãR"«VBFƒÀáH¥¥F§}9.#’ 9fS$ô.[4Yÿp³ï‰Í²ÿr½ q$#nÏÈÈ 0ЀzDþž.¿ÁFëH@QÑ¡½€ÿŸ(ƒêRj æ4ÑMá¡Ôíj|ïò<ÃÀ;s(t7ò<âʆVh,M¿mAËz²k¯üôÑQš&¶YwY¶pµ[lÓ5p#•­xDGY‹‹‹ÌE„ï˜`R'm-âPœ±u§à¥¤4E ä(i ÍéK>Oû_U<å( %ÏÓ 8çF/À¹ ¡ÇÒ‚èÚ€JÛ-‰ÅÒÝ:ðö¾["½CKFQ‘Øá* -hV ¦@üõ (pQ¨Á>t¾)üC–V¨t 3f,ðžÊÔ¹°Jó'*ÍRQÀ|?ïs¶ t&iZDÄäioM€Èó¼w½uGW‡vâó´ €8X©Ž‚‹i€Ä÷’ \³'.Ç*ÉDÛT 0œøX‰P6¸ô«ñW¸ Ö›`áOsˆ(Ž¢;7tçyùxӰ馰ՆÝÍÁbIqC¹–`!O’ítÚ ¬\ÖŒ,ÖÛl‡ØYW/ ÒIíÂWð«SŠ+%ë+;{- Í÷òºØ ô“Q}mº.9òN,QuüDƒ¤CÀßÞbq³ÕJ+ä¶°0Ú{vˆÐN8,O]fÑ <$0B+¯ÈÒ›t ŽâiûöJï« ´½gp-Mw˜Î"Î{1ôp bhéS÷]>%¹ž»?ø»6ˆ/¡®gƒ[5×íâ@MMôÁIâFؽV(×?E¶£^0t êFW¥ 1bçóâÞÑŽC;-?|º Èf.X‰V¸—ïVÿVëGAè¢0£5Ždí’œ76qPçÀÈÀJÑð„Œã‰+úÞiø° v…ôpXX¬8$6"ކ+Úª,ˆ$\Œ»1ÆbíV–£od5r0ÁÔÜŸ±†æCâ&Sû 6cxgàæ`iý‡èÙŽ’”Üþ(/cŠÙBcƒ®¦Þ‹Z nX$½’ â;ÞwÒaz 8è÷0IÈó<[Ä4:>¥Â¯œ~‹ތ}Tjæ†àÉa÷ Æ6jX5u{ yží϶ƒ @âô/ÌØw&L j 4Úô–'ƒé1F ‚ø½F+åµ ëŸRpPZN¨c¢Sì™2Üò4‡•ƒé ïÖÌ 'GWN’5Xí„霸¤ë?YWlÄÁð9øž2™j¦ô?y.} ü7y&:þöÊ^æ3[-t iƒ' žèýJdHx¹dó-‹÷n ãëîPcãðaWŒ|;Ä'—§ö@H¸ƒÔ²M@4v6+,Ñ7R¸4AëÇ@çÓRÃ7†?Ûƒï;ks©;áÕ—5t( à¢-ë°ED36™]¨(ÃH*ÈóÌ¡R4C”Yµ DÇSæüÐ{ ò ‰éÔ ð±õÚ‹®Õ+sø|Ú î+[üGÝž<à´ðô‰ï0cäçø*Ø à…³:iÀB1ÆŒC)ZïT"¾Á tuu½M"ò× n~UΆ~ ç]÷æÒ©? põ~s )|=| ‹Ã 7õ.«a s`.ËÁ#ECEè(Íw2è1)Õìò4gi'÷ÙiÀ¼ÖŒP`ì“O;X˜,nl1ÐÝ@šþ`©à9¸Lìÿèèöx…”n+‹ƒâH4úÜÃ`Ã@u è â*°C«!<â!ßx Îì%ó åÿ?HIM ÄÖÊ—ttø5¼ÒTö`ɈMf:,üs0þ·z}ì-gF$>ä!Ï@ «¤¤<Ðr½ `t-ìD˜tÀ¢Æµ¾Xè{1äJûÒüP7§%NËÁ!¯ 5ÐÕ€x À8À}wñùø T׊~½Ëúzƒæ{þHmäÊÒÐ&ô8ý"{[art"ÝR Òæ )åä"¨ß!>kò8†Ï˜Ú¿9Ÿ2a÷tZºå?žÁþ h3ä¹h¶Ý @e›B @‹Lý0`2l¼à´ñ¾Á’Öæì‚¹‹úå6¦pìB:‰}ÜÛ²ÿÿKS}äÜÜ Ø ¬L`Ø=° FÀs°ß¹ÃF{'E ,ÒܱÀOˆàn¬ëT(C9‚g0[\jJâãIT8K;dM…4•$;A×è …}Äè2Ù€z”¥®Q¤ N<_‚@MAÀ'ÌKû´’Ö us•‚PÜ…Œ?Ûó gèPƒC+iÆv0€€˜·0±óôÚ*lÜ“íùw*âô±ï÷'—ºÈ­…8 @Cì|tUŒ>RW}÷IÇÑø)|‚ÀØ }FRÏ(GÃø-ëj!W‚1 «» a.èû‘W2>¾ý}ð«n¯5†‚ó¿r C ¯ rÈDì'xW†µ¶ÛÇÙªv3l),-@/ƒà`±P…MÊ o'/UÜK.wìƒ÷ÅgÀìøðÙÙ] œðñØœOU)¥øfÀ!fÉRÑ ‚ÃìÒ´ˆ ¼…2ž(VFl–0-. =ž0¸Ô(ÓJ†Iâ%tHt"ë0· ¼y ´L¸PŸÍå4\ë N¤™h˜‰0=ŒWTÿC öô‘1Ô |îB`Õ”'ÛT4Ö‚ŽO¶•2¾têY[åÈfªœVÄW,:€XÂÐŽaŽeVMAh|x’7xVi-Æ}®h¼­|Š2XÑøbxSIž}N 9&àdÇ»eˆ%<ÓhâÛî(ýD'!ST»–ïµb·Å]‹\òYBšc“\I÷QKå‹D7ë&‡ cE»°LvA˜><voÚc/z`¡aׄ öðYÆP5†´6̇P¬šøÛKá†ÄOC$*O†ê!(Øúq)Â]]n|r„‘Ž[2q„•$ÍfT2TÛŸM™d~ã¨)6Úk>WÐX,o3:áÀë{”‹±§}PüVFNsÍ| ›Æƒ@Ù=xÃXã®.½%ýÍŒ¸}„Ü42Ϩ‹×CÉ$¤rñGÀöƒ Å~·ÆAcÜ7x3ö¾…Oõcƒ G”ê…‰2C”ˆX @F¦Õ’DÀ}ÒwÜ ÷;Æúpú£Þàöð€¼Ãu¯á+A ¸Ä±Ò:•º‡Á‡ü(ÑŒ0X àÛÙð‹’MqMy}U¾”$sù7ùì gœÎžÇs ×Úñoä–CG#/!¼²àa„26³{dÿÃZ®|« +€µÀŸ]ç óPÿV ]íôL@@o–pù#޾l?k—òx£tB ¦êá¦t…³Ïyaü_ÄïÖ#ð+ÍÓæ õ„¿¿'ý|uþ‹ÁíÎî–#ÇyXtã¹kÂCŒXø¾Èq9ÿ:u=ÀÎÖ³EÁæ• Þï£í¨}«‰¹‰ï<i²Ï^ººÉÍmvq¸;V–*X·c ”¦@GìÉ0pL`ŒøYKü++Ñ‹7¥'YùÞKÐÄBà3ÿÔÑþC}tVù© Z@eürkŒ;‰4fŸ¦»<ùéô€ðÖFE «)J7˜,¼ÖãT7ô-8 *ë4QóÕ¶äCJEá~.OaÁ}ÕˆðÒ ’ÀÛ‚Ðh¡…ZÒJÁC‰@œÙGuû‡ ½%¤±´™äÀÎÁÄ›¡‚o\ P“(;.˜q ž%óõ6÷edk¥,&±©9VôbxD`-#ïaKžÿ7 ‹Ö;€ öÂЈ?ÒÐZGÏTöj‘Œ;‘|íõtàI·}ØÔ†ð¤ñà Ft|¾:Ô¹?VpÎÀ1 ±^¤æÒ&"Ö4q¼Ödŧ¤^_R("F$EâœG·†ªüáB<>šÙëK†:‹„¾×X"PSv‘ûá7Â,RGD<ÏL½à dÃdDo3 ¼hØ ‰4&åaÐ)ýø;† lªjOko€ÔG ~kuØxp R³\—lUzð½|H$ÿ@((b(†Eñ-¥I$9Oo%adÜäNѳhTHÜÙÁÄ×ùV;ë–1ŠH]ü‘I¦•JÜæà!UPà@äPcmGGÕh…M}+%éBÔ}÷&Í«îå>øF…ÀþŸ:Ï5èüÛÿ5-¦Ñ²IÛ×OìQ|‹HÐt¦Óÿ‡°‘òϾÈ+ß…FÑøÍ Á:1½§ãóÑ·|˜â°qdO•7ãø˜hDpa鎸¡/À&ma!b¯—‹:¡S¶F±s½mÜCôV¹@é$ZÃñ²Q$øÑë!Ö…@¤1$ǰoùáøL“LQÀу\³ …A@F]¸øŸô‰T!’Ç‘gãøªt ¢²Y`ó ¦OÐ÷j!ƈÐ%"Øãb!rÊ!³-܇1'…^Ôj©Ïêûîõ[Öî'Ç‚@Æ¢äú“á¾Êš >Œ1ø]Ç| æ­ñµgÂׂNûæƒÊMM`;‡,/ß1|SÃt1‹ÓÁãÙ7ö…Ò|ZF` ‘ ƒc}Ãü‰‘ÿ„…L­Á²¿‡‹ŒAå}쉔#ß òG•ÐF„•À˜¬*¶J(ªµ/–GÑa~Iiü€'þD Ø4²Où~Ï» <í€_ü‚ÕëÓþT_dé¡ÁHJù€þþ£¼ÿAÿ€DÙþL/€½wÜKNãμýÑDNKH€89L/D¹j3dZrw P&~ @¢êXt |)A+)eˆÈ UÈF”ãàLMoë­mÓÁl‡„”ˆpÀ•ƒÿ6àƒ;Éo1jÚUàRMÐ$¯ñ ³ýÐø“UðÕ(.Lƒ¦e p |y '¬—)»T(#ÓÕb¿ 3¸_˸L$IÐÇDQðÖò%f…Ð7Ák’q  Ìdu¶Ë£SUô¿\P{À+Ï •ÐäðW™Ul‹5jч4žZVÅlO*Á ‰Ùñ2<þP­ÒHr”‚ä"0™¿„@Ž¢¹LŒ]MäÆtŒð.­87Âxþs@ë"à±3ªV )Êk ÔÊF xK7¨dTÂC8|§"2ï)Aë~HA Þ,éLJÞ ÚÁO§ºÝÒNÖà “ÄÂ.kÇ[Qg@Ŧ(Ã4çmг?{ j räf@û)ÿÿ {om4ÕS µé6É8;G{Qû'‹[VâV O›† 3G ;{ÔP"JϤڔŽ,SðÒ~ ÛF‡Í#Óí»ô»›’’Ã7%á½½#À{FÃù#8K(µ×?ÜmIePÄ2D +Ð^Ð¥E$ß#2«B«×8.¸¼<’«“+2·˜+5/‚— ÈàºJ{X°½ºFI/€6iŠ ØhÑÒmíÒ»ÔçÖ »%¢µgd@dîA ÈÀdobÚ Ø€e_òJ(5€éÀ•[ZUd%ÁNÁ›)º:! ‚[gT>@³þýÿAîQ `¨Í i:×SÊBï™9´./”X•€ÖpºØ ngC%@)R¤âÖyØSXߦ#r`øƒz#ºèáOT'çjR4¢ê à%†pož¶“h¤àJ¥…úûúƒ~A~~ãK8–ßæx14q! ‘z²zKü. ZAºÉ·ý³Q8ë7í,Âö€´ ’&À ºÁ«µç;䮸XÛ _X%´uJKªWaÝœ]ë_t13ƒ·:.:õUâÉ$"=, vÈ$!=©¡94Ç‚ƒ ÄHSw˜ø‹7»“ƒÄ (#‰5<ÈÜžºÙ@)EfÛûˆÜ1Ç-Ç­à‰iwDsÈÓ%q ÆT&Ú郿p‚ç]­2HT nLÁÁDkNª»yÛvll'uÓùÅC BA?!Àg’ XXd>?Ï6d  e `ft0ŸGdD‚Vk{Ö£ ª¼üv †Üôü#8~“ G2È5ÜÜÜmý!C÷k$9Â(È•6{Fä¹QЦ±4ÌÈì7é ~38ã´ñûóVaEC¥è„"ž¦b‹F¨Äwü…øy~ ~q#ÇfQ‹;Wcą́ äeg[U7è“ Éf ‹è?øí˜²·™Ûv‰~;åX£=-]"°SèЙИ̒°=¹‰ì¶a?±÷n P1 óƒÜ–€E^NQ(÷¦mÿŒ ,GÑ6cRt…­ 1†%§ƒj~Ccÿøõ…Ç循Q · ù— #qôbt–“Æ‹õ! ×ƒy ýZý¤­?t6dž HWZµHlqðÊ{ßóÇyô1€§5µ@|ña´c+âëÆå‚Œ(r ©{˜1¥ëÒa8LÌLRKNì_ð’/\_ä;.î]„Ã~ ih‡ c4 Æ(Oã0@ú¥zó}RÁ=Œb|™ÁÝ%ŒXÀy¿ öË ;_üAMº€tÚÇ£|®Þ¥'€HK‰Ú‹,·ý…iãÅÞéTéw¨%|/ @}(±´Ã/| ÒN?¤ƒý NJ.Ý Û[ØW6Ðas73E°@n'ë€t‚ P×IJ$­X v?%R"‡eÐòHØÛí‚ýá;}›‹@;‚ï×»ORPt91lûã ";+™EÿÞt¡Î¶ÑB4G cDeø¬~®ù£e£90&OTŒ~nXë{?u Gª`†më5Åä+7gœ ï¨8Vœ ÿz5~ãÉ'$ÿM;–4N”ŽMý¬I4ÐáÑiÝ<Øë$ô™Ze- ÃnƒèŒõÚë/Cf ‰D ¤iu(‚WÇaÝ‘Hö51ƒO“ÒØÄYÔÒ§iãµ^€³H cB SÁ0Âb)åêê‡0àFG‹,ÜÔïË$xJ{@‰>ÀÜ‘Â_‡|á«WŒ^cª3Ù%è,O¢#@RcÁ–±F¤5Ù)56¢ÑåE¥ÁëÓˆ@Òv¼K@ž-ÝR(ºéBâ8ºƒœàXŒÁ Î~Üà~駨ugï§ ¡)6â„„šQ;A4"ONÞ‚ 8<@hZí l «÷  ¼oÒHóîÍAHoù  À¥."_¬°•‰ÚƒøãŒ‚7–ÊéÁ  ùc;-P`I[´pÜ×ê ƒ=!½Í³ìSô’8 —(h0P¼•¿<»1~ýЉQ<Í'Ä'@oä‹‹y4÷÷ÇD: ¾y)8H<‹·C}]øÇ#,àÙí 9ÿ ‰´ƒDo6ñö‹×zÒäFî‡2±.O³™f!Tèà“È÷«´=ú|•M-Ê3vɲ6?ga4J.çd‰µ¬¿8ò-Ûä`ÝÌ\Sè³è ]؃Šñ|ç›\‹`ZƒÖEÚ¥²8d7§¨H+BQ0h9~é ÂÚŸýR’±]ÒvTLE`!¬ÃV ‚ôëÇë½#ˆä3pÄã {ÝçJ;r hjÑæ™¶Ç²Þëf£ÎFÝÕ‰­´± {*8€ž TXìÄY¥R>dÝί‹0NI¼D¾1Éï3¡)M‡ ®È‰·lP 8}IXЮGEZä‘ПXÛ»li?žXÙÖö¬qh;ÊÀJ¡ªê0J)ÁÙÖ1ÃÈ{¨iç!ÿC)gBÛ#¥-â2èÙQJ:Hr§p$Ý(|frãÇŒoÔq(“-ó D‚áíÆ[äWD±¨yY!þ‚à%œÌdž¤MCÞP`% %´AŽ Z+ TëŸa謙`¥ ªÐÞ§6S#Žª:²ô²9ÅC®m]_¨0šÂÐ¥šSY$Ç5>ƒeó˜ÚJ LÈPtë dµ©Da7:Έ À•ySXèT$'h„`ËŒP£„rJN ?†vQXŽ…‘…öMþÇCHg8|pÑbš€?L³D‹ñÔð)ÎdvÕjU÷m…õ³¯2¿dÖt§€Ø.]wo ’ðÄä#ôü,á_XJAƒûº‹á|Túœ_FŠøE¯WVhô4ïÀcóc/ ›mŽ8‹x›Y?FÞ—[·d~d2¸ˆ\<7ˆ{Èë £¸Xcø^&+Á‹ÁGAHóc´’Äì!ðÈÉ,iPgX€Újˆ z«ñ]1jW’pë3Ûº[°ßú+‡ÔÕ|/`ÉQ­u@I&`*ÌŽ)$qnÁS!‘?hý>W‡ô¹ô:T©dXh?ä9äù&.d"dä9dXòáhŠ -Æ×Ç ¥hHÖÂÚ¡ÝçC4nïM4“KS˜8§ä/j(t€‘hÃß B@ |î»é¨n‰‹¤Ÿ™‘v.°´2ÛÒ«~‰ƒ ›œ(/ÄÉ»/‚¨ÆƒÐb ÑwWÆÒyÔ1ª‘ÖTf4ÈÄ3°([4MûºMvé—eoyŽ4LÓƒPy’aÿs°ë@j6,j0y"jj‚.ÿ»ªZÕ75r005;ÊÌ­\ ÒSoó@ñ)k]µüûyš·i–wPà|x'7Ç,ÎBÌkøC8aй½]Ç'@ ÷ ×^Û¼HìjjwYä’ØÉ3ÒRû+HrPwHÃ$ï+)TÈG$ï1¦BA°’!Ì—O’ÛÍÁ''/% — A'a\ W7Ã!ÕpCV¨ RIMW¬Y%ƒ\%üKÔ"Xu­1¤b͵Œ¼`üÁ‹xUÛyáàíu‰NøsoKÄ }S’g‚Ý€á3:ˉG¹ 7âûB;ƒ|Ïý #‚¥'OËı n1 ó<œ—JL-Â$7£œa_IËÓ~#gXy?@'Í•C‰xc}'|gxEÝ ·Û +‰|p‚ ‰š[.Pö§gyŠžMHY‘qUÖˆ]öj˜÷ŽéúkˆjÝ‹~8âŒKVç$âÞ7C< Ùø%ó»üÅÿœLàÙÇ4dŒ­ ¤ ‹×½wÆJâ-&¾l@'ÈúÀÐŽpôü}-Œû¾åù ]S»‚‰ž4ç$n¢ãÀ¶ág÷U8†t‹ž ìKx¹…¨›/¤<ðåÀçÝÊ`±MMª…7ÖÉk%išÛaÜ +p?L°J1Δ¼”ÙÐ+# ?Ó̼ß1N !³ëw¹Ú Ž­+˜U+(mTWUIJ‘6Ogp% 𠟽iè¥{ ¢ê7 qxTÀEAÞ¿%)¨7ÖlÚ Ü€}5(‚,/Ê֜̃„„x™jïÍO‘÷ÂÒaW #Œæ‡ÏÀ†ø¤p’æS$nr³g8ØðR# Í'd|i‹püŸ1f+Z7©H©,)²L2l0~Êr‹³\·6ãD³Sÿ4MT³LRVV £PW Õrz",‡_Á¸4Ãb 7~ãK<ŸñNˆÄQKD!H£™A?tÈéÍÄ; øM‰O%k€LÍ3ñŠn[Ig&.S\»050_†av3ÑȬOLFš‰µ3R9CRƒÁa·ÓÁ^ÍÄF7nà Æ¢ÈÒ®xÐ?_ó\•ˆ«TL%ñÊÄ‹ý” n²…¤gâ I!ZÚƒÙEïòuvOoÇKàpßCN)wëð&Äc"þ´vU3öw~ái]݇Ρ¥I"OoœÈRðÀÎ?YˆS8y sC@Èpà$¬$<Ägoôc¸ÍÅ5|Cÿ'a7‰kÖ,dm#±1íºH'1—«j$h»Áâq8ýZ\a'è°4žÐuI»ô=´í$ŽV¨TÄæƒ¹Û'í2ñ5DòVHr«"ÞÀpXŠ“b…¥è‹Ü¶‚ÐqÒI (›¾žŒ‘ýYô¿#ñH'ÓB+D–»¡$¬ šä&¼Ûäyf$SCû¼7¹›R3ËŠ{¹Û±¹6L¾×Ѧ/"@UÅ âÞ‚û(ËD.b„d‡-hÁãÓ¡Lÿ/çÿFHƒfHÿND1³¯ä/„ 2oÇ<7$à:°vJj[êŠ#‡,±Uº{Swˆ,ÃŽ_wø!SŒC8ôà’XŽîôPž@å—ðz]äUôÁÒ¯BÀ+‰Ž@~ÆÏ8p„éÃ!ZB4b•ÏõKfYF¦E{CCcVŠÒKD÷»»¢é†hƒ)ø«±y¢ŽCσ»É‚˜g´!x˜;rí(Óú•׀܌¼|Õ°VrNƒ£˜u³_Jp< àO8ÒÂI±ž(õF’Kš JäèˆcMD·URšzFPcMi/iu>½ŠX_R8î”…òÑzì†o€™M}¼ O~º \}÷õÎÓiêAë¨ÐÓ öþX½ê¯ƛšBw~ÄÆÿC˜\ÒVFæ:7Õ‘ð†bUÆâ•D¦fO‹‹¿ÔÏV@}AL3Û§… z‚­ÄÕm&@÷(à ¬ž°˜$=øƒ Ê*ñ§ 0¬¡+€¯‹ŽèÏ!Ô?QPâá ›¿‡|ak™ÛPW0uO¨aG2Tœ:¼±Ò‘òëE‡ñmÀð÷Ù–†c-° Íõ 9+}Û…ì(/¢œ8a¾ˆEüÀâ!m‘‚#}]A0¯i:„ƒEo}sHèÁà§þc/ƒÝÍ»4…œÆ› ²á™Pcž*”KLïI’ˆö‹ ©Xþ; X:˜‹)‰,¾Gû&”5?àV…ØH¼…ËV‘’•€“ ô©ÝDñXTŸ—É£ÈwIµS²0‚ܳi‡æK„ƒPž#‹åˆ“ˆ Øn@*̉$xZDzö{TëH„Dxjá[XN,çqNfF«~ȇ;ÌRS év¯ôa—ÖfEöU3¥2Æ~),@5B)4uÆÐ}P…öŠPÿéÐmöƒ™øA¼>|à«J 7÷Þ £¢°^V€t§Æ°ÊØSwšË5´) $Ü-ÃôÓ•Z5K ÖÑRPI· zôï2ÁÝÆp×F´¤€&^FØèo®\®Ä%á€7jƒ‡>Z7û"™Þ&Ó'þê$!Rþðƒ2Jå'âòŽcè+ÜôP¯ T!ÀI}Í,-õPÔëy0ÈA©))é‚ÂØþ຺Öý4ÜsR%{]Ç'¸o"Cÿã‚U/éazà¶1 CiûôÎ@BÎôCL|ÙuăbØ+}ì8Ú‰k¸õ‡­+6aÊÜr®šëhË–=eÔè\J¯ Íx‹8,៵Ÿ PÝ)Eœë9ˆC–wH’М±CÅ«Ôx·ºpƒ¯LJ]áòáoe .g‡˜I‚²Ãm©ü _qšÅôë;v` ¡š<éskxÀ+ã!Íßv …ÇÓñn8/Òrã_·ü€ÁŠºÍ'ì ÉrôôìK‘¤N@R*CcÁb}Vý<®hˆø#s1û^EC:z @ ¯%Þƒö.ð¦Ø†AarÏ} \Aum—F@£GØw–>Dç]?ôFü`Š_ÞQÊP1°Jw¹h¹0‹Â@üà€Àé+ÒŠnWEz–ô& *z,UÜ‚â qwKß]:Ä€îÂ¥¤„|0°­‹Iü¾·¼¡4y$>~ †÷ 8xÊ;]äg;, gÉnåní¦yF«Ë¾»ñFì–¯}à]äÕ%JÒ1ðµ€L˜¿‰òRŒ_†¨ A0ŠS àD0ýUzÿWopYÿXtÿ[ƒ¸àÿMO‡ÈO-5/@SÀÒ &BRؽ]9pÀHE.QÿŠF½F¥4IPN Ð à$g(V,òi4è±YUÀ¥˜êMJÆ·^þC t$Á-@Ù5¬>¡Ù.øe^,Ì ‚0#‰}¸ÄŽ?x”?÷=D³DTj¡“& 'Øx˜¨˜,t …z§Ì ‰ ¯@°VœŠ:F®P&h"µ$p)ƒk:íxd&MØ{@„ˆB1§õN»ÀBfGãOð Q>#@"|Å`±¶ì} ¾¼°–áÖ-4ÕbCà¾*@L‹”±F¶àZâ8ÌM@g‰ttR¹{,Ct >ÏÐøTåˆô :ËŒPÄÙÍBfW䊂Oá ¡ˆtÎåÝ|$Šˆ‹ÑE¡Op€€<ÿ äÛ¦…Ô]!Š" @©W›ŸR™'¦OÇC$þPÔÐbÍÐ+¡m‹œÛñmBKG §Ýš ]v‹³ K„×N”®é™‰^/”Œ"Kßš¼) ÆÑIJHq)Ý`ìHšfºÓ=ØØ0–Ë@Xý …uôPÍQpf¸)×ìäŠe⦵{ Gö¼3nz¦ôF‚¶3Q Þ"æ×ì=aÜ”ÞD×,MÄ‹¶Hi¸)ÝܰȎȇá))Ñ:Ûz"QDà*{$êÒÌÒëÑÑ*¤rBÀ&ü!ÜH}5`MèX¿@Ü¿ºcÝ ŠŸ;…”}¶!°ô‰ÁAB*|î½à”ˆ6”L™{¥¤/)1~0C‹pɤ!Ü8L¤ŒðMØ;V4|á™=Ò…¥•ÅñrBK‡Ð9ÌA`éÀ¦6ý”äQrAäºþòAää’ P88¥¦~¥€—jDÏKb ýTèD™x¤Ö†d 5v‹@­ñcAãdiV’¥‡ñSöÎŒJ¨7þ'ŸÆú ç{ÊÄbå4xgKöÏ3ítûŒÃ ËXƒDNË£¸:–€ LÓ0=àÔeÒ¥¨H´3a³¡Y*CØÂIz¤ _Ð! `tÄBt¦„ÞhH|¿ÿ‰ë´m£‹7¤˜‚¦TÜÌs^àÕЌȆvÁJØY“0$ŒH¤ðS‰3:ëfë>óË;›ts7Ö}«}Lƒ U¨lä[³¨;5&¾Yˆ¹;sr·¾6ù/¤Ý3ƒy@bðmÎ’¸Îˆ9O1ˆ`(®ÇQÍÉçÔ%ŒtdC&CŒt’y61ER°!ê$^¨ ,3kƳ$KD>Îx$GZÃ8 Êcг<“Ô€+ô‡RyCPfdºIت !ªpFtl gмÔQ{§ºk¦¡Œœ—‰£ zƒó¼¢Qxϧ0LÌ4#$2º„ÐN0ìü&5L”úFJUÀÏT±€#^h^U.€Ì4OfKtÓxû?Šê¯S$: gKßTýUÔëXâÉ0â䌽àW„6†CHû}Eö;uÜuAÃ}#lØ¢ìÖ|èMaè‘ ƒÿñ‰íÝFD|ÝqMìm=! ’Xéä‘‚ 3'ujÌãH<†óˆ]"£†®eRBŒ˜,Þ;¤¡­MMàQ³`ñ!ôÿ€šTÿ‚Ø9Ú‚a.;ÑsÔ´rc‹û FN2T-HžŸgäH´–6rJ~–LH HA¦äd ¼¹’A–j\QK»AŽBÔØXcd¬@ü¯•5&${‡‘›'<;˜2ªPŠ˜ˆ|ÕŠòj'u”Öƒ<,v­¢ ©ô 6ß™Rµ$ ÏF=ñø†—ýø„Ä&¨;¼ú.v¼27à‹È<‚ÀA០¨‰¸X ìë°sx¶Ñ@´ö.ìrŠ‹>™N¯¹Dô'€k=uè.Úð ¶ðÊ}H„ÂPŠ22ÝB èW4VSî¨^“ä2žx!ÙC€\'mkÂ¥ã|)ð¸;|¸ uÑ”YܽT¥²4¯TŽ[ÿMÅÈÅ- U‚}‚…PuI™ nô.žùçå€>¾Üg ‘x8G™2p f”°:V$?RÔ=&Žœp‹p8¤T`a†ü!<ƒd&ÅkL,!N‰iÞ÷eü# x fi–f Ü#G¸X›+0Ú¸Ãa“ôkp}*B¹1ÈÂûjq8‰:¨>ØÞ³2A-…~佑*¾$T;^ºÃ±AïlDM! VÛ™wqŽ"œð;@[#ÇQX_ë˜ú"Æð¸Ü¨Ç¢Ž¬«•t¯H€ËÓzE …`ú´p.‡>wôj§a' ½|²¢HG™xz‚Ú%ÅìÄxŸ$è¡£CÄa¾ÒaÊŠ@¥³*4àõ êäúã+ X€¸ë/vôŽ´ J ñB”w¸ `@|] î ÇYɨ ¦»=×L¥7’§W&8‹ÙÄ:J›¹ÀX_!R\GøF]LA >ÜffÛO2¼ë'… ^je$@ä¥ý¼Wðãà!=`qÕJL p£ M´qíž­79I°?Aˆ²'©œ'o•5î¤9;œL°œ, ¨qì ÍÕªtoŠÀD§„²fMì*ÌOÊ(Ÿ<ܨnù SÒän"ñ ¡ ÈðUé¾è¼=ØØ” =¼Ô†jXé3¸˜JMnæÒDMMЧPyœ-¯=Ô¿–”˜Šµ¼Ó„ˆŒ“yæcE±x |f8jñU€Š›£A) ˆ@£ÆW‡«Ì…¤­/Qj,;ïÕîs*ØÔe›µ;òE„UЊØš(2ð‹^H†—ä½ò|ߌP&iù+E„÷mÈÙððÂÏ0‹è¬ÝŒ1$\HÁ,~#üSI‹Ë;Â|< ã3ë_+—È$ ÷9¸KRí…ü!KÅÖäŽÐ… _ 1™”+3Yä`+1ʤ¤D7^1NNžçÿ ‚ÀJðM¥ˆ799|Ð>5ÒœÜ dœ^5œ<#ñ=Žœ˜+€YN.ȳ3’  D7^3ÈÉ3ǽ‰ô¦†ÏÃaŒU„[¨Ç B'¨^Ã¥‰3ôZPD¼S•pÌ>ÄÊS× ÿU2”_˜=-Æ¢ó¤]ŒêT«å#„ˆÕ#M€£×3Õ¡A…-,À9y ÔÐÖ$MÈÌÓI†Uüà.•n]*—T1±è¾#ðàŒ’û­ÄTŸj¼Ä*‰[ ú))ùÌM;‘L w•F—‰htøGbRÅ·¬\¾\H¢F`¢Fp9”©•ƒ+ôˆŸªFXëR›‰]ø$øƒ¿O I¢2C÷ wëQˆÍB7Š#A5XŠG$¦ š<¤Ž&ؼŠNë:7gPRÔ—¢&V ªüÁ èñCM@Ö¾ô ØvYsbÎú=#±mðèy°ßŠpICTæw ‰Çu‹ÝPNÓð5)pÈ ÊM_¢CЧÐÊãXMìAIÍ—¨BÝíË™’)RÕÇÌì‘‘‘èäàœ ›Ü¤Ø)¹¸3>Iå ¤¥â–ðÌ5ðÐÔ™EÆBÎ vƒ2Pœ)ùÐ芚^Ú+ódf@ž1Üà?½ùsE ä³»p?óñ4+ÚÑÌŠ¹‚5¤©±ðÇ!Ø5‚q$E¥d7 Ÿ™wÈð´9@.’ iä ƒqoyÑ,dËH¹—¬¦w+lì’€Ê']/>D³Ž´†ùU‹Màd™3ö+Ð@ý†€«Lt‘0é|ä³Ð(ꄜ5$ª.‡¢LxбEeo$½¡$?­Çì(lÎ#uâµ|AÔ²qÍ’Í'ía u´³PÔ’vëDvBš«E,d"kìTxM×›àšTÎ|éW¥[Ëx|/Ð¥1i‘Õ‘Òx ‘áêPÞ*-‘LøÑ¼‡'á¨ßè$å ck:I,54§‘æ½ôw€1`" ®æ´Ìˆ/û!Ì+œphB4s¬mYA}KéÊI.>È,”í%S !àÙ^£ëCd3à%C !0ë\bhæx0˜Hú0$š=Û5”FLe0ƒz–ú¬Bn´(A(ÓHp½óhL$Dh°jù°|`š¦P^ t+d„ñÀzPe7ì1òïDÔÓ¹"ñö” `Q¿›Þpµ}5¾uÜq ÷¥ë&îr¿@|˜jíÙëuw¤fn_·Ô!­è7»Ì!—ì­ð¡ ÐˆÛ }Ø@FXëç&¶±Ù®Iu”Þ¦Ô äß•ä|¸‘ÛPÈí€ßÂõåþNR7·QS¿<äT†À¼¼¶¤L!>x,xž² •´“Pë!ÍZPÇ2Bˆ+ÂÇ-p„´z§NR…ÀboÀ»ãÙÖJòu4Ë¿@Áƒ»”?˜™Z8ƒœgz€P¤ÿJ‹¾Ð‹}y“LëáÀ[ƒíWFá ùzT†(RP2„ª D¾8P@ÀITâMlÓ*‰§©nd¼`©·ÙÊÊ-ñìc‰­ì²î•°]”‹Úz+è·¯Ž(‰¼8<:=(tMPbÙ¸„…1ŸxfðbPxR P­BM”ÀA‹d<©#έ¢Î¸OËhˆsúVqkOÐW08 O/7”˜´æ¢”ÀH@­™‚¼”LzTŠ2*ŒÂ[qˆ å‰ÿ&$¶Âã#Cjâ|V‹¨úoœwX„C‚„ÔlC¾P(ÞjM¯@. CB7LíFC#¶¡,Ø~«J—OºO'·Bˆñ¾µàð5û¾K&“”•J—…7ÆÛ¤¢C È0øtï‹ÎaÃÞ¶ÛFŽ€¼Óu¨AF‚ãvL¡€CšÍA¸ÀÈ\+êï+ŒÝî mt& *%0ò+ÌJ¸ð轋¡¡„6F@ÊI¬»}Io3o™Èl’{ÿí4vó­p.âTÈó kPö è‰o­íºº+ÖÝà ¹Iñx4À yȳ]Ü ^AwË7ûᇃÏ0H-ŒŸd9IŠO,õ+î±è´&”€ô–Õ œFÜþð1xed¶àGŸ€ópü_Ü}1bA`¶)3XYÈ8lˆ†a|Ïx≇°jϰñZjxÓôwŠ*}¹h`°ÜÃön„j5®¬ û£gzuN>CTu>UºCÉrWRtÕ>îšÀ“þ ‡î <éñU 1 ?x-b |‚ëDÚ¸(}¹< < {À?B“¾wuW‹ñn)39o¹º3„oFgÓe_‰€)-wÖ‰é˜ÂQ„C˜…oB 77­1—ëõËø~*VPy­˜-ᣯ–©¹B±!@é@Æ‹òÓûòŸ®šEÚ<²ë@¦¶úˆÝ}(õ^­¡mëk—HæÈFÓúàNcÒ Ú¼{Á@´sÐx B ~]~Ž0JvXP‹ë6ÃFô¼L²™© œ£7DNDª¯&HI¤¶ð‹F—=7m¸2çBÖKBdÒƒ¸#íÃFà^`’;È|ðo…Z¤>ÂV$Y)-aÞÙ ÂCˆÞ¬#{ȼƒ¹p¯8%0ȵ¯ èÀé‹´&x@¤aµ:ÁXVÌQäç’d¼À¹™0ß Xy¬påO@ðó¥_ôŠhº"O¥ÐÔÀ‡Ú{ØÐ³Øäš„̤‰Ôüà%ëÔ\wû}, w#×£ß}u§=}ÄùÈDIÐÂïæä4KÝÇÓøñÔ”„B¡ S4+¯†RŒe´R!kïÚë-j N PVRÊ!ï§¡´‹ðÏ}üGiYM;ó~VE¼P º_ +Þ‹Ëþ‚Ä#~Â;µT-}° Ú>³µ”Ð&‹òƒÀòóÔPú,ð%Ã~t…¬‰Z20K܃yxÝÐÜ~Hh±Üür€4à천Lààìà ”4'àìJ ø)çø_b +ccÉ-=`UÃF-{ þ%ã ´Ò4Hë d2ŒÙ×XïV}èøPùfzÍÃg?²üWÜ? ÉÉEÜÜÜœ\„œÜ%<†¯\y9ë J˜Âu».Oi“‘/×pk‘ØdÈd™eý†©u¬ôT­NCÛ'‰â“©Z"ÛyM`Û «0ÿHc¨…ÅÝ?h™"(…¼LEàóp¹À;82T†+ð *&2›ÐËÞå™7“"ë$ƒ<’ $48X㳬òGñ44Ù‹«ñ©¡ò8•À4ï$|™õ<x!A48y€¼@48+¶A3®L!ƒWëq!€í Uk‹è¾KG7•ˆ˜GmáDRcjÂ! íJ¼…]×¢xãI3LJ!ƒ|Ö\`0’VG™èÕdh·Ê. :ÕH^ÉH4œÉç\8`dç0˜œÕ·¾nðK!4÷i”uÉA\Õd•Œ<ddhðäHtܶ_ØÄÏ„߫ h‹uÒOý5Y‹~HX‰õÿÿŽ.ãªk»­xCD}v¦VE !‹„a‚2HR!@Á² A ÈVŤ;vÑÂ)/|œýT¸_.¶D ·Ð˜A[¼¬‰S@ÖE¶D¼ž(¼Èµ}>ˆÄ¿¹´æ —(ƒÃ¹`À+¤¸¯g.H¼–ttH5msh"°t½´ |‚t,ëY‚|*%7ø#Ùyz“\¸`ë=ym©50¶«èÁ>…A’;…Öƒ§€Ën}‰õï¦%:]#M`4˜OÍÆ*K¢{µ„0€¶ÉvD<שּׂ‘#‹èÌ2ŸßlÉ dÈ ¤6N˸ĽŽÿ‹Œ0 ­@*K$½zëÉ)ÇIzL`|‰pR?"ÞK ò‰q<5”ày«…Ó†»²uUm뻂ÐPúPÓ÷ïÀéÐRÒ—‹ÏÂû ˜h¬ýJ8᱂é–®MôžFÄ ¸‡@8FZß™ +@j½  ØðÀj'4E¯Jƒ(ŽE©;CúC×àÁúïÈ [=6 PóuLQûtonxOŸU˜M ‡|>U Me'-|#6TŽ´*ÏDS)Š!Óg:º‰0±A">‚z¿›w“§ØŸèÕThº‰á‹:uÜôÓ>…íc„ïîǽr‚z:MØ€¥—+GW†0 ²!j‘4ÃWTR4˜áöG g_l[‡ä8À, ŠM>ðq2\º«ú| é ! p,ÀIK+ª6 ƒÁAö˜æT) …4±<3ÀMG—X¨”%Wü;ð%¸ôt@~Éïa‘-L»;¸L#A5°üxÀİ©áå05lPŒÈ-Û1´cŽ0ïñ8OVdh%c?XÄË"ó_obÝ[üi^nLQ”=Æ«‰p0oÓjw˜]‰ hü‘ó ÜÉ‹¶øQJŽÙþIi{h`TÌ ´òðé‰8OjOXÜå0O«Ä†‹G\ „Ð ¤qxìAtU„W‚ÑÊÚ?` ¼»NF'Nù¤yTö ^TRü})XSCƒ,$x !ƒ·Ža…`CB8u4?NC‹P<à 9[ƽ°×{ÜÊ»ðî<½uCŠÈˆ¸‚¿ žpNEƒý~ÀV猷’¡&&¥3Å•R&!&È2²Ì# Œ,#Ë !ô4_o‹VÖdi n¹!"C9#$%@9ä&'(0Ý8àl™úúè;-~Õ·H 3íP,þ;lA0 Å}9öS?CEÿq|ÇXûŠˆ) $öFtƒl ‹}ý—±ïÅÄ,˜!´š,–Lq|±¬­Ba%;¶WŒƒ‰ßE­ ô‘R0 Ôù8uޱÏP1ÁŸ“'´—½J d±˜‰w&%æÉrUÄÈ?HH&è–Eè@D¬dU …rÍmUBšw8_TR,ƒ4­8FÕ]µÔuÛ=z/‹Ã'òƒã“BáZQ¯,OQMNn‚ÄCUÔú u¼¿MHà U „‹Œ)à Òt$#0“k| ¤ x˜t[CFs¨@Ÿ;ØFë*ù\Ö Îú!Bf‰Qä(´×6ü:hð’½|j; €Ã#Ùe=Ówúµó Kî Sš¥‰d" Yš¥Y  Í4éÖƒ]ÙUô” “Úb¨øì|¢’AäRÔnI@ +þ)Bdè#1Lr^0z$ˆ¯xµ¡M‹wLUÿW‹Ùk/ÎS/)A*`G‰I[É´¤v¤_¯ÌC=Ͱ@`«F5R‘ŽU—÷H…Z ‰eÙ@Ò.…}‡Œ/Dë½,²"‚[€;Jy¿‘…{FHI‘fä'>42/T*Sdžz ˆ†`2¡Ð 6Sˆ–hÞ;á]bˆŽZA1 v!`¬²‰† U “¸ÅÝ/i¡wi(ÈŽ"¸¾ì¯À¡+U"¼w¼–HŽ[p*ÀŠŽ²*° TðªA÷±-®C–ÊÉŽÁ9²µÎPÖ‘éIŽW„èLû C t!ñZv“wO ä<"…_`4[ƒï@ ~€R;ø^*`–9©Xa\ËÃŽ“3ЄÇ˜Gr…Xuúû°¼ y¶us»€émáCçÉtÈlLѳlÈÌ^ë^+mH) Én2®ªY^ž;÷gËÖBFM8ƒƒÇô…  .%¡äAy˜d9ò~zdŽo„8Éú}bu~ euSƒa˜¯öBŠJ²<‡Œ¬#0ÎòLø ú²åÙ •-£<ÍüøôK—ã«4LÇ_šÔ1ˆë-N²„P MzF¥ŸžxƒJ©©Õ|“’ RÕÒ±+LÞªÕXM5AC#្$}ü|KÆËÀô˜‚µÔà† GÉÆ¥y[ >¤£RÞ2½ð$NŇm6crÎ/HpB‚Ç*N‡„­I’fÓ"ÜaíP(@PÎÐ?!4Î\ë4?˜‰h'ÐŒë 11v¾žD—É‘$äZ“ˆ@¬‚L~­‘p_à†B/:›SEÄã(¥0ìã{Q?høÖI`â¥Xûˆ`÷€ Â*)ÕvÅÉÚLXXôKÛ)CÈ»óìu «_QKM\.:ìFìJŸ!x Œž×‚=þD|HCBœ`åðWh „‚äü#º1‹Àc¹£¤^:9G‘él£ŠN0‰ó3ò¥øŠÐ9"ñ‰xSþP– àABjÕáe ™"ÂDbáÇ6>Ѝ™M4t]š+©—Øeo¿Uúë]‹ºC™0 lô`pÛ@;ƒh|UÞ2Ã÷%4vY†¸Vu/9Ä‚QؼFKö º…îðG–[wêoáAÀr«:GÜ L IÎÐw»ë´ÖÃEèòW… N#ȉëPšè`½¦Oìz$˜Ë5ŠÛ@“"³&eêþdêÈD.P¾6pûeeUìP'¢a$Šd,m[e-QIŒÖ쥥„X¯P#ED0ZˆììUÊX!u¨>;ñxk¥usÿS¥56T%}3¡6…¬ C2µ¢ØGOU&8ÀuHHî}–K wšÙpnzx‰;ÌSï B’ƒ{_PݱJ«ç¸.`•ñœ×A¶+CNýœ·ÕSÝ9dKÿBÆq C°É$QuÇÁØ2ÍLɃDÞmÙËXÖCÍ-L1ÖiS8ŸtŠðSÏŠšQZh¶Bˆ笛Ÿƒ°øbb¨ ÛÙ8øM%Ÿ]K3‹{¹ÿÙ ¤Sq)dhå(‰;SðB¼ôF<$õ ߨ…)q‚€5ÅI«îˆhŒR’¬'¸•;3‰{‰Vk¢§å+Ž9ƒ)³# Ÿ×H®Úõ#Öj¦Cš0“uújyÞF}ÅAÂæ4…Bl!JPK@û XHÂVéÙJr‚ò:|Ñ…=yæçÃMUÆ/úçW;3‡Gû3P?•è`Èé‹Ï+i¨+êíÛTYFžy‘“‡3 .Ú!9Ù«ê>Œ˜ÖFäSܪrpœHÖý› 9xÝKi}`X§Œ3OÀœHŸ&3¥0WÞ3ÁTÒ@žL…ë``ɵ9h-$·@³9Kyy –+4<¹Hò šèÄœ–í¸€ËSWj…èÖîUÑB˜l™Ÿ·ä³µDSîÕ€³¶ÉsHÞÇÈ*Ê臲 ÍxuM¥0Èà „0­AÔŠ dÐ:WAÓ¦R{"ENÅð2\Wë%É M[7R$D_#H¥tëjESÓÜ/óu„†à&lEJß55A5ª;Wu·U‰13b?îÀÙH©ií뾨DÅýPµiØ W­ûzˆÀuBÇÔÔÇž!4.p†dyCúbÊ Ê ûÀÞU²´MpШl‚`V×8aÜHWYB=Á' õyØtÙéÔ††:éi%™’fØÚuS/Hþ ,d ÕDF5&1a¸Y´¼§Ot .ÜÛµ ÏpGÍŽ‹Æ·ÈÃQÁpD:„ïNÈKåZw´.lš*8©OæðÈt0Shší˜)yÐP–»? ä”ìCBèç ã®…ßë „åJ î]ºB ÇTD~Ï K|ìS dá`{X 6Ü-¸iaŒ¦©™×ð)¿v0ƒîY}x+B9=Òãû“üÀâu=àÒÞþ 'sºù=î$(ÄÙž_ s#º X„åpâì6VA(øy>ûšº `ë2M|=ïÑ.nŒÕœØ‰””ƒ¢¼<@_AD‰BTšá7'” œl©8“Ûÿu‰Yë(¯gBcû ‰œ ›‚›AXYåR‹,LJWLjK ¾X–÷MŠ $ ,…í[Èï x7Þ{ï[+$ \”°È‚ʺ°–eù;V) ` ´YWvg‹ZLjJûâ€Ùu ;Jx×;ŠÌçÖll›G"N!‡™ÊC0âð)qw(jE’.5CpHI´t}LÈÉìú{eÜ6Ï•HÀcê\É„±@°/_>BSt3îV'w£& ÆÄ?‘ø}2ë«^Òç4ƒ¼ŸG¾‹Ñ1 8z ~Ç?bÚp³­>Ü·FM¢V$]â¿FâF(WF ÷n$÷k¥CÞFc™,½în èt Jr1†Ü°$œ˜§­{Ï´„6úKxÎppc2“7õ|K /ÞHeì¦q¤‹™éº]qe×h}Hh€'Øo vƒ–^•DUƒÐO·aâËÀ‹ÓˆöÞ½~õa®¸ÕiØÐ@A8ÆÞí.Æô¹ƒ‹QƒÉÞœy†ÄP|«8!íÇ`°\v¤Sš0¤ÎhàÄß ¤ðux¹%¸Ëõ¨4ž©À ßfCg³U|d4ShKlà¶ìH„Ê)É…/„÷N…àd^h|l ÝÒULˆìë»ÌÞóÌhe\l8³©¶w¸d§:4p}q‹ÌLt5yß&5hÍDÕà†ÛF²›_ `~AêÈë ¤ôàû~| ÿŒOlRú@ ¨øÈ C ›#NR `ÌÜ÷ˆœG´0ýu ߈8.qPB $xˆñ¿ÌnªêRê‹ûköCTˆtWuQ8Vn/XEß èÒÂé¦u`,&Øá<“@Ê“8ÃYfH…ÖŠ7BÿFÿÿál´s¤à+ÜçMr,œÌ°ŠU΃¨àäNé߇bFAu=/Òtg)3véƒ0ÅM? ²¹C@ 99.@¤ÈÀމ޽?Nô f‘w ÈNÄù )x2=PU€¹o$ýQX°‘ "›¨ƒk ù?ì2OJ·†fhU€¡ìN 6vÅ{¢¦©ÒîTLFRÀÅ¢Ç/TöÉ/p|t P‹€ÌÿC M”ƒÀoÏ B8Üá­‘Žh¢)c#õÑ<ŠÑ‰n+R ê‰`4‰/>ƒ\¤`ó ŒÈ@ ôë™[Áá\OÄ ¹)ä¹.™F.±BÄHPŽùRK,ç÷Q‹_¥}O ‹˜¥z(eKjâ)¨ Võ´ÎRW aýµ„¢ú$ëTlÀ%=*{`Ÿ”‹‘ÖsƒÝòÁþ„=‚( ¬¡Ž™H'­ë\’v7ti²(åáBÄ?•7)s,H¤ÁÀcÿ9ÜDàN'gƒ(h,E}Oƒ Q~5¸WèÿÿiŸÞ%ÌÔµ™ds>X‰¶uàÀñÂÆá Ü®M[z¦g“ð³ôÄØì®A½å2äñµ„ŸÈRp‹Ã‰`ƒm5z 0I¢–ÎÒYYjgéúñèHô=U22P•04&Ž¡“§‡]ÜÁþ"ï[K½UøwðÊ~ þá}ü;ˆc ž”3ø‰ãbWÿMA‡_ÁýÑ„Ðpt\G­ XpMG˜f‚™âjéM Ô ÏÇEã)hTȲÌÐ(²ýU~’/iyï}Ø Ôi;øê‹v<ñ‹8ö ·#á=Èìt·èÓ&ðby+Žä ˆ(µÎ*J RÌb?OÑèÓ†,s“Kä%䀲ààÝØ>#ËÈ̃ÐÔƒD*F€’œ<_^>Í<ˆY悈ˆA¤Wdä"è膙½"9ˆ\c_6¸wA 3Ci»kÚle£^k“¸a‘ý‡KFipJBöØ0 æŒ'-˜­`'þjÉaõJ=ÜÁŸÈ$<7  ¿AíøÈ] 1ˆK_Hap8Œeá3!ÓG0ÄöiŒÏH*iVp«8µo‹(³uò³A48 ˜ø`2¥øxÒë>è÷z¤ªS ”ålÿ2Hˆfè¼0¸ o)¥#`°ËÔ†x-Nþ?¤·ð;8Eú@Ý Pv 3•t¼Ïƒ-2JUœ´}c"´K ~yåðöƒ ·á uÄ $¾T@8¥‹_V¥´®ì¥â¾ð£’4®³(}b Ò!t \àCénsq,3eÊNt‘`kõY¾ƒ¬{"ã9ZÁ»ƒ³1/rIsx""x0ƒÃ5!$1Ä;Q 8~¿¤ì¡Ð@$óÓa˜%tG?˜« †(þÞ»—(1½5Ã;U#BÈ S¸À%XAD»éÁOàæ «èëaBIÂÍ…2Á?\Ô?.¥§94Û¹w˜§ë%36[6š„²,ÍMâƒ@è ôôÁ(hô8Av?”P„#€p ;‰È…v/giÅÀ(ço¤d Ä–ä‡t[(F(,>¤tH)&´Æ@JC$5„»¾ô ;?¦(ÈC‡?í°ðE~&9yÀØÈ̹>¤æ@pVA´.éF^BôÜÔVrãK`áïûŽöÙ¼Ž„LdYç ÕÐRZ7~úV‚…,ÈPòqH÷uÔDS5Nx è+¯‡t,<ƒuœU†TVX^È;¹ýÈØÑ}…ÛÈÿUÞ~SEÈPé+ó‹Î&ËÀ!ŸÔ"Úîïp;œ\…¸‰\¸`%üœ‰p‰ó HÜÆdAáIÂÎ7tH !6ÝÐHÌru´= 0É(&9à8ÌW”‹ùØ@J{o¸rYUzò¹B!ÀLü©€”P­x°gþF¥®ü^ÒùAÌ~–m°lìY3r0k8è‰<à,!# «UHv,mò0²Q|ts³ÌQ'¾ï`$Ô¨]ØP¾žŽ…ù@/áGà‹´$#!DМ㎣Ui¼=.¾Ì$}8VxËOÉë8øÇ}‹÷ÁþeýÁ/ŒçKtpuIû~#WSÁÙ”Ò´3OÖ'­ÙË»ÓñM±„þ·#w4½oH#Çc½Ö|éc•¤úÒÓçnÂ?D'–h[Ži˜“îE@ “§ÌЋËl1›a쎎'0•ÿI(çÜ)ϱÔi…Uâ»8ÆÀ3(ôÏdŽj¼óªZC{Ü gàM€õPÅÒQ’ ñ´ã-ßUb}!ÉÕ·[RgÜ¥/A ôÃHVÕì¿×úÓÿ÷Çï fàÕGßf 9ÆÂÀGÊ®|±ñ™e…‰1¯/'Û0éQ—x¤LÉ&´Ò0ÔdnÍ‚(§ <°Jx ‹ÇØ(c!cÉÉC^÷|Ä ÕÒ3´¸˜p@h§ÜþCamL̨Éeë^gi'ý¦b©tåÒYÏÞ‰TÂoësú“Âè}t¦Ê“LrU´R+]è‹*A˜×<„€ÃŒö•‹”Ö0ëÿF|XÀÜNVG0€LòE´P=0ýñÏ¿Ð#}u"f5KwH£ Œâ>º%K<¾ ë™À¤ƒèxÀ<°¡í£~€w¾n%p¼ƒ­àW ¬ÈÔ$ó•˜UÒñãÌ3v*‹Ž `ùE‹E’‡¥YU:PÒrt{ƒ) Xr$ aÂICmŠ%INš¥´\¸pÀÙ†ºæì A!/›Ò=úX”„•¤~ìÞ‹ÀQZ÷Ǻê[‰:éŸã`$±S‹¹ Zmj“¼rDû5Ki•@…®||ób@Ä`Ѩgêî{hÖQë{oö•Ò©¬ÂñAªéµBˆ^oˆAFè3’€wmÍ[;ü@Ï:'~M%÷¬`&)A`HH >‡@)6AE +=¡ë.`,ce<^˜$ý ¨’€íý+9«‹Jî´8Ÿ8«SN‚+”µ-?iúÔ‚ +(;‰Â)àPˆëPQðÔJK8>ñA¨BE(œ„^®j؉4¸OÌmí)—bßÙf›å! Cr¸›ßM ‹;0S Q#/PB[û†PØÀ?(£;øs$+Çø –ž W®mÄ ˜;[ ޲É$°‚·l1@‚©Ÿ-c ùW‹GS£+sÿà` †0X‰Û}‰%i?t+±0Âj½VäUþä©’ÌKÌU2‚A€à…%"¥ iÒð°ã™ô©ãüôc cè'©N‹ò‰{+|ƒ'p}VtËI ½Ò‹NCNxÆK{lW xëö73ƒC Âou6‘ ˆÅJ\ë$þ §‰B`·ãûl£KC\;†P|[Õš°v{4€ŽS=ß§ôë3.^·lÏ äëpxð÷ O0NÕ*$\MâVÿ;ш¡×m‘†æ£mÁ\ÝÖ+øU`;ú–q¥„úˆ)UéÐpÉ v‹ úWüaÈDy[È N„ýó9){`xí[Šª` ÿóWXøÊRN‰ç±f|ŒuZïŒCõ,£r€Øh’0 –Jpÿ¡µ:œ¤]ø¶„–»)`©Õ¨”ð$ ºb°AW ?2¤6ˆÑ4zpø©O6|©F…Ò7@ØÔ@J?*wêÚYé~"¿zôJVgÊn"ðAQ†~%¦ð4mø®‰ÂWg;Q‚†&[?øq7€ÄY­È„Y‚`Pî²8¸²&áßr#ð­$ü­ ŠAM•r[Ÿwó¤Ë'/ÁˆüÈYY œw3ÉÉÎ[˜‡_ºÁÆ7² ô‹°ó2 ×I +[Ã!ÝøÈ­MèHp±VP€ƒ\ÔVÕ Æ‹,z¸;°¥.‚Á¬ÏSÑî&ðü0,2Î BÒfI8u¨v ç"&´îy(;& ×¶1*þpoPOŠZþÚCØ«tb@eS¼¯!ÜwÖ ÿMÚ–Ã@5mÆ1œ”vÿwØ‚2Üku g Xh‚8hpNýÿo–î¬ô°Ù§aJo™E^{Û, Vø püë2-îàˆ‹B¼ÁDgøQ}I^”[wÒ´øÑCXö©¶ vÔ ñ‹ÚÁã"‰È;èÐRí@}xh‹` KIEéasJÒçI?†ùív§ê&þ¾d=!P“(v ¡lYÙV” M¬ ËÏŽ_Ò;U1—l##ïpg(NH›Ax«SMŒJ¸…L ‰Ë’ã›pЉ+Ø0SÐÖÅ! è7_b{Œ]ˆ9{ˆA °fé~pÁ³¨l$÷Rx!£ýÿÙPZ"›0Cø&ðÌF¨¦ààAŠTBÇŸ„A%>¤BHD@hžóÑÑS á0ÛS^‹“Ún¤Ø€i¶ÒÄÒZOjÏ"L–ÔšÓ*á×™º…uߟ¤ÂUU «Y‹+Á@VÈ•JK:P \UÂJ0o˜K-FTÂJ[=ÀL,°k©DŒ€P3%8¤°ôY‘^„'®8â… P<ìMAQ h6Y/iåû> §‰®xs\êtC?‹}pÓ(,t|3HŒ„U#"û;Ch` €U¿,3ÿ®,A(ælâ}p‹<‘ëxv"ð÷Ç'||;ì6I¼‰÷Ú+X|;™{¾¤Þ)°qU:ÏëP†–´½ëñÕ9siÐ@ÒÍ8bl޽ŤÆÇÍû®–°P4RÁ0Q,(bKÓ4$ @] 0â(Çv9KlJl³CŠÎo×3Ç‘o“ððH 8<ñÈ |0‹ƒƒ yé1pT"©76t{8.xH”"Šf|W:’Â÷N·iÿ…¼ÁÙØ@Ù]ü`àÙ×å5Ï{!ø`ä#[^ó¼ô`è# û%¨Ïð`¼üØEð¼å5ÏÜeÐ#øôؼW^óeÔ#ÜeãÊ»X!Ô™ L_yï@•?ÌÐ X7òšyeRì«èè™òÞ½‘ääà˜ˆÔwPY^Û>¼ÙTØM¼ÈXåØÔÀYØËÄyÍó–àĸe´#´-¯y_eXe #¸ÀÆšçešõ% θÁ{¶V `€8w “gö| -Àø “g¶¼ä/@ ô œg¶¼è/`€ð Äp4¡˜t§h 2@˜­r ƒ‰˜Ð³`ƒ ˜l¹!¦qFª9ø ÿó5?ïÃ>%?u=§?40¥'*Kà¥$L*‹òG!šD óPg ªÂ+Zì,ïHx¦x™ü!ðS*˳ ø§…CU×+êTφy+˜z&že+8 ˜åý–ñ/›S“í€5,$,+ø.ìeU‚K±ÞO¿Öð+ûkÿbÝnã$iÌà^Œúð×o—öšîaûxYŸWùÛMèDk¿ÍÞÃ>5 OÁù#<1+8íïñ‹Î…à4 ÐpûÄàÓÊà+Ëæp£›ø8d #£(|˜8d#Ñ=Ùg¸Së+ 7@ ì=Lšü+D`/€%&Íø+Sw2ÅEY@ˆîa0 _°–á8äe` ˆË1º0 kÔOÏÔ·Ñ\ìÎ<‘ôËé+^ÐXx½ñ || A_+¾ôG3㯯À+Áš( äúAƒ º¥+d0 ‘¶ƒöŒ‰+ðŒ[·9ÝÚAàÂpôÓqh”qPÀûó_Èß’¸A9ýùy…ÛÓ. ‰üÙ÷ÙC‹·Û ‹d¡¼àË Šô½xFú q•Æ@i¾iï=!éÒ3ãl¹ô&Þ ÷q iÿ¡%[tieŽóò¼¼ øô³AôðTbìý‡ƒÝþµwÁæ ÷·ñÁÅý3äý­—jù ϰÈÐ`ïÅapw÷]íuÊC9‹#øùGð–à/õ ä!°©-ᕚ1ÙÏòBÏ6ðÏÁ'‹ Áù ügÉ…LQ™©¹Šw ˆ˜ÏÓ2Ń@@- ¸™=Jq ý¸€ü¨Ť+›lƒ#¯¡Ž¢X ­@ydy@Fúƒ‚"U…³çA@U¸à¹âÌî@ = –ey®¿@`  9¨Y*¨\V°°÷¸o²Ñþ¸g‹RPÙu$ë±!žf¥YÚ!¤z s0š¥Yšl@eP^`Ö¥YWpPßjزFp,‹™}Ä K @`!‡Ìî‹È Àwt®áõ•Ÿ™~á IßJ@-åT¸ÂßýŠåôß‚<ÏŠÀðôÓþÂ* E÷ Ø ¨ðFýÐ÷liwZü"|ØÔ¾²¼7ûeÔ¹ã ì0æBYÞ`ÝèPóäWXˆòpkþè÷…æy¼eÈFà[aižÄeÀÄìXa‚ÉAļIȃsá[¥”!ã˜HF–÷ÂMÀÝܜȄ0¦¢xÔ"̧äUäè‚vÏÒîìüD›A!ÚùC äÙ[ \›‰Èòl3ô[@)è ZyËðì€e[è8@–¸;ܲVúzk* ú‹âeãã°m°Õð þ Ç0ujcEñµ{¶C+ ÐcæyË} ¼c Ÿ·¼È#Äc­F†U¡ÓÑp¨³%ÿòÞLA¢ˆ4e ¶áVç7­¸@že-.g‚7eä™`+s7eå‹ ¹ ÿE]0ÀQ2Y\þ?q‡µ?^ƒì?Ô‹Š'À]r!ÎÌDbâÏÔ+H|]‡¡P`…LƒÐi–Öœze ^0fi–fW@PPIai–`Bp;-RBáiލО ^ #o¡®  À}C0#àÈÀõ­Û~X¸un/¿¤y¯l{ëø@4/Wï!ô`ÀáVNùgÄÑ=ëuøÍ+?•ð÷è”:£+…NãiöjÚþÃŒ³p͹0€Â]+ÎKgšw»¡ß ì0yÍ~!¿rP(Ù ‰òÌ÷#ZpŸà…èÒNc§žàÓ0èò¿ÜÅ=&îˆ÷qiÉ^BuðöÞcÁã•X2Œ;Zzûgà\Û‰_A‹BèFÎß ;x´ðÊ+†üÁ¼žåñ+öÀ RÛ»o¡+”+ÎÒÙ„Ê3ª+Ö˜¶"‡# +³tmX+ûDÐÐÕ¬fþýˆÐ4ÃEÌÚ ð á©T}àº"NâH¾B¤å <u6tÁáÂy²á8KbVqù–’C›‹eYõ ª]Aq_8ÙèÞ"ÉŠ÷þ—‰rpPœ‘y5PÈæ5cŒû_Âñ‰HX uEq!ÎÁ)Ž3)ÑãCr+&-+Z).ö¼]øÞ-g,[-âb Sn(…-l‘y[ ”¥AaPœÈºç“å/ +4Ë×ÌÜ5oÐÌйÒOÄ_‡„†ÌÚØTPOZW.UÔRRíî: 2[~Kyr²Ü– t'0j@,'ËÉ`PV`L|Bèš~BbKxÈÇö‘eùzßP…PPk‘‘ —äÔÍ–{aÍ×={Jä¤u«E̾'Q`­‘õQŒKAÙ ÙÄev¡™Ý Åx‰Š Ê{?Æ3OÖ/4rÁæ1ò 3<Ýö+òÄö¡'óÀ£ÞïÐ’Ø¿R@“FF™ÉKì M`ò”+óHÞ)!+hš÷PèÀð+ì—kr0üQpÇQ`ˆÈ¡P‚‚Ïaæ§øÚ3I0Î\‚‘³`Irrø&Íú±iÛô:}óþè:Öçɼ%N§0èÏú7­4ƒü#5^høûú÷Çy¯1ÒjÁ+× žÂ_?à„ó±1Átô§3< "CSùÝøU¼Êo› •‡ôgÖÄbI+°ª,i…¯ +cÐvöøK¨IòU_øMe@–‘ èü`‹c@–èü€—\x‰ÿo}È)$Xt‹ÑîÈ)@.CïÄÄ9çypy.oicJáyž]WQKpÑ!W÷̃Âá#âÜÈÈìlЈ Q ÑÈÈÈ̉´Xj®Í°Ú\Q4”Á›OXqh±ú&X?ÓãâÁç ½] XØgÀÞu ,Ï£CtC.é¥:ݱ íF¢8Aù =^»þªÛòÅä‹]=ìy‡+S}ðÑ?jŠDCMÎ?£[…b‰ÌF 9™`A+b#oƒèüAt)9+ÝQ¹|àrÁEEÄÈ.ýÈ!Xÿ5`§áÀä/LŒd>Üe¶tâ£ñ¡j{? –fi– 801P*–fi`#pg¢QÑ~×Â…ÏDÛª7²<K ˜µ ,að`)Ž•*”÷ìÎñÎÝm´y âßÎMò±9ú9þ÷ÞÛ·+÷Zg–‰œ!ÈÞ¨†u›SÛäš‘“vô P ð0é¤yGQ`ì }ƒjšôÈÚ€‘XAïñ«iuɃ¢Û‰?ìyºÜÑAOPš‘è:&ô~ž*†miuðÂì=Ýî[Lì͈€sþÓ=O3÷w(©7âRÐñI0 ‰0‰i+pú\ž#ÍÖ ùH ÄRÒ+@gã’‰ÌÕˆÉÈç÷>XÿÜ ðÐî23ǙϑE?ƒ9»3 @-'µ´ù‹Màˆk ½„@^Øiçb ‘ÐÙbËuœ‘ËËk:ug™ˆ‚=V‹kË!b]0J¼æÅ“¸ìt+¬4/ôîX’Ÿ“ÙËËi]ðÄXWˈ0:Q,&_†.%–ǺÙ—»F«„M0\à7Šà%iNàM§_8ùsN_T¡-€9{à ˜o(ñitàŒZ}Uk2çqô”*7up:Uà ¡ŽºgúÒÈ2»eÐÇm,‘e5Yš¥)V 0$PÓAK•l¹ Š7À®ù°Ð§Ø Œ+VYpmð§¶$žºióîèW,PÞ5ü|!Ÿ Û7´óD+02‡ü]_`%F×ÿÿ1Ç8{ûš'ùVƒ­b<èÞ³Ö2¨ !Š3OaÁÜ¿Á!…$òVøPX¬i y–Œª’ Æ¥p0‡]÷5cÓô]óŠ®ù,HW]ótM0øà ÓiXipÀ(8o; ‹X{>VðV-jf .i“ú7Ñ„êBÀ+Qà HŒ7ÿgP¯È%Aé‹A‡"õ\/=ÝDÊ,ºÆd˜U~†ñã<6PQ QJxBÃW´úß#›þôÉš;‹Gˆv !|\&!¼Â§‰§v š[ÐÚ µ,º «¬4…wÜ‚r Yuw¥ôDŠ46;p*«Šª¢®òä–ô€ÌaV`ÃZEIzÊ$6@Í'R"˜…,¸ZX.FK 1ã©dµW ¹W,.8Ž ‹Iá!á`J‰2sÞºq>ã%xëÐeË]JL}g0 zÛErñQ ¬Í‰ë´êHß :p)[µˆD¯oiÄ!)gv Õ`g2$]İ‚pÊck1„R·´„ƒ¸`Ò¯%M<OLÊ~5NP!‚ÑÄ=!lc»ËlsM:+Æ÷‡vt~Öt#÷mP§S, 9#WB8ÄzÂfJÿ°v‰F&Uƒ°­Q~ò˜r³>0‚‹Wø{ÿc¥… ‰Z+,3‘(¸DrUô—%1wyºVÓ í«²*CµÀ- •ưˀÌ`€W’Ñ@‚S7$“Cœ&0¤žšŠ’qv•(u4±âH,kd‚Ø3ÇHÈE dHïS•ëuqraáZŒ4Ž DC%äe€€Õ¯¨cÖ"=Á )òºiŸFÑ[,¸Û H\+’€ äX‹ƒXÉÖi“Ôµ¡ÕÍŽ ¡Ó8zLÐ÷¹>dVˆ‹È;|ŸÔ¦kÁ¥ ÄGÍ‹ðŸÏžæØDl`ÆCHˆs =.‰ ë|Wý¬‡ñŸK0÷kBH8“ªfŸ¤éQ·”:Ù ‰tÛúSؘ,#°‰QذÀ„ŒC †Rnán[€ø£+ð+³þv0LàÔn«±]@9'ìë–f ä®uŸ&£¬?h+n !– ïœ9(p(pMœz*©À¢…Gâ„ ô®@ T_2M^zð¡@vt è(]GnC×8«*yÒæbDKHĆCâHÈ hD†øÆw‘ìÚÇ|œ‰t/"-íDî ÓVË +îa°!Å·ÒŒ5ÑÀ—‹Pñ¢]6œ­Xw þ(ˆ&z EëE¸†né˜ÂµX ov¿Ô2@‰^Ãá ,3%P ®Óð˜a3 E(®7 ‹ãÐ]J —Þ7.ž§Ja×e¹1<µ%ÒnHaPÁ݆SñÜ3ÛfÃ}öJ_Úû±×HFCÎG/|èe OBJQ)hÕšAªÛÊó6×®ï§H-2÷ÚʼC[@÷ÝŠi Š‘fSy?ߨGßxxu@¸ÄŒ æ wÉÀë‹Úý# Rö¿àZø Å/Ôix8 bD·´Êfh"AÁ¤ð•c&‚XØ+h)sÆKIÁ÷DÙ1î×ý ÅÁøNùCƒÉ|Ìç VOŒR@ )©$|¬R6Gø…†‘š\p gÔ''>.wÅ_e‚Ú~;8uªëB! #—ïÔëE¢Á~È3O…?zK©ýÆ&;Zx|¿ˆ${‡ÆID6Ï 04Þé–ZKoc@xž&Ð@k² ”´Ã 8}aéIï¤+9 öìÔc¨`;51‚ׯ~}nÀö7à8аB¶ó*|ê)0ã?j¨`uË„.Ã-ßô|Ÿa]Ü&×äj \oÂ=¢ZÈ¥ˆÔB~QpuË Cpðgäèð°Ì̇!™'ÌH‘3¥†Mœpp ƒ R ›IÜßj³„›äÐó1b#Ì{Pøq0nèwŽMDœÌ¡èh‹S°&à$Ø>VÖÔžT@é˜Vâ&øm]ð.Ã+X›-ñŸ`ðÅv$DùŠNÍàÀ£ô_‹ƒÃØp‹qƒTwÜ~ŠhÐd@ |˜àKêHÁ8æHÄ……0‚ÌæiÁ Ÿé0‡[ǰ4ù ^E ë hLøvô<57ðRÔYÜÈò ² ÐÜ0ÑíÒÉSó5ÐCnêÄŽàwx} +‹I4Eî%eäy8è<çrd8ÔpaØX ,ÃWÄWŸÀªÚî ‘-è_&.Ë8ÃNð1ä̰]é96§8(Þ­w©–ìò& FY¶JÜÒP–ÜJ7.Žs³—°…ÜsËx¨3È‹€ÄÑÀ -а@öy7AÀ«ÐsB!mh>$å|\ÍÉ…ÔDa´XžÀ¸°1Y» àÔl’Ô$\¼¢ÔAŸÔ¹&¸THÆ‚&YÎÿH|ÂøñäÜE¤Ø·Ûƒ Æ´:@ÀxÈëH »R™Ü3 y«G)‹D‚4^ÐÂ4,i\%™E¼”Úžhà'üvm]q냑â%À÷ÖRBEM Ä!¬QÞ äë±zuÝàx+ÂÐfí’)ênØ8²N±‰¸¬ð“ÒàRôØpSúZÇ™¬ÖRÊØw“ÑÅÒlƒ´Š!Ô—MŒïdTiHH Æ4Íòu„TаÀбÏQû À)¦Gkpe%œ{í“-[pD3UÀo°Fý1{x|댮R¯Q M+75Ì#)Œl 80SZ81ýKXß&Üm¡I`:?: wÔD›Ùö”:—(; ˜F¶°=BC|EÑh”1žžYÞ]1°4[3¼ëRÈ{ mNÀGŠVTODx~9„‹S D$XQzÿû¤xÒ@>¥,i¨”‚¥WjŒšP‰Ïmãº'. €À!X=‚>“ÌÀI¤J £ó ¬!…‚¹4Ìß©4r7A°b `aÆ0H­I ’0ÕD…cPï (U~’¸ Žƒú>=t·ÌŸ >láþiž ³tº?tpÔí02 h"ª¬‚ÃÀ ÀØÐà,L¤à“–ªÞDøÃÊÞàY,T#LkØè-î÷³i9ôS,ÞB #„Gw„†Z?XFc8lÿæ§¡‡¶ZÂD2lXð‰™@Ëë>±O$!QT9[û‚SÞº &Ö7ñ+ WÑ€øfu%™À'ç;S siCE®ëH@o{gtmûo¼WOƒ»°0!€8Q&ΦåÖfЀa\ ÈC¤5#CFÂvcß;³ZrÀ™mûÇ èRM „LDx‰j§õÈS_CK<½Êï‚“óÑ ft24@…¶#´\Ç×AœÆ´«ÓšT¡¨·ÄPZÀF•íØ)PX·FÝJ[¡‰D¥S©[§ŒÅ-!7p¢Q‡ Óð¨ÛVðeg‚µ†W+ÁŽt¤Hû/Ìä­˜CÿBBõ +ÂGH鯄’u@.‘XÔÔÑÍÈñÚ’ÄàÛ—$¥kª¸ ü‘¾+MO9ãoC AÕ¤á°j—Z0ª{e<5dJèÐÐ4@¦Ð@­v­/¢]g‚øÜĸÎK-´ß‹|0UÜÐ ¹¨Q×%]ÈË:—¯$H”CA3£mñ¼…À±A´å ,\0Fï$¾¥,ÃÚ 6)J$LŠ“ö” t`ëFë0Ø_[[Ž­\rcÔ â°p¡Oëf`–ÈW牨V¹AOu˜×ùÞQ3ò8Ü  L}DlPhXó±ˆ{‰¸‡¸nëÏ Qð}¸¹Ù[ Oëɸ<è8^ñ  !áM¢¤:šã€màv‰U䉅.mEP">·h†@ÿ‡pa§à à`!w išyE@•p J$ µ‘‘¦Øp‘İÞ(,ç~ (h%¹,¿žÆJˆäC¼S°õPVM ²¥6%~ìOš÷ð)ˆÝE Ü&2Þßš C¨ÜfÀÞ_ZY°"¸ˆÜ#ÜuÈø–ey_ÜcÀð˜Ëþ~Y¸èÝÙàLe ÞÉSËò,ïC$¨ÀØ ´³<˜°nÐdc \tæPYgVi`k†qÒW ·ÓÀò ô$DO@ eYÞ—ìDÿuÔÐÜØKK.–äà $®´N¥wu¸&á^QÓx˜½HPZ½{Ü¥@ÿþp°~´Eôغê|‹õm(†žÂÈÑø®f\µ´0²#H}—¾ÈÑùQ'C´?ŽÃÑÑúR)cP‰Àß)lOHÈÕø½>SÞKF”ôøHk°Yg0Ÿ C8 7DmÛàƒg‡gÞ}ðgðlüRŒ5ÒgÜ0RïåaŽWY<[8UY¢4°˜“7H „+5µ(|hIL)5¬í‡ïM,Æ(PƒÉZ&³ sýÐ7E^E(ǘVBIPÖ³i|MÙ–KÄ#÷3’¸Y‰‹û‚¦Ô.+p wLÁ›PXÁ9WÓ¢AV½WÓ¼m·M»0ZA¢jÚ(¢$ Ça¤£ë6ë@³uö{•®7èc, iÞs‡Pcå40(ò¦bp³ÝMUIó08³40ì¹ÜNUE„ À·:D/M«é'© £¸PyJ0¦_Õ Röñ©-u”cItSIwïùk¿ù} WƒÕ´ q%{¡|CŸGÄŽ y'µŒR0û-Ȳ¥\I\ ëRmä@Ièëå,[BžívKt0æáCÜh¨Ÿh0 èf” 5"Ù Íl3<ë€&Âz@‘x[À”Å›<0®À87£ÄF²‘Ç"þ÷]´¦Å¥þÀ¢û]¡Px)S¼ü§¤KêSp4Ýi\…EJ ö©E½rVhÈI q`µøo4ÓFÃ#S²\÷{:`ÙÝ•¦R³šYÖo…h šP+Á´G‹³»„ƒø$hß5*Ù:V6oF jî%2Ñ ¹F TÇFÿ: L#¬ƒÛ,-ú™m‰3öV$S+0`*…ÃÏCV…"®§Am—oDÌ"`Ò­R>™ÛÊGäþúÏ–Ä (_9úÞ%ƾ0V‚ˆY`5k#TÎCÐȨ™V:ÇÕ?R [íÿG?z°Š±ˆC÷âG‰ëÒ©RVP`è-äF`VÆ­&‡t7ÔÄjçŽñ{Äi܇(ÆžÂÖ{@µR#ȪÀ¼´Ûf ÁnA³½`°ñ œÍ¥W–͞Éo´ì‹À¶”N´ ˆ¸É7)]¢Ç5mÙÈzŸz%&$£SÇbÔbI»Nð ðÿ_j`ÔØhMbP?hü©ñÒßþa¶S(^ô&]”YW hàÿ¶»·Ôï@T\d1ã:Ö ßÀ Ç%MWk0!ø]ù¸àû;ûþ~1WcÀ dÀýÄŸ­àKgÏsˆ@YÜÖ`0!®èUò×U–YÒVÄÖÁÆ¿ª¦G}$YÛ 3@Ô¶LžJ!DŽÖ%%Ôt¬P*‡&|¾&}b;e™dÖ´f¹ÖcGÄ&œ©¬Y¶è>‹c>õäÑÒ§hø~H ¬UÂÙ8fAÜ3?Ђ-ÿGbÜsÜîw›ØwBMôÜ+värõGÜ ÜyÐrGZüBëÍp Kø€ʋƄn`LàîØ¾ °²Í0;ß}ÁÀ@êT•Žb“s½ì?~ô~'¦\Æ/&pؘvæê$ãvé PH´–(’Pã·k=ktXÌlK°Š•–¥„õü;‘(¯} Ýôl±Þ)UàèÛ!x€#B6p²>EèýéÛ)ñÄÈþ…XØïaG&Û-üp<8¥D§EÐYmü=™b sT7ØÜ RƒF½pæ”À0ûÓVIij!Ü}ÀØ›½Å9ðM0èã¼{¤àéžY¾RGïØ\MàÛFË[è ððõØ%WA`8MàNhSé¨}óå¹ÈÈÜ]Ãû"зLëruࣀØ?:ï?ÇìQ¸…ë±#ÙÏ¡G…¯hffæ?±¶Ó`0ˆÔ$ÔoK_D:þc1‹þÃDK ß ·%:‰3ucÉd›/aw)¯Ö^m’œt:ÿ]@HЊ¦Ù ÝPÖœMrÈ5,ø<å„1MÍ  Ô@Ýàå7eWK`g<Ф|и¸XKÇFÒ šw¦ ºc(v wFãunNý;Ð|¿Ý׈n‰Q Ø÷_'Œd&FRB˜ª=Ñw· ¶v ëLœÓÂ9ØDÓE] ¬;àõ1p_-n`FÚ²,0{pÍ 2z5®ØÃ1à¾/.ÀCWCIí‹ü,Ÿ@`‹óôæV3!Í„ðVìZrIVøýòùíÚµô‹HAss¬¬=b;$0À†p‰­‰… ² ÉÛ ¾ÙBÀM,iJ’¿SÁƒ»i•îûRQYppPó ß„-iÜeˆ¹wT§ÉMÃ-ðšT6§ø£øq!jõ2ôØ,¡¬vTØHSëÔ¹_(^J÷ç$N)w,\ÙCâØ|È‹äxo”l6% EÚ?mb¨xÇhgü t#h³Á,•DÄ8M[Òá5aMô‡µ0°¸xè¤ÙŒ™å"„b'ÀDjH@È!QºE–ð¡<4›t.Ò˜C˜a ³IÚ~‡Äw”PÞɵàð-”eíôÔ¬kXjHPÁ„ûxpoHA} %Ü/-p'T(ëÊDÑø7&ó¾¥ üÈ Ñ´<°.ƒ¸¨AÐ{YK{»¼ üÀ>M.–wr¬°ÿ¼¬WÄ}åâY´¤E¤m¼å`äœÔœÌ,ËÓ…lÌñÐ&ܼñF€‡©ƒÔTÏ& %©بØ€qåüAñÓË=Ïþ¿ÐøºÈBíçÉÌ–‘õÀ?\täíßœ.ËÛ?ÍÌLK@3#@äLG0ììüqä$ðoá¸jHYGŸŽhVðxeøWÐÚÈ.•h ]PQ[ü FÝôÜ¥64ÜŠ…5.‘÷è)x`àW±ã §Ø÷çHÞ¢¸I’Ü#/@ˆÁas®9ÚQ¤bÜ®Y•8 ™Ý+Ü­(¡0‚hq|”­0­œÔ "¬Ä-ÌåyÛüè€Ë#û— ÂñÜÛ¸"GÁy*š‰H÷ÞJÞC¼¯¢½NÑ/Mû¨¢€HÙ±ä €¾á,*$-Á7ÇÙ43`8äî C!°rh‘íÌŒC¢…\àÿE¶óýÔÈ?°ƒ…L&`Ÿ‡¼älƒlƒpƒsb8ä E˜€Qc∑òl¢ 7ŸHÒµ*üpv2È ‡pxU»ÇBŽhÓ ™É2`~`ª]ˆ àán'³'çxvL|s€|™>Ñ€ƒ„ƒ_‰v*=˜@2û…ƒæë<{ &Ȥ¬÷´ƒLžyOРƒ¼Àìy³ ªÈEÐ'Ð CƒF\vØA´‰ãÓ@à£ØÀ=Þ0 Ü7?¼,¬ÌMäƒ`€Ó”¸6‘Gœ›0ÉÅÚ³€ ´2Øeªƒ“x'èÐò™x¸sà:°ÈÈæ·¨£°$C§OM¬CÇ(š™Þž†êÉáB'Ù?ªª?™PZ?ÀìžrŠoÿOÿÚ|a2U°?Ñ"Ûù~jgPüs×’?B\¦ïý>èÙ¬ú¤FAíD^YzŽÑŽ„Vuø•‚8¨¢™ÑràHè‰çÅU]l„øó†pØ}mL{²¼‘øtwæ7E°Ã’Éræoìú‡¿øÁcÜ¥L´Cÿò„®˜„J-DTû! H0û @ ¶`÷‚`ÒÇH5ÊTøÔh”u(ôŽ\‰úè¨ìòj:ª;¡…­S‹ØØt ë›&ܨÐP:VÔ7à \ÄÈpÌ…ÑR!†Ù·æò ŽÀ@o¦ Lh‹m€mz—Møþî2Ó’ 97ï0û*èü½Ø-l’¸[˜6Ÿ$cì2DuðH@M¨H–å Á¬´°Û. Ú,¨Á I}´ä NsäÕ˜-o…ôâbUˆ ÌŒd9’åÕ”ŒˆêÒ¶‹€I}ÕáµmäÏt(ÕªQuvòhp‹CE˜` ¯½më!%tkÄ^UXbš¥›ŽØ!vCëu-˜RàÆë\QزŒ¼…3X €ƒ#GP€òEÞpcx¡µd(‰†Ë ¾Vt†â>t¯édÜT' l‰Á…ÖéKs;lTbõB·h÷\lÛÛx~s¼QŠ»ˆN½¢r³©ä›ò”˜øÉKFžþð %¤aÄ=S¨­rÉ·A€Ø‚3°j ^4 ´ËWÅ9°Ð&'Ýp«+3W8]űt¼¯ÀÇ;0¯ìà¶ A/ö¶@ƒ P (O7Á–’MÀÌ‹Ùàï|-R ”ó¦Õ `F>–Atp«%A#C”¢ /$2!# x¸&ü ßóN6:$éxçÂ2Œ¼ÁÙd80*œ2ã>‹4ÒI€\( Úvk93Q8Q£¡ [o¶ÙƒïAÕøV÷^4C?3Dþ‡ðAÃõ(òŒ™ñ«Å?7η@…7cäÀ@Ô—|BÆŒ³Â/æ‚B2Ä'§KÙ›ü€‰C ú2éÈGœØ‰œÝ|Æ»ÛEÝS1'}‘} Y!0¨Y@Ì>nF¨r% Ù³¼¶+$4+»ˆP†KHÑßG×ìu8í“$ë ÝDäÙ[çØa3Nò)„6øMø¤‘Af§r¬gd°(´>˜Ò*´öSÓ &ÂA¸ç‡YžÌ&%k¸sd^–e ÜuÓÖŽ4Ie¼“‘Ù%ѹdÚÚëEI˰$($hxµ:*¯[ Çå‰^4€!i·±aC¿¶È¢ª­ÿÜikÞ|Ž!(/¦iš¦6=DKR›¦išY`gnu¸Y¶¨OãARGK ÷“æ÷Ý YMCKrbCY(‡=ßïvuL ZYXbaK)VSÍ›G¾H SLyxY6HCMRc åLC8¡Á-PÇ(DŠÈû%õ 8TByM³<5, -2&ù”ÂŽüøÉ{'6!€J65ö ÏròšC—¼AÞ9Oã›ßÛ ‡$IÞÈye—‘÷~ð@t|=Ô$ts E‹aûï’µ±õtH™þaû÷8tJ; tCˆt5-B¸~ ëÑÍ~ú-êù¯y-ätaé-®~ëi''·W?¸ '''' '''' Kn'µH`€¨…ŸÂ9ƒj[$>¡\R”…³‡×M¨$/ì,«+ˆ¨UFòVV[ˆ}₵¨ nš¦ª¬ fǧÓÜMZ‚!WcÚ5d¦œf¸8$RÞP¸IõPPž X•ŸP} vBBŽ‚ª 9¹ ð±Á’wrD’ðG!W,2KvÞÄv5—'6%ØH’Ì1 ë_iL›Ð€š_/ûÊĺúìë „Ò mM¬]\Ï²è „M•EX%°¿fAƒSÐi?OcH¬øøöÀoSŒ)»"T&Ba…¨§qe´Wh1‘ÄÑ5VU6“º}e3­$­ÝC7P §£±‰\k]€Ú^Ìt.&Ìäq¾mñ*|ÁùéÎÐh,á*/-sÀ_zÈ[aaü„…I VšZôèàSùDKãÂ>©!ƒ{Uà/˜Ø2l«µ+‡Àp!bGéCÒ,ƒ|UôRMÉE^IsÉÀ!4“W)Jç}r±1À »N ~7< ùüÛEüqPcLáEã3áa#؉+…+p ³É™c‡ýwìè5Ô£%8•.…ò„@•„ûL¶Ñø»~>ÆÛ«. ž;}XÜ}ø’~-…[á)ŒÄ˜.:ËÓ ¨0@§?”?ðo,ÑLoÂþD ¸ Ø|/„ 1}QËJŽoI+}êƒJÂ÷=”Ë×ëÐYØÑRþD ­;ØrèŒT6.9–ˆ‰j<©j6aÝÌß­­ñòwð«­E˜ë{À‹NìàñÙròKÇx61EG† E¿+% '1XL;ø xÚ} X…PiGmû (?ù|àÂU¸E-¾ˆ÷ ݶ“ ^òCLyà_êÒ z{ùñáÿN³%ûâ‚4bÉH¹`í2‹‚fÞ¹„PñÕÔkÊ…@YÕe%•à/1ÖÜí¢[½ÀA#›‘íÌ[IQ–¬`S-!ÁÉä¶KP¹vϪ q /³]YaVÚrìÔÖmoŃƒ‡¡fÏÿµPÜ.›êá1¶¯&@n—jôÆ8«»h£ ü@øÄ–ÚЂ¯ÈÈ Ãžn 2 &°‚zKÒœµpØIÆÐä"€Á˦è@Ú‡D­&ôë}‚‡Ô¿Ñf0?÷â¤Âñl¢€»L÷ó‹ÈL´>öížïKW€+Ãx#vZÒÈ´g¹ñÞ— „Ÿï!<Ø«ìÎÑA--EX šJ@G}ʶ "Dy¶¶@ G½4X¨p¯ÚâYZ•¥ï3|)4GDGÝæ´¿S *Ý÷BnAp™w)u¨…§|ÀL ‹<“\‚ÑÊë´¢õ†Øë ©VRx$¡è-é€Ïþ>AF +ÁP=W¼ö½?EÜ4èIÐRª,|5€Á ØR†7®Á2ªÊÄø—Š?ü<{‰}¼uÀÏ;$K ’÷W¸AÈ´+O ¬!ÌG32!¬¨ÈÀ–L3B+¤WËÆÝÊ x¼+Ï_¦C°€Å–×H ²ÉAœ¨eäY¸¸˜9@–¤´´”Fe °°ÚgY”œ}îCœ&eŒ˜˜ddYFˆˆŒìã]F†Œ„€fE„àÿC9@ƒE€+ŒjîDºM°°›–Ž Æ,ŽMK8DOK½Y–Ü+½%>¸ÚB¤Y®ö÷éPAèô,Z! qÑG·¡!žWðs?Eßs!ìà-¢ºTÎ Òzt.Ö._äSM},A¿CfØÄórT>SfèÄ‹KÜw0GÕ>{gCgG€QFÁ:Ê£§I´;Ùi”¯\ß%Y‚€ÓF ›×ø¸PNx•ÃÑâ]9¼ Ó×>ïÞ‹I%×)ÈVÞ‡‰&ŒáÊ ¼ØŽkw)<Ë ¸ NAÃì@¥Ô\M¸È ÀÐçBð ßyðƒD;ð‡ý à…•ÄÕÎ×"NÈÁ4¸¸¤v€ÄMÈDÁ|~ø É%'t¸¸Áí ÄBϑדÈ@ôðÀ+C2 'ÀÀ¯Uq7‚BÀ?‚)Ž\ô|z7øB†ä’p¸¸‰d†ÀÀ9YšƒðôwômT,9¸æ³Ðy»M§¯Ôðô­1­¶ ¦îð}6×ñ9Ìh',šïÉ,zÑ™C‰§\8{ °pu¯¸°S'Øelü€F¬$ZÔŠ®ĉ×(·û;ˆXÿ5ˆHýˆ(iPC—Ñh©ö| Œ (žø«Aè8Iø,á$ÿB€ƒ>-ŠÂ+`PÚÛöȡۢp„Á»€;D='æ'û‘TYÞ4ð0}ì) ”ÛZádéºØ“7€=d‚ üß6#„ƒÒâ%eàü}c…4U»—ÐpƒgÌI, bøÈÐB j Y+¶.K?á ßu,Vh£Dm9#0&½ V‹¡€]#P]ÖÉ@ øE¦6@1Çx`>÷BØ-eÂtñèÈv6ÑV3· ¬*CK±†°÷ñ‹Ç›ÿÄ[`¬yÇ@ ;„Å'ÓVè|]ü/ªYS¡¼`v§Hµ Q€J·4ïÆÙ¬Ó[×hüN: ÖÄ­ … è쯨,)ÖVÙtôÈH=Ÿót·Sðua:3ÃV` W§jq^É)h9;‘Àâà²c5h±%NÃ8¿uj Xp*Émt0‘˜8[¡–磴ÁFXYƧ䪈Wûx‚À¤ ÝJÝ%tåØZ*åÚ'V¤KÝBÝNt’wµíÍÌû+-Mc@¯/á âP•çyžÐÔØÜàP 8Uê—ÆSþèŽê(§ˆ+¨”EØyDSÓ ôÌR<”"Ì(‚Ð÷UÊÖàë#ÊRiÙ+ûimÃî¨÷ Ö‹Dñ‹à}ÇvƒOè&U‹€yæ9ä3ìK&þý+гYõ ¹Úî?·eÖ›7 $Ò Eó}ù„ O¯”eê?}°Ãú]+©]À•’§ÎQ_lÔA¶º)sUn—®^ Á—¥/WB ~8jšRÿok×[V(QµIsØB©•tRȼMx|U€P·0ÆG6ä˜;¬‹ùpsca*H! =j9RðƒüPЕ yæ5ÛgüëÉÊD’ˆãŸ¢ž#Ž€¬V°¬JÄgËÈYÝ[ŽRyÇ>p ñQ(wtuSˆ0†*”dY€Ô³´¸B *2”Â}Wa)ã14uµL2¯IEðÛôìZÅ‚ì}ˆE4,–þªŽ[ ÊmX]­2ï…|©íW¥äÁ ëowV(‚®Âú9‘Ì;tÚ| œV|ð?Ê­4 OzþeÉ<#—¾‹„³)€ˆ¢ÆRÐŽ÷ë¹³zÿ»h„ŠNˆ¼‹ÖYhñ€Y†n”¡šŒ9˜“ò•H‰¼¡KꉋH¢CÖ@ì½k¼v¥Hw½Â\ðg‘‹g(OоͽýÁÿIvUr-A,/%ÅDïöF´è f™S÷+†X§Eb¸îÌ ¶3ÀTã¶Mä-^Ñ“¼4PsVÃë¼ÜYbZÎÜ/´¶r:R[:ÔÔlû!V׃ Pc-Y ÿÈRcÊ~ f ƒøŠBó‡‘JÊ„¼eRæ Ô–(>Bök‡WWxeVTŠˆ×u?NOU :Â8u½çtžX­ô 46É$Ó½ÄÈÌ;’I&™ÐÔØo\˜dÜàçVÞóRÿÄÈí ²,Ëò#ÌÐÔ˲,ËØÜ à»ø/$hâ6?h-ëyº~Àáæ¨s§¬¤÷¡dâ`hpÈ+N VØVò‘~œ£ÎH.B+ÔeâxD}PuUPÀùú|Õ<Î@ÇÂmy,¢ÉøŸ`5Ò!Çÿë’NÁþàÉz ËÁ¤ç4Ð 3Û_–rÁñQÂ]0MCÆéc…ˆÛ\𴎇,‡¼ˆÔؘ‡,‡,ܠਇ,‡,ä°è¸‡,‡,ìÀðÈ·0‚,ô–pläøxüS€c ¼Ù€ˆSÑ`FÃ`ù&7™ÁD­_+sqd–¥é-aèXÇ»³=…,váL>~èQQƒcuŠ1¸k‹<ñ¡ÿ²¥É6jRBï‰`Þ|Gÿ€Ð/%àijyyÿ1ÂG‹è9rÊë\Š£€3!83Ú"¼·-Ñè‹óÿŽéÙì‹5éF0Pëɇ„Ä&¦±ƒZy?ã‰Àò"c+xèÿöTX÷BÕJt9<ƒÔ;JóxAþ“0,[uÀ;ûvH…/ןtYF%>X±ìpmÀR6©Ùš„½a [ hL[ï3ŒCª¤?Ë 3˜  K®q÷Uô3 éÒ!ÃÍðô䣸üªOú—VÇ&¥ðízÈlð+@£ÜçÇš!™Wø '¤\f9¨ð SøWQ’÷¿L  E22—ÒêÒøÝ#ç ÀhÀû©ri¥-…4Œƒ„Þ>pt‚ÍðY1¼ƒV WBkÒÁ<øø" /Æÿ€Wû¦hÎóëy…ê BAüí”îmt1ªt63$•‰‹Xë6vgEÀƒ‚™t"GœÐÞž³OØ;W1¦Œ.§lŽªz!êhã VÓ ª YÕY8£”û»‰˜ ÿ­†S¥m}“•‘ KÕ”¬§( X©KQ½Rj”rkQÙ‡Û[¾‹”%Ú`8áMP'Ó¯†DÃÕ“trpct\j¾ù£ïõt tkÖ½cCoDЉ»°qCyð<é6˜‹ eðoѪKåÙ|¤ÀT0âƒmô ìH1K[ÁI=3B ÎzDØá[Ó lAŽì5±“‘èèBȇ tÁ<^R…ä쩃­ÐHQæ`ÝígÔ4©;$ääàMä`GràÜ;Üã?¥æ‹ d;Ñta‚Ðmθ-|gÈ{;É;Âo2…›t Fñ‚SdØ -L^øDp¾:<¥¥f¥Geo/1ÂàGº+úÁÂÅáPsÍ/× %Œ-‰ÿ|çD½ô¡ØÓ $¥c4a`_…Ò„42s]ØÑ`dÐëSßí^ê4„9©hjV¾µéݯÜx5ðBÉ!¤ã qàN¡ôG¦ÓN =Ó‘Œ­»%WhDW­»?RcX•þàËŸ"ÿ ±Ãt ©•P7ŽžA{<ØìRà H ìûÆáD°ù_ˆ>&°ë"‡ ¡Ž¹Ä#Èt­ £_Œr¸F;¯ 'lZ'¯XÔ23f_ p˜ÉX±¹ |‰ ó4PhD<Ã2m¹¹Ô{ƒõWŒ#ÿuŒMíaÃWjÏX%à^¯˜^§„…a«8ø³¬?|ÏjH/ŒG"ÏÚ·F’HVT#õ§¬úˆ°€E0ÊHGX{•˜pA`Ž@?¡¨KßõËxíhWrVSç#אּÀ=Gò„À1p6g!F2{(0ob";“¸¼ 7Y•¯¤z9qZ\»¡$‰¼[ ݘ€oý•[Êñ[½I0* ¡DT&¤i™ewE±þ`×cdahcV¡ K ç­ÄGÐâàEiËBq÷ $pru!Gý%_°`øò…÷P0Y,„ôP!1¦ÁSçÀ ÚfßK¤‡‡í­Ãy¡˜GŠC#S*´¡6½„¯…ÉGH`‡…>ôK󦤕·&/,þ­I1{éN;Ñp©‘l,ÉXêëÒœJ³b<´)yåo‹=|0 :Û†ÿB®ëzÁ–lcntÆÁ2¼%:˜u^Š Á°¦›œÌ8XªL›œ‹à›r ¤:‹—}òÉir ±´hÖ”ÆÆ£Ãj ëõßÒ#TƒÀ´•XµeÝ—LÈ5nȳ/Á1QR (”…wˆPQ0H6îàX^ôP=eÌÇU…|@*º"-®Á)ÍCj>'5WÉVlÀ$k@$Ô‘AñQ»³GǤjaëd=†`mk,_åMÃ.ÆýWèHP @™´rÆ ;ÂA9õ Ó‹ëAr+®ß .ä` 7i ¯¨¿¸…L[ów$6— øÈƆýUÚgˆ…( þçnmdÚ;\ô²´°3.R1`$Op©”’MdÙµËD÷0MЧTÝUBCŠ•˜æÌ£Œl•Ø@Ú€¼rl& yÞ¾¸¨Yý“R‹%ö>¨Mƒ÷ jrìö p’DkSh‚»ÁwÐATø¢0[M§d°¢hª1r¢1x#, (¾ÂÄ4A¿Øìvÿd‹M,XZÒ…z¡ |‡RêË<éƒL 6'—‰p¡úë%œR Q‹ÁC@-ô åëψî…cË¿—¢\v£ >96 —×möf;þþRh"…–¥"þ7$àJD³V:šÖÅm6èà­1“Òn'A#ÆÊæÿ+f"T6-‡¬I/‘๠ÛÌYþÀ¾AÔÈ Cflà+¨c¼¹#SBRÃEcR20m,ý¹öÒ^ÒZY6Öpm W 7fO±.\X}8âØ¿K€hsmcl„oìØ0ˆ±Œ@c¶H—µuLž”ˆÐ㘉oL/¤M²ûÛFSM¨¬’c¯‰ë°‰´4¡±ä¸bÝý0ñÀÝC‹ÀÎL;BÖÌÄ ";Ä!˲ È(A<\Ì+Ðj,¸)3PvÔÿ $†pvü¡¸4È“ñXÀÉ€ó1'¦ßø$ŸøjŒ!ÉüVj@Ø. Öÿ’ò©¦ô¨¤KRbh"ðD‘ „¾5iÝKGòy¡¤Ï¨Ïô!Ë3;øÂ`Z†© Õ@†U1°B‰`Ç PðE‚œvrucWA­€Ôo€Q­i+x0WåS½„ €E’ Ùë-ªš‡ÁPúdú\ÈòeM‘2µhÁ:ŒéñÊé„‚4×&¨u ê‡ÒwGGS„~Wâü+ÐØ`x¬/msWöaeüŸ–÷Ú(,ÌW-b@.ž:jP̨¨óljðSJ±Gv%†Ã_A ®AqVsGÁ_PfxetYä-apÁ—+.QW^”æaÝóàÑ…¼”|äÑ;7Äpø/ø+ )w…½ŠK?C} ¸IùmrhcõÂÙÇi«½5jWþäy ¼MMI9üˆ^{ðòÝw ÿ7 ÁT9Y^3ÈA$ ËÒm;#<84SÑ‘,07Äs%Ä¡øJÀ O¿Æh2tfmWýÅ'Šê#ÃúS8ˆUƇˆMÄ+ð‹`hEÅötö0ë8`0ˆ(²4Ÿ÷Eì3C4¸P ¼Lîtw«Èòd@ÌÐMò LÔyØM²L²LÜà ™J²Lä$iGgy®ï]rÉ´jÌÐԹ䒉]ØÜàDX@.äÚx%äë c,¹axøƒØøë?p"Øà Ê×øQfùâ¼tϸLl‡FÆ"5…Hûº•43^Âa˜0“=Ÿ§°ÐûìQP£Rþ|Èí¢Ðª<<ÿô¬MÈ4Z$ùôWÐ4,½×ðv}*Ö„†.Œ‡ %¢[êü‰ñjŒñ|é]B,¿Oc¤jŸQxcpì G?mðÓ0hÝôò®­Oð­ #ËÁ×ò¹Á|¥™/è`ÅàS*ž"ÈÂCÔyT8úRRÈ‚²šl}ÑPVµ-aÄZœùGu #«³@ë~È-‹=„¥Ïa]¸’!ilÔú°|+?o….AñÂнã>ƒÀ;²=óþ™]Uÿ.ê" Sàp/x÷êí»Çÿ!‚zä ¸9ïßÂBUC}ñò÷ß–uYú0erp}-£CRTgHó;ÉŽtmy ¼¯ÂþÏäòtritJ:rä/К–íá·H!¸÷LÆtUu/Ò‘å þVPéÀD(È Q|s1%'ß1¿c¨œœÖ\·Jp+Á4Òœ\ÒZäDEkNNÂà.*ÁQNx+×~Ñ!bŽàÈ Ž¢GÆY©Õ®o KGAvà*?P›ðY¾SSŸ.#±G¦VQG@4‚1ä&–î]vP©§b”Qþìïц–ÆØªWÐBª!r€ãl<KM&À&á;â.ø9ZÈ€+Õ‹”ŠÑ²,îÓÓ|ì|\È!ÏðøðìNÓŒìð,ÀB-¤A=WkM÷ü‰‚$ÿOpÄð¶\YM0RÈÀçH 0Ó!éÃ=§o’0ÓœÛ=¥=éš™¦å£èØ7‰©—¡ÊJŸ­MŸÜtÊú-›éL?ݶ4˜tg-`-ŸÎ4›YI=‹!-ˆtj›é§g…tQ-|tn-sUO4NŸiqt5ngº3­–O-e6ëk] -á¡ÑL[™mñˆ˜Túë_ú#r;ÉÉ4MÉ|G;Öœ\¨)#>|uéShÌ+#ë\tjSøððø ©Ô W- ±J‡:À«/ǃì S Pë R½¦x{Ëñ+Å0™vTð%Ã%üchï$W&/»ìµ;KÍ¥t-”&èÉÉüVëv)]™!!1¨©ª G—w£ÚB^ÌÝ+üèH fSXèh•z »J9w‹ÉJøà)%žgjw¦à¨0OŒÑNd"¨XÛ2½mB&$ÍÃVW°½.ë ×S²Ó¥\YÏt!ƒˆÁ2@_¬Q«éI†fA$zD“~|iò–;¨Y,è<<ÚÑÏ(öFÇ"H¾2Ñ”€HOŒØy<ÝϨqƒÊ'0%dÜV S‘V¨ 8ƒ×FiÂnˆSN\ü€S‡{<’øë!‡8Q˜GÍÈ –xJ"{Àk|æün|‚ôn'#Èøôô,Äš "ê„i¡¡SkZ é½Ôª‡Á x¢dè8þ(L6’K,Lú2}“ΰÃ{s, ï Å £»ÞVà& nų·VTÆ4«Eœ7 ðFHEwyÍÔ=Ñ;3/Á!ànûG ,˜$Ôâ -,-ôQ6^†*°.xR)á¹y+è âÕK*ÒÍü©Ãà°ËÇ£ p»"Çü… *ÇrYÆ4\ÉÈ„4øø)€“œ, „ŸãòÍÔƒ¶Òô–]¢»ëí%ß“’+9È!¬ôôŽOûÅënÞ|°$'—Að<°rr°ðÅð¦Da]Åï¾ 6 3‰1ÍÆ¨ãùVBà³óyoJà'%òV¾ôD²0RÀ}¸­ŸuÀö6Ÿ-Ad|§u¸V.ZrÍÂc>ÍRT7 ØÐ…ɰÔB@VUØÎ´&>Ò^„&ƒø¶W8Â;¦© Ÿp¯ÜvÁÀQŸù¬+„T^"¨¶)‘ÐYFžåC¢ŒØœI_Á_ ƒä…048מ@}ï'X2ñ™VARßgD¡ä’øìújpQ¯’f;ÿ—Ò…I ñEAjÈ®ð&îE»›'ú”^&†Gô)=p˱O2,€wò¶ÔÍ`@˜ÂŒŠXâ BpØ|Ï5ç…Ô›`/SÏzPƒ.Žxà$0Ï÷†õ7>ÿí`6ôGVàdYc*à‰lS™p’èrRªp;”£sÇ&U°RÉ´ÁVV-¯Xm=Œð@}°ýÅÐ>ƒ©S' }ÆHp6` …eŒÒ¹,V¤KÁ$¥Á§2É@2 Ø€`[ŠÓ«1U2Á¯$…L2$É!GÈÔÔÉ@rT((‡2Ô¬Ô¬rTÉ!,2É@,ÕÈ!‡„Õ„"'dº‹@êt~žp°†“» Uòrl?¤OQ¨Ü 9)".M”= -iº”Íny´Y„f|Ì‹>@‹-Ø)eœQ=¥õÑ)ÐëaÇq#VCfŽÒªâñì?tk¥¶8BF<Ê}ÌéB[/ âñ ¼Ües‡´ocƒ½ÕäAùÐy)¤‹MÌLšˆ<ߌÄ&¹UÐ"ØuàðPAÔ)ÏŽ¼Â7¢…OôGéŸ&U„‹p«!óG1%ËÔ;΄Ð6ZžÆ;†2rÛÔø¨\Èø˜ k¶3‚Ò‘}‡1´fØûé`BêUxœ¿'ΚÖâ&"ÕRƒ¬ón–‰ŒWZ~ZÒhU¸xöÚt–EE¬RdަÙ‘‰%\*GŽλGU¬Q•G†ØÚœÓEÓÓÔØ£Z$éëvËN±3¥yëVÅÖ\˜t…ô>6Fh >‘½ë¬d•“‹GB3y4¬"|ôd9äô,@¼¿4ä¬ú!E®Pc®È!t"!,J)™x“: ‘ç…Œd0dÝù|¾4…h–8•l:©({G¬‹SMLEÙ®‹kS°‰tI‚VÒGaC"×ÕÛÈÉÕ+7øð¶U€œå4CÝ4Œ±^P¢,Îë ÉÃÄFç¬`páL,7aŸoŽ]‹ƆQ("^'„¯)óžù¦2Ò¤3Sw踧áJ‹.ÏRî êtlj £ a£ø+K¼@zÆú|®;`•x@¥¯•šHEh¨WÞ›¨E·àÙ?¨!œµøä>#ùhñh㈋ФMDS9\•[xD5Ûðá‚ns1Þ85H^†õNuXhŠ\°‰ßWY‚#ý¿…¹d’'ð…öV¥+yä~WW(¾˜gF(Uᄈ§Pc©\û‘ NÅ@ÈS VW•VÅcH‰_6(UXjaç A+c¨ ‰ÄA x7´V:h0ç¨hàÀ«ú°ŽFx—ÜWD$h…cßúð)„öt#Ch·ˆæJåœfQÉmô8ˆX¼ë3 ƒœ ìN5ð¤ c< ôë)ým7É3ì·VðYn£˜ôf\xHý<àë‰ÕfPó'ê‘Ä'VôÆàš)ƒÛ\øR[ÂÑ)ú)5Gü4F(™‰ŸDe\Pf`ËO€QÍæ)K`QE„à{ÉúPG+Sd¼`Öž6^+ëPøhˆøî•WBOê[ ‰ÏÏ÷Iá64<\Éô-` ·£Ãø/d½ü„LÈ…ôøè8ÈüôPST‘XÃz½ è–PŽzì\%ˆŒ«]‡U‚0þ£p• qG GFÙväƒ 'ˆsðô“NmÈfàRöÅtÈÁ ™#ä¼D°HÔ/Möq¤#sLûŽ]ä² ’\|Â0r8• /:"$‡Ç²òtÀŠøÐ±&­_ÄÐÑ4]|M”[*)€qY©ÃçBú4Sƒã Lçàâ[u±R¢Þä·Éaát%ßäàëB“Ð'÷êðOGL§¬ÐJ2—žÇdÛŸ>#À§A÷Ø+Ò¶ïãÁÀ!Ð+Àî#Û*À‡þI÷Û÷óÑëÁK;ÚÜ?f#ÉtSÛ^ 8ZßœR‚÷轤ý²óZLjœ%4gk*˜fÈš[HÆ`·´G9ë“¡Åa° 춦ð0ZÂwË 1¶ÊâÚ:Œì‹=g<# 2ƒÒ2º" Ž. K!UÖ×À“•Âó„”ó‰ä-Vò+c-XÄ[ŸFÞ³µìðÞ­v@F+µ-£@^·IúÎ-{ÛY$ô y‡ýyÛBXli’Vçgm$a*LüæXˆéóøAeàVk)³„óáJtJ .Þ-ö;|Z^ ì;J’8Rˆð ½CCäì XØÒŸïûè´.*Üuò îe,?iÁADä¤gä­`ÏXÓî7¼FM íÎ oKII O%‡œ !aa‹…kZ³*þ vÖ ¥X)G”’Àæšðƒ¨$Û¯äõ³´=†ÈÛa¹öH!Ze'y,ãåLGÅÂ2\§ÿ³û&¸bï7WëL>fEiF=¿O"f út:W‚C€f…ð@eYö#H6LÝS£ð(Ì^Ô½é)Ö( –¥j7ÌV3-S':  yCPEH[Ö'kˆ%1Œ¿”²’ÁH1W¤!Gl‰~é¹D`¿Ö-”bˆxcu N<Ðk¡Æfåp6Ó)E ,|ÑÈD׋ ¡ß‘Nµ?’ðN (åCÜNAF^@4 2830ÖF"† ¬2ȳG.¿ (9ö.‚B7 8»É±I5¼Èl2HP0·8 ‡\2@08Û=rÉ@0ƒÇ0:½V)â@WIb¡È âÉ„!ðW×-¬d$îd0Ã@^ÒC1 [œ\/õMwÈ“}@fÐÀXä4ÖҜש}HŠˆÿtÑ34Ñ•šB™5Ü¡¤q!c‰Å•[t¶æ²5ó“@ûÖ‘/ÁãMhÌ‘Çä$dA5íò‘Ñ EØS7Uè|qSýúD‡õb©êHÆ6^Jxÿr2$ôãV#вçû#P†ÈQœPìÆÁÙeMÒeØPÿ'-d‚mKøJºl-`©%dxÁ »5EЀƒ>dEs»)³£ džz‹ËG‚cýPPŒ${àÂO’Gp.Þafÿ0˜Ùž¥YÛƒjÃ.<½ÏÓ`v 9B€zè¥P錚Œ ÀÛhþ"B Q ¡ŠíOh0„6–W]‡@ÅJ“AÞk, (ÈHyÞY/08@JX8 þ7ÇY"¾‹5 æ·“ÂÚ WÈå O–ÁÌÓØöÇÙì‰_jW mgŒ1yn B€YmÅ&+†Gm“ šãV±Ø¤käM€Ä+QP›F3»Æ0Wz%pk—2áFíµ± R~V?Fn« wð ­ið0?NxaµwÆ! G¹ü{!Ñ^ÜAòCóEë¶w9äëø 1ŒvÈëøWw^-ˆk˜ýxÒÌo 5OÞOCÕë*v Ûr <ÇÂjÁ#]É¥|É'jÀFWWŒÇÙéR­h;¸º"ྕ‹A@XÀÉ3¬+ʃóéláì¨Á5|åOXº§`ôï­FÙˆÙ%WVŽvhZ! 4A;@ÀŸ?![µÁŸjíBa¡Ÿ`¬}aš™Â€ß¦U¨ƒ$\Á¬G°ð±û;Ù~‘2!@4ã0A"jŒáïÐ×6–µé2í³I¦=JdgÔíV-{g¶ÚÑ.¼i gSƒM#7SiƀݷÉÑaÁ Sl-·Ø…ؽ/â)Ø´µ ß×I©¬6" Ù´*uWuǪhÑ·UO (.Qg+*vOjX%ïãn1¬­pHm»Ã쿎UŸ»˜df+ˬ¼0iZJVJ fižœ9HHa7j¡WpG‚5Œ+'Ǥm¬7—ã.0š“¯˜ \¨‡Œ+4L´o©Ø0à—9®´c7¡EUÚûç8káþÓ%P„sEÙ ×DXÃÀçãR‚ÄàÈÇŒ¯ýi½ˆ3ÁîÔæ´ñà”ñ~:AÖ÷ò‡{ÿ×)ë‚pAg!¡/¢o)•AP`&$ò¾9˜wÁï‹[·ÛÃA×½øE\©EW¡Ì«¥¯XÈ¡¨7@d‰vÏN”ƒ@ðØ9.EýBl™}hñ ØHŒ°Gûà {h=‹ Ý—ä2 •)ôä­Dœ (2è`!ñs·*ÒJá2ÿ»ð›€ †|˜M<¶^Áè&ÒÞ0"5]M ÕBY‚„ý(.z„@óƒ†oØ  GÈ#䤠¨Á vC5X··x ‡ãÓÆÈt ÌÆ¨2‰À&xûRZ¤ÜÚA+Õ-€€m£#³—âÚSº1cêç×ÐCcQ¯H£½$mÒB-˜žÛÒÀÓ˜H+ÞÞX[~BA…À}Á—]„x„gXi0± …:ifý˜@KhíHб•&Òïg>UlÅ8ëjýAܘ>™›7"ÄóA=XÓ= (ÞþÛ Âh©˜.dùP…Ò|þJ1«Zð 0=}áý÷ÈTou~—ïùç O]ñù~"6iÛé‰í‹JA+VB\OŽÞô—®®s™8È×+¥™ èKO÷ ‹Tä óGËÁ7Û¹@’‹ä¢=<ŸH.R ‹ÊʉCòÊ[ßEj×ÍŽ« ¿ „ˆ6§%È$“Lk¡™vRbU‚#¶h£S!B&¬zWÈ {ˆ™/„ !C˜42 ÑÁúÚ‚[œ©gXQ07$‰âá£!hZ/ƒ â-ÁÑjTÅD /BU—€Ï§TíT}Ü€ª¨ Qª˜¿qˆÃQ‡9t\¨Ö/t¬ ùO4¬ªXÿ÷Â(¢Ÿ£"@èWë Gh×yÑ (ONO°–(WDa¯Q*ˆ¶W·¼D ±¯e-鱂·êáHè$+Ð^?!ãÀúÈ@*!ÁWYU±j±o[U ®Gço‰lµBÿïé¨-Ö¹.Ÿ. ­t6Æ…<–’œ7”Ð’Ø ‡†Í¡G:ë^¼ëÂ7JøÕ8‰}zÛ-àcíК˞ݯIcàC©âƒ]$” ÂDÎ bb÷ ÆÈÆÇ$V D2 Œ¦Eh¹Kö3kGií%$ÀKPÿ´ÐY=lcmniû W·õØ+4>)þ[þ ÙöÃu_+QwJŠ›±Ø%M ©À -ãš( Ý4­Mñî$äÐÚ¾ì™äØß ŠÁ¾ì$ ý =è ¨ “úÝ‹ÓÇ ÈÛÏEô´+â  ¾Œ¥ º!íH}Ht HlåŸ' ZpD鲨ÇÑ âOƒ7;‘©“w'mu¦i–ïÅ‘­ÉûäÉ[È<ë 4àÉ<ä#(í; ¡ð ¨8¬]Lð ãœÚÐNò› lc­ÓÂy@þý7 uÚäýP…;ó6•èQpÛEåápX+!'èül^–âàƒøK…¤5­¥ÕE¯ð¹8„®Á¤ä'Ó €` G °uˆ¡X Ó]ã™6vÈ7<78&ì“'ØM¶•Â[8ëfíÓ½—Û`ÿW¾, P^ͧ€ªSÐ<œö¼gT”,søþ~;ìÝ¾Ä Óu =u¾¦aZh]›,ŒßS²<=AH¨®èàMÉÏÏø€ …FÜ4­$<(2»PÙ†L2íC»lìˆÂÃÑ2*/ï<Q€I±IFD$ÎGk ´J»P»”qbµÉò£J™&ÈÇû8ËD g™\$aNpЉ»cË}oƒU^ZG'ú€xü8à''’P-qjcÉ¥`*a'™A¨j:–Yå_ðè3ðôoØ\`À^ìg)ðI»-¨ëo6Àÿ_jør² øüøø98'ümµ’Ç*‡°…p ’c  µ#÷:A¬uwäu‡Àpž§¥›‡Ê„-¯^ÉFâ¥&\*˜e†Pe¹ÒDá´àE_¹?kò”Õt=Ï?ñÃF"Žuþûÿïq sY†8ÖÅmþ?“5µl­7óì£SW‰$ÖÀöüf qõ@¿ÑäÌ _x ¤*¢ ÜJJiU8W¢JÑï2UE¦àÇHžo Ð -ï=$0#È 4ÌI¼¼å#8À <Ä•°Ñ@ºmD )œÄ… $Јü3±Gë~QA€JÍ‹;(3ep YŽ¥]#ØÐèȉèeàmã7NaÊ•Hÿ$°ˆJÓ±9ö0FÏ#ƒø•'÷U¨mðr‰X _ËÝ5RØÙû¨Ù,ä¢Þ®açÛ®L¾^ÈW7Ó!˘Ø‡SöÍ"SÀ’K_ÐÃd@à o5¼; !)˜'[Þ Z;5àôR±%-pM—ÈßÜa =’iß-½&‹óNÂä‘‘ Ag9 )x˜Qÿ6eQÀw"iÿw?w¡U¬73ÛÌÔSœaÓÌŒP‰X-0 ™s ¡á]‹uˆA“‘[bC`Œ¼TH1h˜Š[3s1@CÁw›SåQ§èfoÍ%RmB¶É-Clýª¿ ¾ˆ> "êÌÒ®>nEMzû(.ÝË‚@Å'Yre¦h¥0 !%  Ö@Æ[Ô»Å"Ä9/?jß9 ;XAÁZ¢ÂK™Ï­jÛ…Â×ÏЈHà'ˆeÆ ¶‰¨†©©ÃÀ‰IV „>EˆR‘ˆð<ÏÓŒ”˜œ®"… /  €’¯#—$,p,ñ7ia<•ÒPåô¨¬[Fdé mÂFø¨ÙàïNFž­T¸Áû!t¨;bÕ&˜øGx!s¸maÒTMTZÀð`èžçy.ìàäØÜùZÞò;ø¸ ü¼‡Øë&ažŸ|Û\Žèž¨ß€<ŒàÞáÀÈt0~mâõyØ€7ÁëR]7 h}«¸l4±tÞÉø=„ò]°µÀ„ýUÈF—(ð·w̃þ¢Ë[‚8Ý ¼ÄÖÛA «/u 6±üOˆ7í° †À@ .×*–xX'ß~•ŒÜ yãÆL#>SZ%=í´Ž–«Ç† §Ø /…)åS“ht:I"éƒ+är;’r<+9-à×hò§›ôBKT8P„ˆí›lFCû–˜|±Ò€Ka…Þ¨C Žg¹ÈP´ió,§ñèá“îí¥ƒ½@V¾°BùžñNœ'uxnú’óÉàL8èr K@ôÖdÿÀ^J¿•`|zµøÔ>+Ã,);Sba–ñ QšŒ€à&%2—þ‹Ç¾xÈh’¾—„‹ÓÝf¥ø£>+Ó^ÈÑRVÓFaœÀwØ?&Yo7ØŒ8€9{hÄHµ†ªV§P‚RàÕ± {¦¸p„``¯$Âh›S ($·¨ç§…CV´”*J žœKteÁ„:¯0 ‡<*w3^/ÉYÙAâA"€$òcðh/ ¦ÚWiq:ã0Ñ‹+ žtW?³U¦ qb \¯W…$Ëå®Sº`Ùh½©» a Êuè ™ë$VˆPNGÐ ¸$T¨GS¸H„€m¡@K%¦ˆÙÀÒ*{„æ=©{\²DSQ Í*Í cFIlÓxÁBÚ)k\ˆÂs9É <;˜À’ÞaSˆ§¸RQÆÞæú³šV˜í°SH)€q%"·Âƒ\†INáÈÈÑ2‰{?¬øK9×4jÁ:J ;‹OÀ¼_ûÈÁXö$õÐÂÀ’†Ú[z·Ä÷°‚¹@JçØ 6†I›u‡ý­”€á;Ès/È¢>`ÝØ+¥ä”XW^“i ¨ø)rÑÄ“‡ËÈȰŠäèQÖ²,èä1÷ÐK#ͼvù Õø¼P&˜ÿ V*¥UKx¡kI­Q";2Xÿ3š¶ÌMyðLòD:d iôua`Çh•¾¤RVw÷°`hÄaéÔFÝQƒOÏPRÄ÷©@¼m÷ AfZ†ŠÁHÍÁŽåL`–×§Ô1h§—·÷2ÆÀh[€‘’.îÀö†ù ƒpʽšÆT¸‹#É õ·6…%4…ôLm)Müñvá5-[Úa{ˆt4-@Åé&Ùà5"ÌmB)dìŽàÌd嬖 s !·ø]h£ƒD SV2_IÁ{»Àvÿp£°„ dBÈ`šW>™¤ài\Ó •k°àöjŸWhãëC{ÀN¹ äÄÆ0Áq 4ЉÀ'ø•ŒåŸ³¡ •¾p3@)´¦ú|* LÂ× ä½ä@m,DÁ+nE½#»`<¾eµ¡"–eð±Ts‘Ñ%Cæ$¶È0ª] ½,ädÜp± (”[Q^¡[I$döE%Ï­àØÒÈËÃweíÐ hdoôá˜GVYknily68‰ÙìY3VÅˆÝ É&dÙIÇ¡õVçF XQ_ö ~-3…wuƒhØÓÂ.² /xJÆìJo`?ìô$M$B}Uð ±H¢‡ÉDItW,Tò0W3¤4À\€ Ì­þæØW-Ô1‹ •ÔÀù¹t…ä~ƒQVßÁVк¡Jq1˜ <×–vøtäB\Ï$9ÀB`g0«PW[ÁN{Ñ?ÁøQ3À#!Œµ#z‚Í ·¥-Ût»*%06Œ€LùÏ4Ì;5³",|$âvC2s5 ŒïVZx?ð¡%:™ë1r ŸÚp+`ÏRhÕda’‰Ï2B¢/Ý…`”.L4pm• B3¤ÅÁday¹< ¿x X€¥¤äHÞR²!°´ŽäHޏ¼ÀIs@Þ8ÄÈèiÉ‘Ø7|Dƒ@-5V "š]‰PRRëŽ7ÿ7#)¶ÇØFªÀÂη”na]V)ƒpëKÑ5œ·æÖtW¥œM‹ kèÙmGUH§+£ ’5H<дCœŠÊ‰®Y’&i(þLŠÁ‰YïÓÒ^`+3%‰ÁIø»aaiáB‰à`Â@&_StD £ÇŸ^.‚°t ë¸lë%áŸß¸ä ¸ôWhe€ÔÔóâ zTçë™;ðãrÑWîSÆA%ûޤƒ¥K­ë0VP'0X)&Rë„çVPàÉÀû ZLÊCÌØ2ù±øGe€t"qG„¸Ká­ã \M“ŒóÔy†} ÕÔ[*¦*ÖÈäð‚ØÁ  ß#ÄãdéGäQ’~GßäDøu\‘í0/³‘ª­ LÇ•|¶Àm¯D¸UÔQ_ Oµ<|á b~–àn³ à-*ËÆ6NwTP¤ª ã’ðà9&qÞ0ì…É.(è-0b*AÔaëRÝ… -ŒòiÄÏÊ8ÔèsäÀ[€2ÅIYÏ@á£ÿÈeÐA:ÉSc82µF¯nÌ=‡Ï[IEèx+mÚf„ëè?V&Âh䧘m`ò¯Ø CšÂõt¢u×ÏàDóÄ4\cô;—­Òm2q2¡@%îVF¢^F†ŠÄå,ƒu½ÕRFAÌ7We žxä+†¡€7F¬,× {MîBHƒü#ô¹8ƒ<óøwúM†{˜féëoUvƒc÷u$våV:ÎWÚ`.C—$ÞÂÈvCŽþŠ–Üz,‰Œ¼,ØÜß)`þQ7LüŒ„¤Èx|‹¸&⬸çÐpx!P/_!PSz':8„ÃfF6<Á+ôéfŒHÅñ’4ñ½êã"f©Q'Økt)h´R=Pl×E9 Ѱ9ðÝë`Ê=‰4ÈÇ‚ þˆ§] K´Ña(â åtÊô=òK¡ü!}ï96‰X۪껰µùM!UìRÔë$M…4[X)Sƒg«T&ô;ÂÁHuH»x—Úª#OÎwÓ§Ó¤* ˜÷öÛƒójJ>cø` e= ™`É%¯ÜD}‘“Rh ·f'A€'¨Cý~ ™ôD$éd§SjT…•<¨ÑÌe@)6¯KÒûDHÉ1ή)Câ·mÉÈmŽhô Ú‹aj€qM‹[¨±Â5‡˜Q´³Ij‹BR¶GŒ/šÔU¸ . ‹ñN$`ÞŽÁ8œ„ô N­´A£´@ìÙÊÉDòV $t±$†¥pÐÌik—3"r0"rÒÄ» +‹a,ZO"±vÏïÆwJz¥|=IpYX4ÞK*c/'ð…Œõÿj_‡Œ'`k bìå ³ûM¢Í™J‹GÞ7l6“Â1)ZE’Ré/°° ‚–q@cÁ…£P# ÌÕ~ ûn¥‡ÛP qhTRB…CéÙ´ „ÃÌІ­²™§@…ÿ*ôRLÛhrtnm3{)õBÜ@ ƒÒÌ€@„@8>ß<0¯”tf²_s(yÉÈ„$cse2Kd¼Vi!TßrìÂEUB€Ë (c-Qf…Úô·Öf®…DÍ2ÛZ•H L‰U,˜ÛP Ç…T²W#ã©’Ô!Ʊ`מ=÷…CA)ÿ$´òÌ;è ÇX¤g™-ß\ºU¸`¼dËlùMЉhÔlY¨pÙ2[f¬tYÀxeÌ–Ä|YØpܵU2nE°Ù¹´¼ ´Œzò®lâ”®˜ 䱉Ҝ_§Ò029–"¼\À’bÍ(gÀT’9>mR’÷L¬5ÇR(gkçåMAP³Æ*(ÒWœ\”4ÖOgè@HNq±M«’ :œ4±ª` ¹Äž6BoÆŸ¼€Lf0t =֨ƺÅ?k .ÄM´YW` îM'ásqçVmC ¦ßW×4N¶yhNr/u$`rpyrí—d„Œë\WsV<Ñn?íë"h±‘hNHG÷ X5¼c£™2Òúè‘6[Æë!'× ¯8!2ãOÝi\Çfu Ë…‹­W1M4ÒoÒ2N(’ä:>áBPÒ¤äJ®ÜÜТÈ-Áå‚…a‹²u'Õ Ð¼Éfì´/ƒã¡FT…ìRe0‰ÇëFJ7Ò‘ä ‡Éc†SÑ8óP´ÕÑJ.Wã¯ÄM$§WuF,Ž"p[ÈÓi“)WÃè%g.‚V»V­ma _¬кÅ9}hÜH( àaP· Áj ñCèS€1É8³Rö–(|U·4 [Ê*4î"ãeªØ-èˆB¶ ´H×$ã*Ô ÄÍ$ãZU?¡ö)èÆyžºðX n¡@Ú«vyQFR‰PJ$WÀŠ3VïÚI¤×Û8è±§å#UœtÇgShÄÆcI@tcdö“ÙxvBhIiËÓ°¶[< m‡lbk +Ujy@(yShPa„jVƒÀCB&ûÀ`¯„p\5ù‹É¢Ç»ëegugZ•L“e*ÁTŸCA‹Lã¢P(aƒqy$€Þ0¾t€0Q`çmh ™)ø ZäJ­©»¨(T¬x%É£à'£ÁA2B ¡Z'z' sk¤« ÁkÈ€@r%Ú $"ámhˆ)V‹†#!ˆ)g†û3Ü·cSÍ@Í íTþyóÍî?JQ/#±ª€µI!øÍ?orг ?Æ$ܵ¤?T¥‰"›8‹(A‹KàhK!_?,fU ¡%‰†K çc$¯¡…äÝD+Ñ; dddd dddd $dddd(,04dddd8<@DddddHLPTddddX\`dddddhlptddddx|€„ddddˆŒ”dddd˜œ ¤dddd¨¬°´fddd¸¼ÐÔdU°=Ä/X—{x­sssó ȰÐÕŒÄ ØÿÏÍgóð Ô ìüû>7·"°#è$ h&"ïsssì'¨,d. / ,³Ýü¼¢Öà”Ö„j|ÿ• ÿBorland C++?öÿß - opyright 1998 9Intl‘E­.øṵ̈éü`þò”Nonshare¶ßûÿ›DATA segme­ !qui*CïýûÑnoun multiple iet-cöÿýþes of aqLL =der WIN32sû@дæ¦d‡l&›øÛz‹ç¹öö{ dA4H[dAm€–A¯ÂÖAdíýÏ|lذg6J\ ƒ 2p…š† òȲ ÈÝõØÉÛA }¿"}8† 2lGZn/dA“¦¸lGÎãöA99~%6dJZp€dA“¡®dAÀÔë¹½ù~ÿ !7 2lp®Xj2È ƒ•©È ƒ ÀÖîA99€*d?Um„^dAœ²ÈqaÃÞô ذ CïL 2lexŠ dØ ³ÇÛrAíÿ‚ ƒ r#5Gƒ 2ÈYk}<2È ¡³Åä°aƒÝ/ïƒAä%7dI[mdA‘£µdAÇÙë 'ý„!ƒ 2È3EWi 2È {“¥2È ƒ»Íß“ƒ ñ…Ad-?Wdi{ŸdA±ÃÕrAçù †È Ms4Lƒ 6_?p’ 2È ¤¶È2È ƒÚìþAN‡"4GdFXj6l|”/¦¸dAÊÜî ƒœˆ$ƒ 2È6HZl 2È ~¢2È ƒ´ÆØä ƒ êü‰Aä 2Jd\r„–dA¨ºÒäAäöΊA2DdVhzŒdAž°Ä¤iÖêþ/ØÉ»‹?‹$† d6G?WgkeœAw˜A† »ÿŸ³_Èždàõ Œ#ŒÈ ÃN;QhØ‹ 2~•¨?Ad¾ÌÙävî+dABRcAuŠ Ad´Ëá rrùŽ#5dA†J`x‘A§½ƒ äÓéÿvò†_+AW‘A† pƒ•ƒ ä«¾Òæn:È úÿ#dØê^GZ?È ƒ rŠ r° 2³ÅD‡yç/‘Ÿƒ 2,2DX2È gx1.0žØþÿ.10mng_cleanup‰?»Üþ hunk5rtedisplò=Øay_f=ez_hÛhßgo)am' er'Gû…vtiM™set#u?¿aIg5_alp¡itoûdepth+ompZsion$Øb1WfÏ^[pý'in$åcjkßkÙbg§loMïƒïÚbkgdstylechep…ö½bk+nvasSWÁ@Þ´#pc¡mÜur%1¡).´ £)ö¬Ólp‰/|s2+dC‚}ÛflJgg/ma)ÚŠ5/Y)ü±ÚY}rogv BC’eáŸá^`ßuoña ;,&Ðwz'g_ì°Øl%l#widܪ/•ÆV´8û$¯+2 †?áekn»­ÁŠ·7Ãx…?*[m/ý9žéLypx0˜­'ÀGctÁ]kªòbÜkKsßÙÖî÷m»ici)%kO;è=ÿrgb‡{±ÇtaÅËtoÁÚí`Çu„nìmodUÅ»ÀÞocIo—lm¡e-']'°ÓK ÃeV‹×ñzrd­›vi…Ž[¿"¹cb5 ®Row‹JmÖñq+›çrîc'ÅÞT· ¯le-mÅjƒ+“/°ÄqX,…%&8µmòÝ$È£àp0woªS¬öšH6a w+Ãh‡[1/3vÒMm-hµ›/¥Õ¬acp+«¬v_d+Ûe+òR;Wwa+WkU«=Vâ+m¢•<`+xt£!°‡nn1hdÛtƒ?$‡#]hƒk'O!®Ebâ-‹;wr‡uÚO(_l#siEb£’#nòHZm#lipon’‡ädbykefi!yHhdrisc´ŠÐ³×Òl#{°•0 kµt#µ‡öc+hyg#´B2sU# ‚Õ,$#Úk!Gm”#툶ws¿#’/ö à#howl€T7 #ŽÑX#?ùb#Œ^#rnsq ` NÓ¼ŒX2zx¤Œ¶f{)£q D`£/%„;Ä” ‹iIg7c}½i4ey$'@mpupuHÉ#pupu<’Gòpupupu$ä‘pupuÉ#ypupupuGòHpupu#y$/pupuòHÉpupupuµ6’Gpu#,¶Zìp#à#C 5l#pä %mpuÚhƒ#G×Gr mpupT°6’u#‹9HÉmmpuÉ#pu#œ (kmpu`#y€pu#b„äsl#«Ù$#ØHmpu#§–wmpuk#y$pu#9H7mpuFG`##?òHNmpupu°d:VÓzr´Q f'jS"U58‹eKV¹¥%k-vx#•!àÒ­J­³št1isósÑ®ä9sssÈ‘Õssr ssÚêÐsY/:´’—[z…$S,Þ,o¼#´ öqe+2-Ї¦s›s”¶äàUsQX8·)èP*¸&­Å¡ dssÈ‘ Ésss• ss ÈsssÉrssÈ‘Lsss.!9ssä™@ss@ssä9ss9@sss’!äss#™sssJ®dJss0zÔgt'í ×`7i'+°ÃSGy}Ï%¤ –h!˜dZ°K…ÿn%7­=ÆßÂ/“d–`°T™/¹+[O¤œ±uppkXPÞ˵fCpÁë°‚[=îez‹Sk'×irž3½˜_b˜!l»£Ä?jç#iÄB’na'éHìsoA?"`¸„-„r.Úµ(',€öŒQ20'™‘1&d23'2F4+íØƒ[—îÄñOlÁ…Æg' È04822€@D#ÃHW)°àä$Oß›6ÉÐ4:_hÿH1ÝÕ§d;(˜¨n(÷ g‚ ^&gvg¬d¤&<-ÈTXÀ É& + W MmO5Ÿ6 Pç7)d’(<Çr,Tu@/Ÿ*X UŸ“kS»C-'/wD.0—'BN]_ ¿p `m 'X “‹aÉT0b·2ƒr5×h gTm¡’ïϸÐÇ—¤­Ž ¯'Ó€<÷,·Ç2ǯ()‡Ç꺚—†‚!ä„#R×[0 Àÿ?Çi%Sß°&\G7°*O,ÉrŽl)>wè`…¼ª,O,Š6ï'îjØŸ ' rQñ´笅? O$ë`„“ È;öG—(<ØS —î’^JpG{à,'`ð$J6°×G”,'X×Xó8 ÍÈ;ôöGLð¤YN¤÷`ó^$ßÐø“€ùG–“LIüPf‚]d§GPšå@»xŽG¬ý´³™dJ(ð,”iÞÅÿG¤´f dàŽmÀcßD•±ÆvàF€•'G°+Ø ä”•¯GØlÙ è – GŽ'Àǰ3-ÁGÝÈLôŽN#œ¾©GÔ–.ê;N°G$_ ]—SÁ‚'gÐ`—åò&G(¤i†’tTˆ ,›ä<˜ Ér9 ,™hÞAk– Ì Gà’¦Jô=—בÇh lš  5mŠpF¨×’årx ›€šv‘l˜›èŽÔå{ÀN G4$œÒ°“G„84í‚×ÔFL¡¤ ¯ØFt™vÞלGüfyÅv'°tÛ ´G\<$bk:DçÈ¿G’æ=xIÓ\%Ô @4Ø´f‡’åœð¬Ï'y/’ž| GÁi€,ASÛ<@P!&&î?Vj ZaÎ4ö‹´¥|fPÀ_jN˜!6—\žUT&4œ¢.ä…\IS¤QDä¼i PILCxW ¹l.@£NO¦¹Ø”RŸ<0O¸ ⎀%(^`šK.$28$<˜XLŸäP!/Û…LNè¡RDHä÷*8ø[L¤OCSI…\Þp°#¬TÄ,2rÁx>PORTÄ]È .ÖV1O>LDNE0ÍÀ,Ä Ï ’îÜLsÉå U<-\À¹p n¬å,Epˆžò`hìI/@E(ȉE6¬žO\D'ä¦]8ž@GNJ¸]NÈ{%ܤNP¤\æJ” ò .N%[´0ÈmðBì ÞO,/d3È01¡ìJÈJ8[Èž 0X&?@žWòì[4¡dOF~$OL#P\ôâh¶+¯ ¡îGAM¯ää^l¥oà*8±OøO?|fH&¶ßO„D5œ›XEVOW/äà{䢞ROÞ¨x^˜‹¨2ŸH¯ðŸHc¯x»’FNÚ“¹Ü$0Z¦/BÌÅï¼\ž<„ÞÔ%Ø_ 3ð`À…žÍfÀ®äÁÏ|Zàž3,†?0ØçGH^ôžIhŸÏÓ<ÐN€C 2LÞCiNÔN6 ¸8`ÞòäƒYÂ.”"(J`.äL)Ìòä@2>Ø$¤Z8.ä<0^äÁdh?àZä„Ü®(NsYHLL9/¯ TIBs¤pä{!î8NLP#Û…\^ßôM¸*\žBGpUœR G<—'Î/Et>"lH¼'|y!„ŸEMIt`®ä4O¤…<˜CêïLEAžÏå<ОTzT /ä× I€(¨Ÿ /¼ß–O&¨ ‚n&Þˆ ‚ Fþ¶à€"n&Þ€8–N, ¾&ßÀœ–d¾¯×ë5&Þ–NtZ­V¾v.æÑéžnÖŽàp8ÁæŸhotoÃpY;…7™S 7k' »'¦f@š´Ašf haƒ%7*pmûvØgà’>këÒ­__'¯Kk_—ÿU~²i_ÍUªÿÿUÒTfùÿªÿO³MÓ´§cy4MÓ4œ¿Ù4MÓÙ÷´¦išf 3 S š¦išl Ž ³4˦iáµ9i–MÓ^…‘†¦iš¦±‡ÔˆôlÓ,›‰¶çEnÓ4MÓw™MÓ4M±Ç皦Y6 ·  2iš¦i H c ¦iš¦|–¸eÓ´~並iš¦Ngš¦iš…›±lš¦iÐì¹Ó4M³!CMÓ4M]w‘ 4MÓ4°!Ù"ôišeÓ#º$B%¦iš¦s&–'ÁͲiš(ú) »*,4MÓ4+T,j-Ó4MÓ.š/¶fÙ4M0ã1¼2Ͳiš-3Gb4MÓ4zœÄå5MÓÚñ^4MÓÌ ½1KÓ4MÓawމ‡àÏijgÛ6ö% Ä;és3f" ˆí-ß#á f; Cð¦ØßMSBsRGB?I¤ncap§ buffWñqÄflFÙx¶¶† îÝthpožZh"WÅ waî Äï#Ysuctful;ÉÙhÛáG?l?¿ïß)ðJPEGB^€toHL@,"~RC 6;Ø-×O;ºË= …ýpI/OX}ÝÂâåpYô ØZ¸TÅ[Ã(Á 2@{‰}.áSEEKOap€ÇܨEc·{L ÿ¡LOOPÍw;ÇY(‰»êé)öx8Ú-o#I4 DoC ,ÃKD‚mô…Àû0#±bñCRCÿÆ»»w°CC -ó‹?/0=RDÂs„w k¼e+xIÔeu±?c— žÐ#Kw+ ©›vTMisɧ-øPLTE%IDATòê.ö(s)•b}ÉptÐDÞGëbÚ F"Xiו_Äh8CÄ V3Bß_3;c†kñs–íodC÷9Ђm7!›ëlœs—Ñ|Œùw·gh‘»¡à)WeÿPgƒè(š¾™-i˜xbŒõ¡Âd‰NUO°4®Ea¡žf0œŒ2KeywWmŠ7zço½Obj¡1Ÿ´çoexX­‹¸0+ÝÈy)+¸P½ÅT²ucCçX;ãam®™0-ßÄŒƒòE†»©3Ýã÷=áVˆi®Õby[CÙwV«ÃÔ®ZO3IxAhÙ-}…¿?!SJJHDR ¾Üß;(Œƒ¡&?FIF-XŽ&0~Em–A7 8lß}YwµÁæ¿DªÇB³§Çbð£rºOßÄá/F†ªönrŸLí¦æŒ+P‘Ü¡-C¸oÚÈp¤’ªÒóʉïCÉoz%H§-najS`èÇb ÒµÒ7¸£'#¾-be[ NY;.w…Q­Ø‰Yê IÍ5ïä?0ÚZlÕO mØì?3Óã/ÿ´‹M¿®/–1.2ÿÿØ.3–0w,aîºQ ™Ämÿÿÿÿôjp5¥c飕dž2ˆÛ¤¸ÜyéÕàˆÙÒ—+L¶ ÿÿÿÿ½|±~-¸ç‘¿d·ò °jHq¹óÞA¾„}ÔÚÿÿÿÿëäÝmQµÔôÇ…ÓƒV˜lÀ¨kdzùbýìÉeŠO\ÿÃÿãÙlµ=úõ È;^iLäAÿÿÿÿ`Õrqg¢Ñäjm ¨Zjz Ïäÿ “'® ±ž}D“ðþ§ÿÿÒ£‡hòþÂi]Wb÷Ëe€q6lçÿÿÿvÔþà+Ó‰ZzÚÌJÝgoß¹ùùホC¾ÿÿÿÿ·Õް`è£ÖÖ~“Ñ¡ÄÂØ8RòßOñg»ÑgW¼¦Ýÿÿÿÿµ?K6²HÚ+ ØL ¯öJ6`zAÃï`ßUßg¨ïŽÿÿÿn1y¾iFŒ³a˃f¼ Òo%6âhR•wÿÿ¯G »¹"/&U¾;ºÅ( ½²’Zÿÿÿÿ´+j³\§ÿ×Â1Ïе‹žÙ,®Þ[°Âd›&òc윣ÿÿÿÿju “m© œ?6ë…grW‚J¿•z¸â®+ÿÿÿÿ±{8¶ ›ŽÒ’ ¾Õå·ïÜ|!ßÛ ÔÒÓ†BâÔñø³ø«ÿÿÝhnƒÚ;[&¹öáw°…G·æZôÿÿÿûpjÿÊ;f\ ÿžei®bøÓÿkaÿÿÿ‰lxâ  îÒ ×TƒN³9a&g§÷`ÐMGiÔÿ×IÛ>JjÑ®ÜZÖÙÿÿÿÿ)@ð;Ø7S®¼©Åž»ÞϲGéÿµ0ò½½ŠÂºÊ0ÿÿÿÿ“³S¦£´$6к“×Í)WÞT¿gÙ#.zf³¸JaÄHüÿÿh]”+o*7¾ ´¡Ž ÃßZï=üÿ$A1‚b62ÃS-GűEôwÿÿÿÿ}†§ZVÇ–AOŠÙÈI»ÂÑŠèïúËÙôã Oµ¬M~®ÿÿÿÿµŽ-ƒžÏ˜‡QÂJ#ÙSÓpôx’AïaU×®.æµÿeý7×µ˜–uY˜‚©›Ûúÿÿÿÿ-°šË6©]]wællÿß?AÔžZÍ¢$„•㟌 Fÿÿÿ²§aw©¾¦áèñçÐóè$ƒÞÃe²ÅÚª®cëŸFDÿÿÿÿ(Ìkoiýpv®k19ïZ* ,  m8ó6Fß²]ÆW°qõqTpík‡*ÿÿÿÅ»¶Ã¢u‘‰4 û¼Ÿº„yÞ©%8ïÿÿÿÿ²<ÿyós¾Hèj}ÅA<*ÞXOyðD~bé‡-OÂÆÿÿÿ¯TŠ”@»ƒè#¦ÂÙ8¿ Å 8Lô»!¿øÿÿ§– Ζ Ì\H1×E‹búnÊSËT]»ºþÿÿèl ‹?ˆ—–‘P˜×Þ©ÌÇÒúáì“ËÿÿÿÅ\×bræykÞµT@Ÿ„OYX#ÿÿøÿÚp8$›A#=§kýeGæ|% ËWd8ÐN£®áÿÿ_­âŸŠ!̧3`ý¼*¯á$­îÐ?´ÿÿÿÿÝŸl² †«$HÉêSÐ)F~ûhweâöy?/·H$6ÿÿÿÿt 5*ò¼SK³HRpÞey1ï~`þóæç¿ÂýþÐÿÿÿ|‘ÐÕ= ËÌú6Šƒ»‘šxT¼±9e§¨K˜ÿÿB£©˜"Éúµ ˆË®O]ï_lôFÿÿÿÿÍ?ÙmŒÂtCZó#AêÁplÁ€AwØG×6—æ-ŽÿÿOÖŵ•„¼ŠAq[»Zh˜èwCÙÙiýÿÿlZO-_~6 œ-'Ý>˜¹ÿÿÿ¥[ b®‹ÑSµ’ÅôÝWôïÄ”§ÂïÕ–ÿÃÿÙöé¼®¨·A1œ*ï*…íUÊÿÿÿ¬HpÓo]ø.*Fáá6ÞfÅcTèT"eóÿÿÿÿMåó²¤Â©g‘„0& Ÿ)¸®ÅäùŸÞý:ÌóÖ{ýèÿÿÿÿϼk©€ýZ²™> Ÿ²8„«°$,ñ52F*sw1ÿèÿÿ´ápHõÐkQ6ƒFzw²]cN×­æáÒ̵ÿÿÿÇÌùM×àJ–¯ #¶Èp ‰A»„F]#ÿÿÿÿl8Ä?1…(B˜Og©T~ÀúyUËbLÅ8^ÿÿÿÿô#˜§³Ü–ªTåZ1Oü™bbרSyÎOáIVÿÿÿÿ~úP•-×{ÔÌbŠ-R»–4‘è»ÐÙ ìó~^­6õÿÿÂeGn‘Hl/ Suè6:© #jÿÿñÕ’e?äyñ¥H¼f‘¤'*нàÿÿÿ¼Ëò¡ÐëbåÀ#ïæÙ½á¼üЧ ?ƒŠ&ÿÿÿ~²‘?¹$ÐpøËi;FæBÁý[µkeÜôZ~«ÿÿÿÅ7 Sîv8H÷±® ¸ðŸ¡3Ì?Šrý$“þ½‰ÿ7jÂnÔ„YGܨAüÿ?±ëÂ˲|…O¸Qÿ“‚Ž{ÖwáïU dùÿü¿““Ø -ž =G£p£&GÉäÿÿÿÿw¢)`¬ /›aíÂß«õµiÈò5ÿ˜÷ÿÿÿÿ¦&±‘LsZ<#0þzޏMäzàFM8×,9ÿÿÿÿŽ’É;¹ø :<îD? „†>R:À(ôq-Ãv³,šÈõ.­¢ÿÿñÿ7/Àšp÷çXq®Y=™3Ür%“w+OQvrÿÿÿÿñtE›Õux܉~O¶K }!bÏ|¤t€y“BxÊ×ÿõÿ zýÊÆ{°.¼l‡mÞú8oé'_Kúál†ã[ìwÕ1h5ÿÿ?þ8ói¯bumcf«+aQÁé`Ôצeã½ddÀÕÿÿº"fiàg Ë×H¡INoyÿÿÿ?iJücÞOË N’·ZL¥Ý˜M˜šÄF¯ðGöN@ ãÿÿEÁ$‚DD2ÍAsX@*æIBŒÿÿÿ¯ÃhñTg3U>¼uW Ö·VŒÀøS»ª:Râ|ÿøÿÿPÕ~¾Qè9âZßS [†ífY±‡¤Xñë]ûÿÿÿÿ)\ZEo^m/­_€5á·q÷àîϱâÙ¥sã\³<ækÙÿÿÿÿþç2g¸å zä8J&ï äîVž¢ìaô`íäâ/èÓˆÿüÿíéŠ6«ë½\iêð¸ýÙÑüžl—þ©ýÿÿUÿ,úzØûBÄžùu®\øHéóÿÿÿ—ò&=„ðWFñ”A ô£+Ëõú•÷ÍÿÿÿÿÿOö`]xÙW7ºØ‰üÚ9ã>Û¼õqÞ‹Ÿ³ßÒ!õÝåKÿÿÿÿ7ÜØ k×ïf©Ö¶ØïÔ²-Õ¤bÐ3ΠÑjpæÓ]‹þÿ$Òþ^Å'”œÄ~*ÚÆIŠÿÿÿûÌVWÂû<•â‚ÓÁ•èÀ¨¯MËŸÅRÿ_øÉÈñ KDÌCm†ÍÓÀÏ-ÿÿõ¹Î@Ý‘wüm.B+’(铜>¦–«Td—ÿÿÿÿòê"•Å€à”øÇ¼ŸÏ­~ž–8œ¡yú$oµ˜w™ôÿÿJ»1›}Ñóš05‰_KŒ^á Ž ¤ÿÏm쀊Û÷B‹‚ÿÿÿÿµ#ƈˆdšƒ¿X‚æ°€ÑÚÜTÌ“„c¦Q…ÿÿÿÿ:‡ rÕ† Ðâ©—º ¨Îfªùn¤«|xë®K)¯ÿÿÿÿ¬o­%Æ­¬ñ§/ë3¦vUu¤A?·¥Ä)ø óC:¡ÿÿÿÿªý|£—¾¢Ðsĵç´¾§@¶‰Í‚· ÛͲ;±³ÿ%-übI±Ue"×»_HºWÿÿÿöS¸1œ‘¹´ŠÞ¼ƒà½Ú^Z¿í4˜¾þeúÃÿÿg¼¸‹È ªî¯µW—b2ðÞñ_k%¹ÿÿ?½3ïÅŠO}dà½o‡׸¿ÖJÝØÿÿÿÿjò3wßàVcXŸWPú0¥èŸúqø¬BÈÀ{ß­§ÿÿÿÿÇgCru&oÎÍp­•-û·¤?žÐ‡'èÏBÿs¢¬ ưÉG—¯2 [Èÿÿÿÿ޵g; Ї²i8P/ _ì—âðY…‡—å=ч†e´àÿÿÿ:ÝZOÏ?(ë†äêãwXR Øí@h¿Qø¡ø+ðþÿþÄŸ—H*0"EWžâöoI“õÇ}Õÿÿÿ‹À±NП5+·#Å–Ÿ *'Gýº| Aÿÿ_ÿ’ô÷èH¨Á›X?¨#¶1Ó÷¡‰jÏvÿÿÿÿ¨Ê¬á¾„`ÃÒp ^·æY¸©ô<ßL…çÂÿÿñÿÑà€~i/Ë{kHwÏ ËÇh±s)ÇaL ÿÿÿÿ¸Ùõ˜oDÿÓü~Pfî7ÚVM'¹(@¶Æï°¤£ˆÿÿÿ °Û×g9‘xÒ+ôn“÷&;fGˆÿÿÿÿ?/‘íX“)T`D´1ø ߨMºÏñ¦ìß’þ‰¸.FgÿÿÓÿ›Tp'ì»HðA/LÉ0€ùÛUçEcœ ?kÿÿÿÿùǃÓh6ÁrŠyË7]ä®Pá\@ÿTN%˜èösˆ‹®áÿ×ÿï7ø@‚'K$é!AxU™¯×Áÿ¯,=°\3;¶Yí^ÑåU°aÿÿÿÿGÕìÿl!;b F‡Úçé2È‚ŽŽpÔží(±ùQ_Vßÿÿÿä‚:1X:ƒ §æn3Á† m¦:µ¤á@½üÿÿÿÿ/)IJNõ¯óv"2–žŠx¾+˜Ù— KÉôx.®HÀõ‹ÿÿÀýÒ¥fAj^–÷y9*O—]òñ#ÿÿÿÿÇkM`~×õŽÑbçë¶Þ_RŽ Â7éµzÙFh¼!ÿÿÿÿ¼Ðê1߈Vc0aùÖ"žj𽦽ØÁ¿6n´­S ÿÿÿÿšNrÿ)Î¥†{·táÇÍÙ’¨¾¬*F8#vÿÿÿÿ¥€ufÆØz`þ®Ïr›ÉsÊ"ñ¤WG–ï©9­ýÌ^ýÿÿÿEîMvc‰ñÎ&DÜèAødQy/ù4“AÚ±&SÿÿÿÕšëéÆù³Œ¡E bðiL¡¾Q›<Û6'„5ýÿÿÿ™’–Pþ..™¹T&üÞèžq]Œwá4Î.6©«IŠÿÿÿÿ±æ? ƒ»v‘àãö\[ýYéI˜>Uñ!‚lDa>ÿYÐÔªÁÏ©7~8AÖ]&Ãÿÿÿÿn³‰v|ÖîÊÄoÖY ±¡áäóy¨K×i˲wÿðÿÿ«\¡Â¹9Æ~€þ©œå™$ 6 Qާÿÿÿÿf†ÂqÚ>,Þo,I¹Ó”ð •渱{I £.±H>ýÿÿÿÒC-YnûÃöÛ馑gQ©°ÌzÎ t”a¹fñÞÿÿÿ_þw0–îa,™ QºmÄpjôéc¥5žd•ÿÿÿÿ£Ûˆ2yܸ¤àÕé—ÒÙˆ ¶L+~±|½ç¸-¿úÿÿÿ‘·dj° òó¹qH„¾AÞÚÔ}mÝäëôÔµQÿÿÿ?+…Çl˜Vdk¨ÀýbùzŠeÉì\OclÙúÿÿÿÿ=c õ;n ÈLi^Õ`Aä¢gqr<äÑKÔGÒ ÿÿÿÿ…ý¥ µk5µ¨úB²˜lÛ»ÉÖ¬¼ù@2ØlãEß\uÜÖÿÿàÿ Ï«Ñ=Y&Ù0¬Q‹:È×Q€¿Ða!´ôµVÿÿÿÿ³Ä#Ϻ•™¸½¥(¸ž_ˆÆ Ù²± é$/o|‡XÿÿÿÿhLÁa«¶f-=vÜAÛq˜Ò ¼ïÕ*q±…‰\ýü¶µŸ¿ä©¸Ô3xÉÅÿÿÿ%– ¨Žá˜j »m=-‘dl—æc\kkQÿÿÿÿôlab…e0ØòbNl•í¥{‚ôÁõÄWe°Ùÿ_ÿÿÆ·éP‹¾¸êü¹ˆ|bÝ‹Ú-IŒÓ|óûÔRøpúLeM²a©UΣÿÿÿ)Ô»0âJߥA=ؕפÑÄmÓÖôûCiéjÿÿÿÿ4nÙü­gˆFÚ`¸ÐD-s3åª L_Ý |ÉPq<ñÿÿ'Aª¾ É †Whµ% o…³»Ô ÎaäÿÿÿÿŸ^Þù)Ùɘ°Ð˜"Çר´Y³=.´ ·½\;Àºlÿÿñÿ­í¸ƒ š¿³¶¶â)±ÒšêÕG9Òw¯Ûÿ_ýÿ&s܃ãc ”d;„Ùj>zjZ¨äÏ “ÿÿÿÿ ÿ ®'}ž±ð“D‡£ÒòhiÂþ÷bW]€ÿÿÿÿegËl6qnkçþÔv‰Ó+àÚzZgÝJÌù¹ßoŽÿÓÿÿ¾ïù·¾C`°ŽÕÖÖ£è¡Ñ“ØÂÄOßòRÿÿàÑ»gé¼Wg?µÝH²6KØ +Ú¯ L_½(â6J±ß`ï­ðÿègßU1nŽïFi¾ßa=†þ£Á%oÒ RÿÿÿW[Ì w•» G"¹U&/ź;¾²½ (+ÿÿÿÿ´Z’\³jÂ×ÿ§µÐÏ1,Ùž‹[Þ®›d°ìcò&uÿÿÿÿj£œm“ œ ©ë6?rg…W•¿J‚â¸z{ÿ?üÿ±+® ¶8’ÒŽ›åÕ¾óÜï· Ûß!†ÓÒÔñÿÿÿñÔâBhݳøÚƒn¾Íö¹&[o°wá·GwÿÿÿÿóZæÿjpf;Ê \ežÿøb®iakÿÓlÏÿÿÿÿE  âx× ÒîNƒT9³Â§g&aÐ`÷IiGM>nwÿÿÿÿÛ®ÑjJÙÖZÜ@ß f7Ø;𩼮SÞ»žÅG²Ï0µÿÿÿÿÿé½½òʺŠS³“0$´£¦ºÐ6ÍדTÞW)#Ùgÿÿÿ³fz.ÄaJ¸]h*o+”´ ¾7Ã Ž¡Z£ÿ_ýß-ïþ1A26b‚+-SíÿÿÿÿÅ}wôEVZ§†OA–ÇÈÙŠÑ»IúïèŠãôÙˬµÿÿÿÿO µ®~Mžƒ-އ˜ÏJÂQSÙ#xôpÓaïA’.®ÿÿÿÿ×U7µæ˜µ×ƒ„–‚˜Y›©°-úÛ©6Ëšæwÿÿÿÿ]]ÿllÔA?ßÍZž•„$¢ŒŸã§²F ¾©wañèÿÿýÿá¦èóÐçÃÞƒ$ÚŲe[®ªDFŸëokÌ(vpýiýÿÿÿ91k® *Zï  ,8mßF6óÆ]²ípTqôkCˆø_ »*ó÷¢1¶£ðÿÿÿu 4Ÿ¼û„º%©Þy<²ï8sóyÿjèHÿÿÿSÅ}XÞ*<ðyOéb~DÂO-‡ÛTÆ”Šÿÿ»@¦#è—ÙÂ8 Å‹ÿÿÿ !»ôL –§–Î\Ì E×1Hnúb‹Ãÿÿÿ‡Sõ»]T£ lˆ?Ö‘–—ÞטPÇÌ©ìÿÿÿÿáúÒõúË“rb×\kyæ@TµÞYO„ŸX#$ÿ¿ôÿ8pÚ=#A›eýk§|WË %NÐ8d‘ÿÿÿ®£ŠŸâ3§Ì!*¼ý`­$᯴?ÐîŸá†ÿÿÿÿ ²lÉH$«ÐSêû~F)âewh/?yö6$H· tÿÿ?ý*5KS¼‰H³yeÞp`~ï1çæóþþý¿ÿÿÿÕБ|ÌË =ƒŠ6úš‘»±¼Tx¨§e9ÿÿÿ?K"˜© µúɮˈ_ï]OFôlÿÿÿÿmÙ?ÍtÂŒóZCêA#ÁlpÁØwA€—6×GŽ-æÿÿÿÿ¥µÅ¼„„qAŠhZ»[Cwè˜ZlÙÙ-O 6~_ÿÿÿ'»œ>ݹ˜ ƒ1S‹®b’µSÑÝôÅþÿýÄïôWïÓ”öÙ–Õ®¼é·¨œ1Þk…ÿÿ×ÊYíÓpH¬ø]oáF*.fÞ«_iñ6áÅ‘ýcMóe­ÿÿÿÿ²óå©Â¤0„‘g)Ÿ &äÅ®¸ýÞŸùÖóÌ:Ïèý{€ÿÿÿÿ©k¼™²Zý²Ÿ >«„8,$°5ñ*F21wsHKÿÿÿpá´QkÐõzFƒ6c]²wËú×NÒáæùÿÿÿñà×Q¯–J¶#  pÈ„»A‰#]Fÿÿÿß8lu?Ä(…gO˜B~T©UyúÀLbË8Åÿÿÿÿ˜#ô^³§ª–ÜåTüO1Z×bb™ÎySØIáOÿÿèÿPú~V{×-•bÌí-Š4–»R»è‘ ÿÿÿÿÙÐ^~óìGe­lH‘nuS /:6è# ©$Tj?ÿÿÿÇe+íyä¼H¥¤‘f½Š*'ò˼àëСÀÿÿÿébÙæï#¼á½ §Ðü&Šƒ??‘²~pÐ$¹ÿ/þÿiËøBæF;[ýwzÜekQ~ZôîS 7÷H8ˆÿÿv¸ ®±¡ŸðŠ?Ì3“$ýrNÂj[ø§ÿ7„ÔnF¾Y­¨ÜËÂÿÿÿ&H²O…Q¸Ñ; —…Ö Uïá ùÿ€ÿdØ“S ž- ›G=&£päÉG¢wÿÿÿÿ`)/ ¬ía›«ßÂiµõ5òÈ÷˜ÿ±&ÿÿÿÿ¦sL‘†„ <À:R=Pe6^X7œ}o5ÚÃÖÿÿ64©1W¿„0•Õ³2Ókê3ÿè«í$kå·§'Õþ&-[É#ÿÿÿÿbML" '{ æ™"!$ó*x´(+ºÞ)ü`F(> q-ÿÿÿÿqô,³vÃ.õÈš/7¢­pšÀqXç÷sY®rÜ3™wÿÿÿÿ“%vQO+tñruÕ›E~‰ÜxK¶O} |Ïb!yÿõÿÿ€t¤xB“z Ê{ÆÊýl¼.°m}‡o8úÞÿÿ‡_'éÛ†ljwì[h1Rió85b¯ÿÿÿñcmya+«f`éÁQe¦×Ôdd½ãf"ºgøêÿàiH×Ë I¡oNJeÿÿÿÞcüN ËLZ·’M˜Ý¥FÄš˜Gð¯ÿÿÿÿE@NöD‚$ÁAÍ2D@XsBIæ*C‹ŒTñhPU3gÿÿÿÿWu¼>V·Ö SøÀŒR:ª»P|âQ¾~ÕZâ9è[ SßÿÿÿÿYfí†X¤‡±]ë‘4\)û^oEZ_­/má5€à÷q·ÿð?þâ±Ïîãs¥¥<³\çþÙ«¸g2äzÿÿÿÿ ï&J8îä 좞Ví`ôaè/âäéíˆÓë«6Šêiÿÿÿÿ\½ý¸ðüÑÒÇþ—lžÿU©ú,ûØzùžÄBø\ÿÿÿÿ®uóéHòƒð„=&ñFWô A”õË+£÷•úöOÿÿÿÿÿÍÙx]`غ7WÚü‰Û>ã9Þqõ¼ß³Ÿ‹Ýõ!ÒÜ7ÿÿÿÿKå×k ØÖ©fïÔïØ¶Õ-²Ðb¤Ñ Î3ÓæpjÒ$ÿÿÿÿ]Å^þÄœ”'ÆÚ*~Ç@IÂWVÌÕ<ûÁÓ‚¢Àÿñÿè•ËM¯¨ÊÅŸÈÉ[É ñÌDt͆mCÏÿÿWÿÀÓι-‘á@müw’+B.“é(–¦>œÿÿïÿ—dT«•"êò”à€q¼Çøž~­Ïœ8–úy¡˜µÿÿÿÇo$I›1»JšóÑ}‰50ŒK_Ž á^ÿÿÿÿÏ‹iŠ€ì‹B÷Û‰I‚ˆÆ#µƒšdˆ‚X¿€°æÿÿÿÿÜÚÑ„“ÌT…Q¦c‡:†Õr ©âР¨ º—ªfΫÿÿÿÿ¤nù®ëx|¯)K­o¬¬­Æ%§ñ¦3ë/¤uUv¥ÿÿÿÿ·?A ø)Ä¡:Có£|ýª¢¾—µÄsдç¶@§¾·ÿÿÿÿ‚͉²ÍÛ ³±;±Ib°‹eU»×"hºH_¸Sö¹ÿêÿÿ‘œ1¼ÞŠ´½àƒ¿Z^Ú¾˜4íþ¸¼geª ŸþÿÿÈ‹µ¯îb—W7Þð2%k_Ü×8¹Å}ï}ÿÿKÿOŠo½àd×JÖ¿¸òjØÝàßw3XcÿÿÿÿVPWŸè¥0úúŸB¬øqß{ÀÈgǧ­urCÍÎÿÿ§ÿo&•­p-¤·û‡ОÏè'¢sB°ÿÿÿÿÆ ¬zGÉ 2¯>ŽÈ[ ;gµ²‡Ð/P8i—ì_ …ÿïÿÿYðâ=å—‡e†‡ÑÝ:à´ÏOZã(?êä†RXwŸàã@íýQ¿hÿÿ¿ç¡H—ŸÄZ"0*âžWOIoöÇõÿÿÅÓÕ}­À5ŸÐN#·+Ÿ–Å'ÿÿÿÿ* ºýGA |ô’¨Hè÷›X=#¨?X1¶‰ÿÿÿÿ¡÷ÓvÏj¬Ê¨¾áÃ`„^ pÒæ·ô©¸YLàÿ§ÿß<ÑÂç…i~e{Ë/ÃwHkË ÿÿÿÿ±hÇaÇ)Ù¸ LDo˜õüÓÿîfP~VÚ7¹'ÿÿÿÿM¶@(¤°ïÆ ˆ£Û°9g×+Òx‘“nô;&÷ÿÿÿGf‘/?ˆ)“Xí´D`T ø1M¨ß¦ñÿÿÿÿϺþ’ßìF.¸‰T›gì'pqðH»ÉL/ÞÛù€0cEÿÿÿÿçUk? œÓƒÇùÁ6hyŠrä]7Ë\áP®NTÿ@öèÑýÿ˜%®‹ˆs7ï‚@øC'!é?øÿÿUxA‹àׯ3\°ÊíY¶;UåÑ^G]°ÿìÿÿÿÕb;!lÚ‡F2éçpŽŽ‚(ížÔQù±‚äâÿÿáV_:K:§ ƒ3næ †Áµ:¦mÿý-£¤üI)/¯õÿÿÿÿ…2"vóŠž–˜+¾x —ÙxôÉKÀH®.ÒýÀjAÿÿâÿf¥÷–^O*9y]!—å#ñòMkõ×~`ç¿ôÿÿbÑŽ_Þ¶ë ŽRzµé7hFÙЈßü_þÿ1ê0cV"Öùašjž¿ÁØ­´n6ÿÿÿÝrNš¥Î)ÿ·{†Çát’ÙÍ*¬¾¨ÿÿÿÿ8F€¥v#ØÆfu`zrÏ®þÊsÉ›W¤ñ"ï–Gÿÿÿÿý­9©E^ÌvMîÎñ‰cÜD&døAèù/yQA“4ÿÿýS&±ÚëšÙ³ùÆé E¡Œðb¡Li<›Qÿÿÿÿ¾„'6Û–’™5..þP&T¹™žèÞüŒ]q4áw©6.ÿÿÿÿΊI«?æE»ƒ ãà‘v[\öIéYýñU>˜l‚þÿÿ!Ô>aDƋΪ~7©ÏÖA8nÃ&]|vÿÿÿ‘{ÊîÖYÖoᡱ óäK¨yËiWúÿÿ׫w²¹Â¡\~Æ9œ©þ€$™åý ÿÿÿÿŽQn†f§>ÚqÂ,oÞ,”Ó¹I ð±¸æ•£ I{ÿÿÿÿ±.CÒ>HûnY-éÛöÃQg‘¦Ì°©t Îzf¹a”JƒôÞñ'`o·²x(ó6ûf c'¤nt+.»£t³€ ,ÂiÞîi *…\ÿÒlÄa ;o åÿ·€ÿ5-2005 J™-loup Gbáˆaµy‰ñ9 @àXóMÓ¾;~x8ÐMÓ4Mh(°ˆHóMÓ4ðTãMÓ4M+t4È d4MÓ4$¨„Dù¦=Óèž\˜SÓ š¦|<ØžþlMÓ4M,¸ ŒLø4MÓ4R£#Ó4MÓr2Ä bMÓ4M"¤‚Bä4MÓ4Z”CÓ4MÓz:ÔjMÓ4M*´ ŠJôÓ|Ó4V@3MÓ4Mv6Ìf&4MÓ4¬†FìÓ4MÓ ^œcšÖ4M~>Ün.¢iZk¼ŽNü¡h †ÿQþƒÿiišq1Âa!¤iš¦¢Aâf¦Y’yišAš9Òi)²i𦠉IòU抇k·ÿuišAš5Êe%ªiš¦…Eê]¦¤iš}=išfÚm-º šAš¦MúS¤iiÃs3Æiš¦c#¦ƒšf¦Cæ[–išA{;Ökiš¦i+¶ ‹K¤¤öWw¦¤i7Îg'¦iš®‡GîšAšf_ž?YÓiÞo/¾ U5ížOþÿÁ É¡áÉ É‘Ñ±C2” ñÉ©$C2$é™2$C2Ù¹ù ÉPÅ¥É Éå•ÕCÉ µõÍ$C2$­í2$C2ݽ %CýÃÉ É£ã“ É Ó³ó$C2”Ë«2$C2ë›ÛP2$C»ûÉ Éǧç É —×·$CÉ÷Ï2$C2¯ïŸC2$Cß¿ÿ‡û°u•ïüå¿‹OAË·@?ß! ÝÇQù [@Ugyš¦~–gy–a`1M–gy0 Á»×ioó¬o³Ýá—Û)CgqL½[KïSÖâc%cAorr06nø›B` qËéS‘+4 €÷0ŽówIE ‰°±7`]‡Œ½{gs3_©rc FZ(‰v0š%1¶T3¥m¡4>%sny'´*qEsymbolsÚ`̈þqÙbp7öitÃãUƒkÏ+TbçK†'³÷Ú†•1ôó)ÌPÜØ½,r‚*ª,-—h ¢ 4:)*’ÎǧÓhO“›at:?Sï[O¯Ó!›¯óãÈÅÆV" ƒ 2a·ÉRÉÄZÿÇhdž n/s÷zŒF£›cç]c4ÓWãÑh4G‹ãgF«/Ó;6–ØvëÛËMÓ4M Ó4@™‡¡j«M§aAЦZÇdlÖÉ É´ ǧdØÑF‡A Md öFª7ö ò4MÓ´ŒLÌ,¬lÓ4MÓìœ\ÜMÓ4M<¼|ü‚4MÓ4BÂ"¢bÓ4MÓâ’RÒMÓ4M2²rò Š4MÓ4JÊ*ªjÓ4MÓêšZÚMÓ4M:ºzú†4MÓ4FÆ&¦fÓ4MÓæ–VÖMÓ4M6¶vöŽ4MÓ4NÎ.®nÓ4MÓîž^ÞMÓ4M>¾~þ4MÓ4AÁ!¡aÓ4MÓá‘QÑMÓ4M1±qñ ‰4MÓ4IÉ)©iÓ4MÓé™YÙMÓ4M9¹yù…4MÓ4EÅ%¥eÓ4MÓå•UÕMÓ4M5µuõ 4MÓ4MÍ-­mÓ4MÓí]Ý+Ó4M=½}ý«iš¶¼ ““SS¦iš¦ÓÓ33³š¦iš³ssóó iš¦i ‹‹KK¦iš¦ËË++«š¦iš«kkëëiš¦i››[[¦iš¦ÛÛ;;»š¦iš»{{ûûiš¦i‡‡GG¦iš¦ÇÇ''§š¦iš§ggççiš¦i——WW¦iš¦××77·š¦iš·ww÷÷iš¦iOO¦iš¦ÏÏ//¯š¦iš¯ooïïiš¦iŸŸ__¦iš¦ßß??¿™¦iš¿ÿÿiš¦} @ `P¦iš¦0pH(š¦išhX8xiš¦iD$dTšÖš¦4t‚ƒCÃS€¦i#£cêãÓ4ï©FMÓ4M  4MÓ4Ó4MÓ DÓ4M dY.`ƒÀ*°ÀVGKé*°6' ¿Ô´K–  < È·(÷@²,˲P`p€ n´%ËÀàçÞîîîîÖÎÆ¾¶®¦žP€öî–Žx€ Rz¾‡U[ç'Èð,–Y„6àiÂ'¤¬ÿ_ƒ     d¦ý ’! ’¡d(  ¡’¡)È Mû2$C2%CÉP)B%CÿQ,ûâºgƒ ;†·C2È $C2$BÉP2ˆ ¡ÿïišöô¬õW¼»ÇÒ0Ùš¦ßêþ6 ö½!"Ž)¡!ôBaïeh)H$odi+F+8( (li2Bkè_G*l£´X5ƒAì Rhbb–¨ Y7îvÝ5?S1¾ˆ TfÁÆ7ýJ¡ Üp V?¨Ð/7no’>d->tû·ÂpNhxx$.cpp#ÁB»Ø12;iÿv2-IS_STRUC(V Ý—e@*)CìC ÷vCGú¾Ç1Cl3s.cFd&~°ïý CF_HA}BESa((unZa” z__‚*ÿ—Ð)vPU)[-1] == ݧa°0c#topT-w¶N !DÇÉ?5!߀ IqgtAHNgtsrc»%Ÿ=||4qµ›áƒµisSÜDeIDY(X0í, á)ÑMU„–ÊÀ¢†´Ùí”Ø’!ƒuÑ ½Ó'W+j¤c\HwÜ D(C Ð@ {†- Ú‡Ü)!"qicm°"÷…'m<Ʊ¼§Ç¤_‚ÿ:½CPP-›gHookoI]œå­gÜœöõuþOú>g`®¨r•ˆSt÷î OÅ!G¸°S{R¶ «š¤] .Ô«Äy p2ù¡Š ›H°ÒMw‹‰¥•x„ã_'VX>#um´5)g¤7v(±7 ieçÿß),( íOú!)M,#,*6ý‡ýßy(**;#(#%ìÿö˜$,** /µ´å6&UP‡¥¤¥#] 0 ÿ-í± TMP.$-H}(l°³lš¦Ðêù MÓ4M/DVs‡–4MÓ4ª·ÃÒøišfÙ'8J¦iš¦\pƒ§¾Í²išÍåò#4MÓ41BVh€Ó4MÓª½×ø¦iše,; ‚,¿,  X㈫+BŠK7G‰­"l-G5€÷Rf!k)3{*vnl)øgþé “ßŽX –Oûž ?  Æ’—_  “L­† ( É H„ä„ =ض‚Ž…@®w >FU…#g#)’Ñ:M;€Œüµýÿš¦i–  í´¦i >nÓ4Mk'5ÓÚÑL8Ç;&BJMÓ4MT]dmtx4MÓ4|€„ˆŒÓ4MÓ˜¡§­MÓ4M±¶»ÂÌÔ4MÓ4ÝæêîòY6MÓöúþ i›¦  OÓä;P›¼ 7ð «³‡Ö¼OÌ>.E-³ªOq$vz./ùß5%H:%MS%m/%dy%A, ÞoË%Bd YAMPMãûZïda5TSWednÐzÏ~ThurFri S»»»™ôubpjbVL`há»F<J]†Bö ¶Febr;´N8ïA;Ô¯½vÕxJIelAugâ÷½keY8O}› /v!Dec7vw¶ª¢˜”‘ŽŸ}wwŒ†zrhC5Âð ýh!¢Úɯ@øÜ<¾õnR cos´!€4Ï;_ áOìþ?s?…dÞù3° 𱀆HÀÿ/ØÝBV;Ï%ùo÷ldÒ€øÿlog Kð?powWÐÍm‘qrt`ò~Üú`lƧ>´# : •-ÄÑJçüÍ¥xaeâÀGg˜üÓÎØGÄ4÷@åß4MISYDOMAINS7ìÿGkVERFLOWUNDT ìgº§SuP  IF+ ¯üNAN-K ;kÓÚFÒ+-A&Ûi+ÿ'Á¦•ÀÿO%sƒ-Ä‘9¿Cò°? @Èȃ<Èú@œ PÃò“Ÿ<$ô€–˜ ¼¾ÿÿÿ¿ÉŽ4@žµp+¨­Åi@Õ¦ÏÿIxÂÓ@àŒÿÿ§ÿé€ÉGº“¨AŽûë~ªQCÇ‘¦® ã£âÿÿÿF u†uvÉHMå]=Å];‹ž’Z›— ŠR<èWð-%uۦߡ¥:ÖDÄb‹…p,q7œLsfß ñí; MBCS£Û*­iÅÞøÝ %02à 4dpfç]: .x¬Ý[l32Çx“„.@GetPwA­±ñ51îÖ9–S€3>qƒ Ó,èx&ºlGb#Þ6¿â¿£„¨µª±§bA`È4¨ ôE‡±À´6@å±¥n£ ÌÖ•½e]Zh ÷:íD,l53®RÀÏ ŸvÉ•¿bŒãÒN“ ïõ ÈN[{ë/thk ÇRó9S;úL¤Ðphb ¬Ó4M»7°´¸¼ÀMÓ4MÄÈÏÖÞèšeÓ4ñø iš¦i ¦iš¦!%)-1š¦iš9BHNRWiš¦i\cmu~Ù›¦‡Š š¦io^;Zx—µ4˦iÔó0N1ÁÓm>wNX´'B1a5A¯\H£¶Û‘¯FÛÏTZ5_Ç 5G9É3¬Þgš6!‡ä*à AÉ«ä[¦+A4€iÚ_G (ž<Únàÿ& 0x0100) !ù7£0û$G;L?8Ù¸8whÑ?#ÉK´"+—dp0û(mfnicmr4ØdòaÌ ¼³`Aá•a7ÃÚc/5.LÇ3xlÒo!\{4ERR•|mà =dsc®f®v(EHSS äÛAEhdt¶(ÌÄ#˜=Âð#TM_}PZhÃTR)m;½9„T»MCAHC¹v¬kBgÓRÃ7p*HDÙ_SadÜ ‚o ‰>*=ö"`©EboÆR°J•Xø@±LÁl¡È®(âjC"“_E¶)ŒË½ráqmÕM§vyí…Â6EDTOR]v ED(Qø½°ãGvcIwAc >Á #v/wùU¬ŒÕ)~œ3ì®pCd’ <Î¥±‰R¸2l¡0‚ …?n0½½c>LD MA9AYØí)ÀIUr¢aElÍž¡ÿéetdy3•áp–||i/1-Ç{r]‚oÁh•XCLÝS(•ˆQ8„@whGáñft$rÑàlSÑ›(šo¿úCVFnVAL|RET)U‚!Àk™æ«[±UzpÞ–‚A ¥ïûÚj«!)ì9¹Q0,¥v§XдcAE´ÈIùÁ;ƒ÷&Ÿ9ÅXŸSBK»¿üÿI2£"¨ÅX!{üsbh¿E 0~7w÷ßÁAYb³AA-S7Ýöß~X!;º(à owwÿÝS7‚'7à '‹oSww÷w¿Ž C§‹oÿ¡Òw7ß¿ïaH±P1ö?ÿcÿÿÊoM‘®çô?ªlïbÐò??;¿§Ài$é?މÿÿ» Ç{zQá?]«rÞU¨Ñ?Õ y4.Y (O34M»d=.:†6HÓ<7 w9š6HÓ>E8®HÓ´AW6P>4M6%_D¦mgMÓ´aƒ#×@.Qhaƒ4Mq\1N¯ƒ4M{nyNxeH_0HÓ4bpdcB»aC7Ï/&`Cð6ïB?nmw+y68¦oF~!‚ŽGLL .Zí¶7<9ÿßÚÿU2}p!1AQaùÿÿ"q2‘¡#B±ÁRÑð$3br‚%`üÿÿ&'()*456789:CDEFGHIJSTÿKú•¿XYZcûghijstÿÿÿÿuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ªÿÿÿÿ²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäå þÿæçèéêñòóôõö÷øùúdaÁÁuÆ:˃·:Zðxs?¯CжüÁYóP¸bU14j„0b:K¬#ìCÛ 4x °0]7DŽ¡¥†0‹( œ8î),‰Ý’·SuÚUË5± WD1 \SŒñT]:6Œ…M=G¶Äµ¶7çA„%F¨@ýUô$æZMË Æ&(îÀ FOÔ@Ø6Ï&Ob®1úÀÔ-EAOÚÃÎ' %3d°6JwýH„‡—ž+dPÄ Ú1 xr^WUF•K^xhín8av«Dž8b™ÚÚ8Û³áK¢±EûëñvÀ`P„æò©0š ÚãªQt:é+2oTH¸ZU=h¯!±GO4u@B80u²vw=*Û­k[mE/ÈlóHL§´%_8FÁÃ)w>?œ.ÊÖBìRST(Æ© nm¡pgÆmHLGM%¤ïPôd—d³‡``°¸B!E• ˆñ@=öÆŠp9!'B0ö Î@C#·ttähv‰<±os!mõÏÂT°,°›•dc†ÈûÆ&ÊÑÔ, eøÆäAhÚC3® 4ìdÇO³âH°1×u 1õò-ûe§†pU4,[p’ eÇs/Fƒ¶1kOîgn‡‘LŽû*‹{ã6]ݰ-áúYCbCrEXŒ‹-ì'Ö€D›†{n¡¬j‘ô!áF¡·%²ŒF~;dɸTToz°éÐFÝ:úr®!¬Q0s•`¡j#wp·Œ Í ,1 abßÖ ¨%cƒ—"›=¡vËF€9å!R3éÙŒ^‰3a@cèvC,Ä*k­‚l8¬IE«Ð…LAÜ«(]xhƒ–àÇ f>?§L$/ ŠMEMÿ?;ld%c¶0ð Ì<üÃ3óÿÿÿÿÏ?ÿ€@°pŒL¼|ƒC³sO¿ àÐ,ìÜ#ãÓ/ÿÿÿÿïß `P¬lœ\£c“S¯oŸ_È8øÄ4ô Ë;ûXÒÿÇ7÷ˆH¸x„D´u»{‡ÿÿÿÿG·w(èØ$äÔ+ëÛ'çרh˜X¤d”T«k›[§ÿÿÿÿg—WÂ2òÎ>þÁ1ñ Í=ý‚B²rŽN¾~A±qÿÿÿÿM½}"âÒ.îÞ!áÑ-íÝ¢b’R®nž^¡a‘Q­ÿÿÿÿm] Ê:úÆ6ö É9ùÅ5õŠJºz†F¶v‰I¹y…ÿÿÿÿEµu*êÚ&æÖ)éÙ%åÕªjšZ¦f–V©i™Y¥R²¢ðe•U>®ª¤ Í  .y µ¸dùo ¨ë ®ç!7)’eY>Ç" MÓ4í#*14MÓ4892+$Ó4MÓMÓ4M%,3:;44MÓ4-&'.Ó4MÓ5<=6/€4M7>?[€Øô„î‡,¶±ÜÖ(iô;%Ç) Phø9 EI‹/!<ôð#%x;³LQ ›0msΈ]ÄP«Ê—^ÄÿL":CXÃLú+ÐU fé65530aOOæi/;°)1êPe+ùc ¼êaAà€ ò¼ kz3µGÄ:Ý[km Ç.A8•Áì‚ÝC|OJK7Bë )‹ÚÙ¥fIC2tÝTo©>þR' (¿=4096Ï_Á¶D á= ±È±ÿ·š¤ï#€q@£ à;Ãy¤‹!+ÿ± '†ÉTÁ¨¤ì?±áéøÿþ•² Ñ?ð… Ŀı.n£è¿ïÿ&û?'†§WÊ¢? ù g³ê£O§ãß ¸±¿·bÙ=yïèÁ¯"rbr•. JCñÀGoÔÇ,ËñI¼shb="ÜZ´s;†£€ ²bXˆwpl‚˜' )ð^ '›'¹.Ö@á­žßgYVcKû;lx=‘©}‚¢~Thb¢"…©tAÚ[- úLUT()é·´±Ô1³˜:‚Ï…&ÑižŠxá\(Äqnpâ´12†s({޳è)Á·Öxˆ>OO0„RPt†PD[ŸnDÖGõAQHl…nôOŒ‚zü 7;ê 0P/p `/Œ Ê¨Ý °qo{I‰G˜E}ó -Ä w0c9ë€&J¯ m³„7Cƒ[Í]iJ!+'Ò ­à'ß™Ȧ2}:?â"lŸ@º ¾eN?È¿ü³$@M-[‡¿&kÔCÒD@'ˆºÈ¿üå@j_$´å\Š9ÖÅm4€Ó üå?I@¶¹1=a‰ë²×»ÿ°‹d²xéÔN@\rÜ)'ÿò—¬;Ç€ìõîŽ;¥ƒõÖ€òÿ/ÿQ@²ºÕsÒˆ£#Ò?NÑ‘\þCØ_þûT@xœ¢#¹ü?·´÷XKê4?Y:ì6ÚV@q0™*ù߿ȿ´TÞŽªÔìVÜY@ò/ÿý*ãßg\?¿eN—ÅļW­Lø¥Þÿÿò@_@ïá’ãNéµý++MJÓ?ÇמY â/ÿÿ'Àb@“RÐí%É?|'f½ÊÌ@eÿÿÿöüûŒæÿàe@ƒÀÊ¡EÊ?S‘ c AÔ?BCÿûÿò+ëi@r3Ü€ÏË?˾+‚ÿ­?ø&ÿ_˜LŒJð/@aŽÿ·»çé?OÕ?d]ÜFxó?ð?o@ãSŒgÐ̯‡P¥f?€H¿}åÿÿä8÷0q@‹¦³“ÁÍ?4KÔÔ²ðþÌîÉÃB­ûr@A‚âǘ»Î?§¸ÿþwúÐõ?¦ F%u‚3ÿPtYú/ºòYžÏ?vÃà-Ö?þoÿ?‘z6«¾?àu@ÿ .VÔ`ïXÿþw¦ŒçÇ?¼–z¶ \þOpw@L7‰A`åºIhò?£H?»' µ¦ ý‹ÿ$7–¨©ekï~©Ÿ7©ÿÛ Á?øƒt?z@5æè'ÿò—ñ…w¹ˆïÄS£’: ›.ÿÿ|@)?©öéxÒ?ìú»aÛºkbçÊ_þo?°}@St$—ÿ“Œœ…=íµúÛ 0!?@@gDó¥¨ÿboÐa¾¼ûÖ¯3|;¥&?h€@Ý /0)e`ÅžAr×?wå/ÿ·/?0@« ¢î•š=Ð ˜©Ü¾3S7?ø= ܯzˆFw?ùËÿíbD?À‚@h˹W•¦aøˆ˜þPPŽ]ÀCIðP"ý#ll>½ Adà? ‡h"lxz¥ÜÐÆ‰›ÚoëàÉC›UŸ«­Øß[§=ÉÀ•»ÔoD6P¨¿ˆ5!aylt)ý;œgˆc_9EGrùªoMQ £ ¢IŽ×ÂWhñPãÙh"NF%TŒTk;J;†DÄIW[ÛÚ»·n1 ÝÄeaRKQkØw9(X:%%LŽHÏYZHº{$7ÿ²6¬è1201¬HÚì12"*"PCS·ˆ#ñnAä¶1= ÓA¡Dǘ!·¾fHâ@ $¸@Z uNÖ$œÂ’Yìds­g-k]†={Ý–4ÆZdÏ‹s*b %A»»$±$,]hK¬ Laç‹Ý­HJ3“d·‚¦hR¼nwpp ýša“b7£¶" îq„ xƒ:}§vòyun¦t 'X jelÜix-L|"ÁWx,Ahº#t*Vc7'Á•3¬î“†M?ˆ@ŧ@j&œn[ ¥gí•´‡T“M¦!;´Eª"çB›¬:B =…³@Eë#޳ŽÄB(}\N!=Žuc;m->q+"! Xµy»Ù©."é).uÓãÍF»y³by÷doüvg=F255‚nñ5?!?•E‚…9)u= Ší ]M|Y#WqCàS+"lqå~€éé—n+´¥6W{M±ÚOãf·Z ÁE>+KP‘]o÷0Æ(*ØX£¡H”®MÒp 5¾¥të}t-ÑœÄíYKgÊM‘ÂX»(Oû 6O{:@ع&M[ìâ½3—IKã Ý5Ÿ´>§€Of¯YKX:,ÌûUl+@¶3twf þ;Õ±0..400ìöH,lc1ÈÞã"ýL™odôòÅNv=XYZµ‰´[=`(¸€4›!Ï*T £¨@FD‘Œ@éÚÐ[VÉHý;LAÖMQèV,†I&ON7þÿGP#x]#¶¥óCó@&ÑÇ BÑÀ3PÁ:J/ú ÃrQ™òW,hP†ADele*aLEjC2ø‚sSW{1¨×*x!PƒFu²{º5É(bUYr|MÐË~-0G«ACP IFÛ[“·0{diTäId'Dµí)hNm»m‚l-Et bu_ý¥ &ÔL½- uP ´茻ÏÔÞModuU\ÛX7ÜA')#Z|OEMdéƒG†n*upŽ Â¶wT dsN¡—WîZ½Cï0¸^°Œ.VºCbG: rˆƒlý£´ÔÎÔÓêI‰©!M!Lv„«+â@@Æ-Â6aü-è BáToW=}˜Rai°qR*˘Òí :tlUÁûÌÅŽ_S9so-C¿\¶˜Òl-T´… e¼7nÁ'¤ Tls  i` âf/ÉÌ8S×hwd€”Y ¶­i7¶-•œ`w¸Q]«KÁ¿Õ(:ßøqš§ ]бumưîóWBÈM†âD’¥Bo ÿ ÿÿPELÆ’FàŽ£ Þa·ö`@)p`Èu‘Ê×Q‚J; ŸiïÝv[ŒÈµ/Ð#hfw\(n;87¥.öÆ,ÉLXgZKlg:.' –¬öPø`°¤k^gS°(o@ŸÀ˹ÀÁ’î‚ùVóÂfgOi¡NÐrû¿]öäVäIVäbVN@.e Ì6 0W^Ê-›O~×°}©rcO²ÿÿ»Ø›N6„O ìÜÑŽ¯•$I’ÿ€|$…``¾@`¾ÐúÿWƒÍÿë ŠFˆGÛu‹ƒîüÛrí¸Ûu‹ƒîüÛÀÛs u‹ƒîüÛrHÛu‹ƒîüÛÀëÔ1ɃèrÁàŠFƒðÿtxÑø‰Åë Ûu‹ƒîüÛÉÛu‹ƒîüÛÉu AÛu‹ƒîüÛÉÛsïu ‹ƒîüÛsäƒÁýûÿÿƒÑ/ƒýüvŠBˆGIu÷éOÿÿÿ‹ƒÂ‰ƒÇƒéwñÏé8ÿÿÿ^‰÷¹qŠG,è<w÷€?uò‹Š_fÁèÁÀ†Ä)ø€ëèð‰ƒÇ‰ØâÙ¾‹ Àt<‹_„0°7óPƒÇÿ–ì7•ŠGÀt܉ùWHò®Uÿ–ð7 Àt‰ƒÃëáa1À aé`Ó÷ÿ[œé60€ p€°€ð€[œé6H€[œé6 `TAè[œé60€ˆ€[œé6 8[œé6>€È€[œé6 à@D[œé6€[œé6  XDXDVCLALMAINICONP( @€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿŒŒŒŒ„‹‹‹‹ðw€w€ˆˆˆˆHK···ˆˆøˆøŒŒŒŒ„‹‹‹‹€w€w€ˆˆˆˆHH¸·GøˆøˆøŒŒŒŒ„„‹„G€w€w€ˆˆˆˆHHHGDøˆøˆøŒŒŒŒ„„ˆGG‡w‡w‡ˆˆˆˆHHHDGðw€w€üŒŒŒ„„ˆGDøˆøˆøøˆˆˆHHHGGÿÿÿÿÿüŒŒŒ„„ˆDGDwDtwøˆˆˆHHHGDD‡t„üŒŒŒ„„ˆGGDwD„øˆˆˆHHHDGD‡t„üŒŒŒ„„ˆGDDwD„øˆˆˆHHHGGD‡t„üŒŒŒ„„ˆDGDwGHøˆˆˆHHHDDD‡t€üŒŒŒ„„„„DDwHøˆˆˆHHHH„D„€üŒŒŒ„„„„ˆDHøˆˆˆHHHH€€ŒŒŒ„„„„€€ˆˆˆHHHH€€ŒŒŒ„„„„€€ˆˆˆHHHH€€ŒŒŒ„„„„€ˆˆˆHHHH€ŒŒŒ„„„„€ÿˆˆHHˆˆ€wÿÿÿˆˆwwwp€€€€€€€€€€€€€?€ÀÀÀÀÀÿÀÿÀÿÀÿàÿüÿH .è\X4VS_VERSION_INFO½ïþ    ?¶StringFileInfo’040904E4<CompanyNamePNG/MNG GroupZ2FileDescriptionlibmng - THE MNG library8FileVersion1.0.10.1440.InternalNamelibmnglLegalCopyrightCopyright © 2000-2007 G. Juyn, 2007 G.Randers-Pherson)LegalTrademarks>OriginalFilenamelibmng.dll.ProductNamelibmng2ProductVersion1.0.10CommentsDVarFileInfo$Translation äHìG HøGH&H6HKERNEL32.DLLUSER32.dllLoadLibraryAGetProcAddressMessageBoxAÊX££lHøN„U`Ð |4 X Äð(@!ˆ ¬ˆÀìÜŒäP @7ÐMP>ÔYd><>„S¸¾€1ˆ/Ì+d !È%HSœQ¤ºŒ>°>¼>Èô˜>t0Rž€ëDí´v@uÌsît?ô<=t=ô=t>4>T>Ô>>´>T=T?4=”?´=^¼[4W|TP`l\Ôg[°e<^€gÐZ¬iøichc _(TY\US$R V\eetdTZiØYà_¼c8h„hü\l]d¸W RŒfàf0fœaøaX´bÐ`ŒXU8aÐU`YTS¸j4V¤©˜©Œ©9|Q4Ѝ„¨y?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢libmng.dlladler32adler32_combinecompresscompress2compressBoundcrc32crc32_combinedeflatedeflateBounddeflateCopydeflateEnddeflateInit2_deflateInit_deflateParamsdeflatePrimedeflateResetdeflateSetDictionarydeflateSetHeaderdeflateTuneget_crc_tableinflateinflateCopyinflateEndinflateGetHeaderinflateInit2_inflateInit_inflatePrimeinflateResetinflateSetDictionaryinflateSyncinflateSyncPointjcopy_block_rowjcopy_sample_rowsjdiv_round_upjinit_1pass_quantizerjinit_2pass_quantizerjinit_c_coef_controllerjinit_c_main_controllerjinit_c_master_controljinit_c_prep_controllerjinit_color_converterjinit_color_deconverterjinit_compress_masterjinit_d_coef_controllerjinit_d_main_controllerjinit_d_post_controllerjinit_downsamplerjinit_forward_dctjinit_huff_decoderjinit_huff_encoderjinit_input_controllerjinit_inverse_dctjinit_marker_readerjinit_marker_writerjinit_master_decompressjinit_memory_mgrjinit_merged_upsamplerjinit_phuff_decoderjinit_phuff_encoderjinit_upsamplerjpeg_CreateCompressjpeg_CreateDecompressjpeg_abortjpeg_abort_compressjpeg_abort_decompressjpeg_add_quant_tablejpeg_alloc_huff_tablejpeg_alloc_quant_tablejpeg_calc_output_dimensionsjpeg_consume_inputjpeg_copy_critical_parametersjpeg_default_colorspacejpeg_destroyjpeg_destroy_compressjpeg_destroy_decompressjpeg_fdct_floatjpeg_fdct_ifastjpeg_fdct_islowjpeg_fill_bit_bufferjpeg_finish_compressjpeg_finish_decompressjpeg_finish_outputjpeg_free_largejpeg_free_smalljpeg_gen_optimal_tablejpeg_get_largejpeg_get_smalljpeg_has_multiple_scansjpeg_huff_decodejpeg_idct_1x1jpeg_idct_2x2jpeg_idct_4x4jpeg_idct_floatjpeg_idct_ifastjpeg_idct_islowjpeg_input_completejpeg_make_c_derived_tbljpeg_make_d_derived_tbljpeg_mem_availablejpeg_mem_initjpeg_mem_termjpeg_new_colormapjpeg_open_backing_storejpeg_quality_scalingjpeg_read_coefficientsjpeg_read_headerjpeg_read_raw_datajpeg_read_scanlinesjpeg_resync_to_restartjpeg_save_markersjpeg_set_colorspacejpeg_set_defaultsjpeg_set_linear_qualityjpeg_set_marker_processorjpeg_set_qualityjpeg_simple_progressionjpeg_start_compressjpeg_start_decompressjpeg_start_outputjpeg_std_errorjpeg_stdio_destjpeg_stdio_srcjpeg_suppress_tablesjpeg_write_coefficientsjpeg_write_m_bytejpeg_write_m_headerjpeg_write_markerjpeg_write_raw_datajpeg_write_scanlinesjpeg_write_tablesjround_upjzero_farmng_cleanupmng_copy_chunkmng_createmng_displaymng_display_freezemng_display_goframemng_display_golayermng_display_gotimemng_display_resetmng_display_resumemng_get_alphabitdepthmng_get_alphacompressionmng_get_alphadepthmng_get_alphafiltermng_get_alphainterlacemng_get_bgcolormng_get_bitdepthmng_get_bkgdstylemng_get_cacheplaybackmng_get_canvasstylemng_get_colortypemng_get_compressionmng_get_crcmodemng_get_currentframemng_get_currentlayermng_get_currentplaytimemng_get_currframdelaymng_get_dfltimggammamng_get_dfltimggammaintmng_get_displaygammamng_get_displaygammaintmng_get_doprogressivemng_get_filtermng_get_framecountmng_get_imageheightmng_get_imagelevelmng_get_imagetypemng_get_imagewidthmng_get_interlacemng_get_lastbackchunkmng_get_lastseeknamemng_get_layercountmng_get_maxcanvasheightmng_get_maxcanvaswidthmng_get_playtimemng_get_refreshpassmng_get_runtimemng_get_sectionbreaksmng_get_sigtypemng_get_simplicitymng_get_speedmng_get_srgbmng_get_starttimemng_get_storechunksmng_get_suspensionmodemng_get_ticksmng_get_totalframesmng_get_totallayersmng_get_totalplaytimemng_get_usebkgdmng_get_userdatamng_get_viewgammamng_get_viewgammaintmng_getcb_closestreammng_getcb_errorprocmng_getcb_getalphalinemng_getcb_getbkgdlinemng_getcb_getcanvaslinemng_getcb_gettickcountmng_getcb_memallocmng_getcb_memfreemng_getcb_openstreammng_getcb_processheadermng_getcb_processneedmng_getcb_processsavemng_getcb_processseekmng_getcb_processtermmng_getcb_processtextmng_getcb_processunknownmng_getcb_readdatamng_getcb_refreshmng_getcb_releasedatamng_getcb_settimermng_getcb_writedatamng_getchunk_backmng_getchunk_basimng_getchunk_bkgdmng_getchunk_chrmmng_getchunk_clipmng_getchunk_clonmng_getchunk_dbykmng_getchunk_defimng_getchunk_dhdrmng_getchunk_discmng_getchunk_dropmng_getchunk_endlmng_getchunk_evntmng_getchunk_evnt_entrymng_getchunk_expimng_getchunk_fprimng_getchunk_frammng_getchunk_gamamng_getchunk_histmng_getchunk_iccpmng_getchunk_idatmng_getchunk_ihdrmng_getchunk_itxtmng_getchunk_jdaamng_getchunk_jdatmng_getchunk_jhdrmng_getchunk_loopmng_getchunk_magnmng_getchunk_mhdrmng_getchunk_movemng_getchunk_needmng_getchunk_ordrmng_getchunk_ordr_entrymng_getchunk_pastmng_getchunk_past_srcmng_getchunk_phygmng_getchunk_physmng_getchunk_pltemng_getchunk_ppltmng_getchunk_pplt_entrymng_getchunk_prommng_getchunk_savemng_getchunk_save_entrymng_getchunk_sbitmng_getchunk_seekmng_getchunk_showmng_getchunk_spltmng_getchunk_srgbmng_getchunk_termmng_getchunk_textmng_getchunk_timemng_getchunk_trnsmng_getchunk_unknownmng_getchunk_ztxtmng_getimgdata_chunkmng_getimgdata_chunkseqmng_getimgdata_seqmng_getlasterrormng_initializemng_iterate_chunksmng_putchunk_backmng_putchunk_basimng_putchunk_bkgdmng_putchunk_chrmmng_putchunk_clipmng_putchunk_clonmng_putchunk_dbykmng_putchunk_defimng_putchunk_dhdrmng_putchunk_discmng_putchunk_dropmng_putchunk_endlmng_putchunk_evntmng_putchunk_evnt_entrymng_putchunk_expimng_putchunk_fprimng_putchunk_frammng_putchunk_gamamng_putchunk_histmng_putchunk_iccpmng_putchunk_idatmng_putchunk_iendmng_putchunk_ihdrmng_putchunk_ipngmng_putchunk_itxtmng_putchunk_jdaamng_putchunk_jdatmng_putchunk_jhdrmng_putchunk_jsepmng_putchunk_loopmng_putchunk_magnmng_putchunk_mendmng_putchunk_mhdrmng_putchunk_movemng_putchunk_needmng_putchunk_ordrmng_putchunk_ordr_entrymng_putchunk_pastmng_putchunk_past_srcmng_putchunk_phygmng_putchunk_physmng_putchunk_pltemng_putchunk_ppltmng_putchunk_pplt_entrymng_putchunk_prommng_putchunk_savemng_putchunk_save_entrymng_putchunk_sbitmng_putchunk_seekmng_putchunk_showmng_putchunk_spltmng_putchunk_srgbmng_putchunk_termmng_putchunk_textmng_putchunk_timemng_putchunk_trnsmng_putchunk_unknownmng_putchunk_ztxtmng_putimgdata_ihdrmng_putimgdata_jhdrmng_readmng_read_pushchunkmng_read_pushdatamng_read_pushsigmng_read_resumemng_readdisplaymng_resetmng_set_bgcolormng_set_bkgdstylemng_set_cacheplaybackmng_set_canvasstylemng_set_crcmodemng_set_dfltimggammamng_set_dfltimggammaintmng_set_displaygammamng_set_displaygammaintmng_set_doprogressivemng_set_maxcanvasheightmng_set_maxcanvassizemng_set_maxcanvaswidthmng_set_outputprofilemng_set_outputprofile2mng_set_outputsrgbmng_set_sectionbreaksmng_set_speedmng_set_srgbmng_set_srgbimplicitmng_set_srgbprofilemng_set_srgbprofile2mng_set_storechunksmng_set_suspensionmodemng_set_usebkgdmng_set_userdatamng_set_viewgammamng_set_viewgammaintmng_setcb_closestreammng_setcb_errorprocmng_setcb_getalphalinemng_setcb_getbkgdlinemng_setcb_getcanvaslinemng_setcb_gettickcountmng_setcb_memallocmng_setcb_memfreemng_setcb_openstreammng_setcb_processheadermng_setcb_processmendmng_setcb_processneedmng_setcb_processsavemng_setcb_processseekmng_setcb_processtermmng_setcb_processtextmng_setcb_processunknownmng_setcb_readdatamng_setcb_refreshmng_setcb_releasedatamng_setcb_settimermng_setcb_writedatamng_status_creatingmng_status_displayingmng_status_dynamicmng_status_errormng_status_readingmng_status_runningmng_status_runningeventmng_status_suspendbreakmng_status_timerbreakmng_status_writingmng_supports_funcmng_trapeventmng_updatemngheadermng_updatemngsimplicitymng_version_betamng_version_dllmng_version_majormng_version_minormng_version_releasemng_version_somng_version_textmng_writeuncompresszErrorzlibCompileFlagszlibVersion0 =;libmng-2.0.2/bcb/mngrepair/0000755000000000000000000000000012005307152014166 5ustar rootrootlibmng-2.0.2/bcb/mngrepair/mngrepair.cpp0000644000000000000000000005233212005307152016663 0ustar rootroot/* ************************************************************************** */ /* * * */ /* * COPYRIGHT NOTICE: * */ /* * * */ /* * Copyright (c) 2000-2002 Gerard Juyn (gerard@libmng.com) * */ /* * [You may insert additional notices after this sentence if you modify * */ /* * this source] * */ /* * * */ /* * For the purposes of this copyright and license, "Contributing Authors" * */ /* * is defined as the following set of individuals: * */ /* * * */ /* * Gerard Juyn * */ /* * (hopefully some more to come...) * */ /* * * */ /* * The MNG Library is supplied "AS IS". The Contributing Authors * */ /* * disclaim all warranties, expressed or implied, including, without * */ /* * limitation, the warranties of merchantability and of fitness for any * */ /* * purpose. The Contributing Authors assume no liability for direct, * */ /* * indirect, incidental, special, exemplary, or consequential damages, * */ /* * which may result from the use of the MNG Library, even if advised of * */ /* * the possibility of such damage. * */ /* * * */ /* * Permission is hereby granted to use, copy, modify, and distribute this * */ /* * source code, or portions hereof, for any purpose, without fee, subject * */ /* * to the following restrictions: * */ /* * * */ /* * 1. The origin of this source code must not be misrepresented; * */ /* * you must not claim that you wrote the original software. * */ /* * * */ /* * 2. Altered versions must be plainly marked as such and must not be * */ /* * misrepresented as being the original source. * */ /* * * */ /* * 3. This Copyright notice may not be removed or altered from any source * */ /* * or altered source distribution. * */ /* * * */ /* * The Contributing Authors specifically permit, without fee, and * */ /* * encourage the use of this source code as a component to supporting * */ /* * the MNG and JNG file format in commercial products. If you use this * */ /* * source code in a product, acknowledgment would be highly appreciated. * */ /* * * */ /* ************************************************************************** */ /* * * */ /* * project : mngrepair * */ /* * file : mngrepair.cpp copyright (c) 2002 G.Juyn * */ /* * version : 1.0.0 * */ /* * * */ /* * purpose : main project file * */ /* * * */ /* * author : G.Juyn * */ /* * web : http://www.3-t.com * */ /* * email : mailto:info@3-t.com * */ /* * * */ /* * comment : mngrepair iterates tries to fix a couple of 'common' * */ /* * MNG encoding errors (such as in JASC Animation Shop) * */ /* * * */ /* * changes : * */ /* * * */ /* ************************************************************************** */ #define HAVE_BOOLEAN #include #pragma hdrstop #include #include "libmng.h" /* ************************************************************************** */ USERES("mngrepair.res"); USEUNIT("..\..\libmng_hlapi.c"); USEUNIT("..\..\libmng_callback_xs.c"); USEUNIT("..\..\libmng_prop_xs.c"); USEUNIT("..\..\libmng_chunk_xs.c"); USEUNIT("..\..\libmng_object_prc.c"); USEUNIT("..\..\libmng_chunk_prc.c"); USEUNIT("..\..\libmng_chunk_io.c"); USEUNIT("..\..\libmng_read.c"); USEUNIT("..\..\libmng_write.c"); USEUNIT("..\..\libmng_display.c"); USEUNIT("..\..\libmng_dither.c"); USEUNIT("..\..\libmng_pixels.c"); USEUNIT("..\..\libmng_filter.c"); USEUNIT("..\..\libmng_error.c"); USEUNIT("..\..\libmng_trace.c"); USEUNIT("..\..\libmng_cms.c"); USEUNIT("..\..\libmng_zlib.c"); USEUNIT("..\..\libmng_jpeg.c"); USEUNIT("..\..\..\zlib\adler32.c"); USEUNIT("..\..\..\zlib\compress.c"); USEUNIT("..\..\..\zlib\crc32.c"); USEUNIT("..\..\..\zlib\deflate.c"); USEUNIT("..\..\..\zlib\infblock.c"); USEUNIT("..\..\..\zlib\infcodes.c"); USEUNIT("..\..\..\zlib\inffast.c"); USEUNIT("..\..\..\zlib\inflate.c"); USEUNIT("..\..\..\zlib\inftrees.c"); USEUNIT("..\..\..\zlib\infutil.c"); USEUNIT("..\..\..\zlib\trees.c"); USEUNIT("..\..\..\zlib\uncompr.c"); USEUNIT("..\..\..\zlib\zutil.c"); //--------------------------------------------------------------------------- typedef struct user_struct { FILE *hFileI; /* input file handle */ FILE *hFileO; /* output file handle */ mng_handle hHandleI; /* input mng handle */ mng_handle hHandleO; /* output mng handle */ mng_bool bHasSAVE; /* indicates a SAVE in the input */ mng_bool bHasTERM; /* indicates we saved the TERM */ mng_bool bIsJASC; /* indicates if this is an AS file */ mng_chunkid iLastchunk; /* last processed chunk */ mng_retcode iError; /* errorcode from function in callback */ mng_uint8 iTermaction; /* saved TERM parameters */ mng_uint8 iIteraction; mng_uint32 iDelay; mng_uint32 iItermax; } userdata; typedef userdata * userdatap; /* ************************************************************************** */ #define MY_DECL /* get the right callback convention */ /* ************************************************************************** */ mng_ptr MY_DECL myalloc (mng_size_t iSize) { /* duh! */ return (mng_ptr)calloc (1, (size_t)iSize); } /* ************************************************************************** */ #pragma argsused void MY_DECL myfree (mng_ptr pPtr, mng_size_t iSize) { free (pPtr); /* duh! */ return; } /* ************************************************************************** */ #pragma argsused mng_bool MY_DECL myopenstream (mng_handle hMNG) { return MNG_TRUE; /* already opened in main function */ } /* ************************************************************************** */ #pragma argsused mng_bool MY_DECL myclosestream (mng_handle hMNG) { return MNG_TRUE; /* gets closed in main function */ } /* ************************************************************************** */ mng_bool MY_DECL myreaddata (mng_handle hMNG, mng_ptr pBuf, mng_uint32 iSize, mng_uint32 *iRead) { /* get to my file handle */ userdatap pMydata = (userdatap)mng_get_userdata (hMNG); /* read it */ *iRead = fread (pBuf, 1, iSize, pMydata->hFileI); /* iRead will indicate EOF */ return MNG_TRUE; } /* ************************************************************************** */ mng_bool MY_DECL mywritedata (mng_handle hMNG, mng_ptr pBuf, mng_uint32 iSize, mng_uint32 *iWritten) { /* get to my file handle */ userdatap pMydata = (userdatap)mng_get_userdata (hMNG); /* write it */ *iWritten = fwrite (pBuf, 1, iSize, pMydata->hFileO); /* iWritten will indicate errors */ return MNG_TRUE; } /* ************************************************************************** */ mng_bool MY_DECL myprocesserror (mng_handle hMNG, mng_int32 iErrorcode, mng_int8 iSeverity, mng_chunkid iChunkname, mng_uint32 iChunkseq, mng_int32 iExtra1, mng_int32 iExtra2, mng_pchar zErrortext) { /* sequence error for TERM we ignore ! */ if ((iErrorcode == MNG_SEQUENCEERROR) && (iChunkname == MNG_UINT_TERM)) return MNG_TRUE; return MNG_FALSE; /* all others get dumped ! */ } /* ************************************************************************** */ #pragma argsused mng_bool MY_DECL myiterchunk (mng_handle hMNG, mng_handle hChunk, mng_chunkid iChunktype, mng_uint32 iChunkseq) { mng_uint32 iWidth; /* temps for IHDR processing */ mng_uint32 iHeight; mng_uint8 iBitdepth; mng_uint8 iColortype; mng_uint8 iCompression; mng_uint8 iFilter; mng_uint8 iInterlace; mng_bool bEmpty; /* temps for FRAM processing */ mng_uint8 iMode; mng_uint32 iNamesize; mng_pchar zName; mng_uint8 iChangedelay; mng_uint8 iChangetimeout; mng_uint8 iChangeclipping; mng_uint8 iChangesyncid; mng_uint32 iDelay; mng_uint32 iTimeout; mng_uint8 iBoundarytype; mng_int32 iBoundaryl; mng_int32 iBoundaryr; mng_int32 iBoundaryt; mng_int32 iBoundaryb; mng_uint32 iCount; mng_uint32p pSyncids; /* get to my userdata */ userdatap pMydata = (userdatap)mng_get_userdata (hMNG); if (pMydata->hFileO) /* are we writing this time ? */ { /* do we need to 'forget' the TERM ? */ if ((iChunktype == MNG_UINT_TERM) && (pMydata->bHasTERM)) ; else { /* fix JASC AS frame_type ? */ if ((iChunktype == MNG_UINT_FRAM) && (pMydata->bIsJASC)) { if ((pMydata->iError = mng_getchunk_fram (hMNG, hChunk, &bEmpty, &iMode, &iNamesize, &zName, &iChangedelay, &iChangetimeout, &iChangeclipping, &iChangesyncid, &iDelay, &iTimeout, &iBoundarytype, &iBoundaryl, &iBoundaryr, &iBoundaryt, &iBoundaryb, &iCount, &pSyncids)) != 0) { fprintf (stderr, "Cannot get FRAM fields.\n"); return MNG_FALSE; /* stop the process ! */ } if (iMode == 1) /* really ? */ iMode = 3; if ((pMydata->iError = mng_putchunk_fram (pMydata->hHandleO, bEmpty, iMode, iNamesize, zName, iChangedelay, iChangetimeout, iChangeclipping, iChangesyncid, iDelay, iTimeout, iBoundarytype, iBoundaryl, iBoundaryr, iBoundaryt, iBoundaryb, iCount, pSyncids)) != 0) { fprintf (stderr, "Cannot write FRAM chunk.\n"); return MNG_FALSE; /* stop the process ! */ } } else { if ((pMydata->iError = mng_copy_chunk (hMNG, hChunk, pMydata->hHandleO)) != 0) { fprintf (stderr, "Cannot copy the chunk.\n"); return MNG_FALSE; /* stop the process ! */ } } } /* need to insert TERM in the proper place ? */ if ((iChunktype == MNG_UINT_MHDR) && (pMydata->bHasTERM)) { if ((pMydata->iError = mng_putchunk_term (pMydata->hHandleO, pMydata->iTermaction, pMydata->iIteraction, pMydata->iDelay, pMydata->iItermax)) != 0) { fprintf (stderr, "Cannot write TERM chunk.\n"); return MNG_FALSE; /* stop the process ! */ } } } else /* first iteration; just checking stuff */ { if (iChunktype == MNG_UINT_SAVE) /* SAVE ? */ { pMydata->bHasSAVE = MNG_TRUE; /* we got a SAVE ! */ pMydata->bIsJASC = MNG_FALSE; /* so it's definitely not an invalid AS file */ } else { /* TERM ? */ if (iChunktype == MNG_UINT_TERM) { /* is it in the wrong place ? */ if ((pMydata->iLastchunk != MNG_UINT_MHDR) || (pMydata->iLastchunk != MNG_UINT_SAVE) ) { pMydata->bHasTERM = MNG_TRUE; if ((pMydata->iError = mng_getchunk_term (hMNG, hChunk, &pMydata->iTermaction, &pMydata->iIteraction, &pMydata->iDelay, &pMydata->iItermax)) != 0) { fprintf (stderr, "Cannot get TERM fields.\n"); return MNG_FALSE; /* stop the process ! */ } } } else { /* IHDR ? */ if (iChunktype == MNG_UINT_IHDR) { if ((pMydata->iError = mng_getchunk_ihdr (hMNG, hChunk, &iWidth, &iHeight, &iBitdepth, &iColortype, &iCompression, &iFilter, &iInterlace)) != 0) { fprintf (stderr, "Cannot get IHDR fields.\n"); return MNG_FALSE; /* stop the process ! */ } /* is it not a typical JASC AS file */ if ((iBitdepth != 8) || (iColortype != 6)) pMydata->bIsJASC = MNG_FALSE; } } } pMydata->iLastchunk = iChunktype; } return MNG_TRUE; /* keep'm coming... */ } /* ************************************************************************** */ int fixit (char * zFilenameI, char * zFilenameO) { userdatap pMydata; mng_retcode iRC; /* get a data buffer */ pMydata = (userdatap)calloc (1, sizeof (userdata)); if (pMydata == NULL) /* oke ? */ { fprintf (stderr, "Cannot allocate a data buffer.\n"); return 1; } pMydata->hFileO = 0; /* initialize some stuff! */ pMydata->hHandleI = MNG_NULL; pMydata->hHandleO = MNG_NULL; pMydata->bHasSAVE = MNG_FALSE; pMydata->bHasTERM = MNG_FALSE; pMydata->bIsJASC = MNG_TRUE; pMydata->iLastchunk = MNG_UINT_HUH; pMydata->iTermaction = 0; pMydata->iIteraction = 0; pMydata->iDelay = 0; pMydata->iItermax = 0; /* can we open the input file ? */ if ((pMydata->hFileI = fopen (zFilenameI, "rb")) == NULL) { /* error out if we can't */ fprintf (stderr, "Cannot open input file %s.\n", zFilenameI); return 1; } /* let's initialize the library */ pMydata->hHandleI = mng_initialize ((mng_ptr)pMydata, myalloc, myfree, MNG_NULL); if (!pMydata->hHandleI) /* did that work out ? */ { fprintf (stderr, "Cannot initialize libmng.\n"); iRC = 1; } else { /* some informatory messages */ fprintf (stderr, "Compiled with libmng %s.\n", MNG_VERSION_TEXT); fprintf (stderr, "Running with libmng %s.\n", mng_version_text()); /* setup callbacks */ if ( ((iRC = mng_setcb_openstream (pMydata->hHandleI, myopenstream )) != 0) || ((iRC = mng_setcb_closestream (pMydata->hHandleI, myclosestream )) != 0) || ((iRC = mng_setcb_readdata (pMydata->hHandleI, myreaddata )) != 0) || ((iRC = mng_setcb_errorproc (pMydata->hHandleI, myprocesserror)) != 0) ) fprintf (stderr, "Cannot set callbacks for libmng.\n"); else { /* reaad the file into memory */ if ((iRC = mng_read (pMydata->hHandleI)) != 0) fprintf (stderr, "Cannot read the input file.\n"); else { /* run through the chunk list to get TERM */ if ((iRC = mng_iterate_chunks (pMydata->hHandleI, 0, myiterchunk)) != 0) fprintf (stderr, "Cannot iterate the chunks.\n"); else { if (pMydata->iError) /* did the iteration fail somehow ? */ iRC = pMydata->iError; else { /* can we open the output file ? */ if ((pMydata->hFileO = fopen (zFilenameO, "wb")) == NULL) { /* error out if we can't */ fprintf (stderr, "Cannot open output file %s.\n", zFilenameO); iRC = 1; } else { /* let's initialize the library */ pMydata->hHandleO = mng_initialize ((mng_ptr)pMydata, myalloc, myfree, MNG_NULL); if (!pMydata->hHandleO) /* did that work out ? */ { fprintf (stderr, "Cannot initialize libmng.\n"); iRC = 1; } else { /* setup callbacks */ if ( ((iRC = mng_setcb_openstream (pMydata->hHandleO, myopenstream )) != 0) || ((iRC = mng_setcb_closestream (pMydata->hHandleO, myclosestream)) != 0) || ((iRC = mng_setcb_writedata (pMydata->hHandleO, mywritedata )) != 0) ) fprintf (stderr, "Cannot set callbacks for libmng.\n"); else { if ((iRC = mng_create (pMydata->hHandleO)) != 0) fprintf (stderr, "Cannot create a new MNG.\n"); else { /* run through the chunk again and create the new file */ if ((iRC = mng_iterate_chunks (pMydata->hHandleI, 0, myiterchunk)) != 0) fprintf (stderr, "Cannot iterate the chunks.\n"); else { /* did the iteration fail somehow ? */ if (pMydata->iError) iRC = pMydata->iError; else { /* now write the created new file !! */ if ((iRC = mng_write (pMydata->hHandleO)) != 0) fprintf (stderr, "Cannot write the output file.\n"); } } } } /* cleanup the library */ mng_cleanup (&pMydata->hHandleO); } /* cleanup output file */ fclose (pMydata->hFileO); } } } } } mng_cleanup (&pMydata->hHandleI); /* cleanup the library */ } fclose (pMydata->hFileI); /* cleanup input file and userdata */ free (pMydata); return iRC; } /* ************************************************************************** */ int main(int argc, char *argv[]) { if (argc > 2) /* need two (2) parameters ! */ return fixit (argv[1], argv[2]); else fprintf (stdout, "\nUsage: mngrepair \n\n"); return 0; } /* ************************************************************************** */ libmng-2.0.2/bcb/mngrepair/mngrepair.bpr0000644000000000000000000002207012005307152016660 0ustar rootroot# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.03 # --------------------------------------------------------------------------- PROJECT = mngrepair.exe OBJFILES = obj\mngrepair.obj obj\libmng_hlapi.obj obj\libmng_callback_xs.obj \ obj\libmng_prop_xs.obj obj\libmng_chunk_xs.obj obj\libmng_object_prc.obj \ obj\libmng_chunk_prc.obj obj\libmng_chunk_io.obj obj\libmng_read.obj \ obj\libmng_write.obj obj\libmng_display.obj obj\libmng_dither.obj \ obj\libmng_pixels.obj obj\libmng_filter.obj obj\libmng_error.obj \ obj\libmng_trace.obj obj\libmng_cms.obj obj\libmng_zlib.obj obj\libmng_jpeg.obj \ obj\adler32.obj obj\compress.obj obj\crc32.obj obj\deflate.obj obj\infblock.obj \ obj\infcodes.obj obj\inffast.obj obj\inflate.obj obj\inftrees.obj \ obj\infutil.obj obj\trees.obj obj\uncompr.obj obj\zutil.obj RESFILES = mngrepair.res RESDEPEN = $(RESFILES) LIBFILES = LIBRARIES = VCL35.lib SPARELIBS = VCL35.lib PACKAGES = vclx35.bpi VCL35.bpi vcldb35.bpi vcldbx35.bpi bcbsmp35.bpi dclocx35.bpi \ Qrpt35.bpi DEFFILE = # --------------------------------------------------------------------------- PATHCPP = .;..\..;..\..\..\zlib PATHASM = .; PATHPAS = .; PATHRC = .; DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release # --------------------------------------------------------------------------- CFLAG1 = -Od -Hc -w -r- -d -k -y -v -vi- -w-par -c -tWC CFLAG2 = -D_NO_VCL;MNG_SUPPORT_FULL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_INCLUDE_ZLIB;MNG_NO_CMS;MNG_SOFTERRORS \ -I..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\include \ -H=$(BCB)\lib\vcl35.csm CFLAG3 = -Tkh30000 -ff -5 -wuse -wucp -wstv -wstu -wsig -wpin -wnod -wnak -wdef -wcln \ -wbbf -wasm -wamp -wamb PFLAGS = -D_NO_VCL;MNG_SUPPORT_FULL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_INCLUDE_ZLIB;MNG_NO_CMS;MNG_SOFTERRORS \ -N2.\obj -N0.\obj \ -U..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\lib;$(RELEASELIBPATH) \ -I..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\include -H -W \ -$Y -$W -$O- -v -JPHN -M RFLAGS = -D_NO_VCL;MNG_SUPPORT_FULL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_INCLUDE_ZLIB;MNG_NO_CMS;MNG_SOFTERRORS \ -i..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\include AFLAGS = /i..\..\..\libmng-devel /i..\..\..\zlib /i..\..\..\jpgsrc6b /i$(BCB)\include \ /d_NO_VCL /dMNG_SUPPORT_FULL /dMNG_SUPPORT_READ /dMNG_SUPPORT_WRITE \ /dMNG_ACCESS_CHUNKS /dMNG_STORE_CHUNKS /dMNG_INCLUDE_ZLIB /dMNG_NO_CMS \ /dMNG_SOFTERRORS /mx /w2 /zd LFLAGS = -L..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\lib;$(RELEASELIBPATH) \ -ap -Tpe -x -Gn -wdef -wdpl -v IFLAGS = # --------------------------------------------------------------------------- ALLOBJ = c0x32.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) import32.lib cw32mt.lib # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=1 AutoIncBuild=1 MajorVer=1 MinorVer=0 Release=0 Build=27 Debug=1 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription=Executable (Console) FileVersion=1.0.0.27 InternalName=mngrepair LegalCopyright=copyright (c) 2002 G.Juyn LegalTrademarks= OriginalFilename=mngrepair.exe ProductName=mngrepair ProductVersion=1.0 Comments= [Excluded Packages] C:\Program Files\Borland\CBuilder3\Bin\DbX35.bpl=(untitled) [HistoryLists\hlIncludePath] Count=9 Item0=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\include Item1=..\..\..\libmng-devel;..\..;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\include Item2=..\..;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\include Item3=..\..\..\libmng-devel;..\..;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include Item4=..\..;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include Item5=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include Item6=..\..\..\libmng;..\..\..\zlib;..\..\..\jpgsrc6b;..\..\..\lcms;$(BCB)\include Item7=..\..\..\libmng;..\..\..\zlib;$(BCB)\include Item8=..\..\..\libmng;$(BCB)\include [HistoryLists\hlLibraryPath] Count=7 Item0=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\lib Item1=..\..\..\libmng-devel;..\..;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\lib Item2=..\..;..\..\..\zlib;..\..\..\jpgsrc6b;$(BCB)\lib Item3=..\..\..\jpgsrc6b;..\..\..\zlib;..\..\..\libmng-devel;..\win32dll;$(BCB)\lib Item4=..\win32dll;$(BCB)\lib Item5=..\..\..\libmng\bcb\win32dll;$(BCB)\lib Item6=..\..\..\libmng;$(BCB)\lib [HistoryLists\hlDebugSourcePath] Count=1 Item0=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b [HistoryLists\hlConditionals] Count=13 Item0=_NO_VCL;MNG_SUPPORT_FULL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_INCLUDE_ZLIB;MNG_NO_CMS;MNG_SOFTERRORS Item1=_NO_VCL;MNG_SUPPORT_FULL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_SUPPORT_DISPLAY;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_INCLUDE_ZLIB;MNG_INCLUDE_IJG6B;MNG_NO_CMS;MNG_DEFINE_JPEG_STDCALL;MNG_SOFTERRORS Item2=_NO_VCL;MNG_SUPPORT_FULL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_SUPPORT_DISPLAY;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_INCLUDE_ZLIB;MNG_INCLUDE_IJG6B;MNG_NO_CMS;MNG_DEFINE_JPEG_STDCALL;MNG_SOFTERROR Item3=_NO_VCL;MNG_SUPPORT_FULL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_SUPPORT_DISPLAY;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_INCLUDE_ZLIB;MNG_INCLUDE_IJG6B;MNG_NO_CMS;MNG_DEFINE_JPEG_STDCALL Item4=_NO_VCL;MNG_SUPPORT_FULL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_SUPPORT_DISPLAY;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_INCLUDE_ZLIB;MNG_INCLUDE_IJG;MNG_NO_CMS;MNG_DEFINE_JPEG_STDCALL Item5=_NO_VCL;MNG_SUPPORT_FULL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_SUPPORT_DISPLAY;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_DEFINE_JPEG_STDCALL Item6=_NO_VCL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_SUPPORT_DISPLAY;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_DEFINE_JPEG_STDCALL;MNG_SUPPORT_IJG6B Item7=_NO_VCL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_SUPPORT_DISPLAY;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_DEFINE_JPEG_STDCALL Item8=_NO_VCL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_SUPPORT_DISPLAY;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS Item9=_NO_VCL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS Item10=_NO_VCL;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL Item11=_NO_VCL;MNG_SUPPORT_READ;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS;MNG_USE_DLL Item12=_NO_VCL;MNG_SUPPORT_READ;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;MNG_NO_CMS [HistoryLists\hlIntOutputDir] Count=2 Item0=.\obj Item1=..\..\..\obj [HistoryLists\hlRunParameters] Count=4 Item0=roilion02.mng roilion02-fixed.mng Item1=roilion.mng roilion-fixed.mng Item2=dutch.mng Item3=usflag-lc-d63.mng [Debugging] DebugSourceDirs=..\..\..\libmng-devel;..\..\..\zlib;..\..\..\jpgsrc6b [Parameters] RunParams=roilion02.mng roilion02-fixed.mng HostApplication= !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = ilink32 !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< # --------------------------------------------------------------------------- libmng-2.0.2/bcb/mngrepair/mngrepair.res0000644000000000000000000000321412005307152016665 0ustar rootroot ÿÿÿÿè ÿÿÿÿ( @€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿŒŒŒŒ„‹‹‹‹ðw€w€ˆˆˆˆHK···ˆˆøˆøŒŒŒŒ„‹‹‹‹€w€w€ˆˆˆˆHH¸·GøˆøˆøŒŒŒŒ„„‹„G€w€w€ˆˆˆˆHHHGDøˆøˆøŒŒŒŒ„„ˆGG‡w‡w‡ˆˆˆˆHHHDGðw€w€üŒŒŒ„„ˆGDøˆøˆøøˆˆˆHHHGGÿÿÿÿÿüŒŒŒ„„ˆDGDwDtwøˆˆˆHHHGDD‡t„üŒŒŒ„„ˆGGDwD„øˆˆˆHHHDGD‡t„üŒŒŒ„„ˆGDDwD„øˆˆˆHHHGGD‡t„üŒŒŒ„„ˆDGDwGHøˆˆˆHHHDDD‡t€üŒŒŒ„„„„DDwHøˆˆˆHHHH„D„€üŒŒŒ„„„„ˆDHøˆˆˆHHHH€€ŒŒŒ„„„„€€ˆˆˆHHHH€€ŒŒŒ„„„„€€ˆˆˆHHHH€€ŒŒŒ„„„„€ˆˆˆHHHH€ŒŒŒ„„„„€ÿˆˆHHˆˆ€wÿÿÿˆˆwwwp€€€€€€€€€€€€€?€ÀÀÀÀÀÿÀÿÀÿÀÿàÿüÿ0ÿÿMAINICON è ÿÿÿÿ 4VS_VERSION_INFO½ïþ?^StringFileInfo:040904E4!CompanyNameR*FileDescriptionExecutable (Console)2FileVersion1.0.0.284InternalNamemngrepairX4LegalCopyrightcopyright (c) 2002 G.Juyn)LegalTrademarksDOriginalFilenamemngrepair.exe4ProductNamemngrepair,ProductVersion1.0CommentsDVarFileInfo$Translation älibmng-2.0.2/libmng_pixels.c0000644000000000000000000310030112005307152014452 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_pixels.c copyright (c) 2000-2005 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Pixel-row management routines (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the pixel-row management routines * */ /* * * */ /* * the dual alpha-composing for RGBA/BGRA/etc output-canvas' * */ /* * is based on the Note on Compositing chapter of the * */ /* * DOH-3 draft, noted to me by Adam M. Costello * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - added callback error-reporting support * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * * */ /* * 0.5.2 - 05/22/2000 - G.Juyn * */ /* * - added JNG support * */ /* * 0.5.2 - 05/30/2000 - G.Juyn * */ /* * - fixed minor bugs 16-bit pixel-handling * */ /* * - added delta-image row-processing routines * */ /* * 0.5.2 - 06/02/2000 - G.Juyn * */ /* * - fixed endian support (hopefully) * */ /* * 0.5.2 - 06/03/2000 - G.Juyn * */ /* * - fixed makeup for Linux gcc compile * */ /* * 0.5.2 - 06/05/2000 - G.Juyn * */ /* * - implemented app bkgd restore routines * */ /* * - implemented RGBA8, ARGB8, BGRA8 & ABGR8 display routines * */ /* * - added support for RGB8_A8 canvasstyle * */ /* * 0.5.2 - 06/09/2000 - G.Juyn * */ /* * - fixed alpha-handling for alpha canvasstyles * */ /* * * */ /* * 0.5.3 - 06/16/2000 - G.Juyn * */ /* * - changed progressive-display processing * */ /* * 0.5.3 - 06/17/2000 - G.Juyn * */ /* * - changed to support delta-images * */ /* * - optimized some store_xxx routines * */ /* * 0.5.3 - 06/20/2000 - G.Juyn * */ /* * - fixed nasty bug with embedded PNG after delta-image * */ /* * 0.5.3 - 06/24/2000 - G.Juyn * */ /* * - fixed problem with 16-bit GA format * */ /* * 0.5.3 - 06/25/2000 - G.Juyn * */ /* * - fixed problem with cheap transparency for 4-bit gray * */ /* * - fixed display_xxxx routines for interlaced images * */ /* * 0.5.3 - 06/28/2000 - G.Juyn * */ /* * - fixed compiler-warning for non-initialized iB variable * */ /* * * */ /* * 0.9.1 - 07/05/2000 - G.Juyn * */ /* * - fixed mandatory BACK color to be opaque * */ /* * * */ /* * 0.9.2 - 07/31/2000 - G.Juyn * */ /* * - B110547 - fixed bug in interlace code * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/20/2000 - G.Juyn * */ /* * - fixed app-supplied background restore * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 09/07/2000 - G.Juyn * */ /* * - added support for new filter_types * */ /* * 0.9.3 - 09/30/2000 - G.Juyn * */ /* * - fixed MAGN rounding errors (thanks Matthias!) * */ /* * 0.9.3 - 10/10/2000 - G.Juyn * */ /* * - fixed alpha-blending for RGBA canvasstyle * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - fixed alpha-blending for other alpha-canvasstyles * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added optional support for bKGD for PNG images * */ /* * - added support for JDAA * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - fixed support for bKGD * */ /* * 0.9.3 - 10/19/2000 - G.Juyn * */ /* * - implemented delayed delta-processing * */ /* * 0.9.3 - 10/28/2000 - G.Juyn * */ /* * - fixed tRNS processing for gray-image < 8-bits * */ /* * * */ /* * 0.9.4 - 12/16/2000 - G.Juyn * */ /* * - fixed mixup of data- & function-pointers (thanks Dimitri)* */ /* * 0.9.4 - 1/18/2001 - G.Juyn * */ /* * - removed "old" MAGN methods 3 & 4 * */ /* * - added "new" MAGN methods 3, 4 & 5 * */ /* * - removed test filter-methods 1 & 65 * */ /* * * */ /* * 1.0.1 - 04/21/2001 - G.Juyn (code by G.Kelly) * */ /* * - added BGRA8 canvas with premultiplied alpha * */ /* * 1.0.1 - 04/25/2001 - G.Juyn * */ /* * - moved mng_clear_cms to libmng_cms * */ /* * * */ /* * 1.0.2 - 06/25/2001 - G.Juyn * */ /* * - added option to turn off progressive refresh * */ /* * * */ /* * 1.0.4 - 11/04/2001 - G.Juyn * */ /* * - fixed possible compile-problem in cleanup_rowproc * */ /* * 1.0.4 - 06/22/2002 - G.Juyn * */ /* * - B558212 - off by one error * */ /* * - MNG subimage alpha composite wrong for rgba8 images * */ /* * * */ /* * 1.0.5 - 08/07/2002 - G.Juyn * */ /* * - added test-option for PNG filter method 193 (=no filter) * */ /* * 1.0.5 - 08/15/2002 - G.Juyn * */ /* * - completed PROM support * */ /* * - completed delta-image support * */ /* * 1.0.5 - 08/16/2002 - G.Juyn * */ /* * - completed MAGN support (16-bit functions) * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/19/2002 - G.Juyn * */ /* * - optimized restore-background for bKGD cases * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - finished support for BACK image & tiling * */ /* * 1.0.5 - 09/22/2002 - G.Juyn * */ /* * - added bgrx8 canvas (filler byte) * */ /* * 1.0.5 - 09/23/2002 - G.Juyn * */ /* * - added compose over/under routines for PAST processing * */ /* * - added flip & tile routines for PAST processing * */ /* * * */ /* * 1.0.6 - 03/09/2003 - G.Juyn * */ /* * - hiding 12-bit JPEG stuff * */ /* * 1.0.6 - 05/11/2003 - Glenn RP * */ /* * - added size-optimization COMPOSE routine usage * */ /* * 1.0.6 - 05/11/2003 - G. Juyn * */ /* * - added conditionals around canvas update routines * */ /* * 1.0.6 - 05/25/2003 - Glenn RP * */ /* * - added size-optimization DIV255B8 routine usage * */ /* * 1.0.6 - 06/09/2003 - G. R-P * */ /* * - added conditionals around 8-bit magn routines * */ /* * 1.0.6 - 07/07/2003 - G. R-P * */ /* * - removed conditionals around 8-bit magn routines * */ /* * - added MNG_NO_16BIT_SUPPORT and MNG_NO_DELTA_PNG * */ /* * conditionals * */ /* * - reversed many loops to use decrementing counter * */ /* * - combined init functions * */ /* * - converted some switches to array references * */ /* * 1.0.6 - 07/29/2003 - G.Juyn * */ /* * - fixed duplicate for-loop * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added SKIPCHUNK conditionals around PAST chunk support * */ /* * - fixed "FOOTPRINT_COMPOSEIV" typo (now "FOOTPRINT_DIV") * */ /* * 1.0.6 - 08/17/2003 - G.R-P * */ /* * - added more conditionals around "promote" functions * */ /* * * */ /* * 1.0.7 - 11/27/2003 - R.A * */ /* * - added CANVAS_RGB565 and CANVAS_BGR565 * */ /* * 1.0.7 - 12/06/2003 - R.A * */ /* * - added CANVAS_RGBA565 and CANVAS_BGRA565 * */ /* * 1.0.7 - 01/25/2004 - J.S * */ /* * - added premultiplied alpha canvas' for RGBA, ARGB, ABGR * */ /* * 1.0.7 - 03/08/2004 - G.R-P * */ /* * - added more conditionals around 16-bit-supporting code * */ /* * 1.0.7 - 03/09/2004 - G.Juyn * */ /* * - fixed bug in promote_g8_g8 with 16bit support off * */ /* * 1.0.7 - 03/09/2004 - G.R-P * */ /* * - more optimizations with 16bit support off * */ /* * 1.0.7 - 03/10/2004 - G.Juyn * */ /* * - fixed some warnings for 16bit optimizations * */ /* * 1.0.7 - 03/21/2004 - G.Juyn * */ /* * - fixed some 64-bit platform compiler warnings * */ /* * * */ /* * 1.0.8 - 06/20/2004 - G.Juyn * */ /* * - some speed optimizations (thanks to John Stiles) * */ /* * 1.0.8 - 08/01/2004 - G.Juyn * */ /* * - added support for 3+byte pixelsize for JPEG's * */ /* * * */ /* * 1.0.9 - 10/10/2004 - G.R-P. * */ /* * - added MNG_NO_1_2_4BIT_SUPPORT * */ /* * 1.0.9 - 10/14/2004 - G.Juyn * */ /* * - added bgr565_a8 canvas-style (thanks to J. Elvander) * */ /* * 1.0.9 - 12/05/2004 - G.Juyn * */ /* * - added LITTLEENDIAN/BIGENDIAN fixtures (thanks J.Stiles) * */ /* * - fixed MNG_NO_1_2_4BIT_SUPPORT for TBBN1G04.PNG * */ /* * 1.0.9 - 12/31/2004 - G.R-P. * */ /* * - fixed warnings about C++ style (//) comments * */ /* * * */ /* * 1.0.10 - 07/06/2005 - G.R-P. * */ /* * - added MORE MNG_NO_1_2_4BIT_SUPPORT * */ /* * 1.0.10 - 10/06/2005 - G.R-P. * */ /* * - alloc more memory for MNG_NO_1_2_4BIT_SUPPORT * */ /* * 1.0.10 - 12/07/2005 - G.R-P. * */ /* * - optimized footprint of 16bit support * */ /* * 1.0.10 - 03/07/2006 - (thanks to W. Manthey) * */ /* * - added CANVAS_RGB555 and CANVAS_BGR555 * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_objects.h" #include "libmng_object_prc.h" #include "libmng_memory.h" #include "libmng_cms.h" #include "libmng_filter.h" #include "libmng_pixels.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_DISPLAY_PROCS /* TODO: magnification & canvas-positioning/-clipping */ /* TODO: major optimization of pixel-loops by using assembler (?) */ /* ************************************************************************** */ /* * * */ /* * Interlace tables * */ /* * * */ /* ************************************************************************** */ MNG_LOCAL mng_uint32 const interlace_row [7] = { 0, 0, 4, 0, 2, 0, 1 }; MNG_LOCAL mng_uint32 const interlace_rowskip [7] = { 8, 8, 8, 4, 4, 2, 2 }; MNG_LOCAL mng_uint32 const interlace_col [7] = { 0, 4, 0, 2, 0, 1, 0 }; MNG_LOCAL mng_uint32 const interlace_colskip [7] = { 8, 8, 4, 4, 2, 2, 1 }; MNG_LOCAL mng_uint32 const interlace_roundoff [7] = { 7, 7, 3, 3, 1, 1, 0 }; MNG_LOCAL mng_uint32 const interlace_divider [7] = { 3, 3, 2, 2, 1, 1, 0 }; /* ************************************************************************** */ /* * * */ /* * Alpha composing macros * */ /* * the code below is slightly modified from the libpng package * */ /* * the original was last optimized by Greg Roelofs & Mark Adler * */ /* * * */ /* ************************************************************************** */ #define MNG_COMPOSE8(RET,FG,ALPHA,BG) { \ mng_uint16 iH = (mng_uint16)((mng_uint16)(FG) * (mng_uint16)(ALPHA) \ + (mng_uint16)(BG)*(mng_uint16)(255 - \ (mng_uint16)(ALPHA)) + (mng_uint16)128); \ (RET) = (mng_uint8)((iH + (iH >> 8)) >> 8); } #define MNG_COMPOSE16(RET,FG,ALPHA,BG) { \ mng_uint32 iH = (mng_uint32)((mng_uint32)(FG) * (mng_uint32)(ALPHA) \ + (mng_uint32)(BG)*(mng_uint32)(65535L - \ (mng_uint32)(ALPHA)) + (mng_uint32)32768L); \ (RET) = (mng_uint16)((iH + (iH >> 16)) >> 16); } /* ************************************************************************** */ /* * * */ /* * Alpha blending macros * */ /* * this code is based on Adam Costello's "Note on Compositing" from the * */ /* * mng-list which gives the following formula: * */ /* * * */ /* * top pixel = (Rt, Gt, Bt, At) * */ /* * bottom pixel = (Rb, Gb, Bb, Ab) * */ /* * composite pixel = (Rc, Gc, Bc, Ac) * */ /* * * */ /* * all values in the range 0..1 * */ /* * * */ /* * Ac = 1 - (1 - At)(1 - Ab) * */ /* * s = At / Ac * */ /* * t = (1 - At) Ab / Ac * */ /* * Rc = s Rt + t Rb * */ /* * Gc = s Gt + t Gb * */ /* * Bc = s Bt + t Bb * */ /* * * */ /* * (I just hope I coded it correctly in integer arithmetic...) * */ /* * * */ /* ************************************************************************** */ #define MNG_BLEND8(RT, GT, BT, AT, RB, GB, BB, AB, RC, GC, BC, AC) { \ mng_uint32 S, T; \ (AC) = (mng_uint8)((mng_uint32)255 - \ ((((mng_uint32)255 - (mng_uint32)(AT)) * \ ((mng_uint32)255 - (mng_uint32)(AB)) ) >> 8)); \ S = (mng_uint32)(((mng_uint32)(AT) << 8) / \ (mng_uint32)(AC)); \ T = (mng_uint32)(((mng_uint32)255 - (mng_uint32)(AT)) * \ (mng_uint32)(AB) / (mng_uint32)(AC)); \ (RC) = (mng_uint8)((S * (mng_uint32)(RT) + \ T * (mng_uint32)(RB) + (mng_uint32)127) >> 8); \ (GC) = (mng_uint8)((S * (mng_uint32)(GT) + \ T * (mng_uint32)(GB) + (mng_uint32)127) >> 8); \ (BC) = (mng_uint8)((S * (mng_uint32)(BT) + \ T * (mng_uint32)(BB) + (mng_uint32)127) >> 8); } #define MNG_BLEND16(RT, GT, BT, AT, RB, GB, BB, AB, RC, GC, BC, AC) { \ mng_uint32 S, T; \ (AC) = (mng_uint16)((mng_uint32)65535 - \ ((((mng_uint32)65535 - (mng_uint32)(AT)) * \ ((mng_uint32)65535 - (mng_uint32)(AB)) ) >> 16)); \ S = (mng_uint32)(((mng_uint32)(AT) << 16) / \ (mng_uint32)(AC)); \ T = (mng_uint32)(((mng_uint32)65535 - (mng_uint32)(AT)) * \ (mng_uint32)(AB) / (mng_uint32)(AC)); \ (RC) = (mng_uint16)((S * (mng_uint32)(RT) + \ T * (mng_uint32)(RB) + (mng_uint32)32767) >> 16); \ (GC) = (mng_uint16)((S * (mng_uint32)(GT) + \ T * (mng_uint32)(GB) + (mng_uint32)32767) >> 16); \ (BC) = (mng_uint16)((S * (mng_uint32)(BT) + \ T * (mng_uint32)(BB) + (mng_uint32)32767) >> 16); } /* ************************************************************************** */ /* note a good optimizing compiler will optimize this */ #define DIV255B8(x) (mng_uint8)(((x) + 127) / 255) #define DIV255B16(x) (mng_uint16)(((x) + 32767) / 65535) /* ************************************************************************** */ /* * * */ /* * Progressive display check - checks to see if progressive display is * */ /* * in order & indicates so * */ /* * * */ /* * The routine is called after a call to one of the display_xxx routines * */ /* * if appropriate * */ /* * * */ /* * The refresh is warrented in the read_chunk routine (mng_read.c) * */ /* * and only during read&display processing, since there's not much point * */ /* * doing it from memory! * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_display_progressive_check (mng_datap pData) { if ((pData->bDoProgressive) && /* need progressive display? */ ((pData->eImagetype != mng_it_mng) || (pData->iDataheight > 300)) && (pData->iDestb - pData->iDestt > 50) && (!pData->pCurraniobj)) { mng_int32 iC = pData->iRow + pData->iDestt - pData->iSourcet; if (iC % 20 == 0) /* every 20th line */ pData->bNeedrefresh = MNG_TRUE; } return MNG_NOERROR; } /* ************************************************************************** */ /* * * */ /* * Display routines - convert rowdata (which is already color-corrected) * */ /* * to the output canvas, respecting the opacity information * */ /* * * */ /* ************************************************************************** */ MNG_LOCAL void check_update_region (mng_datap pData) { /* determine actual canvas row */ mng_int32 iRow = pData->iRow + pData->iDestt - pData->iSourcet; /* check for change in update-region */ if ((pData->iDestl < (mng_int32)pData->iUpdateleft) || (pData->iUpdateright == 0)) pData->iUpdateleft = pData->iDestl; if (pData->iDestr > (mng_int32)pData->iUpdateright) pData->iUpdateright = pData->iDestr; if ((iRow < (mng_int32)pData->iUpdatetop) || (pData->iUpdatebottom == 0)) pData->iUpdatetop = iRow; if (iRow+1 > (mng_int32)pData->iUpdatebottom) pData->iUpdatebottom = iRow+1; return; } /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_RGB8 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_rgb8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 3) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+4); pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); pScanline += (pData->iColinc * 3); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+4); } else { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint16)(*pScanline ); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*(pScanline+2)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *pScanline = (mng_uint8)(iFGr16 >> 8); *(pScanline+1) = (mng_uint8)(iFGg16 >> 8); *(pScanline+2) = (mng_uint8)(iFGb16 >> 8); } } pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); } else { /* do alpha composing */ MNG_COMPOSE8 (*pScanline, *pDataline, iA8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iA8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *(pDataline+2), iA8, *(pScanline+2)); } } pScanline += (pData->iColinc * 3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_rgb8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGg16; mng_uint16 iBGg16; mng_uint8 iA8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 3) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+iBps); *(pScanline+2) = *(pDataline+2*iBps); pScanline += (pData->iColinc * 3); pDataline += 4*iBps; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+4); } else { /* get the proper values */ int i; for (i=2; i >= 0; i--) { iFGg16 = mng_get_uint16 (pDataline+i+i); /* scale background up */ iBGg16 = (mng_uint16)(*(pScanline+i)); iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; /* now compose */ MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); /* and return the composed values */ *(pScanline+i) = (mng_uint8)(iFGg16 >> 8); } } } pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); } else { /* do alpha composing */ int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+i), iA8, *(pScanline+i)); } } } pScanline += (pData->iColinc * 3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_rgb8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 3) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); pScanline += (pData->iColinc * 3); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); } else { /* do alpha composing */ #ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+i), iA8, *(pScanline+i)); } #else MNG_COMPOSE8 (*pScanline, *pDataline, iA8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iA8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *(pDataline+2), iA8, *(pScanline+2)); #endif } } pScanline += (pData->iColinc * 3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_RGB8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_RGBA8 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_rgba8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+4); *(pScanline+3) = *(pDataline+6); pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); *(pScanline+3) = *(pDataline+3); pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*(pScanline+3)); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+4); *(pScanline+3) = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint16)(*pScanline ); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*(pScanline+2)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iFGa16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iFGa16, iBGb16); /* and return the composed values */ *pScanline = (mng_uint8)(iFGr16 >> 8); *(pScanline+1) = (mng_uint8)(iFGg16 >> 8); *(pScanline+2) = (mng_uint8)(iFGb16 >> 8); /* alpha remains fully opaque !!! */ } else { /* scale background up */ iBGr16 = (mng_uint16)(*pScanline ); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*(pScanline+2)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *pScanline = (mng_uint8)(iCr16 >> 8); *(pScanline+1) = (mng_uint8)(iCg16 >> 8); *(pScanline+2) = (mng_uint8)(iCb16 >> 8); *(pScanline+3) = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+3); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); *(pScanline+3) = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ MNG_COMPOSE8 (*pScanline, *pDataline, iFGa8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iFGa8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *(pDataline+2), iFGa8, *(pScanline+2)); /* alpha remains fully opaque !!! */ } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *pScanline, *(pScanline+1), *(pScanline+2), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCr8; *(pScanline+1) = iCg8; *(pScanline+2) = iCb8; *(pScanline+3) = iCa8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_rgba8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGg16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+iBps); *(pScanline+2) = *(pDataline+2*iBps); *(pScanline+3) = *(pDataline+3*iBps); pScanline += (pData->iColinc << 2); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*(pScanline+3)); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+4); *(pScanline+3) = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ int i; for (i=2; i >= 0; i--) { iFGg16 = mng_get_uint16 (pDataline+i+i); /* scale background up */ iBGg16 = (mng_uint16)(*(pScanline+i)); iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; /* now compose */ MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); /* and return the composed values */ *(pScanline+i) = (mng_uint8)(iFGg16 >> 8); /* alpha remains fully opaque !!! */ } } else { /* scale background up */ iBGr16 = (mng_uint16)(*pScanline ); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*(pScanline+2)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *pScanline = (mng_uint8)(iCr16 >> 8); *(pScanline+1) = (mng_uint8)(iCg16 >> 8); *(pScanline+2) = (mng_uint8)(iCb16 >> 8); *(pScanline+3) = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+3); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); *(pScanline+3) = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+i), iFGa8, *(pScanline+i)); } /* alpha remains fully opaque !!! */ } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *pScanline, *(pScanline+1), *(pScanline+2), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCr8; *(pScanline+1) = iCg8; *(pScanline+2) = iCb8; *(pScanline+3) = iCa8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_rgba8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); *(pScanline+3) = *(pDataline+3); pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+3); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); *(pScanline+3) = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ #ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+i), iFGa8, *(pScanline+i)); } #else MNG_COMPOSE8 (*pScanline, *pDataline, iFGa8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iFGa8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *(pDataline+2), iFGa8, *(pScanline+2)); #endif /* alpha remains fully opaque !!! */ } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *pScanline, *(pScanline+1), *(pScanline+2), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCr8; *(pScanline+1) = iCg8; *(pScanline+2) = iCb8; *(pScanline+3) = iCa8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_RGBA8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_RGBA8_PM #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_rgba8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8_PM, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ if ((s = pDataline[6]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = pDataline[0]; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[4]; pScanline[3] = 255; } else { #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV int i; for (i=2; i >= 0; i--) { pScanline[2-i] = DIV255B8(s * pDataline[4-i-i]); } #else pScanline[0] = DIV255B8(s * pDataline[0]); pScanline[1] = DIV255B8(s * pDataline[2]); pScanline[2] = DIV255B8(s * pDataline[4]); #endif pScanline[3] = (mng_uint8)s; } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { #ifdef MNG_BIGENDIAN_SUPPORTED *(mng_uint32*)pScanline = (*(mng_uint32*)pDataline) | 0x000000FF; #else pScanline[0] = pDataline[0]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[2]; pScanline[3] = 255; #endif } else { #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV int i; for (i=2; i >= 0; i--) { pScanline[2-i] = DIV255B8(s * pDataline[2-i]); } #else pScanline[0] = DIV255B8(s * pDataline[0]); pScanline[1] = DIV255B8(s * pDataline[1]); pScanline[2] = DIV255B8(s * pDataline[2]); #endif pScanline[3] = (mng_uint8)s; } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ if ((s = pDataline[6]) != 0) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if (s == 255) { /* plain copy it */ pScanline[0] = pDataline[0]; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[4]; pScanline[3] = 255; } else { /* now blend (premultiplied) */ t = 255 - s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[2-i] = DIV255B8(s * pDataline[4-i-i] + t * pScanline[2-i]); } } #else pScanline[0] = DIV255B8(s * pDataline[0] + t * pScanline[0]); pScanline[1] = DIV255B8(s * pDataline[2] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[4] + t * pScanline[2]); #endif pScanline[3] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[3]))); } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ #ifdef MNG_BIGENDIAN_SUPPORTED *(mng_uint32*)pScanline = (*(mng_uint32*)pDataline) | 0x000000FF; #else pScanline[0] = pDataline[0]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[2]; pScanline[3] = 255; #endif } else { /* now blend (premultiplied) */ t = 255 - s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[2-i] = DIV255B8(s * pDataline[2-i] + t * pScanline[2-i]); } } #else pScanline[0] = DIV255B8(s * pDataline[0] + t * pScanline[0]); pScanline[1] = DIV255B8(s * pDataline[1] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[2] + t * pScanline[2]); #endif pScanline[3] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[3]))); } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8_PM, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_rgba8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8_PM, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ if ((s = pDataline[6]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = pDataline[0]; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[4]; pScanline[3] = 255; } else { #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV int i; for (i=2; i >= 0; i--) { pScanline[2-i] = DIV255B8(s * pDataline[4-i-i]); } #else pScanline[0] = DIV255B8(s * pDataline[0]); pScanline[1] = DIV255B8(s * pDataline[2]); pScanline[2] = DIV255B8(s * pDataline[4]); #endif pScanline[3] = (mng_uint8)s; } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { #ifdef MNG_BIGENDIAN_SUPPORTED *(mng_uint32*)pScanline = (*(mng_uint32*)pDataline) | 0x000000FF; #else pScanline[0] = pDataline[0]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[2]; pScanline[3] = 255; #endif } else { #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV int i; for (i=2; i >= 0; i--) { pScanline[2-i] = DIV255B8(s * pDataline[2-i]); } #else pScanline[0] = DIV255B8(s * pDataline[0]); pScanline[1] = DIV255B8(s * pDataline[1]); pScanline[2] = DIV255B8(s * pDataline[2]); #endif pScanline[3] = (mng_uint8)s; } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ if ((s = pDataline[6]) != 0) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if (s == 255) { /* plain copy it */ pScanline[0] = pDataline[0]; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[4]; pScanline[3] = 255; } else { /* now blend (premultiplied) */ t = 255 - s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[2-i] = DIV255B8(s * pDataline[4-i-i] + t * pScanline[2-i]); } } #else pScanline[0] = DIV255B8(s * pDataline[0] + t * pScanline[0]); pScanline[1] = DIV255B8(s * pDataline[2] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[4] + t * pScanline[2]); #endif pScanline[3] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[3]))); } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ #ifdef MNG_BIGENDIAN_SUPPORTED *(mng_uint32*)pScanline = (*(mng_uint32*)pDataline) | 0x000000FF; #else pScanline[0] = pDataline[0]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[2]; pScanline[3] = 255; #endif } else { /* now blend (premultiplied) */ t = 255 - s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[2-i] = DIV255B8(s * pDataline[2-i] + t * pScanline[2-i]); } } #else pScanline[0] = DIV255B8(s * pDataline[0] + t * pScanline[0]); pScanline[1] = DIV255B8(s * pDataline[1] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[2] + t * pScanline[2]); #endif pScanline[3] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[3]))); } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8_PM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_rgba8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8_PM, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { #ifdef MNG_BIGENDIAN_SUPPORTED *(mng_uint32*)pScanline = (*(mng_uint32*)pDataline) | 0x000000FF; #else pScanline[0] = pDataline[0]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[2]; pScanline[3] = 255; #endif } else { #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV int i; for (i=2; i >= 0; i--) { pScanline[2-i] = DIV255B8(s * pDataline[2-i]); } #else pScanline[0] = DIV255B8(s * pDataline[0]); pScanline[1] = DIV255B8(s * pDataline[1]); pScanline[2] = DIV255B8(s * pDataline[2]); #endif pScanline[3] = (mng_uint8)s; } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ #ifdef MNG_BIGENDIAN_SUPPORTED *(mng_uint32*)pScanline = (*(mng_uint32*)pDataline) | 0x000000FF; #else pScanline[0] = pDataline[0]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[2]; pScanline[3] = 255; #endif } else { /* now blend (premultiplied) */ t = 255 - s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[2-i] = DIV255B8(s * pDataline[2-i] + t * pScanline[2-i]); } } #else pScanline[0] = DIV255B8(s * pDataline[0] + t * pScanline[0]); pScanline[1] = DIV255B8(s * pDataline[1] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[2] + t * pScanline[2]); #endif pScanline[3] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[3]))); } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8_PM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_RGBA8_PM */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_ARGB8 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_argb8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *(pDataline+6); *(pScanline+1) = *pDataline; *(pScanline+2) = *(pDataline+2); *(pScanline+3) = *(pDataline+4); pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *(pDataline+3); *(pScanline+1) = *pDataline; *(pScanline+2) = *(pDataline+1); *(pScanline+3) = *(pDataline+2); pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*pScanline); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *pScanline = *(pDataline+6); *(pScanline+1) = *pDataline; *(pScanline+2) = *(pDataline+2); *(pScanline+3) = *(pDataline+4); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint16)(*(pScanline+1)); iBGg16 = (mng_uint16)(*(pScanline+2)); iBGb16 = (mng_uint16)(*(pScanline+3)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iFGa16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iFGa16, iBGb16); /* and return the composed values */ /* alpha remains fully opaque !!! */ *(pScanline+1) = (mng_uint8)(iFGr16 >> 8); *(pScanline+2) = (mng_uint8)(iFGg16 >> 8); *(pScanline+3) = (mng_uint8)(iFGb16 >> 8); } else { /* scale background up */ iBGr16 = (mng_uint16)(*(pScanline+1)); iBGg16 = (mng_uint16)(*(pScanline+2)); iBGb16 = (mng_uint16)(*(pScanline+3)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *pScanline = (mng_uint8)(iCa16 >> 8); *(pScanline+1) = (mng_uint8)(iCr16 >> 8); *(pScanline+2) = (mng_uint8)(iCg16 >> 8); *(pScanline+3) = (mng_uint8)(iCb16 >> 8); } } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *pScanline; if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *(pDataline+3); *(pScanline+1) = *pDataline; *(pScanline+2) = *(pDataline+1); *(pScanline+3) = *(pDataline+2); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do simple alpha composing */ /* alpha itself remains fully opaque !!! */ } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *(pScanline+1), *(pScanline+2), *(pScanline+3), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCa8; *(pScanline+1) = iCr8; *(pScanline+2) = iCg8; *(pScanline+3) = iCb8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_argb8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGg16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *(pDataline+3*iBps); *(pScanline+1) = *pDataline; *(pScanline+2) = *(pDataline+iBps); *(pScanline+3) = *(pDataline+2*iBps); pScanline += (pData->iColinc << 2); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*pScanline); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *pScanline = *(pDataline+6); *(pScanline+1) = *pDataline; *(pScanline+2) = *(pDataline+2); *(pScanline+3) = *(pDataline+4); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ int i; for (i=2; i >= 0; i--) { iFGg16 = mng_get_uint16 (pDataline+i+i); /* scale background up */ iBGg16 = (mng_uint16)(*(pScanline+i+1)); iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; /* now compose */ MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); /* and return the composed values */ /* alpha remains fully opaque !!! */ *(pScanline+i+1) = (mng_uint8)(iFGg16 >> 8); } } else { /* scale background up */ iBGr16 = (mng_uint16)(*(pScanline+1)); iBGg16 = (mng_uint16)(*(pScanline+2)); iBGb16 = (mng_uint16)(*(pScanline+3)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *pScanline = (mng_uint8)(iCa16 >> 8); *(pScanline+1) = (mng_uint8)(iCr16 >> 8); *(pScanline+2) = (mng_uint8)(iCg16 >> 8); *(pScanline+3) = (mng_uint8)(iCb16 >> 8); } } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *pScanline; if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *(pDataline+3); *(pScanline+1) = *pDataline; *(pScanline+2) = *(pDataline+1); *(pScanline+3) = *(pDataline+2); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do simple alpha composing */ /* alpha itself remains fully opaque !!! */ int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i+1), *(pDataline+i), iFGa8, *(pScanline+i+1)); } } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *(pScanline+1), *(pScanline+2), *(pScanline+3), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCa8; *(pScanline+1) = iCr8; *(pScanline+2) = iCg8; *(pScanline+3) = iCb8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_argb8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *(pDataline+3); *(pScanline+1) = *pDataline; *(pScanline+2) = *(pDataline+1); *(pScanline+3) = *(pDataline+2); pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *pScanline; if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *(pDataline+3); *(pScanline+1) = *pDataline; *(pScanline+2) = *(pDataline+1); *(pScanline+3) = *(pDataline+2); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do simple alpha composing */ /* alpha itself remains fully opaque !!! */ #ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i+1), *(pDataline+i), iFGa8, *(pScanline+i+1)); } #else MNG_COMPOSE8 (*(pScanline+1), *pDataline, iFGa8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *(pDataline+1), iFGa8, *(pScanline+2)); MNG_COMPOSE8 (*(pScanline+3), *(pDataline+2), iFGa8, *(pScanline+3)); #endif } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *(pScanline+1), *(pScanline+2), *(pScanline+3), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCa8; *(pScanline+1) = iCr8; *(pScanline+2) = iCg8; *(pScanline+3) = iCb8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_ARGB8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_ARGB8_PM #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_argb8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8_PM, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ if ((s = pDataline[6]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = 255; pScanline[1] = pDataline[0]; pScanline[2] = pDataline[2]; pScanline[3] = pDataline[4]; } else { pScanline[0] = (mng_uint8)s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[3-i] = DIV255B8(s * pDataline[4-i-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[0]); pScanline[2] = DIV255B8(s * pDataline[2]); pScanline[3] = DIV255B8(s * pDataline[4]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = 255; pScanline[1] = pDataline[0]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[2]; } else { pScanline[0] = (mng_uint8)s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[3-i] = DIV255B8(s * pDataline[2-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[0]); pScanline[2] = DIV255B8(s * pDataline[1]); pScanline[3] = DIV255B8(s * pDataline[2]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ if ((s = pDataline[6]) != 0) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if (s == 255) { /* plain copy it */ pScanline[0] = 255; pScanline[1] = pDataline[0]; pScanline[2] = pDataline[2]; pScanline[3] = pDataline[4]; } else { /* now blend (premultiplied) */ t = 255 - s; pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0]))); #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[3-i] = DIV255B8(s * pDataline[4-i-i] + t * pScanline[3-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[0] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[2] + t * pScanline[2]); pScanline[3] = DIV255B8(s * pDataline[4] + t * pScanline[3]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ pScanline[0] = 255; pScanline[1] = pDataline[0]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[2]; } else { /* now blend (premultiplied) */ t = 255 - s; pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0]))); #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[3-i] = DIV255B8(s * pDataline[2-i] + t * pScanline[3-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[0] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[1] + t * pScanline[2]); pScanline[3] = DIV255B8(s * pDataline[2] + t * pScanline[3]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8_PM, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_argb8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8_PM, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ if ((s = pDataline[6]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = 255; pScanline[1] = pDataline[0]; pScanline[2] = pDataline[2]; pScanline[3] = pDataline[4]; } else { pScanline[0] = (mng_uint8)s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[3-i] = DIV255B8(s * pDataline[4-i-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[0]); pScanline[2] = DIV255B8(s * pDataline[2]); pScanline[3] = DIV255B8(s * pDataline[4]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = 255; pScanline[1] = pDataline[0]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[2]; } else { pScanline[0] = (mng_uint8)s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[3-i] = DIV255B8(s * pDataline[2-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[0]); pScanline[2] = DIV255B8(s * pDataline[1]); pScanline[3] = DIV255B8(s * pDataline[2]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ if ((s = pDataline[6]) != 0) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if (s == 255) { /* plain copy it */ pScanline[0] = 255; pScanline[1] = pDataline[0]; pScanline[2] = pDataline[2]; pScanline[3] = pDataline[4]; } else { /* now blend (premultiplied) */ t = 255 - s; pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0]))); #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[3-i] = DIV255B8(s * pDataline[4-i-i] + t * pScanline[3-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[0] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[2] + t * pScanline[2]); pScanline[3] = DIV255B8(s * pDataline[4] + t * pScanline[3]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ pScanline[0] = 255; pScanline[1] = pDataline[0]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[2]; } else { /* now blend (premultiplied) */ t = 255 - s; pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0]))); #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[3-i] = DIV255B8(s * pDataline[2-i] + t * pScanline[3-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[0] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[1] + t * pScanline[2]); pScanline[3] = DIV255B8(s * pDataline[2] + t * pScanline[3]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8_PM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_argb8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8_PM, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = 255; pScanline[1] = pDataline[0]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[2]; } else { pScanline[0] = (mng_uint8)s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[3-i] = DIV255B8(s * pDataline[2-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[0]); pScanline[2] = DIV255B8(s * pDataline[1]); pScanline[3] = DIV255B8(s * pDataline[2]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ pScanline[0] = 255; pScanline[1] = pDataline[0]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[2]; } else { /* now blend (premultiplied) */ t = 255 - s; pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0]))); #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[3-i] = DIV255B8(s * pDataline[2-i] + t * pScanline[3-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[0] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[1] + t * pScanline[2]); pScanline[3] = DIV255B8(s * pDataline[2] + t * pScanline[3]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8_PM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_ARGB8_PM */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_RGB8_A8 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_rgb8_a8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pAlphaline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8_A8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination rows */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); pAlphaline = (mng_uint8p)pData->fGetalphaline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination rows starting-point */ pScanline = pScanline + (pData->iCol * 3) + (pData->iDestl * 3); pAlphaline = pAlphaline + pData->iCol + pData->iDestl; pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+4); *pAlphaline = *(pDataline+6); pScanline += (pData->iColinc * 3); pAlphaline += pData->iColinc; pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); *pAlphaline = *(pDataline+3); pScanline += (pData->iColinc * 3); pAlphaline += pData->iColinc; pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*pAlphaline); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+4); *pAlphaline = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint16)(*pScanline ); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*(pScanline+2)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iFGa16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iFGa16, iBGb16); /* and return the composed values */ *pScanline = (mng_uint8)(iFGr16 >> 8); *(pScanline+1) = (mng_uint8)(iFGg16 >> 8); *(pScanline+2) = (mng_uint8)(iFGb16 >> 8); /* alpha remains fully opaque !!! */ } else { /* scale background up */ iBGr16 = (mng_uint16)(*pScanline ); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*(pScanline+2)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *pScanline = (mng_uint8)(iCr16 >> 8); *(pScanline+1) = (mng_uint8)(iCg16 >> 8); *(pScanline+2) = (mng_uint8)(iCb16 >> 8); *pAlphaline = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc * 3); pAlphaline += pData->iColinc; pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *pAlphaline; if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); *pAlphaline = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ MNG_COMPOSE8 (*pScanline, *pDataline, iFGa8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iFGa8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *(pDataline+2), iFGa8, *(pScanline+2)); /* alpha remains fully opaque !!! */ } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *pScanline, *(pScanline+1), *(pScanline+2), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCr8; *(pScanline+1) = iCg8; *(pScanline+2) = iCb8; *pAlphaline = iCa8; } } } pScanline += (pData->iColinc * 3); pAlphaline += pData->iColinc; pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8_A8, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_rgb8_a8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pAlphaline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGg16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8_A8, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination rows */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); pAlphaline = (mng_uint8p)pData->fGetalphaline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination rows starting-point */ pScanline = pScanline + (pData->iCol * 3) + (pData->iDestl * 3); pAlphaline = pAlphaline + pData->iCol + pData->iDestl; pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+iBps); *(pScanline+2) = *(pDataline+2*iBps); *pAlphaline = *(pDataline+3*iBps); pScanline += (pData->iColinc * 3); pAlphaline += pData->iColinc; pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*pAlphaline); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+4); *pAlphaline = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ int i; for (i=2; i >= 0; i--) { iFGg16 = mng_get_uint16 (pDataline+i+i); /* scale background up */ iBGg16 = (mng_uint16)(*(pScanline+i)); iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; /* now compose */ MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); /* and return the composed values */ *(pScanline+i) = (mng_uint8)(iFGg16 >> 8); /* alpha remains fully opaque !!! */ } } else { /* scale background up */ iBGr16 = (mng_uint16)(*pScanline ); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*(pScanline+2)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *pScanline = (mng_uint8)(iCr16 >> 8); *(pScanline+1) = (mng_uint8)(iCg16 >> 8); *(pScanline+2) = (mng_uint8)(iCb16 >> 8); *pAlphaline = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc * 3); pAlphaline += pData->iColinc; pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *pAlphaline; if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); *pAlphaline = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+i), iFGa8, *(pScanline+i)); } /* alpha remains fully opaque !!! */ } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *pScanline, *(pScanline+1), *(pScanline+2), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCr8; *(pScanline+1) = iCg8; *(pScanline+2) = iCb8; *pAlphaline = iCa8; } } } pScanline += (pData->iColinc * 3); pAlphaline += pData->iColinc; pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8_A8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_rgb8_a8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pAlphaline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8_A8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination rows */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); pAlphaline = (mng_uint8p)pData->fGetalphaline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination rows starting-point */ pScanline = pScanline + (pData->iCol * 3) + (pData->iDestl * 3); pAlphaline = pAlphaline + pData->iCol + pData->iDestl; pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); *pAlphaline = *(pDataline+3); pScanline += (pData->iColinc * 3); pAlphaline += pData->iColinc; pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *pAlphaline; if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *pDataline; *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *(pDataline+2); *pAlphaline = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ #ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+i), iFGa8, *(pScanline+i)); } #else MNG_COMPOSE8 (*pScanline, *pDataline, iFGa8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iFGa8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *(pDataline+2), iFGa8, *(pScanline+2)); #endif /* alpha remains fully opaque !!! */ } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *pScanline, *(pScanline+1), *(pScanline+2), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCr8; *(pScanline+1) = iCg8; *(pScanline+2) = iCb8; *pAlphaline = iCa8; } } } pScanline += (pData->iColinc * 3); pAlphaline += pData->iColinc; pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8_A8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_RGB8_A8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_BGR8 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_bgr8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 3) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + (pData->iSourcel / pData->iColinc) * 8; else pDataline = pDataline + (pData->iSourcel / pData->iColinc) * 4; if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *(pDataline+4); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *pDataline; pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; pScanline += (pData->iColinc * 3); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha value */ iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *pScanline = *(pDataline+4); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *pDataline; } else { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint16)(*(pScanline+2)); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*pScanline ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *pScanline = (mng_uint8)(iFGb16 >> 8); *(pScanline+1) = (mng_uint8)(iFGg16 >> 8); *(pScanline+2) = (mng_uint8)(iFGr16 >> 8); } } pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; } else { /* do alpha composing */ MNG_COMPOSE8 (*pScanline, *(pDataline+2), iA8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iA8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *pDataline, iA8, *(pScanline+2)); } } pScanline += (pData->iColinc * 3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR8, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_bgr8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGg16; mng_uint16 iBGg16; mng_uint8 iA8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR8, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 3) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *(pDataline+2*iBps); *(pScanline+1) = *(pDataline+iBps); *(pScanline+2) = *pDataline; pScanline += (pData->iColinc * 3); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha value */ iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *pScanline = *(pDataline+4); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *pDataline; } else { /* get the proper values */ int i; for (i=2; i >= 0; i--) { iFGg16 = mng_get_uint16 (pDataline+i+i); /* scale background up */ iBGg16 = (mng_uint16)(*(pScanline+2-i)); iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; /* now compose */ MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); /* and return the composed values */ *(pScanline+2-i) = (mng_uint8)(iFGg16 >> 8); } } } pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; } else { /* do alpha composing */ int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+2-i), iA8, *(pScanline+i)); } } } pScanline += (pData->iColinc * 3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_bgr8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 3) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + (pData->iSourcel / pData->iColinc) * 4; if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; pScanline += (pData->iColinc * 3); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; } else { /* do alpha composing */ #ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+2-i), iA8, *(pScanline+i)); } #else MNG_COMPOSE8 (*pScanline, *(pDataline+2), iA8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iA8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *pDataline, iA8, *(pScanline+2)); #endif } } pScanline += (pData->iColinc * 3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_BGR8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_BGRX8 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_bgrx8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRX8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + (pData->iSourcel / pData->iColinc) * 8; else pDataline = pDataline + (pData->iSourcel / pData->iColinc) * 4; if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *(pDataline+4); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *pDataline; *(pScanline+3) = 0xFF; /* filler byte */ pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; *(pScanline+3) = 0xFF; /* filler byte */ pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha value */ iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *pScanline = *(pDataline+4); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *pDataline; *(pScanline+3) = 0xFF; /* filler byte */ } else { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint16)(*(pScanline+2)); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*pScanline ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *pScanline = (mng_uint8)(iFGb16 >> 8); *(pScanline+1) = (mng_uint8)(iFGg16 >> 8); *(pScanline+2) = (mng_uint8)(iFGr16 >> 8); *(pScanline+3) = 0xFF; /* filler byte */ } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; *(pScanline+3) = 0xFF; /* filler byte */ } else { /* do alpha composing */ MNG_COMPOSE8 (*pScanline, *(pDataline+2), iA8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iA8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *pDataline, iA8, *(pScanline+2)); *(pScanline+3) = 0xFF; /* filler byte */ } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRX8, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_bgrx8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGg16; mng_uint16 iBGg16; mng_uint8 iA8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRX8, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *(pDataline+2*iBps); *(pScanline+1) = *(pDataline+iBps); *(pScanline+2) = *pDataline; *(pScanline+3) = 0xFF; /* filler byte */ pScanline += (pData->iColinc << 2); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha value */ iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *pScanline = *(pDataline+4); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *pDataline; *(pScanline+3) = 0xFF; /* filler byte */ } else { /* get the proper values */ int i; for (i=2; i >= 0; i--) { iFGg16 = mng_get_uint16 (pDataline+i+i); /* scale background up */ iBGg16 = (mng_uint16)(*(pScanline+2-i)); iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; /* now compose */ MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); /* and return the composed values */ *(pScanline+2-i) = (mng_uint8)(iFGg16 >> 8); } *(pScanline+3) = 0xFF; /* filler byte */ } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; *(pScanline+3) = 0xFF; /* filler byte */ } else { /* do alpha composing */ int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+2-i), iA8, *(pScanline+i)); } *(pScanline+3) = 0xFF; /* filler byte */ } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRX8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_bgrx8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRX8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + (pData->iSourcel / pData->iColinc) * 4; if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; *(pScanline+3) = 0xFF; /* filler byte */ pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; *(pScanline+3) = 0xFF; /* filler byte */ } else { /* do alpha composing */ #ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+2-i), iA8, *(pScanline+i)); } #else MNG_COMPOSE8 (*pScanline, *(pDataline+2), iA8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iA8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *pDataline, iA8, *(pScanline+2)); #endif *(pScanline+3) = 0xFF; /* filler byte */ } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRX8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_BGRX8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_BGRA8 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_bgra8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *(pDataline+4); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *pDataline; *(pScanline+3) = *(pDataline+6); pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; *(pScanline+3) = *(pDataline+3); pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*(pScanline+3)); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *pScanline = *(pDataline+4); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *pDataline; *(pScanline+3) = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint16)(*(pScanline+2)); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*pScanline ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iFGa16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iFGa16, iBGb16); /* and return the composed values */ *pScanline = (mng_uint8)(iFGb16 >> 8); *(pScanline+1) = (mng_uint8)(iFGg16 >> 8); *(pScanline+2) = (mng_uint8)(iFGr16 >> 8); /* alpha remains fully opaque !!! */ } else { /* scale background up */ iBGr16 = (mng_uint16)(*(pScanline+2)); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*pScanline ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *pScanline = (mng_uint8)(iCb16 >> 8); *(pScanline+1) = (mng_uint8)(iCg16 >> 8); *(pScanline+2) = (mng_uint8)(iCr16 >> 8); *(pScanline+3) = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+3); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; *(pScanline+3) = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ MNG_COMPOSE8 (*pScanline, *(pDataline+2), iFGa8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iFGa8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *pDataline, iFGa8, *(pScanline+2)); /* alpha remains fully opaque !!! */ } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *(pScanline+2), *(pScanline+1), *pScanline, iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCb8; *(pScanline+1) = iCg8; *(pScanline+2) = iCr8; *(pScanline+3) = iCa8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_bgra8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGg16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *(pDataline+2*iBps); *(pScanline+1) = *(pDataline+iBps); *(pScanline+2) = *pDataline; *(pScanline+3) = *(pDataline+3*iBps); pScanline += (pData->iColinc << 2); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*(pScanline+3)); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *pScanline = *(pDataline+4); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *pDataline; *(pScanline+3) = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ int i; for (i=2; i >= 0; i--) { iFGg16 = mng_get_uint16 (pDataline+i+i); /* scale background up */ iBGg16 = (mng_uint16)(*(pScanline+2-i)); iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; /* now compose */ MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); /* and return the composed values */ *(pScanline+2-i) = (mng_uint8)(iFGg16 >> 8); /* alpha remains fully opaque !!! */ } } else { /* scale background up */ iBGr16 = (mng_uint16)(*(pScanline+2)); iBGg16 = (mng_uint16)(*(pScanline+1)); iBGb16 = (mng_uint16)(*pScanline ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *pScanline = (mng_uint8)(iCb16 >> 8); *(pScanline+1) = (mng_uint8)(iCg16 >> 8); *(pScanline+2) = (mng_uint8)(iCr16 >> 8); *(pScanline+3) = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+3); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; *(pScanline+3) = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+2-i), iFGa8, *(pScanline+i)); } /* alpha remains fully opaque !!! */ } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *(pScanline+2), *(pScanline+1), *pScanline, iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCb8; *(pScanline+1) = iCg8; *(pScanline+2) = iCr8; *(pScanline+3) = iCa8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_bgra8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; *(pScanline+3) = *(pDataline+3); pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+3); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *(pDataline+2); *(pScanline+1) = *(pDataline+1); *(pScanline+2) = *pDataline; *(pScanline+3) = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ #ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i), *(pDataline+2-i), iFGa8, *(pScanline+i)); } #else MNG_COMPOSE8 (*pScanline, *(pDataline+2), iFGa8, *pScanline ); MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iFGa8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *pDataline, iFGa8, *(pScanline+2)); #endif /* alpha remains fully opaque !!! */ } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *(pScanline+2), *(pScanline+1), *pScanline, iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCb8; *(pScanline+1) = iCg8; *(pScanline+2) = iCr8; *(pScanline+3) = iCa8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_BGRA8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_BGRA8_PM #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_bgra8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8PM, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ if ((s = pDataline[6]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = pDataline[4]; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[0]; pScanline[3] = 255; } else { pScanline[0] = DIV255B8(s * pDataline[4]); pScanline[1] = DIV255B8(s * pDataline[2]); pScanline[2] = DIV255B8(s * pDataline[0]); pScanline[3] = (mng_uint8)s; } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = pDataline[2]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[0]; pScanline[3] = 255; } else { pScanline[0] = DIV255B8(s * pDataline[2]); pScanline[1] = DIV255B8(s * pDataline[1]); pScanline[2] = DIV255B8(s * pDataline[0]); pScanline[3] = (mng_uint8)s; } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ if ((s = pDataline[6]) != 0) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if (s == 255) { /* plain copy it */ pScanline[0] = pDataline[4]; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[0]; pScanline[3] = 255; } else { /* now blend (premultiplied) */ t = 255 - s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i] = DIV255B8(s * pDataline[4-i-i] + t * pScanline[i]); } } #else pScanline[0] = DIV255B8(s * pDataline[4] + t * pScanline[0]); pScanline[1] = DIV255B8(s * pDataline[2] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[0] + t * pScanline[2]); #endif pScanline[3] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[3]))); } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ pScanline[0] = pDataline[2]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[0]; pScanline[3] = 255; } else { /* now blend (premultiplied) */ t = 255 - s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i] = DIV255B8(s * pDataline[2-i] + t * pScanline[i]); } } #else pScanline[0] = DIV255B8(s * pDataline[2] + t * pScanline[0]); pScanline[1] = DIV255B8(s * pDataline[1] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[0] + t * pScanline[2]); #endif pScanline[3] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[3]))); } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8PM, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_bgra8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8PM, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ if ((s = pDataline[6]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = pDataline[4]; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[0]; pScanline[3] = 255; } else { #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV int i; for (i=2; i >= 0; i--) { pScanline[i] = DIV255B8(s * pDataline[4-i-i]); } #else pScanline[0] = DIV255B8(s * pDataline[4]); pScanline[1] = DIV255B8(s * pDataline[2]); pScanline[2] = DIV255B8(s * pDataline[0]); #endif pScanline[3] = (mng_uint8)s; } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = pDataline[2]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[0]; pScanline[3] = 255; } else { #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV int i; for (i=2; i >= 0; i--) { pScanline[i] = DIV255B8(s * pDataline[2-i]); } #else pScanline[0] = DIV255B8(s * pDataline[2]); pScanline[1] = DIV255B8(s * pDataline[1]); pScanline[2] = DIV255B8(s * pDataline[0]); #endif pScanline[3] = (mng_uint8)s; } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ if ((s = pDataline[6]) != 0) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if (s == 255) { /* plain copy it */ pScanline[0] = pDataline[4]; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[0]; pScanline[3] = 255; } else { /* now blend (premultiplied) */ t = 255 - s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i] = DIV255B8(s * pDataline[4-i-i] + t * pScanline[i]); } } #else pScanline[0] = DIV255B8(s * pDataline[4] + t * pScanline[0]); pScanline[1] = DIV255B8(s * pDataline[2] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[0] + t * pScanline[2]); #endif pScanline[3] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[3]))); } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ pScanline[0] = pDataline[2]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[0]; pScanline[3] = 255; } else { /* now blend (premultiplied) */ t = 255 - s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i] = DIV255B8(s * pDataline[2-i] + t * pScanline[i]); } } #else pScanline[0] = DIV255B8(s * pDataline[2] + t * pScanline[0]); pScanline[1] = DIV255B8(s * pDataline[1] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[0] + t * pScanline[2]); #endif pScanline[3] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[3]))); } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8PM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_bgra8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8PM, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = pDataline[2]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[0]; pScanline[3] = 255; } else { #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV int i; for (i=2; i >= 0; i--) { pScanline[i] = DIV255B8(s * pDataline[2-i]); } #else pScanline[0] = DIV255B8(s * pDataline[2]); pScanline[1] = DIV255B8(s * pDataline[1]); pScanline[2] = DIV255B8(s * pDataline[0]); #endif pScanline[3] = (mng_uint8)s; } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ pScanline[0] = pDataline[2]; pScanline[1] = pDataline[1]; pScanline[2] = pDataline[0]; pScanline[3] = 255; } else { /* now blend (premultiplied) */ t = 255 - s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i] = DIV255B8(s * pDataline[2-i] + t * pScanline[i]); } } #else pScanline[0] = DIV255B8(s * pDataline[2] + t * pScanline[0]); pScanline[1] = DIV255B8(s * pDataline[1] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[0] + t * pScanline[2]); #endif pScanline[3] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[3]))); } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA8PM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_BGRA8_PM */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_ABGR8 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_abgr8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *(pDataline+6); *(pScanline+1) = *(pDataline+4); *(pScanline+2) = *(pDataline+2); *(pScanline+3) = *pDataline; pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *(pDataline+3); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+1); *(pScanline+3) = *pDataline; pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*pScanline); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *pScanline = *(pDataline+6); *(pScanline+1) = *(pDataline+4); *(pScanline+2) = *(pDataline+2); *(pScanline+3) = *pDataline; } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint16)(*(pScanline+3)); iBGg16 = (mng_uint16)(*(pScanline+2)); iBGb16 = (mng_uint16)(*(pScanline+1)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iFGa16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iFGa16, iBGb16); /* and return the composed values */ /* alpha itself remains fully opaque !!! */ *(pScanline+1) = (mng_uint8)(iFGb16 >> 8); *(pScanline+2) = (mng_uint8)(iFGg16 >> 8); *(pScanline+3) = (mng_uint8)(iFGr16 >> 8); } else { /* scale background up */ iBGr16 = (mng_uint16)(*(pScanline+3)); iBGg16 = (mng_uint16)(*(pScanline+2)); iBGb16 = (mng_uint16)(*(pScanline+1)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *pScanline = (mng_uint8)(iCa16 >> 8); *(pScanline+1) = (mng_uint8)(iCb16 >> 8); *(pScanline+2) = (mng_uint8)(iCg16 >> 8); *(pScanline+3) = (mng_uint8)(iCr16 >> 8); } } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *pScanline; if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *(pDataline+3); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+1); *(pScanline+3) = *pDataline; } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do simple alpha composing */ /* alpha itself remains fully opaque !!! */ MNG_COMPOSE8 (*(pScanline+1), *(pDataline+2), iFGa8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *(pDataline+1), iFGa8, *(pScanline+2)); MNG_COMPOSE8 (*(pScanline+3), *pDataline, iFGa8, *(pScanline+3)); } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *(pScanline+3), *(pScanline+2), *(pScanline+1), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCa8; *(pScanline+1) = iCb8; *(pScanline+2) = iCg8; *(pScanline+3) = iCr8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_abgr8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGg16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *pScanline = *(pDataline+3*iBps); *(pScanline+1) = *(pDataline+2*iBps); *(pScanline+2) = *(pDataline+iBps); *(pScanline+3) = *pDataline; pScanline += (pData->iColinc << 2); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*pScanline); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *pScanline = *(pDataline+6); *(pScanline+1) = *(pDataline+4); *(pScanline+2) = *(pDataline+2); *(pScanline+3) = *pDataline; } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ int i; for (i=2; i >= 0; i--) { iFGg16 = mng_get_uint16 (pDataline+i+i); /* scale background up */ iBGg16 = (mng_uint16)(*(pScanline+3-i)); iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; /* now compose */ MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); /* and return the composed values */ /* alpha itself remains fully opaque !!! */ *(pScanline+3-i) = (mng_uint8)(iFGg16 >> 8); } } else { /* scale background up */ iBGr16 = (mng_uint16)(*(pScanline+3)); iBGg16 = (mng_uint16)(*(pScanline+2)); iBGb16 = (mng_uint16)(*(pScanline+1)); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *pScanline = (mng_uint8)(iCa16 >> 8); *(pScanline+1) = (mng_uint8)(iCb16 >> 8); *(pScanline+2) = (mng_uint8)(iCg16 >> 8); *(pScanline+3) = (mng_uint8)(iCr16 >> 8); } } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *pScanline; if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *(pDataline+3); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+1); *(pScanline+3) = *pDataline; } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do simple alpha composing */ /* alpha itself remains fully opaque !!! */ int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i+1), *(pDataline+2-i), iFGa8, *(pScanline+i+1)); } } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *(pScanline+3), *(pScanline+2), *(pScanline+1), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCa8; *(pScanline+1) = iCb8; *(pScanline+2) = iCg8; *(pScanline+3) = iCr8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_abgr8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *pScanline = *(pDataline+3); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+1); *(pScanline+3) = *pDataline; pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *pScanline; if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pScanline = *(pDataline+3); *(pScanline+1) = *(pDataline+2); *(pScanline+2) = *(pDataline+1); *(pScanline+3) = *pDataline; } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do simple alpha composing */ /* alpha itself remains fully opaque !!! */ #ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pScanline+i+1), *(pDataline+2-i), iFGa8, *(pScanline+i+1)); } #else MNG_COMPOSE8 (*(pScanline+1), *(pDataline+2), iFGa8, *(pScanline+1)); MNG_COMPOSE8 (*(pScanline+2), *(pDataline+1), iFGa8, *(pScanline+2)); MNG_COMPOSE8 (*(pScanline+3), *pDataline, iFGa8, *(pScanline+3)); #endif } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, *(pScanline+3), *(pScanline+2), *(pScanline+1), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = iCa8; *(pScanline+1) = iCb8; *(pScanline+2) = iCg8; *(pScanline+3) = iCr8; } } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_ABGR8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_ABGR8_PM #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_abgr8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8_PM, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ if ((s = pDataline[6]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = 255; pScanline[1] = pDataline[4]; pScanline[2] = pDataline[2]; pScanline[3] = pDataline[0]; } else { pScanline[0] = (mng_uint8)s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i+1] = DIV255B8(s * pDataline[4-i-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[4]); pScanline[2] = DIV255B8(s * pDataline[2]); pScanline[3] = DIV255B8(s * pDataline[0]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = 255; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[0]; } else { pScanline[0] = (mng_uint8)s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i+1] = DIV255B8(s * pDataline[2-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[2]); pScanline[2] = DIV255B8(s * pDataline[1]); pScanline[3] = DIV255B8(s * pDataline[0]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ if ((s = pDataline[6]) != 0) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if (s == 255) { /* plain copy it */ pScanline[0] = 255; pScanline[1] = pDataline[4]; pScanline[2] = pDataline[2]; pScanline[3] = pDataline[0]; } else { /* now blend (premultiplied) */ t = 255 - s; pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0]))); #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i+1] = DIV255B8(s * pDataline[4-i-i] + t * pScanline[i+1]); } } #else pScanline[1] = DIV255B8(s * pDataline[4] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[2] + t * pScanline[2]); pScanline[3] = DIV255B8(s * pDataline[0] + t * pScanline[3]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ pScanline[0] = 255; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[0]; } else { /* now blend (premultiplied) */ t = 255 - s; pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0]))); #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i+1] = DIV255B8(s * pDataline[2-i] + t * pScanline[i+1]); } } #else pScanline[1] = DIV255B8(s * pDataline[2] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[1] + t * pScanline[2]); pScanline[3] = DIV255B8(s * pDataline[0] + t * pScanline[3]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8_PM, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_abgr8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8_PM, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ if ((s = pDataline[6]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = 255; pScanline[1] = pDataline[4]; pScanline[2] = pDataline[2]; pScanline[3] = pDataline[0]; } else { pScanline[0] = (mng_uint8)s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i+1] = DIV255B8(s * pDataline[4-i-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[4]); pScanline[2] = DIV255B8(s * pDataline[2]); pScanline[3] = DIV255B8(s * pDataline[0]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = 255; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[0]; } else { pScanline[0] = (mng_uint8)s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i+1] = DIV255B8(s * pDataline[2-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[2]); pScanline[2] = DIV255B8(s * pDataline[1]); pScanline[3] = DIV255B8(s * pDataline[0]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ if ((s = pDataline[6]) != 0) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if (s == 255) { /* plain copy it */ pScanline[0] = 255; pScanline[1] = pDataline[4]; pScanline[2] = pDataline[2]; pScanline[3] = pDataline[0]; } else { /* now blend (premultiplied) */ t = 255 - s; pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0]))); #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i+1] = DIV255B8(s * pDataline[4-i-i] + t * pScanline[i+1]); } } #else pScanline[1] = DIV255B8(s * pDataline[4] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[2] + t * pScanline[2]); pScanline[3] = DIV255B8(s * pDataline[0] + t * pScanline[3]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ pScanline[0] = 255; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[0]; } else { /* now blend (premultiplied) */ t = 255 - s; pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0]))); #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i+1] = DIV255B8(s * pDataline[2-i] + t * pScanline[i+1]); } } #else pScanline[1] = DIV255B8(s * pDataline[2] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[1] + t * pScanline[2]); pScanline[3] = DIV255B8(s * pDataline[0] + t * pScanline[3]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8_PM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_abgr8_pm (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint32 s, t; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8_PM, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values and premultiply */ if ((s = pDataline[3]) == 0) *(mng_uint32*) pScanline = 0; /* set all components = 0 */ else { if (s == 255) { pScanline[0] = 255; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[0]; } else { pScanline[0] = (mng_uint8)s; #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i+1] = DIV255B8(s * pDataline[2-i]); } } #else pScanline[1] = DIV255B8(s * pDataline[2]); pScanline[2] = DIV255B8(s * pDataline[1]); pScanline[3] = DIV255B8(s * pDataline[0]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { if ((s = pDataline[3]) != 0) /* any opacity at all ? */ { /* fully opaque ? */ if (s == 255) { /* then simply copy the values */ pScanline[0] = 255; pScanline[1] = pDataline[2]; pScanline[2] = pDataline[1]; pScanline[3] = pDataline[0]; } else { /* now blend (premultiplied) */ t = 255 - s; pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0]))); #ifdef MNG_OPTIMIZE_FOOTPRINT_DIV { int i; for (i=2; i >= 0; i--) { pScanline[i+1] = DIV255B8(s * pDataline[2-i] + t * pScanline[i+1]); } } #else pScanline[1] = DIV255B8(s * pDataline[2] + t * pScanline[1]); pScanline[2] = DIV255B8(s * pDataline[1] + t * pScanline[2]); pScanline[3] = DIV255B8(s * pDataline[0] + t * pScanline[3]); #endif } } pScanline += (pData->iColinc << 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_ABGR8_PM, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_ABGR8_PM */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_BGR565 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_bgr565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ( (*(pDataline+2)>>5) ) ); *pScanline = (mng_uint8)( ( (*(pDataline+4)) >>3) | ( (*(pDataline+2)&0xFC) << 3) ); pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ( (*(pDataline+1)>>5 ) ) ); *pScanline = (mng_uint8)( ( *(pDataline+2) >>3 ) | ( (*(pDataline+1)&0xFC ) << 3) ); pScanline += (pData->iColinc * 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( (*(pDataline))&0xF8 ) | (mng_uint8)( (*(pDataline+2)>>5 ) ); *pScanline = (mng_uint8)( (*(pDataline+4)) >>3) | (mng_uint8)( (*(pDataline+2)&0xFC) << 3); } else { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGb16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGr16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iFGr16 >> 8)&0xF8 ) | ( (mng_uint8)(iFGg16>>8) >> 5) ); *pScanline = (mng_uint8) ( ( (iFGb16>>11) ) | (((mng_uint8)(iFGg16>>8)&0xFC) << 3) ); } } pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline+2))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | ( ((*pScanline) & 0xE0)>>3 ) ); iBlue = (mng_uint8) ( (*pScanline << 3) ); MNG_COMPOSE8 (iRed, *pDataline, iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iA8, iBlue ); *(pScanline+1) = (mng_uint8) ( ( iRed & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iBlue >> 3 ) | ( (iGreen & 0xFC) << 3) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_bgr565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint8 iA8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ( (*(pDataline+iBps)>>5) ) ); *pScanline = (mng_uint8)( ( (*(pDataline+2*iBps)) >>3) | ( (*(pDataline+iBps)&0xFC) << 3) ); pScanline += (pData->iColinc * 2); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( (*(pDataline))&0xF8 ) | (mng_uint8)( (*(pDataline+2)>>5 ) ); *pScanline = (mng_uint8)( (*(pDataline+4)) >>3) | (mng_uint8)( (*(pDataline+2)&0xFC) << 3); } else { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGb16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGr16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iFGr16 >> 8)&0xF8 ) | ( (mng_uint8)(iFGg16>>8) >> 5) ); *pScanline = (mng_uint8) ( ( (iFGb16>>11) ) | (((mng_uint8)(iFGg16>>8)&0xFC) << 3) ); } } pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline+2))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | ( ((*pScanline) & 0xE0)>>3 ) ); iBlue = (mng_uint8) ( (*pScanline << 3) ); MNG_COMPOSE8 (iRed, *pDataline, iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iA8, iBlue ); *(pScanline+1) = (mng_uint8) ( ( iRed & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iBlue >> 3 ) | ( (iGreen & 0xFC) << 3) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_bgr565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ( (*(pDataline+1)>>5 ) ) ); *pScanline = (mng_uint8)( ( *(pDataline+2) >>3 ) | ( (*(pDataline+1)&0xFC ) << 3) ); pScanline += (pData->iColinc * 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline+2))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | ( ((*pScanline) & 0xE0)>>3 ) ); iBlue = (mng_uint8) ( (*pScanline << 3) ); MNG_COMPOSE8 (iRed, *pDataline, iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iA8, iBlue ); *(pScanline+1) = (mng_uint8) ( ( iRed & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iBlue >> 3 ) | ( (iGreen & 0xFC) << 3) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_BGR565 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_RGB565 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_rgb565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB565, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( ( *(pDataline+4)) & 0xF8) | (*(pDataline+2) >> 5 ) ); *pScanline = (mng_uint8)( ( ( *(pDataline )) >> 3 ) | ((*(pDataline+2) & 0xFC) << 3) ); pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+2)) & 0xF8) | (*(pDataline+1) >> 5 ) ); *pScanline = (mng_uint8)( ( *(pDataline ) >> 3 ) | ((*(pDataline+1) & 0xFC) << 3) ); pScanline += (pData->iColinc * 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+4)) & 0xF8) | (*(pDataline+2)>>5) ); *pScanline = (mng_uint8)( ( (*(pDataline )) >> 3 ) | ((*(pDataline+2)&0xFC) << 3) ); } else { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint8)( *(pScanline+1) & 0xF8 ); iBGg16 = (mng_uint8)( (*(pScanline+1) << 5) | ( ((*pScanline) & 0xE0) >> 3 ) ); iBGb16 = (mng_uint8)( *(pScanline ) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8)( (mng_uint8)((iFGb16 >> 8) &0xF8) | ( (mng_uint8)(iFGg16 >> 8) >> 5 ) ); *pScanline = (mng_uint8)( (mng_uint8) (iFGr16 >>11) | ( ( (mng_uint8)(iFGg16 >> 8) & 0xFC) << 3) ); } } pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+2)) & 0xF8) | ( *(pDataline+1) >> 5 ) ); *pScanline = (mng_uint8)( ( (*(pDataline )) >> 3 ) | ( (*(pDataline+1) & 0xFC) << 3 ) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8)( *(pScanline+1) & 0xF8); iGreen = (mng_uint8)( ( *(pScanline+1) << 5 ) | ( ( (*pScanline)&0xE0)>>3 ) ); iBlue = (mng_uint8)( *(pScanline ) << 3 ); MNG_COMPOSE8 (iRed, *(pDataline+2), iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+0), iA8, iBlue ); *(pScanline+1) = (mng_uint8)( ( iRed & 0xF8) | ( iGreen >> 5 ) ); *pScanline = (mng_uint8)( (iBlue >> 3 ) | ( (iGreen & 0xFC) << 3) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB565, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_rgb565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint8 iA8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB565, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( ( *(pDataline+2*iBps)) & 0xF8) | (*(pDataline+iBps) >> 5 ) ); *pScanline = (mng_uint8)( ( ( *(pDataline )) >> 3 ) | ((*(pDataline+iBps) & 0xFC) << 3) ); pScanline += (pData->iColinc * 2); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+4)) & 0xF8) | (*(pDataline+2)>>5) ); *pScanline = (mng_uint8)( ( (*(pDataline )) >> 3 ) | ((*(pDataline+2)&0xFC) << 3) ); } else { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint8)( *(pScanline+1) & 0xF8 ); iBGg16 = (mng_uint8)( (*(pScanline+1) << 5) | ( ((*pScanline) & 0xE0) >> 3 ) ); iBGb16 = (mng_uint8)( *(pScanline ) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8)( (mng_uint8)((iFGb16 >> 8) &0xF8) | ( (mng_uint8)(iFGg16 >> 8) >> 5 ) ); *pScanline = (mng_uint8)( (mng_uint8) (iFGr16 >>11) | ( ( (mng_uint8)(iFGg16 >> 8) & 0xFC) << 3) ); } } pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+2)) & 0xF8) | ( *(pDataline+1) >> 5 ) ); *pScanline = (mng_uint8)( ( (*(pDataline )) >> 3 ) | ( (*(pDataline+1) & 0xFC) << 3 ) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8)( *(pScanline+1) & 0xF8); iGreen = (mng_uint8)( ( *(pScanline+1) << 5 ) | ( ( (*pScanline)&0xE0)>>3 ) ); iBlue = (mng_uint8)( *(pScanline ) << 3 ); MNG_COMPOSE8 (iRed, *(pDataline+2), iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+0), iA8, iBlue ); *(pScanline+1) = (mng_uint8)( ( iRed & 0xF8) | ( iGreen >> 5 ) ); *pScanline = (mng_uint8)( (iBlue >> 3 ) | ( (iGreen & 0xFC) << 3) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB565, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_rgb565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB565, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+2)) & 0xF8) | (*(pDataline+1) >> 5 ) ); *pScanline = (mng_uint8)( ( *(pDataline ) >> 3 ) | ((*(pDataline+1) & 0xFC) << 3) ); pScanline += (pData->iColinc * 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+2)) & 0xF8) | ( *(pDataline+1) >> 5 ) ); *pScanline = (mng_uint8)( ( (*(pDataline )) >> 3 ) | ( (*(pDataline+1) & 0xFC) << 3 ) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8)( *(pScanline+1) & 0xF8); iGreen = (mng_uint8)( ( *(pScanline+1) << 5 ) | ( ( (*pScanline)&0xE0)>>3 ) ); iBlue = (mng_uint8)( *(pScanline ) << 3 ); MNG_COMPOSE8 (iRed, *(pDataline+2), iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+0), iA8, iBlue ); *(pScanline+1) = (mng_uint8)( ( iRed & 0xF8) | ( iGreen >> 5 ) ); *pScanline = (mng_uint8)( (iBlue >> 3 ) | ( (iGreen & 0xFC) << 3) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB565, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_RGB565 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_BGRA565 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_bgra565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA565, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ( (*(pDataline+2)>>5) ) ); *pScanline = (mng_uint8)( ( (*(pDataline+4)) >>3) | ( (*(pDataline+2)&0xFC) << 3) ); *(pScanline+2) = *(pDataline+6); pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ( (*(pDataline+1)>>5 ) ) ); *pScanline = (mng_uint8)( ( *(pDataline+2) >>3 ) | ( (*(pDataline+1)&0xFC ) << 3) ); *(pScanline+2) = *(pDataline+3); pScanline += (pData->iColinc * 3); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*(pScanline+2)); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *(pScanline+1) = (mng_uint8)( (*(pDataline))&0xF8 ) | (mng_uint8)( (*(pDataline+2)>>5 ) ); *pScanline = (mng_uint8)( (*(pDataline+4)) >>3) | (mng_uint8)( (*(pDataline+2)&0xFC) << 3); *(pScanline+2) = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGb16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGr16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iFGa16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iFGa16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iFGr16 >> 8)&0xF8 ) | ( (mng_uint8)(iFGg16>>8) >> 5) ); *pScanline = (mng_uint8) ( ( (iFGb16>>11) ) | (((mng_uint8)(iFGg16>>8)&0xFC) << 3) ); } else { /* scale background up */ iBGb16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGr16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iCr16 >> 8) & 0xF8 ) | ( (mng_uint8)(iCg16 >> 8) >> 5 ) ); *pScanline = (mng_uint8) ( ( (iCb16 >> 11) ) | (((mng_uint8)(iCg16 >> 8) & 0xFC) << 3) ); *(pScanline+2) = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+2); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline+2))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); *(pScanline+2) = *(pDataline+3); } else { mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | ( ((*pScanline) & 0xE0)>>3 ) ); iBlue = (mng_uint8) ( (*pScanline << 3) ); if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ MNG_COMPOSE8 (iRed, *pDataline, iFGa8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iFGa8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iFGa8, iBlue ); /* alpha remains fully opaque !!! */ *(pScanline+1) = (mng_uint8) ( ( iRed & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iBlue >> 3 ) | ( (iGreen & 0xFC) << 3) ); } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, iRed , iGreen , iBlue , iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = (mng_uint8) ( ( iCb8 >> 3 ) | ( (iCg8 & 0xFC) << 3) ); *(pScanline+1) = (mng_uint8) ( ( iCr8 & 0xF8 ) | (iCg8>>5) ); *(pScanline+2) = (mng_uint8) iCa8; } } } pScanline += (pData->iColinc *3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA565, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_bgra565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA565, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ( (*(pDataline+iBps)>>5) ) ); *pScanline = (mng_uint8)( ( (*(pDataline+2*iBps)) >>3) | ( (*(pDataline+iBps)&0xFC) << 3) ); *(pScanline+2) = *(pDataline+3*iBps); pScanline += (pData->iColinc * 3); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*(pScanline+2)); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *(pScanline+1) = (mng_uint8)( (*(pDataline))&0xF8 ) | (mng_uint8)( (*(pDataline+2)>>5 ) ); *pScanline = (mng_uint8)( (*(pDataline+4)) >>3) | (mng_uint8)( (*(pDataline+2)&0xFC) << 3); *(pScanline+2) = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGb16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGr16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iFGa16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iFGa16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iFGr16 >> 8)&0xF8 ) | ( (mng_uint8)(iFGg16>>8) >> 5) ); *pScanline = (mng_uint8) ( ( (iFGb16>>11) ) | (((mng_uint8)(iFGg16>>8)&0xFC) << 3) ); } else { /* scale background up */ iBGb16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGr16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iCr16 >> 8) & 0xF8 ) | ( (mng_uint8)(iCg16 >> 8) >> 5 ) ); *pScanline = (mng_uint8) ( ( (iCb16 >> 11) ) | (((mng_uint8)(iCg16 >> 8) & 0xFC) << 3) ); *(pScanline+2) = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+2); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline+2))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); *(pScanline+2) = *(pDataline+3); } else { mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | ( ((*pScanline) & 0xE0)>>3 ) ); iBlue = (mng_uint8) ( (*pScanline << 3) ); if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ MNG_COMPOSE8 (iRed, *pDataline, iFGa8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iFGa8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iFGa8, iBlue ); /* alpha remains fully opaque !!! */ *(pScanline+1) = (mng_uint8) ( ( iRed & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iBlue >> 3 ) | ( (iGreen & 0xFC) << 3) ); } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, iRed , iGreen , iBlue , iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = (mng_uint8) ( ( iCb8 >> 3 ) | ( (iCg8 & 0xFC) << 3) ); *(pScanline+1) = (mng_uint8) ( ( iCr8 & 0xF8 ) | (iCg8>>5) ); *(pScanline+2) = (mng_uint8) iCa8; } } } pScanline += (pData->iColinc *3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA565, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_bgra565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA565, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ( (*(pDataline+1)>>5 ) ) ); *pScanline = (mng_uint8)( ( *(pDataline+2) >>3 ) | ( (*(pDataline+1)&0xFC ) << 3) ); *(pScanline+2) = *(pDataline+3); pScanline += (pData->iColinc * 3); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+2); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline+2))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); *(pScanline+2) = *(pDataline+3); } else { mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | ( ((*pScanline) & 0xE0)>>3 ) ); iBlue = (mng_uint8) ( (*pScanline << 3) ); if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ MNG_COMPOSE8 (iRed, *pDataline, iFGa8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iFGa8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iFGa8, iBlue ); /* alpha remains fully opaque !!! */ *(pScanline+1) = (mng_uint8) ( ( iRed & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iBlue >> 3 ) | ( (iGreen & 0xFC) << 3) ); } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, iRed , iGreen , iBlue , iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = (mng_uint8) ( ( iCb8 >> 3 ) | ( (iCg8 & 0xFC) << 3) ); *(pScanline+1) = (mng_uint8) ( ( iCr8 & 0xF8 ) | (iCg8>>5) ); *(pScanline+2) = (mng_uint8) iCa8; } } } pScanline += (pData->iColinc *3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGRA565, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_BGRA565 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_RGBA565 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_rgba565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA565, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+4))&0xF8 ) | ( (*(pDataline+2)>>5) ) ); *pScanline = (mng_uint8)( ( (*(pDataline)) >>3) | ( (*(pDataline+2)&0xFC) << 3) ); *(pScanline+2) = *(pDataline+6); pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+2))&0xF8 ) | ( (*(pDataline+1)>>5 ) ) ); *pScanline = (mng_uint8)( ( *(pDataline) >>3 ) | ( (*(pDataline+1)&0xFC ) << 3) ); *(pScanline+2) = *(pDataline+3); pScanline += (pData->iColinc * 3); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*(pScanline+2)); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *(pScanline+1) = (mng_uint8)( (*(pDataline+4))&0xF8 ) | (mng_uint8)( (*(pDataline+2)>>5 ) ); *pScanline = (mng_uint8)( (*(pDataline)) >>3) | (mng_uint8)( (*(pDataline+2)&0xFC) << 3); *(pScanline+2) = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGb16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iFGa16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iFGa16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iFGb16 >> 8)&0xF8 ) | ( (mng_uint8)(iFGg16>>8) >> 5) ); *pScanline = (mng_uint8) ( ( (iFGr16>>11) ) | (((mng_uint8)(iFGg16>>8)&0xFC) << 3) ); } else { /* scale background up */ iBGr16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGb16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iCb16 >> 8) & 0xF8 ) | ( (mng_uint8)(iCg16 >> 8) >> 5 ) ); *pScanline = (mng_uint8) ( ( (iCr16 >> 11) ) | (((mng_uint8)(iCg16 >> 8) & 0xFC) << 3) ); *(pScanline+2) = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+2); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+2)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); *(pScanline+2) = *(pDataline+3); } else { mng_uint8 iRed, iGreen, iBlue; iBlue = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | ( ((*pScanline) & 0xE0)>>3 ) ); iRed = (mng_uint8) ( (*pScanline << 3) ); if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ MNG_COMPOSE8 (iRed, *pDataline, iFGa8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iFGa8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iFGa8, iBlue ); /* alpha remains fully opaque !!! */ *(pScanline+1) = (mng_uint8) ( ( iBlue & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iRed >> 3 ) | ( (iGreen & 0xFC) << 3) ); } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, iRed , iGreen , iBlue , iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = (mng_uint8) ( ( iCr8 >> 3 ) | ( (iCg8 & 0xFC) << 3) ); *(pScanline+1) = (mng_uint8) ( ( iCb8 & 0xF8 ) | (iCg8>>5) ); *(pScanline+2) = (mng_uint8) iCa8; } } } pScanline += (pData->iColinc *3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA565, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_rgba565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint16 iFGa16, iBGa16, iCa16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16; mng_uint8 iCr8, iCg8, iCb8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA565, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+2*iBps))&0xF8 ) | ( (*(pDataline+iBps)>>5) ) ); *pScanline = (mng_uint8)( ( (*(pDataline)) >>3) | ( (*(pDataline+iBps)&0xFC) << 3) ); *(pScanline+2) = *(pDataline+3*iBps); pScanline += (pData->iColinc * 3); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* get alpha values */ iFGa16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*(pScanline+2)); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* plain copy it */ *(pScanline+1) = (mng_uint8)( (*(pDataline+4))&0xF8 ) | (mng_uint8)( (*(pDataline+2)>>5 ) ); *pScanline = (mng_uint8)( (*(pDataline)) >>3) | (mng_uint8)( (*(pDataline+2)&0xFC) << 3); *(pScanline+2) = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGb16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iFGa16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iFGa16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iFGa16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iFGb16 >> 8)&0xF8 ) | ( (mng_uint8)(iFGg16>>8) >> 5) ); *pScanline = (mng_uint8) ( ( (iFGr16>>11) ) | (((mng_uint8)(iFGg16>>8)&0xFC) << 3) ); } else { /* scale background up */ iBGr16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGb16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iCb16 >> 8) & 0xF8 ) | ( (mng_uint8)(iCg16 >> 8) >> 5 ) ); *pScanline = (mng_uint8) ( ( (iCr16 >> 11) ) | (((mng_uint8)(iCg16 >> 8) & 0xFC) << 3) ); *(pScanline+2) = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc * 3); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+2); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+2)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); *(pScanline+2) = *(pDataline+3); } else { mng_uint8 iRed, iGreen, iBlue; iBlue = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | ( ((*pScanline) & 0xE0)>>3 ) ); iRed = (mng_uint8) ( (*pScanline << 3) ); if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ MNG_COMPOSE8 (iRed, *pDataline, iFGa8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iFGa8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iFGa8, iBlue ); /* alpha remains fully opaque !!! */ *(pScanline+1) = (mng_uint8) ( ( iBlue & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iRed >> 3 ) | ( (iGreen & 0xFC) << 3) ); } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, iRed , iGreen , iBlue , iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = (mng_uint8) ( ( iCr8 >> 3 ) | ( (iCg8 & 0xFC) << 3) ); *(pScanline+1) = (mng_uint8) ( ( iCb8 & 0xF8 ) | (iCg8>>5) ); *(pScanline+2) = (mng_uint8) iCa8; } } } pScanline += (pData->iColinc *3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA565, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_rgba565 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iFGa8, iBGa8, iCa8; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA565, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl * 3); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+2))&0xF8 ) | ( (*(pDataline+1)>>5 ) ) ); *pScanline = (mng_uint8)( ( *(pDataline) >>3 ) | ( (*(pDataline+1)&0xFC ) << 3) ); *(pScanline+2) = *(pDataline+3); pScanline += (pData->iColinc * 3); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iFGa8 = *(pDataline+3); /* get alpha values */ iBGa8 = *(pScanline+2); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline+2)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); *(pScanline+2) = *(pDataline+3); } else { mng_uint8 iRed, iGreen, iBlue; iBlue = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | ( ((*pScanline) & 0xE0)>>3 ) ); iRed = (mng_uint8) ( (*pScanline << 3) ); if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ MNG_COMPOSE8 (iRed, *pDataline, iFGa8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iFGa8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iFGa8, iBlue ); /* alpha remains fully opaque !!! */ *(pScanline+1) = (mng_uint8) ( ( iBlue & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iRed >> 3 ) | ( (iGreen & 0xFC) << 3) ); } else { /* now blend */ MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iFGa8, iRed , iGreen , iBlue , iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pScanline = (mng_uint8) ( ( iCr8 >> 3 ) | ( (iCg8 & 0xFC) << 3) ); *(pScanline+1) = (mng_uint8) ( ( iCb8 & 0xF8 ) | (iCg8>>5) ); *(pScanline+2) = (mng_uint8) iCa8; } } } pScanline += (pData->iColinc *3); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA565, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_RGBA565 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_BGR565_A8 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_bgr565_a8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pAlphaline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16, iBGa16; mng_uint16 iCr16, iCg16, iCb16, iCa16; mng_uint8 iA8, iBGa8, iCa8; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565_A8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); pAlphaline = (mng_uint8p)pData->fGetalphaline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pAlphaline = pAlphaline + pData->iCol + pData->iDestl; pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ((*(pDataline+2)>>5) ) ); *pScanline = (mng_uint8)( ( (*(pDataline+4)) >>3) | ((*(pDataline+2)&0xFC) << 3) ); *pAlphaline = (mng_uint8)(*(pDataline+6)); pScanline += (pData->iColinc * 2); pAlphaline += pData->iColinc; pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ((*(pDataline+1)>>5 ) ) ); *pScanline = (mng_uint8)( ( *(pDataline+2) >>3 ) | ((*(pDataline+1)&0xFC ) << 3) ); *pAlphaline = (mng_uint8)(*(pDataline+3)); pScanline += (pData->iColinc * 2); pAlphaline += pData->iColinc; pDataline += 4; } } } else /* Not fully opaque */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*pAlphaline); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iA16) /* any opacity at all ? */ { if ((iA16 == 0xFFFF) || (iBGa16 == 0)) /* fully opaque or background fully transparent ? */ { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( (*(pDataline))&0xF8 ) | (mng_uint8)( (*(pDataline+2)>>5 ) ); *pScanline = (mng_uint8)( (*(pDataline+4)) >>3) | (mng_uint8)( (*(pDataline+2)&0xFC) << 3); *pAlphaline = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGb16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGr16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iFGr16 >> 8)&0xF8 ) | ( (mng_uint8)(iFGg16>>8) >> 5) ); *pScanline = (mng_uint8) ( ( (iFGb16>>11) ) | (((mng_uint8)(iFGg16>>8)&0xFC) << 3) ); *pAlphaline = (mng_uint8)(iA16>>8); } else /* background is not fully opaque */ { /* scale background up */ iBGb16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGr16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iA16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iCr16 >> 8)&0xF8 ) | ( (mng_uint8)(iCg16>>8) >> 5) ); *pScanline = (mng_uint8) ( ( (iCb16>>11) ) | (((mng_uint8)(iCg16>>8)&0xFC) << 3) ); *pAlphaline = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc * 2); pAlphaline += pData->iColinc; pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ iBGa8 = *pAlphaline; if (iA8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iA8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline+2))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); *pAlphaline = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | (((*pScanline) & 0xE0)>>3 ) ); iBlue = (mng_uint8) ( (*pScanline << 3) ); MNG_COMPOSE8 (iRed, *pDataline, iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iA8, iBlue ); *(pScanline+1) = (mng_uint8) ( ( iRed & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iBlue >> 3 ) | ((iGreen & 0xFC) << 3) ); *pAlphaline = iA8; } else /* background not fully opaque */ { MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iA8, *pScanline, *(pScanline+1), *(pScanline+2), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( iCr8 & 0xF8 ) | (iCg8>>5) ); *pScanline = (mng_uint8) ( ( iCb8 >> 3 ) | ((iCg8 & 0xFC) << 3) ); *pAlphaline = iCa8; } } } pScanline += (pData->iColinc * 2); pAlphaline += pData->iColinc; pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565_A8, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_bgr565_a8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pAlphaline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16, iBGa16; mng_uint16 iCr16, iCg16, iCb16, iCa16; mng_uint8 iA8, iBGa8, iCa8; mng_uint8 iCr8, iCg8, iCb8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565_A8, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); pAlphaline = (mng_uint8p)pData->fGetalphaline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pAlphaline = pAlphaline + pData->iCol + pData->iDestl; pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ((*(pDataline+iBps)>>5) ) ); *pScanline = (mng_uint8)( ( (*(pDataline+2*iBps)) >>3) | ((*(pDataline+iBps)&0xFC) << 3) ); *pAlphaline = (mng_uint8)(*(pDataline+6)); pScanline += (pData->iColinc * 2); pAlphaline += pData->iColinc; pDataline += 8; } } else /* Not fully opaque */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); iBGa16 = (mng_uint16)(*pAlphaline); iBGa16 = (mng_uint16)(iBGa16 << 8) | iBGa16; if (iA16) /* any opacity at all ? */ { if ((iA16 == 0xFFFF) || (iBGa16 == 0)) /* fully opaque or background fully transparent ? */ { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( (*(pDataline))&0xF8 ) | (mng_uint8)( (*(pDataline+2)>>5 ) ); *pScanline = (mng_uint8)( (*(pDataline+4)) >>3) | (mng_uint8)( (*(pDataline+2)&0xFC) << 3); *pAlphaline = *(pDataline+6); } else { if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGb16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGr16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iFGr16 >> 8)&0xF8 ) | ( (mng_uint8)(iFGg16>>8) >> 5) ); *pScanline = (mng_uint8) ( ( (iFGb16>>11) ) | (((mng_uint8)(iFGg16>>8)&0xFC) << 3) ); *pAlphaline = (mng_uint8)(iA16>>8); } else /* background is not fully opaque */ { /* scale background up */ iBGb16 = (mng_uint16)( (*(pScanline+1)) & 0xF8 ); iBGg16 = (mng_uint16)( (*(pScanline+1) << 5) | (((*(pScanline )) & 0xE0) >>3 ) ); iBGr16 = (mng_uint16)( (*(pScanline )) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* let's blend */ MNG_BLEND16 (mng_get_uint16 (pDataline ), mng_get_uint16 (pDataline+2), mng_get_uint16 (pDataline+4), iA16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( (iCr16 >> 8)&0xF8 ) | ( (mng_uint8)(iCg16>>8) >> 5) ); *pScanline = (mng_uint8) ( ( (iCb16>>11) ) | (((mng_uint8)(iCg16>>8)&0xFC) << 3) ); *pAlphaline = (mng_uint8)(iCa16 >> 8); } } } pScanline += (pData->iColinc * 2); pAlphaline += pData->iColinc; pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ iBGa8 = *pAlphaline; if (iA8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iA8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline+2))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); *pAlphaline = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | (((*pScanline) & 0xE0)>>3 ) ); iBlue = (mng_uint8) ( (*pScanline << 3) ); MNG_COMPOSE8 (iRed, *pDataline, iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iA8, iBlue ); *(pScanline+1) = (mng_uint8) ( ( iRed & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iBlue >> 3 ) | ((iGreen & 0xFC) << 3) ); *pAlphaline = iA8; } else /* background not fully opaque */ { MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iA8, *pScanline, *(pScanline+1), *(pScanline+2), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( iCr8 & 0xF8 ) | (iCg8>>5) ); *pScanline = (mng_uint8) ( ( iCb8 >> 3 ) | ((iCg8 & 0xFC) << 3) ); *pAlphaline = iCa8; } } } pScanline += (pData->iColinc * 2); pAlphaline += pData->iColinc; pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565_A8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_bgr565_a8 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pAlphaline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iA8, iBGa8, iCa8; mng_uint8 iCr8, iCg8, iCb8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565_A8, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); pAlphaline = (mng_uint8p)pData->fGetalphaline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pAlphaline = pAlphaline + pData->iCol + pData->iDestl; pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline))&0xF8 ) | ((*(pDataline+1)>>5 ) ) ); *pScanline = (mng_uint8)( ( *(pDataline+2) >>3 ) | ((*(pDataline+1)&0xFC ) << 3) ); *pAlphaline = (mng_uint8)(*(pDataline+3)); pScanline += (pData->iColinc * 2); pAlphaline += pData->iColinc; pDataline += 4; } } } else /* Not fully opaque */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ iBGa8 = *pAlphaline; if (iA8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iA8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ( (*(pDataline)) &0xF8 ) | (*(pDataline+1) >>5 ) ); *pScanline = (mng_uint8)( ( ((*(pDataline+2))>>3) ) | ((*(pDataline+1)&0xFC) << 3) ); *pAlphaline = *(pDataline+3); } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8) ( *(pScanline+1) & 0xF8 ); iGreen = (mng_uint8) ( (*(pScanline+1) << 5) | (((*pScanline) & 0xE0)>>3 ) ); iBlue = (mng_uint8) ( (*pScanline << 3) ); MNG_COMPOSE8 (iRed, *pDataline, iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iA8, iBlue ); *(pScanline+1) = (mng_uint8) ( ( iRed & 0xF8 ) | (iGreen>>5) ); *pScanline = (mng_uint8) ( ( iBlue >> 3 ) | ((iGreen & 0xFC) << 3) ); *pAlphaline = iA8; } else /* background not fully opaque */ { MNG_BLEND8 (*pDataline, *(pDataline+1), *(pDataline+2), iA8, *pScanline, *(pScanline+1), *(pScanline+2), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *(pScanline+1) = (mng_uint8) ( ( iCr8 & 0xF8 ) | (iCg8>>5) ); *pScanline = (mng_uint8) ( ( iCb8 >> 3 ) | ((iCg8 & 0xFC) << 3) ); *pAlphaline = iCa8; } } } pScanline += (pData->iColinc * 2); pAlphaline += pData->iColinc; pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR565_A8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_BGR565_A8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_RGB555 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_rgb555 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB555, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ((*(pDataline+4) & 0xF8) >> 1 ) | (*(pDataline+2) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline ) >> 3 ) | ((*(pDataline+2) & 0xF8) << 2 ) ); pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ((*(pDataline+2) & 0xF8) >> 1 ) | (*(pDataline+1) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline ) >> 3 ) | ((*(pDataline+1) & 0xF8) << 2 ) ); pScanline += (pData->iColinc * 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ((*(pDataline+4) & 0xF8) >> 1 ) | (*(pDataline+2) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline ) >> 3 ) | ((*(pDataline+2) & 0xF8) << 2 ) ); } else { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint8)( (*(pScanline+1) & 0xF8) << 1 ); iBGg16 = (mng_uint8)( (*(pScanline+1) << 6 ) | ( ((*pScanline) & 0xE0) >> 2 ) ); iBGb16 = (mng_uint8)( *(pScanline ) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8)( (mng_uint8)(((iFGb16 >> 8) & 0xF8) >> 1 ) | ( (mng_uint8)(iFGg16 >> 8) >> 6 ) ); *pScanline = (mng_uint8)( (mng_uint8) ((iFGr16 >>11) >> 3 ) | ( ( (mng_uint8)(iFGg16 >> 8) & 0xF8) << 2 ) ); } } pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ((*(pDataline+2) & 0xF8) >> 1 ) | (*(pDataline+1) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline ) >> 3 ) | ((*(pDataline+1) & 0xF8) << 2 ) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8)( (*(pScanline+1) & 0xF8) << 1 ); iGreen = (mng_uint8)( (*(pScanline+1) << 6 ) | ( ((*pScanline) & 0xE0) >> 2 ) ); iBlue = (mng_uint8)( *(pScanline ) << 3 ); MNG_COMPOSE8 (iRed, *(pDataline+2), iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+0), iA8, iBlue ); *(pScanline+1) = (mng_uint8)( ( (iRed & 0xF8) >> 1 ) | ( iGreen >> 6 ) ); *pScanline = (mng_uint8)( (iBlue >> 3 ) | ( (iGreen & 0xF8) << 2 ) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB555, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_rgb555 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint8 iA8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB555, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ((*(pDataline+2*iBps) & 0xF8) >> 1 ) | (*(pDataline+iBps) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline ) >> 3 ) | ((*(pDataline+iBps) & 0xF8) << 2 ) ); pScanline += (pData->iColinc * 2); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ((*(pDataline+4) & 0xF8) >> 1 ) | (*(pDataline+2) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline ) >> 3 ) | ((*(pDataline+2) & 0xF8) << 2 ) ); } else { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGr16 = (mng_uint8)( (*(pScanline+1) & 0xF8) << 1 ); iBGg16 = (mng_uint8)( (*(pScanline+1) << 6 ) | ( ((*pScanline) & 0xE0) >> 2 ) ); iBGb16 = (mng_uint8)( *(pScanline ) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8)( (mng_uint8)(((iFGb16 >> 8) & 0xF8) >> 1 ) | ( (mng_uint8)(iFGg16 >> 8) >> 6 ) ); *pScanline = (mng_uint8)( (mng_uint8) ((iFGr16 >>11) >> 3 ) | ( ( (mng_uint8)(iFGg16 >> 8) & 0xF8) << 2 ) ); } } pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ((*(pDataline+2) & 0xF8) >> 1 ) | (*(pDataline+1) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline ) >> 3 ) | ((*(pDataline+1) & 0xF8) << 2 ) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8)( (*(pScanline+1) & 0xF8) << 1 ); iGreen = (mng_uint8)( (*(pScanline+1) << 6 ) | ( ((*pScanline) & 0xE0) >> 2 ) ); iBlue = (mng_uint8)( *(pScanline ) << 3 ); MNG_COMPOSE8 (iRed, *(pDataline+2), iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+0), iA8, iBlue ); *(pScanline+1) = (mng_uint8)( ( (iRed & 0xF8) >> 1 ) | ( iGreen >> 6 ) ); *pScanline = (mng_uint8)( (iBlue >> 3 ) | ( (iGreen & 0xF8) << 2 ) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB555, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_rgb555 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB555, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ((*(pDataline+2) & 0xF8) >> 1 ) | (*(pDataline+1) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline ) >> 3 ) | ((*(pDataline+1) & 0xF8) << 2 ) ); pScanline += (pData->iColinc * 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ((*(pDataline+2) & 0xF8) >> 1 ) | (*(pDataline+1) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline ) >> 3 ) | ((*(pDataline+1) & 0xF8) << 2 ) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8)( (*(pScanline+1) & 0xF8) << 1 ); iGreen = (mng_uint8)( (*(pScanline+1) << 6 ) | ( ((*pScanline) & 0xE0) >> 2 ) ); iBlue = (mng_uint8)( *(pScanline ) << 3 ); MNG_COMPOSE8 (iRed, *(pDataline+2), iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+0), iA8, iBlue ); *(pScanline+1) = (mng_uint8)( ( (iRed & 0xF8) >> 1 ) | ( iGreen >> 6 ) ); *pScanline = (mng_uint8)( (iBlue >> 3 ) | ( (iGreen & 0xF8) << 2 ) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_RGB555, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_RGB555 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_BGR555 #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE mng_retcode mng_display_bgr555 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR555, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ if (pData->bIsRGBA16) /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3); else pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ((*(pDataline ) & 0xF8) >> 1 ) | (*(pDataline+2) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline+4) >> 3 ) | ((*(pDataline+2) & 0xF8) << 2 ) ); pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ((*(pDataline ) & 0xF8) >> 1 ) | (*(pDataline+1) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline+2) >> 3 ) | ((*(pDataline+1) & 0xF8) << 2 ) ); pScanline += (pData->iColinc * 2); pDataline += 4; } } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ((*(pDataline ) & 0xF8) >> 1 ) | (*(pDataline+2) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline+4) >> 3 ) | ((*(pDataline+2) & 0xF8) << 2 ) ); } else { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGb16 = (mng_uint8)( (*(pScanline+1) & 0xF8) << 1 ); iBGg16 = (mng_uint8)( (*(pScanline+1) << 6 ) | ( ((*pScanline) & 0xE0) >> 2 ) ); iBGr16 = (mng_uint8)( *(pScanline ) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8)( (mng_uint8)(((iFGr16 >> 8) & 0xF8) >> 1 ) | ( (mng_uint8)(iFGg16 >> 8) >> 6 ) ); *pScanline = (mng_uint8)( (mng_uint8) ((iFGb16 >>11) >> 3 ) | ( ( (mng_uint8)(iFGg16 >> 8) & 0xF8) << 2 ) ); } } pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ((*(pDataline ) & 0xF8) >> 1 ) | (*(pDataline+1) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline+2) >> 3 ) | ((*(pDataline+1) & 0xF8) << 2 ) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8)( (*(pScanline+1) & 0xF8) << 1 ); iGreen = (mng_uint8)( (*(pScanline+1) << 6 ) | ( ((*pScanline) & 0xE0) >> 2 ) ); iBlue = (mng_uint8)( *(pScanline ) << 3 ); MNG_COMPOSE8 (iRed, *(pDataline+0), iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iA8, iBlue ); *(pScanline+1) = (mng_uint8)( ( (iRed & 0xF8) >> 1 ) | ( iGreen >> 6 ) ); *pScanline = (mng_uint8)( (iBlue >> 3 ) | ( (iGreen & 0xF8) << 2 ) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR555, MNG_LC_END); #endif return MNG_NOERROR; } #else /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ mng_retcode mng_display_bgr555 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint16 iA16; mng_uint16 iFGr16, iFGg16, iFGb16; mng_uint16 iBGr16, iBGg16, iBGb16; mng_uint8 iA8; mng_uint8 iBps; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR555, MNG_LC_START); #endif iBps=(mng_uint8)(pData->bIsRGBA16 ? 2:1); /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ /* adjust source row starting-point */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << (iBps+1)); if (pData->bIsOpaque) /* forget about transparency ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ((*(pDataline ) & 0xF8) >> 1 ) | (*(pDataline+iBps) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline+2*iBps) >> 3 ) | ((*(pDataline+iBps) & 0xF8) << 2 ) ); pScanline += (pData->iColinc * 2); pDataline += 4*iBps; } } else { if (pData->bIsRGBA16) /* 16-bit input row ? */ { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA16 = mng_get_uint16 (pDataline+6); if (iA16) /* any opacity at all ? */ { if (iA16 == 0xFFFF) /* fully opaque ? */ { /* scale down by dropping the LSB */ *(pScanline+1) = (mng_uint8)( ((*(pDataline ) & 0xF8) >> 1 ) | (*(pDataline+2) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline+4) >> 3 ) | ((*(pDataline+2) & 0xF8) << 2 ) ); } else { /* get the proper values */ iFGr16 = mng_get_uint16 (pDataline ); iFGg16 = mng_get_uint16 (pDataline+2); iFGb16 = mng_get_uint16 (pDataline+4); /* scale background up */ iBGb16 = (mng_uint8)( (*(pScanline+1) & 0xF8) << 1 ); iBGg16 = (mng_uint8)( (*(pScanline+1) << 6 ) | ( ((*pScanline) & 0xE0) >> 2 ) ); iBGr16 = (mng_uint8)( *(pScanline ) << 3 ); iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16; iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16; iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16; /* now compose */ MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16); MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16); MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16); /* and return the composed values */ *(pScanline+1) = (mng_uint8)( (mng_uint8)(((iFGr16 >> 8) & 0xF8) >> 1 ) | ( (mng_uint8)(iFGg16 >> 8) >> 6 ) ); *pScanline = (mng_uint8)( (mng_uint8) ((iFGb16 >>11) >> 3 ) | ( ( (mng_uint8)(iFGg16 >> 8) & 0xF8) << 2 ) ); } } pScanline += (pData->iColinc * 2); pDataline += 8; } } else { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ((*(pDataline ) & 0xF8) >> 1 ) | (*(pDataline+1) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline+2) >> 3 ) | ((*(pDataline+1) & 0xF8) << 2 ) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8)( (*(pScanline+1) & 0xF8) << 1 ); iGreen = (mng_uint8)( (*(pScanline+1) << 6 ) | ( ((*pScanline) & 0xE0) >> 2 ) ); iBlue = (mng_uint8)( *(pScanline ) << 3 ); MNG_COMPOSE8 (iRed, *(pDataline+0), iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iA8, iBlue ); *(pScanline+1) = (mng_uint8)( ( (iRed & 0xF8) >> 1 ) | ( iGreen >> 6 ) ); *pScanline = (mng_uint8)( (iBlue >> 3 ) | ( (iGreen & 0xF8) << 2 ) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR555, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_OPTIMIZE_FOOTPRINT_COMPOSE */ #else /* MNG_NO_16BIT_SUPPORT */ mng_retcode mng_display_bgr555 (mng_datap pData) { mng_uint8p pScanline; mng_uint8p pDataline; mng_int32 iX; mng_uint8 iA8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR555, MNG_LC_START); #endif /* viewable row ? */ if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb)) { /* address destination row */ pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData), pData->iRow + pData->iDestt - pData->iSourcet); /* adjust destination row starting-point */ pScanline = pScanline + (pData->iCol * 2) + (pData->iDestl * 2); pDataline = pData->pRGBArow; /* address source row */ pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2); if (pData->bIsOpaque) /* forget about transparency ? */ { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { /* copy the values */ *(pScanline+1) = (mng_uint8)( ((*(pDataline ) & 0xF8) >> 1 ) | (*(pDataline+1) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline+2) >> 3 ) | ((*(pDataline+1) & 0xF8) << 2 ) ); pScanline += (pData->iColinc * 2); pDataline += 4; } } } else { { for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc) { iA8 = *(pDataline+3); /* get alpha value */ if (iA8) /* any opacity at all ? */ { if (iA8 == 0xFF) /* fully opaque ? */ { /* then simply copy the values */ *(pScanline+1) = (mng_uint8)( ((*(pDataline ) & 0xF8) >> 1 ) | (*(pDataline+1) >> 6 ) ); *pScanline = (mng_uint8)( ( *(pDataline+2) >> 3 ) | ((*(pDataline+1) & 0xF8) << 2 ) ); } else { /* do alpha composing */ mng_uint8 iRed, iGreen, iBlue; iRed = (mng_uint8)( (*(pScanline+1) & 0xF8) << 1 ); iGreen = (mng_uint8)( (*(pScanline+1) << 6 ) | ( ((*pScanline) & 0xE0) >> 2 ) ); iBlue = (mng_uint8)( *(pScanline ) << 3 ); MNG_COMPOSE8 (iRed, *(pDataline+0), iA8, iRed ); MNG_COMPOSE8 (iGreen, *(pDataline+1), iA8, iGreen ); MNG_COMPOSE8 (iBlue, *(pDataline+2), iA8, iBlue ); *(pScanline+1) = (mng_uint8)( ( (iRed & 0xF8) >> 1 ) | ( iGreen >> 6 ) ); *pScanline = (mng_uint8)( (iBlue >> 3 ) | ( (iGreen & 0xF8) << 2 ) ); } } pScanline += (pData->iColinc * 2); pDataline += 4; } } } } check_update_region (pData); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_BGR555, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_SKIPCANVAS_BGR555 */ #ifndef MNG_SKIPCHUNK_BACK /* ************************************************************************** */ /* * * */ /* * Background restore routines - restore the background with info from * */ /* * the BACK and/or bKGD chunk or the app's background canvas * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_restore_bkgd_backimage (mng_datap pData) { /* save some stuff */ mng_uint8p pRGBArow = pData->pRGBArow; mng_int32 iRow = pData->iRow; mng_int32 iRowsamples = pData->iRowsamples; mng_retcode iRetcode; /* work variables */ mng_uint8p pTemp; mng_uint8p pWork = pRGBArow; mng_uint32 iX; mng_int32 iZ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BACKIMAGE, MNG_LC_START); #endif /* determine row to retrieve */ pData->iRow = pData->iDestt + iRow + pData->iBackimgoffsy; while (pData->iRow >= (mng_int32)pData->iBackimgheight) pData->iRow -= (mng_int32)pData->iBackimgheight; /* set width to that of background image */ pData->iRowsamples = pData->iBackimgwidth; /* retrieve into alternate buffer ! */ pData->pRGBArow = pData->pPrevrow; /* get it then */ iRetcode = ((mng_retrieverow)pData->fRetrieverow) (pData); if (iRetcode) /* on error; bail out */ return iRetcode; /* we got the full row; but now need to paste it into the proper location */ iX = pData->iDestl - pData->iBackimgoffsx; while (iX >= pData->iBackimgwidth) iX -= pData->iBackimgwidth; #ifndef MNG_NO_16BIT_SUPPORT if (pData->bIsRGBA16) /* 16-bit buffer ? */ { pTemp = pData->pPrevrow + (iX << 3); for (iZ = (pData->iDestr - pData->iDestl); iZ > 0; iZ--) { MNG_COPY (pWork, pTemp, 8); pWork += 8; pTemp += 8; iX++; /* reached end of bkgd-image line ? */ if (iX >= pData->iBackimgwidth) { iX = 0; pTemp = pData->pPrevrow; } } } else #endif { pTemp = pData->pPrevrow + (iX << 2); for (iZ = (pData->iDestr - pData->iDestl); iZ > 0; iZ--) { MNG_COPY (pWork, pTemp, 4); pWork += 4; pTemp += 4; iX++; /* reached end of bkgd-image line ? */ if (iX >= pData->iBackimgwidth) { iX = 0; pTemp = pData->pPrevrow; } } } pData->pRGBArow = pRGBArow; /* restore original values */ pData->iRow = iRow; pData->iRowsamples = iRowsamples; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BACKIMAGE, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_restore_bkgd_backcolor (mng_datap pData) { mng_int32 iX; mng_uint32p pWork32 = (mng_uint32p)pData->pRGBArow; mng_uint32 iWrite; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BACKCOLOR, MNG_LC_START); #endif #ifdef MNG_BIGENDIAN_SUPPORTED /* fast way for big endian */ iWrite = (((mng_uint8)(pData->iBACKred >> 8)) << 24) | (((mng_uint8)(pData->iBACKgreen >> 8)) << 16) | (((mng_uint8)(pData->iBACKblue >> 8)) << 8) | ( 0xFF ); #elif defined(MNG_LITTLEENDIAN_SUPPORTED) /* fast way for little endian */ iWrite = ( 0xFF << 24) | (((mng_uint8)(pData->iBACKblue >> 8)) << 16) | (((mng_uint8)(pData->iBACKgreen >> 8)) << 8) | (((mng_uint8)(pData->iBACKred >> 8)) ); #else /* generic way, works on all platforms */ /* put the data in memory in the correct order */ { mng_uint8 aBytes[4]; aBytes[0] = (mng_uint8)(pData->iBACKred >> 8); aBytes[1] = (mng_uint8)(pData->iBACKgreen >> 8); aBytes[2] = (mng_uint8)(pData->iBACKblue >> 8); aBytes[3] = 0xFF; /* load that data into a register */ iWrite = *(mng_uint32*) aBytes; } #endif /* ok; drop the background-color in there */ for (iX = (pData->iSourcer - pData->iSourcel); iX > 0; iX--) *pWork32++ = iWrite; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BACKCOLOR, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_bKGD mng_retcode mng_restore_bkgd_bkgd (mng_datap pData) { mng_int32 iX; mng_uint8p pWork = pData->pRGBArow; mng_imagep pImage = (mng_imagep)pData->pCurrentobj; mng_imagedatap pBuf = pImage->pImgbuf; mng_uint8 iRed = 0; mng_uint8 iGreen = 0; mng_uint8 iBlue = 0; mng_uint32p pWork32 = (mng_uint32p)pWork; mng_uint32 iWrite; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BKGD, MNG_LC_START); #endif switch (pBuf->iColortype) { case 0 : ; /* gray types */ case 4 : { mng_uint8 iGray; #ifndef MNG_NO_16BIT_SUPPORT if (pBuf->iBitdepth > 8) iGray = (mng_uint8)(pBuf->iBKGDgray >> 8); else #endif { #ifndef MNG_NO_1_2_4BIT_SUPPORT /* LBR scaling */ mng_uint8 multiplier[]={0,255,85,0,17,0,0,0,1}; iGray = (mng_uint8)(multiplier[pBuf->iBitdepth] * pBuf->iBKGDgray); #else iGray = (mng_uint8)pBuf->iBKGDgray; #endif } iRed = iGray; iGreen = iGray; iBlue = iGray; break; } case 3 : { /* indexed type */ iRed = pBuf->aPLTEentries [pBuf->iBKGDindex].iRed; iGreen = pBuf->aPLTEentries [pBuf->iBKGDindex].iGreen; iBlue = pBuf->aPLTEentries [pBuf->iBKGDindex].iBlue; break; } case 2 : ; /* rgb types */ case 6 : { #ifndef MNG_NO_16BIT_SUPPORT if (pBuf->iBitdepth > 8) { iRed = (mng_uint8)(pBuf->iBKGDred >> 8); iGreen = (mng_uint8)(pBuf->iBKGDgreen >> 8); iBlue = (mng_uint8)(pBuf->iBKGDblue >> 8); } else #endif { iRed = (mng_uint8)(pBuf->iBKGDred ); iGreen = (mng_uint8)(pBuf->iBKGDgreen); iBlue = (mng_uint8)(pBuf->iBKGDblue ); } break; } } #ifdef MNG_BIGENDIAN_SUPPORTED /* fast way for big endian */ iWrite = (iRed << 24) | (iGreen << 16) | (iBlue << 8); #elif defined(MNG_LITTLEENDIAN_SUPPORTED) /* fast way for little endian */ iWrite = (iBlue << 16) | (iGreen << 8) | (iRed ); #else /* generic way, works on all platforms */ /* put the data in memory in the correct order */ { mng_uint8 aBytes[4]; aBytes[0] = (mng_uint8)(iRed); aBytes[1] = (mng_uint8)(iGreen); aBytes[2] = (mng_uint8)(iBlue); aBytes[3] = 0x00; /* load that data into a register */ iWrite = *(mng_uint32*) aBytes; } #endif /* ok; drop it in there */ for (iX = (pData->iSourcer - pData->iSourcel); iX > 0; iX--) *pWork32++ = iWrite; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BKGD, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_restore_bkgd_bgcolor (mng_datap pData) { mng_int32 iX; mng_uint32p pWork32 = (mng_uint32p)pData->pRGBArow; mng_uint32 iWrite; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BGCOLOR, MNG_LC_START); #endif #ifdef MNG_BIGENDIAN_SUPPORTED /* fast way for big endian */ iWrite = (((mng_uint8)(pData->iBGred >> 8)) << 24) | (((mng_uint8)(pData->iBGgreen >> 8)) << 16) | (((mng_uint8)(pData->iBGblue >> 8)) << 8); #elif defined(MNG_LITTLEENDIAN_SUPPORTED) /* fast way for little endian */ iWrite = (((mng_uint8)(pData->iBGblue >> 8)) << 16) | (((mng_uint8)(pData->iBGgreen >> 8)) << 8) | (((mng_uint8)(pData->iBGred >> 8)) ); #else /* generic way, works on all platforms */ /* put the data in memory in the correct order */ { mng_uint8 aBytes[4]; aBytes[0] = (mng_uint8)(pData->iBGred >> 8); aBytes[1] = (mng_uint8)(pData->iBGgreen >> 8); aBytes[2] = (mng_uint8)(pData->iBGblue >> 8); aBytes[3] = 0x00; /* load that data into a register */ iWrite = *(mng_uint32*) aBytes; } #endif /* ok; drop the background-color in there */ for (iX = (pData->iSourcer - pData->iSourcel); iX > 0; iX--) *pWork32++ = iWrite; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BGCOLOR, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_RGB8 mng_retcode mng_restore_bkgd_rgb8 (mng_datap pData) { mng_int32 iX; mng_uint8p pBkgd; mng_uint8p pWork = pData->pRGBArow; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_RGB8, MNG_LC_START); #endif if (pData->fGetbkgdline) /* can we access the background ? */ { /* point to the right pixel then */ pBkgd = (mng_uint8p)pData->fGetbkgdline ((mng_handle)pData, pData->iRow + pData->iDestt) + (3 * pData->iDestl); for (iX = (pData->iSourcer - pData->iSourcel); iX > 0; iX--) { *pWork = *pBkgd; /* ok; copy the pixel */ *(pWork+1) = *(pBkgd+1); *(pWork+2) = *(pBkgd+2); *(pWork+3) = 0x00; /* transparant for alpha-canvasses */ pWork += 4; pBkgd += 3; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SKIPCANVAS_RGB8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_BGR8 mng_retcode mng_restore_bkgd_bgr8 (mng_datap pData) { mng_int32 iX; mng_uint8p pBkgd; mng_uint8p pWork = pData->pRGBArow; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BGR8, MNG_LC_START); #endif if (pData->fGetbkgdline) /* can we access the background ? */ { /* point to the right pixel then */ pBkgd = (mng_uint8p)pData->fGetbkgdline ((mng_handle)pData, pData->iRow + pData->iDestt) + (3 * pData->iDestl); for (iX = (pData->iSourcer - pData->iSourcel); iX > 0; iX--) { *pWork = *(pBkgd+2); /* ok; copy the pixel */ *(pWork+1) = *(pBkgd+1); *(pWork+2) = *pBkgd; *(pWork+3) = 0x00; /* transparant for alpha-canvasses */ pWork += 4; pBkgd += 3; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BGR8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SKIPCANVAS_BGR8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_BGRX8 mng_retcode mng_restore_bkgd_bgrx8 (mng_datap pData) { mng_int32 iX; mng_uint8p pBkgd; mng_uint8p pWork = pData->pRGBArow; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BGRX8, MNG_LC_START); #endif if (pData->fGetbkgdline) /* can we access the background ? */ { /* point to the right pixel then */ pBkgd = (mng_uint8p)pData->fGetbkgdline ((mng_handle)pData, pData->iRow + pData->iDestt) + (3 * pData->iDestl); for (iX = (pData->iSourcer - pData->iSourcel); iX > 0; iX--) { *pWork = *(pBkgd+2); /* ok; copy the pixel */ *(pWork+1) = *(pBkgd+1); *(pWork+2) = *pBkgd; *(pWork+3) = 0x00; /* transparant for alpha-canvasses */ pWork += 4; pBkgd += 4; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BGRX8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SKIPCANVAS_BGRX8 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_BGR565 mng_retcode mng_restore_bkgd_bgr565 (mng_datap pData) { mng_int32 iX; mng_uint8p pBkgd; mng_uint8p pWork = pData->pRGBArow; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BGR565, MNG_LC_START); #endif if (pData->fGetbkgdline) /* can we access the background ? */ { /* point to the right pixel then */ pBkgd = (mng_uint8p)pData->fGetbkgdline ((mng_handle)pData, pData->iRow + pData->iDestt) + (3 * pData->iDestl); for (iX = (pData->iSourcer - pData->iSourcel); iX > 0; iX--) { *pWork = (mng_uint8)( *(pBkgd+1) & 0xF8); /* ok; copy the pixel */ *(pWork+1) = (mng_uint8)( (*(pBkgd+1) << 5 ) | ( ((*pBkgd)&0xE0)>>3 ) ); *(pWork+2) = (mng_uint8)( *(pBkgd) << 3 ); *(pWork+3) = 0x00; /* transparant for alpha-canvasses */ pWork += 4; pBkgd += 2; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_BGR565, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SKIPCANVAS_BGR565 */ /* ************************************************************************** */ #ifndef MNG_SKIPCANVAS_RGB565 mng_retcode mng_restore_bkgd_rgb565 (mng_datap pData) { mng_int32 iX; mng_uint8p pBkgd; mng_uint8p pWork = pData->pRGBArow; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_RGB565, MNG_LC_START); #endif if (pData->fGetbkgdline) /* can we access the background ? */ { /* point to the right pixel then */ pBkgd = (mng_uint8p)pData->fGetbkgdline ((mng_handle)pData, pData->iRow + pData->iDestt) + (3 * pData->iDestl); for (iX = (pData->iSourcer - pData->iSourcel); iX > 0; iX--) { *pWork = (mng_uint8)( *(pBkgd)&0xF8); /* ok; copy the pixel */ *(pWork+1) = (mng_uint8)( (*(pBkgd+1) << 5) | ( ((*pBkgd)&0xE0)>>3 ) ); *(pWork+2) = (mng_uint8)( *(pBkgd+1) << 3); *(pWork+3) = 0x00; /* transparant for alpha-canvasses */ pWork += 4; pBkgd += 2; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESTORE_RGB565, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_SKIPCANVAS_RBB565 */ /* ************************************************************************** */ /* * * */ /* * Row retrieval routines - retrieve processed & uncompressed row-data * */ /* * from the current "object" * */ /* * * */ /* ************************************************************************** */ /* TODO: a serious optimization is to retrieve only those pixels that will actually be displayed; this would require changes in the "display_image" routine (in mng_display.c) & all the "retrieve_xxx" routines below & the "display_xxx" routines above !!!!! NOTE that "correct_xxx" routines would not require modification */ mng_retcode mng_retrieve_g8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pRetrieveobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iG; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_G8, MNG_LC_START); #endif pRGBArow = pData->pRGBArow; /* temporary work pointers */ pWorkrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize); if (pBuf->bHasTRNS) /* tRNS in buffer ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iG = *pWorkrow; /* get the gray-value */ /* is it transparent ? */ if ((mng_uint16)iG == pBuf->iTRNSgray) { *pRGBArow = 0x00; /* nuttin to display */ *(pRGBArow+1) = 0x00; *(pRGBArow+2) = 0x00; *(pRGBArow+3) = 0x00; } else { #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_uint8 multiplier[]={0,255,85,0,17,0,0,0,1}; iG = (mng_uint8)(iG * multiplier[pBuf->iBitdepth]); #endif *pRGBArow = iG; /* put in intermediate row */ *(pRGBArow+1) = iG; *(pRGBArow+2) = iG; *(pRGBArow+3) = 0xFF; } pWorkrow++; /* next pixel */ pRGBArow += 4; } } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_uint8 multiplier[]={0,255,85,0,17,0,0,0,1}; /* LBR scaling */ iG = (mng_uint8)(multiplier[pBuf->iBitdepth] * *pWorkrow); #else iG = *pWorkrow; /* get the gray-value */ #endif *pRGBArow = iG; /* put in intermediate row */ *(pRGBArow+1) = iG; *(pRGBArow+2) = iG; *(pRGBArow+3) = 0xFF; pWorkrow++; /* next pixel */ pRGBArow += 4; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_G8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_retrieve_g16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pRetrieveobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint16 iG; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_G16, MNG_LC_START); #endif /* temporary work pointers */ pRGBArow = pData->pRGBArow; pWorkrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize); if (pBuf->bHasTRNS) /* tRNS in buffer ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iG = mng_get_uint16 (pWorkrow); /* get the gray-value */ /* is it transparent ? */ if (iG == pBuf->iTRNSgray) { /* nuttin to display */ mng_put_uint16 (pRGBArow, 0x0000); mng_put_uint16 (pRGBArow+2, 0x0000); mng_put_uint16 (pRGBArow+4, 0x0000); mng_put_uint16 (pRGBArow+6, 0x0000); } else { /* put in intermediate row */ mng_put_uint16 (pRGBArow, iG); mng_put_uint16 (pRGBArow+2, iG); mng_put_uint16 (pRGBArow+4, iG); mng_put_uint16 (pRGBArow+6, 0xFFFF); } pWorkrow += 2; /* next pixel */ pRGBArow += 8; } } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iG = mng_get_uint16 (pWorkrow); /* get the gray-value */ mng_put_uint16 (pRGBArow, iG); /* and put in intermediate row */ mng_put_uint16 (pRGBArow+2, iG); mng_put_uint16 (pRGBArow+4, iG); mng_put_uint16 (pRGBArow+6, 0xFFFF); pWorkrow += 2; /* next pixel */ pRGBArow += 8; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_G16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_retrieve_rgb8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pRetrieveobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iR, iG, iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_RGB8, MNG_LC_START); #endif pRGBArow = pData->pRGBArow; /* temporary work pointers */ pWorkrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize); if (pBuf->bHasTRNS) /* tRNS in buffer ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iR = *pWorkrow; /* get the rgb-values */ iG = *(pWorkrow+1); iB = *(pWorkrow+2); /* is it transparent ? */ if (((mng_uint16)iR == pBuf->iTRNSred ) && ((mng_uint16)iG == pBuf->iTRNSgreen) && ((mng_uint16)iB == pBuf->iTRNSblue ) ) { *pRGBArow = 0x00; /* nothing to display */ *(pRGBArow+1) = 0x00; *(pRGBArow+2) = 0x00; *(pRGBArow+3) = 0x00; } else { *pRGBArow = iR; /* put in intermediate row */ *(pRGBArow+1) = iG; *(pRGBArow+2) = iB; *(pRGBArow+3) = 0xFF; } pWorkrow += 3; /* next pixel */ pRGBArow += 4; } } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pRGBArow = *pWorkrow; /* just copy the pixel */ *(pRGBArow+1) = *(pWorkrow+1); *(pRGBArow+2) = *(pWorkrow+2); *(pRGBArow+3) = 0xFF; pWorkrow += 3; /* next pixel */ pRGBArow += 4; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_retrieve_rgb16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pRetrieveobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint16 iR, iG, iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_RGB16, MNG_LC_START); #endif /* temporary work pointers */ pRGBArow = pData->pRGBArow; pWorkrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize); if (pBuf->bHasTRNS) /* tRNS in buffer ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iR = mng_get_uint16 (pWorkrow); /* get the rgb-values */ iG = mng_get_uint16 (pWorkrow+2); iB = mng_get_uint16 (pWorkrow+4); /* is it transparent ? */ if ((iR == pBuf->iTRNSred ) && (iG == pBuf->iTRNSgreen) && (iB == pBuf->iTRNSblue ) ) { /* nothing to display */ mng_put_uint16 (pRGBArow, 0x0000); mng_put_uint16 (pRGBArow+2, 0x0000); mng_put_uint16 (pRGBArow+4, 0x0000); mng_put_uint16 (pRGBArow+6, 0x0000); } else { /* put in intermediate row */ mng_put_uint16 (pRGBArow, iR); mng_put_uint16 (pRGBArow+2, iG); mng_put_uint16 (pRGBArow+4, iB); mng_put_uint16 (pRGBArow+6, 0xFFFF); } pWorkrow += 6; /* next pixel */ pRGBArow += 8; } } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* just copy the pixel */ mng_put_uint16 (pRGBArow, mng_get_uint16 (pWorkrow )); mng_put_uint16 (pRGBArow+2, mng_get_uint16 (pWorkrow+2)); mng_put_uint16 (pRGBArow+4, mng_get_uint16 (pWorkrow+4)); mng_put_uint16 (pRGBArow+6, 0xFFFF); pWorkrow += 6; /* next pixel */ pRGBArow += 8; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_RGB16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_retrieve_idx8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pRetrieveobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iQ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_IDX8, MNG_LC_START); #endif pRGBArow = pData->pRGBArow; /* temporary work pointers */ pWorkrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize); if (pBuf->bHasTRNS) /* tRNS in buffer ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iQ = *pWorkrow; /* get the index */ /* is it valid ? */ if ((mng_uint32)iQ < pBuf->iPLTEcount) { /* put in intermediate row */ *pRGBArow = pBuf->aPLTEentries [iQ].iRed; *(pRGBArow+1) = pBuf->aPLTEentries [iQ].iGreen; *(pRGBArow+2) = pBuf->aPLTEentries [iQ].iBlue; /* transparency for this index ? */ if ((mng_uint32)iQ < pBuf->iTRNScount) *(pRGBArow+3) = pBuf->aTRNSentries [iQ]; else *(pRGBArow+3) = 0xFF; } else MNG_ERROR (pData, MNG_PLTEINDEXERROR); pWorkrow++; /* next pixel */ pRGBArow += 4; } } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iQ = *pWorkrow; /* get the index */ /* is it valid ? */ if ((mng_uint32)iQ < pBuf->iPLTEcount) { /* put in intermediate row */ *pRGBArow = pBuf->aPLTEentries [iQ].iRed; *(pRGBArow+1) = pBuf->aPLTEentries [iQ].iGreen; *(pRGBArow+2) = pBuf->aPLTEentries [iQ].iBlue; *(pRGBArow+3) = 0xFF; } else MNG_ERROR (pData, MNG_PLTEINDEXERROR); pWorkrow++; /* next pixel */ pRGBArow += 4; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_IDX8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_retrieve_ga8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pRetrieveobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iG; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_GA8, MNG_LC_START); #endif pRGBArow = pData->pRGBArow; /* temporary work pointers */ pWorkrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iG = *pWorkrow; /* get the gray-value */ *pRGBArow = iG; /* put in intermediate row */ *(pRGBArow+1) = iG; *(pRGBArow+2) = iG; *(pRGBArow+3) = *(pWorkrow+1); pWorkrow += 2; /* next pixel */ pRGBArow += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_GA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_retrieve_ga16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pRetrieveobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint16 iG; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_GA16, MNG_LC_START); #endif /* temporary work pointers */ pRGBArow = pData->pRGBArow; pWorkrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iG = mng_get_uint16 (pWorkrow); /* get the gray-value */ mng_put_uint16 (pRGBArow, iG); /* and put in intermediate row */ mng_put_uint16 (pRGBArow+2, iG); mng_put_uint16 (pRGBArow+4, iG); mng_put_uint16 (pRGBArow+6, mng_get_uint16 (pWorkrow+2)); pWorkrow += 4; /* next pixel */ pRGBArow += 8; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_GA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_retrieve_rgba8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pRetrieveobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pRGBArow; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_RGBA8, MNG_LC_START); #endif pRGBArow = pData->pRGBArow; /* temporary work pointers */ pWorkrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize); /* can't be easier than this ! */ MNG_COPY (pRGBArow, pWorkrow, pBuf->iRowsize); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_retrieve_rgba16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pRetrieveobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pRGBArow; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_RGBA16, MNG_LC_START); #endif /* temporary work pointers */ pRGBArow = pData->pRGBArow; pWorkrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize); /* can't be easier than this ! */ MNG_COPY (pRGBArow, pWorkrow, pBuf->iRowsize); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RETRIEVE_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ /* * * */ /* * Row storage routines - store processed & uncompressed row-data * */ /* * into the current "object" * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_store_g1 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_G1, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* is it white ? */ *pOutrow = 0x01; /* white */ else *pOutrow = 0x00; /* black */ pOutrow += pData->iColinc; /* next pixel */ iM >>= 1; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_G1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_store_g2 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; mng_uint8 iQ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_G2, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } iQ = (mng_uint8)((iB & iM) >> iS); /* get the gray level */ *pOutrow = iQ; /* put in object buffer */ pOutrow += pData->iColinc; /* next pixel */ iM >>= 2; iS -= 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_G2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_store_g4 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; mng_uint8 iQ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_G4, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } iQ = (mng_uint8)((iB & iM) >> iS); /* get the gray level */ *pOutrow = iQ; /* put in object buffer */ pOutrow += pData->iColinc; /* next pixel */ iM >>= 4; iS -= 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_G4, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_store_g8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_G8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ pOutrow += pData->iColinc; /* next pixel */ pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_G8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_g16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_G16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* copy into object buffer */ mng_put_uint16 (pOutrow, mng_get_uint16 (pWorkrow)); pOutrow += (pData->iColinc << 1); /* next pixel */ pWorkrow += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_G16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_store_rgb8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_RGB8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* copy the RGB bytes */ *(pOutrow+1) = *(pWorkrow+1); *(pOutrow+2) = *(pWorkrow+2); pWorkrow += 3; /* next pixel */ pOutrow += (pData->iColinc * 3); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_rgb16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_RGB16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { MNG_COPY (pOutrow, pWorkrow, 6); /* copy the RGB bytes */ pWorkrow += 6; /* next pixel */ pOutrow += (pData->iColinc * 6); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_RGB16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_store_idx1 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_IDX1, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* store the index */ *pOutrow = 0x01; else *pOutrow = 0x00; pOutrow += pData->iColinc; /* next pixel */ iM >>= 1; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_IDX1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_store_idx2 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_IDX2, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } /* store the index */ *pOutrow = (mng_uint8)((iB & iM) >> iS); pOutrow += pData->iColinc; /* next pixel */ iM >>= 2; iS -= 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_IDX2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_store_idx4 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_IDX4, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* store the index */ *pOutrow = (mng_uint8)((iB & iM) >> iS); pOutrow += pData->iColinc; /* next pixel */ iM >>= 4; iS -= 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_IDX4, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_store_idx8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_IDX8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ pOutrow += pData->iColinc; /* next pixel */ pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_IDX8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_store_ga8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_GA8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* copy the GA bytes */ *(pOutrow+1) = *(pWorkrow+1); pWorkrow += 2; /* next pixel */ pOutrow += (pData->iColinc << 1); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_GA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_ga16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_GA16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { MNG_COPY (pOutrow, pWorkrow, 4); /* copy the GA bytes */ pWorkrow += 4; /* next pixel */ pOutrow += (pData->iColinc << 2); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_GA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_store_rgba8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_RGBA8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* copy the RGBA bytes */ *(pOutrow+1) = *(pWorkrow+1); *(pOutrow+2) = *(pWorkrow+2); *(pOutrow+3) = *(pWorkrow+3); pWorkrow += 4; /* next pixel */ pOutrow += (pData->iColinc << 2); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_rgba16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_RGBA16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { MNG_COPY (pOutrow, pWorkrow, 8); /* copy the RGBA bytes */ pWorkrow += 8; /* next pixel */ pOutrow += (pData->iColinc << 3); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ /* * * */ /* * Row storage routines (JPEG) - store processed & uncompressed row-data * */ /* * into the current "object" * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG /* ************************************************************************** */ mng_retcode mng_store_jpeg_g8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8, MNG_LC_START); #endif pWorkrow = pData->pJPEGrow; /* temporary work pointers */ pOutrow = pBuf->pImgdata + (pData->iJPEGrow * pBuf->iRowsize); /* easy as pie ... */ MNG_COPY (pOutrow, pWorkrow, pData->iRowsamples); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8, MNG_LC_END); #endif return mng_next_jpeg_row (pData); /* we've got one more row of gray-samples */ } /* ************************************************************************** */ mng_retcode mng_store_jpeg_rgb8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; #if RGB_PIXELSIZE != 3 mng_int32 iX; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8, MNG_LC_START); #endif pWorkrow = pData->pJPEGrow; /* temporary work pointers */ pOutrow = pBuf->pImgdata + (pData->iJPEGrow * pBuf->iRowsize); #if RGB_PIXELSIZE == 3 /* easy as pie ... */ MNG_COPY (pOutrow, pWorkrow, pData->iRowsamples * 3); #else #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* copy pixel into object buffer */ *(pOutrow+1) = *(pWorkrow+1); *(pOutrow+2) = *(pWorkrow+2); pOutrow += 3; /* next pixel */ pWorkrow += RGB_PIXELSIZE; } #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8, MNG_LC_END); #endif return mng_next_jpeg_row (pData); /* we've got one more row of rgb-samples */ } /* ************************************************************************** */ mng_retcode mng_store_jpeg_ga8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_GA8, MNG_LC_START); #endif pWorkrow = pData->pJPEGrow; /* temporary work pointers */ pOutrow = pBuf->pImgdata + (pData->iJPEGrow * pBuf->iRowsize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* copy into object buffer */ pOutrow += 2; /* next pixel */ pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_GA8, MNG_LC_END); #endif return mng_next_jpeg_row (pData); /* we've got one more row of gray-samples */ } /* ************************************************************************** */ mng_retcode mng_store_jpeg_rgba8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGBA8, MNG_LC_START); #endif pWorkrow = pData->pJPEGrow; /* temporary work pointers */ pOutrow = pBuf->pImgdata + (pData->iJPEGrow * pBuf->iRowsize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* copy pixel into object buffer */ *(pOutrow+1) = *(pWorkrow+1); *(pOutrow+2) = *(pWorkrow+2); pOutrow += 4; /* next pixel */ pWorkrow += RGB_PIXELSIZE; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGBA8, MNG_LC_END); #endif return mng_next_jpeg_row (pData); /* we've got one more row of rgb-samples */ } /* ************************************************************************** */ mng_retcode mng_store_jpeg_g8_alpha (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_ALPHA, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pJPEGrow2; pOutrow = pBuf->pImgdata + (pData->iJPEGalpharow * pBuf->iRowsize) + 1; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ pOutrow += 2; /* next pixel */ pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_ALPHA, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } /* ************************************************************************** */ mng_retcode mng_store_jpeg_rgb8_alpha (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_ALPHA, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pJPEGrow2; pOutrow = pBuf->pImgdata + (pData->iJPEGalpharow * pBuf->iRowsize) + 3; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ pOutrow += 4; /* next pixel */ pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_ALPHA, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_store_jpeg_g8_a1 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_A1, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 1; iM = 0; /* start at pixel 0 */ iB = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* is it opaque ? */ *pOutrow = 0xFF; /* opaque */ else *pOutrow = 0x00; /* transparent */ pOutrow += 2; /* next pixel */ iM >>= 1; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_A1, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } /* ************************************************************************** */ mng_retcode mng_store_jpeg_g8_a2 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_A2, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 1; iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } #ifdef MNG_OPTIMIZE_FOOTPRINT_SWITCH { const mng_uint8 alpha_level[4] = { 0x00, 0x55, 0xAA, 0xFF}; *pOutrow = alpha_level[((iB & iM) >> iS)] ; } #else switch ((iB & iM) >> iS) /* determine the alpha level */ { case 0x03 : { *pOutrow = 0xFF; break; } case 0x02 : { *pOutrow = 0xAA; break; } case 0x01 : { *pOutrow = 0x55; break; } default : { *pOutrow = 0x00; } } #endif pOutrow += 2; /* next pixel */ iM >>= 2; iS -= 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_A2, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } /* ************************************************************************** */ mng_retcode mng_store_jpeg_g8_a4 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; mng_uint8 iQ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_A4, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 1; iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* get the alpha level */ iQ = (mng_uint8)((iB & iM) >> iS); iQ = (mng_uint8)(iQ + (iQ << 4)); /* expand to 8-bit by replication */ *pOutrow = iQ; /* put in object buffer */ pOutrow += 2; /* next pixel */ iM >>= 4; iS -= 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_A4, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } #endif /* ************************************************************************** */ mng_retcode mng_store_jpeg_g8_a8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_A8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 1; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ pOutrow += 2; /* next pixel */ pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_A8, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_jpeg_g8_a16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_A16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 1; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* only high-order byte! */ pOutrow += 2; /* next pixel */ pWorkrow += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G8_A16, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } #endif /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_store_jpeg_rgb8_a1 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_A1, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 3; iM = 0; /* start at pixel 0 */ iB = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* is it opaque ? */ *pOutrow = 0xFF; /* opaque */ else *pOutrow = 0x00; /* transparent */ pOutrow += 4; /* next pixel */ iM >>= 1; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_A1, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } /* ************************************************************************** */ mng_retcode mng_store_jpeg_rgb8_a2 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_A2, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 3; iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } #ifdef MNG_OPTIMIZE_FOOTPRINT_SWITCH { const mng_uint8 alpha_level[4] = { 0x00, 0x55, 0xAA, 0xFF}; *pOutrow = alpha_level[((iB & iM) >> iS)] ; } #else switch ((iB & iM) >> iS) /* determine the alpha level */ { case 0x03 : { *pOutrow = 0xFF; break; } case 0x02 : { *pOutrow = 0xAA; break; } case 0x01 : { *pOutrow = 0x55; break; } default : { *pOutrow = 0x00; } } #endif pOutrow += 4; /* next pixel */ iM >>= 2; iS -= 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_A2, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } /* ************************************************************************** */ mng_retcode mng_store_jpeg_rgb8_a4 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; mng_uint8 iQ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_A4, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 3; iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* get the alpha level */ iQ = (mng_uint8)((iB & iM) >> iS); iQ = (mng_uint8)(iQ + (iQ << 4)); /* expand to 8-bit by replication */ *pOutrow = iQ; /* put in object buffer */ pOutrow += 4; /* next pixel */ iM >>= 4; iS -= 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_A4, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } #endif /* ************************************************************************** */ mng_retcode mng_store_jpeg_rgb8_a8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_A8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 3; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in buffer */ pOutrow += 4; /* next pixel */ pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_A8, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_jpeg_rgb8_a16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_A16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 3; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* only high-order byte */ pOutrow += 4; /* next pixel */ pWorkrow += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_RGB8_A16, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } #endif /* ************************************************************************** */ #ifdef MNG_SUPPORT_JPEG12 mng_retcode mng_store_jpeg_g12_a1 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G12_A1, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 2; iM = 0; /* start at pixel 0 */ iB = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* opaque ? */ mng_put_uint16 (pOutrow, 0xFFFF);/* opaque */ else mng_put_uint16 (pOutrow, 0x0000);/* transparent */ pOutrow += 4; /* next pixel */ iM >>= 1; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G12_A1, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } #endif /* MNG_SUPPORT_JPEG12 */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_JPEG12 mng_retcode mng_store_jpeg_g12_a2 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G12_A2, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 2; iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } #ifdef MNG_OPTIMIZE_FOOTPRINT_SWITCH { const mng_uint16 gray_level[4] = { 0x0000, 0x5555, 0xAAAA, 0xFFFF}; mng_put_uint16 (pOutrow, gray_level[((iB & iM) >> iS)]) ; } #else switch ((iB & iM) >> iS) /* determine the gray level */ { case 0x03 : { mng_put_uint16 (pOutrow, 0xFFFF); break; } case 0x02 : { mng_put_uint16 (pOutrow, 0xAAAA); break; } case 0x01 : { mng_put_uint16 (pOutrow, 0x5555); break; } default : { mng_put_uint16 (pOutrow, 0x0000); } } #endif pOutrow += 4; /* next pixel */ iM >>= 2; iS -= 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G12_A2, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } #endif /* MNG_SUPPORT_JPEG12 */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_JPEG12 mng_retcode mng_store_jpeg_g12_a4 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; mng_uint16 iQ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G12_A4, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 2; iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* get the gray level */ iQ = (mng_uint16)((iB & iM) >> iS); iQ = (mng_uint16)(iQ + (iQ << 4)); /* expand to 16-bit by replication */ iQ = (mng_uint16)(iQ + (iQ << 8)); /* put in object buffer */ mng_put_uint16 (pOutrow, iQ); pOutrow += 4; /* next pixel */ iM >>= 4; iS -= 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G12_A4, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } #endif /* MNG_SUPPORT_JPEG12 */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_JPEG12 mng_retcode mng_store_jpeg_g12_a8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint16 iW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G12_A8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 2; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iW = (mng_uint16)(*pWorkrow); /* get input byte */ iW = (mng_uint16)(iW + (iW << 8)); /* expand to 16-bit by replication */ mng_put_uint16 (pOutrow, iW); /* put in object buffer */ pOutrow += 4; /* next pixel */ pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G12_A8, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } #endif /* MNG_SUPPORT_JPEG12 */ /* ************************************************************************** */ #ifdef MNG_SUPPORT_JPEG12 #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_store_jpeg_g12_a16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G12_A16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 2; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* copy it */ mng_put_uint16 (pOutrow, mng_get_uint16 (pWorkrow)); pOutrow += 4; /* next pixel */ pWorkrow += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_STORE_JPEG_G12_A16, MNG_LC_END); #endif /* we've got one more row of alpha-samples */ return mng_next_jpeg_alpharow (pData); } #endif #endif /* MNG_SUPPORT_JPEG12 */ /* ************************************************************************** */ #endif /* MNG_INCLUDE_JNG */ #ifndef MNG_NO_DELTA_PNG /* ************************************************************************** */ /* * * */ /* * Delta-image row routines - apply the processed & uncompressed row-data * */ /* * onto the target "object" * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_delta_g1 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G1, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* is it white ? */ *pOutrow = 0xFF; /* white */ else *pOutrow = 0x00; /* black */ pOutrow += pData->iColinc; /* next pixel */ iM >>= 1; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* invert if it is white ? */ *pOutrow = (mng_uint8)(*pOutrow ^ 0xFF); pOutrow += pData->iColinc; /* next pixel */ iM >>= 1; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G1, MNG_LC_END); #endif return mng_store_g1 (pData); } /* ************************************************************************** */ mng_retcode mng_delta_g2 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; #ifdef MNG_OPTIMIZE_FOOTPRINT_SWITCH const mng_uint8 level[4] = { 0x00, 0x55, 0xAA, 0xFF}; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G2, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } #ifdef MNG_OPTIMIZE_FOOTPRINT_SWITCH *pOutrow = level[((iB & iM) >> iS)] ; #else switch ((iB & iM) >> iS) /* determine the alpha level */ { case 0x03 : { *pOutrow = 0xFF; break; } case 0x02 : { *pOutrow = 0xAA; break; } case 0x01 : { *pOutrow = 0x55; break; } default : { *pOutrow = 0x00; } } #endif pOutrow += pData->iColinc; /* next pixel */ iM >>= 2; iS -= 2; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } #ifdef MNG_OPTIMIZE_FOOTPRINT_SWITCH *pOutrow = level[((*pOutrow >> 6) + ((iB & iM) >> iS)) & 0x03] ; #else switch (((*pOutrow >> 6) + ((iB & iM) >> iS)) & 0x03) { case 0x03 : { *pOutrow = 0xFF; break; } case 0x02 : { *pOutrow = 0xAA; break; } case 0x01 : { *pOutrow = 0x55; break; } default : { *pOutrow = 0x00; } } #endif pOutrow += pData->iColinc; /* next pixel */ iM >>= 2; iS -= 2; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G2, MNG_LC_END); #endif return mng_store_g2 (pData); } /* ************************************************************************** */ mng_retcode mng_delta_g4 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; mng_uint8 iQ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G4, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* get the gray level */ iQ = (mng_uint8)((iB & iM) >> iS); /* expand to 8-bit by replication */ iQ = (mng_uint8)(iQ + (iQ << 4)); *pOutrow = iQ; /* put in object buffer */ pOutrow += pData->iColinc; /* next pixel */ iM >>= 4; iS -= 4; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* get the gray level */ iQ = (mng_uint8)(((*pOutrow >> 4) + ((iB & iM) >> iS)) & 0x0F); /* expand to 8-bit by replication */ iQ = (mng_uint8)(iQ + (iQ << 4)); *pOutrow = iQ; /* put in object buffer */ pOutrow += pData->iColinc; /* next pixel */ iM >>= 4; iS -= 4; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G4, MNG_LC_END); #endif return mng_store_g4 (pData); } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_delta_g8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ pOutrow += pData->iColinc; /* next pixel */ pWorkrow++; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* add to object buffer */ *pOutrow = (mng_uint8)(*pOutrow + *pWorkrow); pOutrow += pData->iColinc; /* next pixel */ pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G8, MNG_LC_END); #endif return mng_store_g8 (pData); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_g16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ *(pOutrow+1) = *(pWorkrow+1); /* next pixel */ pOutrow += (pData->iColinc << 1); pWorkrow += 2; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* add to object buffer */ mng_put_uint16 (pOutrow, (mng_uint16)(mng_get_uint16 (pOutrow ) + mng_get_uint16 (pWorkrow) )); /* next pixel */ pOutrow += (pData->iColinc << 1); pWorkrow += 2; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G16, MNG_LC_END); #endif return mng_store_g16 (pData); } #endif /* ************************************************************************** */ mng_retcode mng_delta_rgb8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGB8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ *(pOutrow+1) = *(pWorkrow+1); *(pOutrow+2) = *(pWorkrow+2); /* next pixel */ pOutrow += (pData->iColinc * 3); pWorkrow += 3; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* add to object buffer */ *pOutrow = (mng_uint8)(*pOutrow + *pWorkrow ); *(pOutrow+1) = (mng_uint8)(*(pOutrow+1) + *(pWorkrow+1)); *(pOutrow+2) = (mng_uint8)(*(pOutrow+2) + *(pWorkrow+2)); /* next pixel */ pOutrow += (pData->iColinc * 3); pWorkrow += 3; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGB8, MNG_LC_END); #endif return mng_store_rgb8 (pData); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_rgb16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGB16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ *(pOutrow+1) = *(pWorkrow+1); *(pOutrow+2) = *(pWorkrow+2); *(pOutrow+3) = *(pWorkrow+3); *(pOutrow+4) = *(pWorkrow+4); *(pOutrow+5) = *(pWorkrow+5); /* next pixel */ pOutrow += (pData->iColinc * 6); pWorkrow += 6; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* add to object buffer */ mng_put_uint16 (pOutrow, (mng_uint16)(mng_get_uint16 (pOutrow ) + mng_get_uint16 (pWorkrow ) )); mng_put_uint16 (pOutrow+2, (mng_uint16)(mng_get_uint16 (pOutrow+2 ) + mng_get_uint16 (pWorkrow+2) )); mng_put_uint16 (pOutrow+4, (mng_uint16)(mng_get_uint16 (pOutrow+4 ) + mng_get_uint16 (pWorkrow+4) )); /* next pixel */ pOutrow += (pData->iColinc * 6); pWorkrow += 6; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGB16, MNG_LC_END); #endif return mng_store_rgb16 (pData); } #endif /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_delta_idx1 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_IDX1, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* put the right index value */ *pOutrow = 1; else *pOutrow = 0; pOutrow += pData->iColinc; /* next pixel */ iM >>= 1; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* invert if it is non-zero index */ *pOutrow = (mng_uint8)(*pOutrow ^ 0x01); pOutrow += pData->iColinc; /* next pixel */ iM >>= 1; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_IDX1, MNG_LC_END); #endif return mng_store_idx1 (pData); } /* ************************************************************************** */ mng_retcode mng_delta_idx2 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_IDX2, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } /* put the index */ *pOutrow = (mng_uint8)((iB & iM) >> iS); pOutrow += pData->iColinc; /* next pixel */ iM >>= 2; iS -= 2; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } /* calculate the index */ *pOutrow = (mng_uint8)((*pOutrow + ((iB & iM) >> iS)) & 0x03); pOutrow += pData->iColinc; /* next pixel */ iM >>= 2; iS -= 2; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_IDX2, MNG_LC_END); #endif return mng_store_idx2 (pData); } /* ************************************************************************** */ mng_retcode mng_delta_idx4 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_IDX4, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* put the index */ *pOutrow = (mng_uint8)((iB & iM) >> iS); pOutrow += pData->iColinc; /* next pixel */ iM >>= 4; iS -= 4; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* calculate the index */ *pOutrow = (mng_uint8)((*pOutrow + ((iB & iM) >> iS)) & 0x0F); pOutrow += pData->iColinc; /* next pixel */ iM >>= 4; iS -= 4; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_IDX4, MNG_LC_END); #endif return mng_store_idx4 (pData); } #endif /* ************************************************************************** */ mng_retcode mng_delta_idx8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_IDX8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ pOutrow += pData->iColinc; /* next pixel */ pWorkrow++; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* add to object buffer */ *pOutrow = (mng_uint8)(*pOutrow + *pWorkrow); pOutrow += pData->iColinc; /* next pixel */ pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_IDX8, MNG_LC_END); #endif return mng_store_idx8 (pData); } /* ************************************************************************** */ mng_retcode mng_delta_ga8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ *(pOutrow+1) = *(pWorkrow+1); /* next pixel */ pOutrow += (pData->iColinc << 1); pWorkrow += 2; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* add to object buffer */ *pOutrow = (mng_uint8)(*pOutrow + *pWorkrow ); *(pOutrow+1) = (mng_uint8)(*(pOutrow+1) + *(pWorkrow+1)); /* next pixel */ pOutrow += (pData->iColinc << 1); pWorkrow += 2; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA8, MNG_LC_END); #endif return mng_store_ga8 (pData); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_ga16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ *(pOutrow+1) = *(pWorkrow+1); *(pOutrow+2) = *(pWorkrow+2); *(pOutrow+3) = *(pWorkrow+3); /* next pixel */ pOutrow += (pData->iColinc << 2); pWorkrow += 4; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* add to object buffer */ mng_put_uint16 (pOutrow, (mng_uint16)(mng_get_uint16 (pOutrow ) + mng_get_uint16 (pWorkrow ) )); mng_put_uint16 (pOutrow+2, (mng_uint16)(mng_get_uint16 (pOutrow+2 ) + mng_get_uint16 (pWorkrow+2) )); /* next pixel */ pOutrow += (pData->iColinc << 2); pWorkrow += 4; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA16, MNG_LC_END); #endif return mng_store_ga16 (pData); } #endif /* ************************************************************************** */ mng_retcode mng_delta_rgba8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; /* put in object buffer */ *(pOutrow+1) = *(pWorkrow+1); *(pOutrow+2) = *(pWorkrow+2); *(pOutrow+3) = *(pWorkrow+3); /* next pixel */ pOutrow += (pData->iColinc << 2); pWorkrow += 4; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* add to object buffer */ *pOutrow = (mng_uint8)(*pOutrow + *pWorkrow ); *(pOutrow+1) = (mng_uint8)(*(pOutrow+1) + *(pWorkrow+1)); *(pOutrow+2) = (mng_uint8)(*(pOutrow+2) + *(pWorkrow+2)); *(pOutrow+3) = (mng_uint8)(*(pOutrow+3) + *(pWorkrow+3)); /* next pixel */ pOutrow += (pData->iColinc << 2); pWorkrow += 4; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA8, MNG_LC_END); #endif return mng_store_rgba8 (pData); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_rgba16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pDeltaImage)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iDeltaBlocky * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + (pData->iDeltaBlockx * pBuf->iSamplesize); /* pixel replace ? */ if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { MNG_COPY (pOutrow, pWorkrow, 8); /* put in object buffer */ /* next pixel */ pOutrow += (pData->iColinc << 3); pWorkrow += 8; } } else { /* pixel add ! */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* add to object buffer */ mng_put_uint16 (pOutrow, (mng_uint16)(mng_get_uint16 (pOutrow ) + mng_get_uint16 (pWorkrow ) )); mng_put_uint16 (pOutrow+2, (mng_uint16)(mng_get_uint16 (pOutrow+2 ) + mng_get_uint16 (pWorkrow+2) )); mng_put_uint16 (pOutrow+4, (mng_uint16)(mng_get_uint16 (pOutrow+4 ) + mng_get_uint16 (pWorkrow+4) )); mng_put_uint16 (pOutrow+6, (mng_uint16)(mng_get_uint16 (pOutrow+6 ) + mng_get_uint16 (pWorkrow+6) )); /* next pixel */ pOutrow += (pData->iColinc << 3); pWorkrow += 8; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA16, MNG_LC_END); #endif return mng_store_rgba16 (pData); } #endif /* ************************************************************************** */ /* * * */ /* * Delta-image row routines - apply the source row onto the target * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_delta_g1_g1 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G1_G1, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { MNG_COPY (pOutrow, pWorkrow, pData->iRowsamples); } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(((mng_uint16)*pOutrow + (mng_uint16)*pWorkrow) & 0x01); pOutrow++; pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G1_G1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_delta_g2_g2 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G2_G2, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { MNG_COPY (pOutrow, pWorkrow, pData->iRowsamples); } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(((mng_uint16)*pOutrow + (mng_uint16)*pWorkrow) & 0x03); pOutrow++; pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G2_G2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_delta_g4_g4 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G4_G4, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { MNG_COPY (pOutrow, pWorkrow, pData->iRowsamples); } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(((mng_uint16)*pOutrow + (mng_uint16)*pWorkrow) & 0x0F); pOutrow++; pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G4_G4, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_delta_g8_g8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G8_G8, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { MNG_COPY (pOutrow, pWorkrow, pData->iRowsamples); } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(((mng_uint16)*pOutrow + (mng_uint16)*pWorkrow) & 0xFF); pOutrow++; pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G8_G8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_g16_g16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G16_G16, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { MNG_COPY (pOutrow, pWorkrow, (pData->iRowsamples << 1)); } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow, (mng_uint16)((mng_get_uint16 (pOutrow) + mng_get_uint16 (pWorkrow)) & 0xFFFF)); pOutrow += 2; pWorkrow += 2; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_G16_G16, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_NO_DELTA_PNG */ /* ************************************************************************** */ mng_retcode mng_delta_rgb8_rgb8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGB8_RGB8, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { MNG_COPY (pOutrow, pWorkrow, pData->iRowsamples * 3); } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples*3; iX > 0; iX--) #else for (iX = 0; iX < (pData->iRowsamples * 3); iX++) #endif { *pOutrow = (mng_uint8)(((mng_uint16)*pOutrow + (mng_uint16)*pWorkrow) & 0xFF); pOutrow++; pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGB8_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_rgb16_rgb16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGB16_RGB16, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { MNG_COPY (pOutrow, pWorkrow, (pData->iRowsamples * 6)); } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow, (mng_uint16)((mng_get_uint16 (pOutrow ) + mng_get_uint16 (pWorkrow )) & 0xFFFF)); mng_put_uint16 (pOutrow+2, (mng_uint16)((mng_get_uint16 (pOutrow+2) + mng_get_uint16 (pWorkrow+2)) & 0xFFFF)); mng_put_uint16 (pOutrow+4, (mng_uint16)((mng_get_uint16 (pOutrow+4) + mng_get_uint16 (pWorkrow+4)) & 0xFFFF)); pOutrow += 6; pWorkrow += 6; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGB16_RGB16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode mng_delta_ga8_ga8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA8_GA8, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { MNG_COPY (pOutrow, pWorkrow, pData->iRowsamples << 1); } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = (pData->iRowsamples<<1); iX > 0; iX--) #else for (iX = 0; iX < (pData->iRowsamples << 1); iX++) #endif { *pOutrow = (mng_uint8)(((mng_uint16)*pOutrow + (mng_uint16)*pWorkrow) & 0xFF); pOutrow++; pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA8_GA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_delta_ga8_g8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA8_G8, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; pOutrow += 2; pWorkrow++; } } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(((mng_uint16)*pOutrow + (mng_uint16)*pWorkrow) & 0xFF); pOutrow += 2; pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA8_G8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_delta_ga8_a8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA8_A8, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 1; if (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; pOutrow += 2; pWorkrow++; } } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(((mng_uint16)*pOutrow + (mng_uint16)*pWorkrow) & 0xFF); pOutrow += 2; pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA8_A8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_ga16_ga16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA16_GA16, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { MNG_COPY (pOutrow, pWorkrow, (pData->iRowsamples << 2)); } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow, (mng_uint16)((mng_get_uint16 (pOutrow ) + mng_get_uint16 (pWorkrow )) & 0xFFFF)); mng_put_uint16 (pOutrow+2, (mng_uint16)((mng_get_uint16 (pOutrow+2) + mng_get_uint16 (pWorkrow+2)) & 0xFFFF)); pOutrow += 4; pWorkrow += 4; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA16_GA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_ga16_g16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA16_G16, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow, mng_get_uint16 (pWorkrow)); pOutrow += 4; pWorkrow += 2; } } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow, (mng_uint16)((mng_get_uint16 (pOutrow) + mng_get_uint16 (pWorkrow)) & 0xFFFF)); pOutrow += 4; pWorkrow += 2; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA16_G16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_ga16_a16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA16_A16, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow+2, mng_get_uint16 (pWorkrow)); pOutrow += 4; pWorkrow += 2; } } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow+2, (mng_uint16)((mng_get_uint16 (pOutrow+2) + mng_get_uint16 (pWorkrow)) & 0xFFFF)); pOutrow += 4; pWorkrow += 2; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_GA16_A16, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_NO_DELTA_PNG */ /* ************************************************************************** */ mng_retcode mng_delta_rgba8_rgba8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA8_RGBA8, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { MNG_COPY (pOutrow, pWorkrow, pData->iRowsamples << 2); } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = (pData->iRowsamples << 2); iX > 0; iX--) #else for (iX = 0; iX < (pData->iRowsamples << 2); iX++) #endif { *pOutrow = (mng_uint8)(((mng_uint16)*pOutrow + (mng_uint16)*pWorkrow) & 0xFF); pOutrow++; pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA8_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG mng_retcode mng_delta_rgba8_rgb8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA8_RGB8, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; *(pOutrow+1) = *(pWorkrow+1); *(pOutrow+2) = *(pWorkrow+2); pOutrow += 4; pWorkrow += 3; } } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(((mng_uint16)*pOutrow + (mng_uint16)*pWorkrow ) & 0xFF); *(pOutrow+1) = (mng_uint8)(((mng_uint16)*(pOutrow+1) + (mng_uint16)*(pWorkrow+1)) & 0xFF); *(pOutrow+2) = (mng_uint8)(((mng_uint16)*(pOutrow+2) + (mng_uint16)*(pWorkrow+2)) & 0xFF); pOutrow += 4; pWorkrow += 3; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA8_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_delta_rgba8_a8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA8_A8, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize) + 3; if (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = *pWorkrow; pOutrow += 4; pWorkrow++; } } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(((mng_uint16)*pOutrow + (mng_uint16)*pWorkrow) & 0xFF); pOutrow += 4; pWorkrow++; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA8_A8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_DELTA_PNG */ /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_rgba16_rgba16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA16_RGBA16, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE ) || (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE) ) { MNG_COPY (pOutrow, pWorkrow, (pData->iRowsamples << 3)); } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow, (mng_uint16)((mng_get_uint16 (pOutrow ) + mng_get_uint16 (pWorkrow )) & 0xFFFF)); mng_put_uint16 (pOutrow+2, (mng_uint16)((mng_get_uint16 (pOutrow+2) + mng_get_uint16 (pWorkrow+2)) & 0xFFFF)); mng_put_uint16 (pOutrow+4, (mng_uint16)((mng_get_uint16 (pOutrow+4) + mng_get_uint16 (pWorkrow+4)) & 0xFFFF)); mng_put_uint16 (pOutrow+6, (mng_uint16)((mng_get_uint16 (pOutrow+6) + mng_get_uint16 (pWorkrow+6)) & 0xFFFF)); pOutrow += 8; pWorkrow += 8; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA16_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_rgba16_rgb16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA16_RGB16, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow, mng_get_uint16 (pWorkrow )); mng_put_uint16 (pOutrow+2, mng_get_uint16 (pWorkrow+2)); mng_put_uint16 (pOutrow+4, mng_get_uint16 (pWorkrow+4)); pOutrow += 8; pWorkrow += 6; } } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow, (mng_uint16)((mng_get_uint16 (pOutrow ) + mng_get_uint16 (pWorkrow )) & 0xFFFF)); mng_put_uint16 (pOutrow+2, (mng_uint16)((mng_get_uint16 (pOutrow+2) + mng_get_uint16 (pWorkrow+2)) & 0xFFFF)); mng_put_uint16 (pOutrow+4, (mng_uint16)((mng_get_uint16 (pOutrow+4) + mng_get_uint16 (pWorkrow+4)) & 0xFFFF)); pOutrow += 8; pWorkrow += 6; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA16_RGB16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_delta_rgba16_a16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA16_A16, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); if (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow+6, mng_get_uint16 (pWorkrow)); pOutrow += 8; pWorkrow += 2; } } else if (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAADD) { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { mng_put_uint16 (pOutrow+6, (mng_uint16)((mng_get_uint16 (pOutrow+6) + mng_get_uint16 (pWorkrow)) & 0xFFFF)); pOutrow += 8; pWorkrow += 2; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DELTA_RGBA16_A16, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_NO_DELTA_PNG */ /* ************************************************************************** */ /* * * */ /* * Delta-image row routines - scale the delta to bitdepth of target * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_NO_DELTA_PNG #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_scale_g1_g2 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G1_G2, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow << 1); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G1_G2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_scale_g1_g4 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G1_G4, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow << 3); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G1_G4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_scale_g1_g8 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G1_G8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow << 7); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G1_G8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_scale_g1_g16 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G1_G16, MNG_LC_START); #endif pWorkrow = pWorkrow + (pData->iRowsamples - 1); pOutrow = pOutrow + ((pData->iRowsamples - 1) << 1); /* pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + pData->iRowsamples - 1); */ /* pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples - 1) << 1)); */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *(pOutrow+1) = 0; *pOutrow = (mng_uint8)(*pWorkrow << 7); pWorkrow--; pOutrow -= 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G1_G16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_scale_g2_g4 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G2_G4, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow << 2); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G2_G4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_scale_g2_g8 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G2_G8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow << 6); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G2_G8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_scale_g2_g16 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G2_G16, MNG_LC_START); #endif pWorkrow = pWorkrow + (pData->iRowsamples - 1); pOutrow = pOutrow + ((pData->iRowsamples - 1) << 1); /* pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + pData->iRowsamples - 1); */ /* pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples - 1) << 1)); */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *(pOutrow+1) = 0; *pOutrow = (mng_uint8)(*pWorkrow << 6); pWorkrow--; pOutrow -= 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G2_G16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_scale_g4_g8 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G4_G8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow << 4); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G4_G8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_scale_g4_g16 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G4_G16, MNG_LC_START); #endif pWorkrow = pWorkrow + (pData->iRowsamples - 1); pOutrow = pOutrow + ((pData->iRowsamples - 1) << 1); /* pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + pData->iRowsamples - 1); */ /* pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples - 1) << 1)); */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *(pOutrow+1) = 0; *pOutrow = (mng_uint8)(*pWorkrow << 4); pWorkrow--; pOutrow -= 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G4_G16, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_NO_1_2_4BIT_SUPPORT */ /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_scale_g8_g16 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G8_G16, MNG_LC_START); #endif pWorkrow = pWorkrow + (pData->iRowsamples - 1); pOutrow = pOutrow + ((pData->iRowsamples - 1) << 1); /* pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + pData->iRowsamples - 1); */ /* pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples - 1) << 1)); */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *(pOutrow+1) = 0; *pOutrow = *pWorkrow; pWorkrow--; pOutrow -= 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G8_G16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_scale_ga8_ga16 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_GA8_GA16, MNG_LC_START); #endif pWorkrow = pWorkrow + ((pData->iRowsamples - 1) << 1); pOutrow = pOutrow + ((pData->iRowsamples - 1) << 2); /* pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + ((pData->iRowsamples - 1) << 1)); */ /* pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples - 1) << 2)); */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *(pOutrow+3) = 0; *(pOutrow+2) = *(pWorkrow+1); *(pOutrow+1) = 0; *pOutrow = *pWorkrow; pWorkrow -= 2; pOutrow -= 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_GA8_GA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_scale_rgb8_rgb16 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_RGB8_RGB16, MNG_LC_START); #endif pWorkrow = pWorkrow + (3 * (pData->iRowsamples - 1)); pOutrow = pOutrow + (6 * (pData->iRowsamples - 1)); /* pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + 3 * (pData->iRowsamples - 1)); */ /* pOutrow = (mng_uint8p)((mng_uint32)pOutrow + 6 * (pData->iRowsamples - 1)); */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *(pOutrow+5) = 0; *(pOutrow+4) = *(pWorkrow+2); *(pOutrow+3) = 0; *(pOutrow+2) = *(pWorkrow+1); *(pOutrow+1) = 0; *pOutrow = *pWorkrow; pWorkrow -= 3; pOutrow -= 6; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_RGB8_RGB16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_scale_rgba8_rgba16 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_RGBA8_RGBA16, MNG_LC_START); #endif pWorkrow = pWorkrow + ((pData->iRowsamples - 1) << 2); pOutrow = pOutrow + ((pData->iRowsamples - 1) << 3); /* pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + ((pData->iRowsamples - 1) << 2)); */ /* pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples - 1) << 3)); */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *(pOutrow+7) = 0; *(pOutrow+6) = *(pWorkrow+3); *(pOutrow+5) = 0; *(pOutrow+4) = *(pWorkrow+2); *(pOutrow+3) = 0; *(pOutrow+2) = *(pWorkrow+1); *(pOutrow+1) = 0; *pOutrow = *pWorkrow; pWorkrow -= 4; pOutrow -= 8; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_RGBA8_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_scale_g2_g1 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G2_G1, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow >> 1); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G2_G1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_scale_g4_g1 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G4_G1, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow >> 3); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G4_G1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_scale_g8_g1 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G8_G1, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow >> 7); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G8_G1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_scale_g16_g1 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G16_G1, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 15); pOutrow++; pWorkrow += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G16_G1, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_scale_g4_g2 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G4_G2, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow >> 2); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G4_G2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_scale_g8_g2 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G8_G2, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow >> 6); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G8_G2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_scale_g16_g2 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G16_G2, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 14); pOutrow++; pWorkrow += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G16_G2, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_scale_g8_g4 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G8_G4, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pWorkrow = (mng_uint8)(*pWorkrow >> 4); pWorkrow++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G8_G4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_scale_g16_g4 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G16_G4, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 12); pOutrow++; pWorkrow += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G16_G4, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* NO_1_2_4BIT_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_scale_g16_g8 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G16_G8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 8); pOutrow++; pWorkrow += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_G16_G8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_scale_ga16_ga8 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_GA16_GA8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 8); pOutrow++; pWorkrow += 2; *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 8); pOutrow++; pWorkrow += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_GA16_GA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_scale_rgb16_rgb8 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_RGB16_RGB8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 8); pOutrow++; pWorkrow += 2; *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 8); pOutrow++; pWorkrow += 2; *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 8); pOutrow++; pWorkrow += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_RGB16_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_scale_rgba16_rgba8 (mng_datap pData) { mng_uint8p pWorkrow = pData->pRGBArow; mng_uint8p pOutrow = pData->pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_RGBA16_RGBA8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 8); pOutrow++; pWorkrow += 2; *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 8); pOutrow++; pWorkrow += 2; *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 8); pOutrow++; pWorkrow += 2; *pOutrow = (mng_uint8)(mng_get_uint16 (pWorkrow) >> 8); pOutrow++; pWorkrow += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_SCALE_RGBA16_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ /* * * */ /* * Delta-image bit routines - promote bit_depth * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_uint8 mng_promote_replicate_1_2 (mng_uint8 iB) { return (mng_uint8)((iB << 1) | iB); } /* ************************************************************************** */ mng_uint8 mng_promote_replicate_1_4 (mng_uint8 iB) { iB = (mng_uint8)((iB << 1) + iB); return (mng_uint8)((iB << 2) + iB); } /* ************************************************************************** */ mng_uint8 mng_promote_replicate_1_8 (mng_uint8 iB) { iB = (mng_uint8)((iB << 1) + iB); iB = (mng_uint8)((iB << 2) + iB); return (mng_uint8)((iB << 4) + iB); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_uint16 mng_promote_replicate_1_16 (mng_uint8 iB) { iB = (mng_uint8)((iB << 1) + iB); iB = (mng_uint8)((iB << 2) + iB); iB = (mng_uint8)((iB << 4) + iB); return (mng_uint16)(((mng_uint16)iB << 8) + (mng_uint16)iB); } #endif /* ************************************************************************** */ mng_uint8 mng_promote_replicate_2_4 (mng_uint8 iB) { return (mng_uint8)((iB << 2) + iB); } /* ************************************************************************** */ mng_uint8 mng_promote_replicate_2_8 (mng_uint8 iB) { iB = (mng_uint8)((iB << 2) + iB); return (mng_uint8)((iB << 4) + iB); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_uint16 mng_promote_replicate_2_16 (mng_uint8 iB) { iB = (mng_uint8)((iB << 2) + iB); iB = (mng_uint8)((iB << 4) + iB); return (mng_uint16)(((mng_uint16)iB << 8) + (mng_uint16)iB); } #endif /* ************************************************************************** */ mng_uint8 mng_promote_replicate_4_8 (mng_uint8 iB) { return (mng_uint8)((iB << 4) + iB); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_uint16 mng_promote_replicate_4_16 (mng_uint8 iB) { iB = (mng_uint8)((iB << 4) + iB); return (mng_uint16)(((mng_uint16)iB << 8) + (mng_uint16)iB); } #endif #endif /* NO_1_2_4BIT_SUPPORT */ /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_uint16 mng_promote_replicate_8_16 (mng_uint8 iB) { return (mng_uint16)(((mng_uint16)iB << 8) + (mng_uint16)iB); } #endif /* ************************************************************************** */ #if !defined(MNG_NO_DELTA_PNG) #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_uint8 mng_promote_zerofill_1_2 (mng_uint8 iB) { return (mng_uint8)(iB << 1); } /* ************************************************************************** */ mng_uint8 mng_promote_zerofill_1_4 (mng_uint8 iB) { return (mng_uint8)(iB << 3); } /* ************************************************************************** */ mng_uint8 mng_promote_zerofill_1_8 (mng_uint8 iB) { return (mng_uint8)(iB << 7); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_uint16 mng_promote_zerofill_1_16 (mng_uint8 iB) { return (mng_uint16)((mng_uint16)iB << 15); } #endif /* ************************************************************************** */ mng_uint8 mng_promote_zerofill_2_4 (mng_uint8 iB) { return (mng_uint8)(iB << 2); } /* ************************************************************************** */ mng_uint8 mng_promote_zerofill_2_8 (mng_uint8 iB) { return (mng_uint8)(iB << 6); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_uint16 mng_promote_zerofill_2_16 (mng_uint8 iB) { return (mng_uint16)((mng_uint16)iB << 14); } #endif /* ************************************************************************** */ mng_uint8 mng_promote_zerofill_4_8 (mng_uint8 iB) { return (mng_uint8)(iB << 4); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_uint16 mng_promote_zerofill_4_16 (mng_uint8 iB) { return (mng_uint16)((mng_uint16)iB << 12); } #endif #endif /* MNG_NO_1_2_4BIT_SUPPORT */ /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_uint16 mng_promote_zerofill_8_16 (mng_uint8 iB) { return (mng_uint16)((mng_uint16)iB << 8); } #endif #endif /* MNG_NO_DELTA_PNG */ /* ************************************************************************** */ /* * * */ /* * Delta-image row routines - promote color_type * */ /* * * */ /* ************************************************************************** */ #if !defined(MNG_NO_DELTA_PNG) || !defined(MNG_SKIPCHUNK_PAST) || !defined(MNG_SKIPCHUNK_MAGN) mng_retcode mng_promote_g8_g8 (mng_datap pData) { mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_G8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iB = *pSrcline; if (pData->fPromBitdepth) /* bitdepth promoted ? */ iB = ((mng_bitdepth_8)pData->fPromBitdepth) (iB); *pDstline = iB; pSrcline++; pDstline++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_G8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_g8_g16 (mng_datap pData) { mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint16 iW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_G16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iW = ((mng_bitdepth_16)pData->fPromBitdepth) (*pSrcline); *pDstline = (mng_uint8)(iW >> 8); *(pDstline+1) = (mng_uint8)(iW && 0xFF); pSrcline++; pDstline += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_G16, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_promote_g16_g16 (mng_datap pData) { mng_uint16p pSrcline = (mng_uint16p)pData->pPromSrc; mng_uint16p pDstline = (mng_uint16p)pData->pPromDst; mng_uint32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G16_G16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { *pDstline = *pSrcline; pSrcline++; pDstline++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G16_G16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_promote_g8_ga8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_GA8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iB = *pSrcline; /* no cheap transparency ? */ if ((!pBuf->bHasTRNS) || ((mng_uint16)iB != pBuf->iTRNSgray)) *(pDstline+1) = 0xFF; if (pData->fPromBitdepth) /* bitdepth promoted ? */ iB = ((mng_bitdepth_8)pData->fPromBitdepth) (iB); *pDstline = iB; pSrcline++; pDstline += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_GA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_g8_ga16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iB; mng_uint16 iW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_GA16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iB = *pSrcline; /* no cheap transparency ? */ if ((!pBuf->bHasTRNS) || ((mng_uint16)iB != pBuf->iTRNSgray)) { *(pDstline+2) = 0xFF; *(pDstline+3) = 0xFF; } iW = ((mng_bitdepth_16)pData->fPromBitdepth) (iB); *pDstline = (mng_uint8)(iW >> 8); *(pDstline+1) = (mng_uint8)(iW && 0xFF); pSrcline++; pDstline += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_GA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_g16_ga16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint16p pSrcline = (mng_uint16p)pData->pPromSrc; mng_uint16p pDstline = (mng_uint16p)pData->pPromDst; mng_uint32 iX; mng_uint16 iW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G16_GA16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iW = *pSrcline; /* no cheap transparency ? */ if ((!pBuf->bHasTRNS) || ((mng_uint16)iW != pBuf->iTRNSgray)) *(pDstline+1) = 0xFFFF; *pDstline = iW; pSrcline++; pDstline += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G16_GA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_promote_g8_rgb8 (mng_datap pData) { mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_RGB8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iB = *pSrcline; if (pData->fPromBitdepth) /* bitdepth promoted ? */ iB = ((mng_bitdepth_8)pData->fPromBitdepth) (iB); *pDstline = iB; *(pDstline+1) = iB; *(pDstline+2) = iB; pSrcline++; pDstline += 3; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_g8_rgb16 (mng_datap pData) { mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iB; mng_uint16 iW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_RGB16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iB = *pSrcline; iW = ((mng_bitdepth_16)pData->fPromBitdepth) (iB); iB = (mng_uint8)(iW >> 8); *pDstline = iB; *(pDstline+2) = iB; *(pDstline+4) = iB; iB = (mng_uint8)(iW && 0xFF); *(pDstline+1) = iB; *(pDstline+3) = iB; *(pDstline+5) = iB; pSrcline++; pDstline += 6; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_RGB16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_g16_rgb16 (mng_datap pData) { mng_uint16p pSrcline = (mng_uint16p)pData->pPromSrc; mng_uint16p pDstline = (mng_uint16p)pData->pPromDst; mng_uint32 iX; mng_uint16 iW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G16_RGB16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iW = *pSrcline; *pDstline = iW; *(pDstline+1) = iW; *(pDstline+2) = iW; pSrcline++; pDstline += 3; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G16_RGB16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_promote_g8_rgba8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_RGBA8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iB = *pSrcline; /* no cheap transparency ? */ if ((!pBuf->bHasTRNS) || ((mng_uint16)iB != pBuf->iTRNSgray)) *(pDstline+3) = 0xFF; if (pData->fPromBitdepth) /* bitdepth promoted ? */ iB = ((mng_bitdepth_8)pData->fPromBitdepth) (iB); *pDstline = iB; *(pDstline+1) = iB; *(pDstline+2) = iB; pSrcline++; pDstline += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_g8_rgba16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iB; mng_uint16 iW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_RGBA16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iB = *pSrcline; /* no cheap transparency ? */ if ((!pBuf->bHasTRNS) || ((mng_uint16)iB != pBuf->iTRNSgray)) { *(pDstline+6) = 0xFF; *(pDstline+7) = 0xFF; } iW = ((mng_bitdepth_16)pData->fPromBitdepth) (iB); iB = (mng_uint8)(iW >> 8); *pDstline = iB; *(pDstline+2) = iB; *(pDstline+4) = iB; iB = (mng_uint8)(iW && 0xFF); *(pDstline+1) = iB; *(pDstline+3) = iB; *(pDstline+5) = iB;; pSrcline++; pDstline += 8; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G8_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_g16_rgba16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint16p pSrcline = (mng_uint16p)pData->pPromSrc; mng_uint16p pDstline = (mng_uint16p)pData->pPromDst; mng_uint32 iX; mng_uint16 iW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G16_RGBA16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iW = *pSrcline; /* no cheap transparency ? */ if ((!pBuf->bHasTRNS) || (iW != pBuf->iTRNSgray)) *(pDstline+3) = 0xFFFF; *pDstline = iW; *(pDstline+1) = iW; *(pDstline+2) = iW; pSrcline++; pDstline += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_G16_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_ga8_ga16 (mng_datap pData) { mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint16 iW; mng_uint16 iA; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_GA8_GA16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iW = ((mng_bitdepth_16)pData->fPromBitdepth) (*pSrcline); iA = ((mng_bitdepth_16)pData->fPromBitdepth) (*(pSrcline+1)); *pDstline = (mng_uint8)(iW >> 8); *(pDstline+1) = (mng_uint8)(iW && 0xFF); *(pDstline+2) = (mng_uint8)(iA >> 8); *(pDstline+3) = (mng_uint8)(iA && 0xFF); pSrcline += 2; pDstline += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_GA8_GA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_promote_ga8_rgba8 (mng_datap pData) { mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iB; mng_uint8 iA; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_GA8_RGBA8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iB = *pSrcline; iA = *(pSrcline+1); *pDstline = iB; *(pDstline+1) = iB; *(pDstline+2) = iB; *(pDstline+3) = iA; pSrcline += 2; pDstline += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_GA8_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_ga8_rgba16 (mng_datap pData) { mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iB; mng_uint16 iW; mng_uint16 iA; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_GA8_RGBA16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iW = ((mng_bitdepth_16)pData->fPromBitdepth) (*pSrcline); iA = ((mng_bitdepth_16)pData->fPromBitdepth) (*(pSrcline+1)); iB = (mng_uint8)(iW >> 8); *pDstline = iB; *(pDstline+2) = iB; *(pDstline+4) = iB; iB = (mng_uint8)(iW && 0xFF); *(pDstline+1) = iB; *(pDstline+3) = iB; *(pDstline+5) = iB; *(pDstline+6) = (mng_uint8)(iA >> 8); *(pDstline+7) = (mng_uint8)(iA && 0xFF); pSrcline += 2; pDstline += 8; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_GA8_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_ga16_rgba16 (mng_datap pData) { mng_uint16p pSrcline = (mng_uint16p)pData->pPromSrc; mng_uint16p pDstline = (mng_uint16p)pData->pPromDst; mng_uint32 iX; mng_uint16 iW; mng_uint16 iA; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_GA16_RGBA16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iW = *pSrcline; iA = *(pSrcline+1); *pDstline = iW; *(pDstline+1) = iW; *(pDstline+2) = iW; *(pDstline+3) = iA; pSrcline += 2; pDstline += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_GA16_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_rgb8_rgb16 (mng_datap pData) { mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint16 iR; mng_uint16 iG; mng_uint16 iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_RGB8_RGB16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iR = ((mng_bitdepth_16)pData->fPromBitdepth) (*pSrcline); iG = ((mng_bitdepth_16)pData->fPromBitdepth) (*(pSrcline+1)); iB = ((mng_bitdepth_16)pData->fPromBitdepth) (*(pSrcline+2)); *pDstline = (mng_uint8)(iR >> 8); *(pDstline+1) = (mng_uint8)(iR && 0xFF); *(pDstline+2) = (mng_uint8)(iG >> 8); *(pDstline+3) = (mng_uint8)(iG && 0xFF); *(pDstline+4) = (mng_uint8)(iB >> 8); *(pDstline+5) = (mng_uint8)(iB && 0xFF); pSrcline += 3; pDstline += 6; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_RGB8_RGB16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_promote_rgb8_rgba8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iR; mng_uint8 iG; mng_uint8 iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_RGB8_RGBA8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iR = *pSrcline; iG = *(pSrcline+1); iB = *(pSrcline+2); /* no cheap transparency ? */ if ((!pBuf->bHasTRNS) || ((mng_uint16)iR != pBuf->iTRNSred) || ((mng_uint16)iG != pBuf->iTRNSgreen) || ((mng_uint16)iB != pBuf->iTRNSblue)) *(pDstline+3) = 0xFF; *pDstline = iR; *(pDstline+1) = iG; *(pDstline+2) = iB; pSrcline += 3; pDstline += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_RGB8_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_rgb8_rgba16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iR; mng_uint8 iG; mng_uint8 iB; mng_uint16 iRw; mng_uint16 iGw; mng_uint16 iBw; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_RGB8_RGBA16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iR = *pSrcline; iG = *(pSrcline+1); iB = *(pSrcline+2); /* no cheap transparency ? */ if ((!pBuf->bHasTRNS) || ((mng_uint16)iR != pBuf->iTRNSred) || ((mng_uint16)iG != pBuf->iTRNSgreen) || ((mng_uint16)iB != pBuf->iTRNSblue)) { *(pDstline+6) = 0xFF; *(pDstline+7) = 0xFF; } iRw = ((mng_bitdepth_16)pData->fPromBitdepth) (iR); iGw = ((mng_bitdepth_16)pData->fPromBitdepth) (iG); iBw = ((mng_bitdepth_16)pData->fPromBitdepth) (iB); *pDstline = (mng_uint8)(iRw >> 8); *(pDstline+1) = (mng_uint8)(iRw && 0xFF); *(pDstline+2) = (mng_uint8)(iGw >> 8); *(pDstline+3) = (mng_uint8)(iGw && 0xFF); *(pDstline+4) = (mng_uint8)(iBw >> 8); *(pDstline+5) = (mng_uint8)(iBw && 0xFF); pSrcline += 3; pDstline += 8; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_RGB8_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_rgb16_rgba16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint16p pSrcline = (mng_uint16p)pData->pPromSrc; mng_uint16p pDstline = (mng_uint16p)pData->pPromDst; mng_uint32 iX; mng_uint16 iR; mng_uint16 iG; mng_uint16 iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_RGB16_RGBA16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iR = *pSrcline; iG = *(pSrcline+1); iB = *(pSrcline+2); /* no cheap transparency ? */ if ((!pBuf->bHasTRNS) || (iR != pBuf->iTRNSred) || (iG != pBuf->iTRNSgreen) || (iB != pBuf->iTRNSblue)) *(pDstline+3) = 0xFFFF; *pDstline = iR; *(pDstline+1) = iG; *(pDstline+2) = iB; pSrcline += 3; pDstline += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_RGB16_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_promote_idx8_rgb8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IDX8_RGB8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iB = *pSrcline; if ((mng_uint32)iB < pBuf->iPLTEcount) { *pDstline = pBuf->aPLTEentries [iB].iRed; *(pDstline+1) = pBuf->aPLTEentries [iB].iGreen; *(pDstline+2) = pBuf->aPLTEentries [iB].iBlue; } pSrcline++; pDstline += 3; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IDX8_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_idx8_rgb16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iN; mng_uint16 iR; mng_uint16 iG; mng_uint16 iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IDX8_RGB16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iN = *pSrcline; if ((mng_uint32)iN < pBuf->iPLTEcount) { iR = ((mng_bitdepth_16)pData->fPromBitdepth) (pBuf->aPLTEentries [iN].iRed); iG = ((mng_bitdepth_16)pData->fPromBitdepth) (pBuf->aPLTEentries [iN].iGreen); iB = ((mng_bitdepth_16)pData->fPromBitdepth) (pBuf->aPLTEentries [iN].iBlue); *pDstline = (mng_uint8)(iR >> 8); *(pDstline+1) = (mng_uint8)(iR && 0xFF); *(pDstline+2) = (mng_uint8)(iG >> 8); *(pDstline+3) = (mng_uint8)(iG && 0xFF); *(pDstline+4) = (mng_uint8)(iB >> 8); *(pDstline+5) = (mng_uint8)(iB && 0xFF); } pSrcline++; pDstline += 6; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IDX8_RGB16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_promote_idx8_rgba8 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iB; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IDX8_RGBA8, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iB = *pSrcline; if ((mng_uint32)iB < pBuf->iPLTEcount) { *pDstline = pBuf->aPLTEentries [iB].iRed; *(pDstline+1) = pBuf->aPLTEentries [iB].iGreen; *(pDstline+2) = pBuf->aPLTEentries [iB].iBlue; if ((pBuf->bHasTRNS) && ((mng_uint32)iB < pBuf->iTRNScount)) *(pDstline+3) = pBuf->aTRNSentries [iB]; else *(pDstline+3) = 0xFF; } pSrcline++; pDstline += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IDX8_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_promote_idx8_rgba16 (mng_datap pData) { mng_imagedatap pBuf = (mng_imagedatap)pData->pPromBuf; mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint8 iN; mng_uint16 iR; mng_uint16 iG; mng_uint16 iB; mng_uint16 iA; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IDX8_RGBA16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iN = *pSrcline; if ((mng_uint32)iN < pBuf->iPLTEcount) { iR = ((mng_bitdepth_16)pData->fPromBitdepth) (pBuf->aPLTEentries [iN].iRed); iG = ((mng_bitdepth_16)pData->fPromBitdepth) (pBuf->aPLTEentries [iN].iGreen); iB = ((mng_bitdepth_16)pData->fPromBitdepth) (pBuf->aPLTEentries [iN].iBlue); if ((pBuf->bHasTRNS) && ((mng_uint32)iN < pBuf->iTRNScount)) iA = ((mng_bitdepth_16)pData->fPromBitdepth) (pBuf->aTRNSentries [iN]); else iA = 0xFFFF; *pDstline = (mng_uint8)(iR >> 8); *(pDstline+1) = (mng_uint8)(iR && 0xFF); *(pDstline+2) = (mng_uint8)(iG >> 8); *(pDstline+3) = (mng_uint8)(iG && 0xFF); *(pDstline+4) = (mng_uint8)(iB >> 8); *(pDstline+5) = (mng_uint8)(iB && 0xFF); *(pDstline+6) = (mng_uint8)(iA >> 8); *(pDstline+7) = (mng_uint8)(iA && 0xFF); } pSrcline++; pDstline += 8; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IDX8_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_promote_rgba8_rgba16 (mng_datap pData) { mng_uint8p pSrcline = (mng_uint8p)pData->pPromSrc; mng_uint8p pDstline = (mng_uint8p)pData->pPromDst; mng_uint32 iX; mng_uint16 iR; mng_uint16 iG; mng_uint16 iB; mng_uint16 iA; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_RGBA8_RGBA16, MNG_LC_START); #endif #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPromWidth; iX > 0; iX--) #else for (iX = 0; iX < pData->iPromWidth; iX++) #endif { iR = ((mng_bitdepth_16)pData->fPromBitdepth) (*pSrcline); iG = ((mng_bitdepth_16)pData->fPromBitdepth) (*(pSrcline+1)); iB = ((mng_bitdepth_16)pData->fPromBitdepth) (*(pSrcline+2)); iA = ((mng_bitdepth_16)pData->fPromBitdepth) (*(pSrcline+3)); *pDstline = (mng_uint8)(iR >> 8); *(pDstline+1) = (mng_uint8)(iR && 0xFF); *(pDstline+2) = (mng_uint8)(iG >> 8); *(pDstline+3) = (mng_uint8)(iG && 0xFF); *(pDstline+4) = (mng_uint8)(iB >> 8); *(pDstline+5) = (mng_uint8)(iB && 0xFF); *(pDstline+6) = (mng_uint8)(iA >> 8); *(pDstline+7) = (mng_uint8)(iA && 0xFF); pSrcline += 4; pDstline += 8; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_RGBA8_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* !defined(MNG_NO_DELTA_PNG) || !defined(MNG_SKIPCHUNK_PAST) || !defined(MNG_SKIPCHUNK_MAGN) */ /* ************************************************************************** */ /* * * */ /* * Row processing routines - convert uncompressed data from zlib to * */ /* * managable row-data which serves as input to the color-management * */ /* * routines * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_process_g1 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_G1, MNG_LC_START); #endif if (!pBuf) /* no object? then use obj 0 */ pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; iM = 0; /* start at pixel 0 */ iB = 0; if (pBuf->bHasTRNS) /* tRNS encountered ? */ { if (pBuf->iTRNSgray) /* white transparent ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* is it white ? */ /* transparent ! */ mng_put_uint32 (pRGBArow, 0x00000000); else /* opaque black */ mng_put_uint32 (pRGBArow, 0x000000FF); pRGBArow += 4; /* next pixel */ iM >>= 1; } } else /* black transparent */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* is it white ? */ /* opaque white */ mng_put_uint32 (pRGBArow, 0xFFFFFFFF); else /* transparent */ mng_put_uint32 (pRGBArow, 0x00000000); pRGBArow += 4; /* next pixel */ iM >>= 1; } } pData->bIsOpaque = MNG_FALSE; /* it's not fully opaque */ } else /* no transparency */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; } if (iB & iM) /* is it white ? */ /* opaque white */ mng_put_uint32 (pRGBArow, 0xFFFFFFFF); else /* opaque black */ mng_put_uint32 (pRGBArow, 0x000000FF); pRGBArow += 4; /* next pixel */ iM >>= 1; } pData->bIsOpaque = MNG_TRUE; /* it's fully opaque */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_G1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_process_g2 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; mng_uint8 iQ; mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; #ifdef MNG_OPTIMIZE_FOOTPRINT_SWITCH const mng_uint32 level[4] = { 0x000000FF, 0x555555FF, 0xAAAAAAFF, 0xFFFFFFFF}; #endif #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_G2, MNG_LC_START); #endif if (!pBuf) /* no object? then use obj 0 */ pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; if (pBuf->bHasTRNS) /* tRNS encountered ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } /* determine gray level */ iQ = (mng_uint8)((iB & iM) >> iS); if (iQ == pBuf->iTRNSgray) /* transparent ? */ mng_put_uint32 (pRGBArow, 0x00000000); else { #ifdef MNG_OPTIMIZE_FOOTPRINT_SWITCH mng_put_uint32 (pRGBArow, level[iQ]); #else switch (iQ) /* determine the gray level */ { case 0x03 : { mng_put_uint32 (pRGBArow, 0xFFFFFFFF); break; } case 0x02 : { mng_put_uint32 (pRGBArow, 0xAAAAAAFF); break; } case 0x01 : { mng_put_uint32 (pRGBArow, 0x555555FF); break; } default : { mng_put_uint32 (pRGBArow, 0x000000FF); } } #endif } pRGBArow += 4; /* next pixel */ iM >>= 2; iS -= 2; } pData->bIsOpaque = MNG_FALSE; /* it's not fully opaque */ } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } #ifdef MNG_OPTIMIZE_FOOTPRINT_SWITCH mng_put_uint32 (pRGBArow, level[((iB & iM) >> iS)] ); #else switch ((iB & iM) >> iS) /* determine the gray level */ { case 0x03 : { mng_put_uint32 (pRGBArow, 0xFFFFFFFF); break; } case 0x02 : { mng_put_uint32 (pRGBArow, 0xAAAAAAFF); break; } case 0x01 : { mng_put_uint32 (pRGBArow, 0x555555FF); break; } default : { mng_put_uint32 (pRGBArow, 0x000000FF); } } #endif pRGBArow += 4; /* next pixel */ iM >>= 2; iS -= 2; } pData->bIsOpaque = MNG_TRUE; /* it's fully opaque */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_G2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_process_g4 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; mng_uint8 iQ; mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_G4, MNG_LC_START); #endif if (!pBuf) /* no object? then use obj 0 */ pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; if (pBuf->bHasTRNS) /* tRNS encountered ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* get the gray level */ iQ = (mng_uint8)((iB & iM) >> iS); if (iQ == pBuf->iTRNSgray) /* transparent ? */ { *pRGBArow = 0; /* put in intermediate row */ *(pRGBArow+1) = 0; *(pRGBArow+2) = 0; *(pRGBArow+3) = 0; } else { /* expand to 8-bit by replication */ iQ = (mng_uint8)(iQ + (iQ << 4)); *pRGBArow = iQ; /* put in intermediate row */ *(pRGBArow+1) = iQ; *(pRGBArow+2) = iQ; *(pRGBArow+3) = 0xFF; } pRGBArow += 4; /* next pixel */ iM >>= 4; iS -= 4; } pData->bIsOpaque = MNG_FALSE; /* it's not fully opaque */ } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* get the gray level */ iQ = (mng_uint8)((iB & iM) >> iS); iQ = (mng_uint8)(iQ + (iQ << 4));/* expand to 8-bit by replication */ *pRGBArow = iQ; /* put in intermediate row */ *(pRGBArow+1) = iQ; *(pRGBArow+2) = iQ; *(pRGBArow+3) = 0xFF; pRGBArow += 4; /* next pixel */ iM >>= 4; iS -= 4; } pData->bIsOpaque = MNG_TRUE; /* it's fully opaque */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_G4, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_process_g8 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iB; mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_G8, MNG_LC_START); #endif if (!pBuf) /* no object? then use obj 0 */ pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; if (pBuf->bHasTRNS) /* tRNS encountered ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iB = *pWorkrow; /* get next input-byte */ if (iB == pBuf->iTRNSgray) /* transparent ? */ { *pRGBArow = 0; /* put in intermediate row */ *(pRGBArow+1) = 0; *(pRGBArow+2) = 0; *(pRGBArow+3) = 0; } else { *pRGBArow = iB; /* put in intermediate row */ *(pRGBArow+1) = iB; *(pRGBArow+2) = iB; *(pRGBArow+3) = 0xFF; } pRGBArow += 4; /* next pixel */ pWorkrow++; } pData->bIsOpaque = MNG_FALSE; /* it's not fully opaque */ } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iB = *pWorkrow; /* get next input-byte */ *pRGBArow = iB; /* put in intermediate row */ *(pRGBArow+1) = iB; *(pRGBArow+2) = iB; *(pRGBArow+3) = 0xFF; pRGBArow += 4; /* next pixel */ pWorkrow++; } pData->bIsOpaque = MNG_TRUE; /* it's fully opaque */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_G8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_process_g16 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint16 iW; mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_G16, MNG_LC_START); #endif if (!pBuf) /* no object? then use obj 0 */ pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; if (pBuf->bHasTRNS) /* tRNS encountered ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iW = mng_get_uint16 (pWorkrow); /* get input */ if (iW == pBuf->iTRNSgray) /* transparent ? */ { /* put in intermediate row */ mng_put_uint16 (pRGBArow, 0); mng_put_uint16 (pRGBArow+2, 0); mng_put_uint16 (pRGBArow+4, 0); mng_put_uint16 (pRGBArow+6, 0); } else { /* put in intermediate row */ mng_put_uint16 (pRGBArow, iW); mng_put_uint16 (pRGBArow+2, iW); mng_put_uint16 (pRGBArow+4, iW); mng_put_uint16 (pRGBArow+6, 0xFFFF); } pRGBArow += 8; /* next pixel */ pWorkrow += 2; } pData->bIsOpaque = MNG_FALSE; /* it's not fully opaque */ } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iW = mng_get_uint16 (pWorkrow); /* get input */ mng_put_uint16 (pRGBArow, iW); /* and put in intermediate row */ mng_put_uint16 (pRGBArow+2, iW); mng_put_uint16 (pRGBArow+4, iW); mng_put_uint16 (pRGBArow+6, 0xFFFF); pRGBArow += 8; /* next pixel */ pWorkrow += 2; } pData->bIsOpaque = MNG_TRUE; /* it's fully opaque */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_G16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_rgb8 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iR, iG, iB; mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_RGB8, MNG_LC_START); #endif if (!pBuf) /* no object? then use obj 0 */ pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; if (pBuf->bHasTRNS) /* tRNS encountered ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iR = *pWorkrow; /* get the RGB values */ iG = *(pWorkrow+1); iB = *(pWorkrow+2); /* transparent ? */ if ((iR == pBuf->iTRNSred) && (iG == pBuf->iTRNSgreen) && (iB == pBuf->iTRNSblue)) { *pRGBArow = 0; /* this pixel is transparent ! */ *(pRGBArow+1) = 0; *(pRGBArow+2) = 0; *(pRGBArow+3) = 0; } else { *pRGBArow = iR; /* copy the RGB values */ *(pRGBArow+1) = iG; *(pRGBArow+2) = iB; *(pRGBArow+3) = 0xFF; /* this one isn't transparent */ } pWorkrow += 3; /* next pixel */ pRGBArow += 4; } pData->bIsOpaque = MNG_FALSE; /* it's not fully opaque */ } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pRGBArow = *pWorkrow; /* copy the RGB bytes */ *(pRGBArow+1) = *(pWorkrow+1); *(pRGBArow+2) = *(pWorkrow+2); *(pRGBArow+3) = 0xFF; /* no alpha; so always fully opaque */ pWorkrow += 3; /* next pixel */ pRGBArow += 4; } pData->bIsOpaque = MNG_TRUE; /* it's fully opaque */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_process_rgb16 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint16 iR, iG, iB; mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_RGB16, MNG_LC_START); #endif if (!pBuf) /* no object? then use obj 0 */ pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; if (pBuf->bHasTRNS) /* tRNS encountered ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iR = mng_get_uint16 (pWorkrow); /* get the RGB values */ iG = mng_get_uint16 (pWorkrow+2); iB = mng_get_uint16 (pWorkrow+4); /* transparent ? */ if ((iR == pBuf->iTRNSred) && (iG == pBuf->iTRNSgreen) && (iB == pBuf->iTRNSblue)) { /* transparent then */ mng_put_uint16 (pRGBArow, 0); mng_put_uint16 (pRGBArow+2, 0); mng_put_uint16 (pRGBArow+4, 0); mng_put_uint16 (pRGBArow+6, 0); } else { /* put in intermediate row */ mng_put_uint16 (pRGBArow, iR); mng_put_uint16 (pRGBArow+2, iG); mng_put_uint16 (pRGBArow+4, iB); mng_put_uint16 (pRGBArow+6, 0xFFFF); } pWorkrow += 6; /* next pixel */ pRGBArow += 8; } pData->bIsOpaque = MNG_FALSE; /* it's not fully opaque */ } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* copy the RGB values */ mng_put_uint16 (pRGBArow, mng_get_uint16 (pWorkrow )); mng_put_uint16 (pRGBArow+2, mng_get_uint16 (pWorkrow+2)); mng_put_uint16 (pRGBArow+4, mng_get_uint16 (pWorkrow+4)); mng_put_uint16 (pRGBArow+6, 0xFFFF); pWorkrow += 6; /* next pixel */ pRGBArow += 8; } pData->bIsOpaque = MNG_TRUE; /* it's fully opaque */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_RGB16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_process_idx1 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; mng_uint8 iQ; mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_IDX1, MNG_LC_START); #endif if (!pBuf) /* no object? then use obj 0 */ pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; if (pBuf->bHasTRNS) /* tRNS encountered ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; iS = 7; } /* get the index */ iQ = (mng_uint8)((iB & iM) >> iS); /* index valid ? */ if ((mng_uint32)iQ < pBuf->iPLTEcount) { /* put in intermediate row */ *pRGBArow = pBuf->aPLTEentries [iQ].iRed; *(pRGBArow+1) = pBuf->aPLTEentries [iQ].iGreen; *(pRGBArow+2) = pBuf->aPLTEentries [iQ].iBlue; /* transparency for this index ? */ if ((mng_uint32)iQ < pBuf->iTRNScount) *(pRGBArow+3) = pBuf->aTRNSentries [iQ]; else *(pRGBArow+3) = 0xFF; } else MNG_ERROR (pData, MNG_PLTEINDEXERROR); pRGBArow += 4; /* next pixel */ iM >>= 1; iS -= 1; } pData->bIsOpaque = MNG_FALSE; /* it's not fully opaque */ } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0x80; iS = 7; } /* get the index */ iQ = (mng_uint8)((iB & iM) >> iS); /* index valid ? */ if ((mng_uint32)iQ < pBuf->iPLTEcount) { /* put in intermediate row */ *pRGBArow = pBuf->aPLTEentries [iQ].iRed; *(pRGBArow+1) = pBuf->aPLTEentries [iQ].iGreen; *(pRGBArow+2) = pBuf->aPLTEentries [iQ].iBlue; *(pRGBArow+3) = 0xFF; } else MNG_ERROR (pData, MNG_PLTEINDEXERROR); pRGBArow += 4; /* next pixel */ iM >>= 1; iS -= 1; } pData->bIsOpaque = MNG_TRUE; /* it's fully opaque */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_IDX1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_process_idx2 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; mng_uint8 iQ; mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_IDX2, MNG_LC_START); #endif if (!pBuf) /* no object? then use obj 0 */ pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; if (pBuf->bHasTRNS) /* tRNS encountered ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } /* get the index */ iQ = (mng_uint8)((iB & iM) >> iS); /* index valid ? */ if ((mng_uint32)iQ < pBuf->iPLTEcount) { /* put in intermediate row */ *pRGBArow = pBuf->aPLTEentries [iQ].iRed; *(pRGBArow+1) = pBuf->aPLTEentries [iQ].iGreen; *(pRGBArow+2) = pBuf->aPLTEentries [iQ].iBlue; /* transparency for this index ? */ if ((mng_uint32)iQ < pBuf->iTRNScount) *(pRGBArow+3) = pBuf->aTRNSentries [iQ]; else *(pRGBArow+3) = 0xFF; } else MNG_ERROR (pData, MNG_PLTEINDEXERROR); pRGBArow += 4; /* next pixel */ iM >>= 2; iS -= 2; } pData->bIsOpaque = MNG_FALSE; /* it's not fully opaque */ } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = *pWorkrow; /* get next input-byte */ pWorkrow++; iM = 0xC0; iS = 6; } /* get the index */ iQ = (mng_uint8)((iB & iM) >> iS); /* index valid ? */ if ((mng_uint32)iQ < pBuf->iPLTEcount) { /* put in intermediate row */ *pRGBArow = pBuf->aPLTEentries [iQ].iRed; *(pRGBArow+1) = pBuf->aPLTEentries [iQ].iGreen; *(pRGBArow+2) = pBuf->aPLTEentries [iQ].iBlue; *(pRGBArow+3) = 0xFF; } else MNG_ERROR (pData, MNG_PLTEINDEXERROR); pRGBArow += 4; /* next pixel */ iM >>= 2; iS -= 2; } pData->bIsOpaque = MNG_TRUE; /* it's fully opaque */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_IDX2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_process_idx4 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iB; mng_uint8 iM; mng_uint32 iS; mng_uint8 iQ; mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_IDX4, MNG_LC_START); #endif if (!pBuf) /* no object? then use obj 0 */ pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; iM = 0; /* start at pixel 0 */ iB = 0; iS = 0; if (pBuf->bHasTRNS) /* tRNS encountered ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = pWorkrow [0]; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* get the index */ iQ = (mng_uint8)((iB & iM) >> iS); /* index valid ? */ if ((mng_uint32)iQ < pBuf->iPLTEcount) { /* put in intermediate row */ pRGBArow [0] = pBuf->aPLTEentries [iQ].iRed; pRGBArow [1] = pBuf->aPLTEentries [iQ].iGreen; pRGBArow [2] = pBuf->aPLTEentries [iQ].iBlue; /* transparency for this index ? */ if ((mng_uint32)iQ < pBuf->iTRNScount) pRGBArow [3] = pBuf->aTRNSentries [iQ]; else pRGBArow [3] = 0xFF; } else MNG_ERROR (pData, MNG_PLTEINDEXERROR); pRGBArow += 4; /* next pixel */ iM >>= 4; iS -= 4; } pData->bIsOpaque = MNG_FALSE; /* it's not fully opaque */ } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iM) /* mask underflow ? */ { iB = pWorkrow [0]; /* get next input-byte */ pWorkrow++; iM = 0xF0; iS = 4; } /* get the index */ iQ = (mng_uint8)((iB & iM) >> iS); /* index valid ? */ if ((mng_uint32)iQ < pBuf->iPLTEcount) { /* put in intermediate row */ pRGBArow [0] = pBuf->aPLTEentries [iQ].iRed; pRGBArow [1] = pBuf->aPLTEentries [iQ].iGreen; pRGBArow [2] = pBuf->aPLTEentries [iQ].iBlue; pRGBArow [3] = 0xFF; } else MNG_ERROR (pData, MNG_PLTEINDEXERROR); pRGBArow += 4; /* next pixel */ iM >>= 4; iS -= 4; } pData->bIsOpaque = MNG_TRUE; /* it's fully opaque */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_IDX4, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_process_idx8 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint8 iQ; mng_imagedatap pBuf = (mng_imagedatap)pData->pStorebuf; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_IDX8, MNG_LC_START); #endif if (!pBuf) /* no object? then use obj 0 */ pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf; /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; if (pBuf->bHasTRNS) /* tRNS encountered ? */ { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iQ = *pWorkrow; /* get input byte */ /* index valid ? */ if ((mng_uint32)iQ < pBuf->iPLTEcount) { /* put in intermediate row */ pRGBArow [0] = pBuf->aPLTEentries [iQ].iRed; pRGBArow [1] = pBuf->aPLTEentries [iQ].iGreen; pRGBArow [2] = pBuf->aPLTEentries [iQ].iBlue; /* transparency for this index ? */ if ((mng_uint32)iQ < pBuf->iTRNScount) pRGBArow [3] = pBuf->aTRNSentries [iQ]; else pRGBArow [3] = 0xFF; } else MNG_ERROR (pData, MNG_PLTEINDEXERROR); pRGBArow += 4; /* next pixel */ pWorkrow++; } pData->bIsOpaque = MNG_FALSE; /* it's not fully opaque */ } else { #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iQ = *pWorkrow; /* get input byte */ /* index valid ? */ if ((mng_uint32)iQ < pBuf->iPLTEcount) { /* put in intermediate row */ pRGBArow [0] = pBuf->aPLTEentries [iQ].iRed; pRGBArow [1] = pBuf->aPLTEentries [iQ].iGreen; pRGBArow [2] = pBuf->aPLTEentries [iQ].iBlue; pRGBArow [3] = 0xFF; } else MNG_ERROR (pData, MNG_PLTEINDEXERROR); pRGBArow += 4; /* next pixel */ pWorkrow++; } pData->bIsOpaque = MNG_TRUE; /* it's fully opaque */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_IDX8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_process_ga8 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_GA8, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pRGBArow = *pWorkrow; /* copy the gray value */ *(pRGBArow+1) = *pWorkrow; *(pRGBArow+2) = *pWorkrow; *(pRGBArow+3) = *(pWorkrow+1); /* copy the alpha value */ pWorkrow += 2; /* next pixel */ pRGBArow += 4; } pData->bIsOpaque = MNG_FALSE; /* it's definitely not fully opaque */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_GA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_process_ga16 (mng_datap pData) { mng_uint8p pWorkrow; mng_uint8p pRGBArow; mng_int32 iX; mng_uint16 iW; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_GA16, MNG_LC_START); #endif /* temporary work pointers */ pWorkrow = pData->pWorkrow + pData->iPixelofs; pRGBArow = pData->pRGBArow; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iW = mng_get_uint16 (pWorkrow); /* copy the gray value */ mng_put_uint16 (pRGBArow, iW); mng_put_uint16 (pRGBArow+2, iW); mng_put_uint16 (pRGBArow+4, iW); /* copy the alpha value */ mng_put_uint16 (pRGBArow+6, mng_get_uint16 (pWorkrow+2)); pWorkrow += 4; /* next pixel */ pRGBArow += 8; } pData->bIsOpaque = MNG_FALSE; /* it's definitely not fully opaque */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_GA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_process_rgba8 (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_RGBA8, MNG_LC_START); #endif /* this is the easiest transform */ MNG_COPY (pData->pRGBArow, pData->pWorkrow + pData->iPixelofs, pData->iRowsize); pData->bIsOpaque = MNG_FALSE; /* it's definitely not fully opaque */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_process_rgba16 (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_RGBA16, MNG_LC_START); #endif /* this is the easiest transform */ MNG_COPY (pData->pRGBArow, pData->pWorkrow + pData->iPixelofs, pData->iRowsize); pData->bIsOpaque = MNG_FALSE; /* it's definitely not fully opaque */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ /* * * */ /* * Row processing initialization routines - set up the variables needed * */ /* * to process uncompressed row-data * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_FOOTPRINT_INIT #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_init_g1_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G1_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_g1; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_g1; else #endif pData->fStorerow = (mng_fptr)mng_store_g1; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g1; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 7; pData->iSamplediv = 3; pData->iRowsize = (pData->iRowsamples + 7) >> 3; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G1_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_g1_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G1_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_g1; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_g1; else #endif pData->fStorerow = (mng_fptr)mng_store_g1; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g1; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 1; pData->iSampleofs = 7; pData->iSamplediv = 3; pData->iRowsize = ((pData->iRowsamples + 7) >> 3); pData->iRowmax = ((pData->iDatawidth + 7) >> 3) + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G1_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_g2_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G2_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_g2; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_g2; else #endif pData->fStorerow = (mng_fptr)mng_store_g2; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g2; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 3; pData->iSamplediv = 2; pData->iRowsize = (pData->iRowsamples + 3) >> 2; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G2_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_g2_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G2_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_g2; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_g2; else #endif pData->fStorerow = (mng_fptr)mng_store_g2; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g2; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 1; pData->iSampleofs = 3; pData->iSamplediv = 2; pData->iRowsize = ((pData->iRowsamples + 3) >> 2); pData->iRowmax = ((pData->iDatawidth + 3) >> 2) + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G2_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_g4_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G4_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_g4; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_g4; else #endif pData->fStorerow = (mng_fptr)mng_store_g4; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g4; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 1; pData->iSamplediv = 1; pData->iRowsize = (pData->iRowsamples + 1) >> 1; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G4_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_g4_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G4_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_g4; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_g4; else #endif pData->fStorerow = (mng_fptr)mng_store_g4; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g4; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 1; pData->iSampleofs = 1; pData->iSamplediv = 1; pData->iRowsize = ((pData->iRowsamples + 1) >> 1); pData->iRowmax = ((pData->iDatawidth + 1) >> 1) + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G4_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_init_g8_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G8_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_g8; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_g8; else #endif pData->fStorerow = (mng_fptr)mng_store_g8; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g8; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G8_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_g8_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G8_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_g8; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_g8; else #endif pData->fStorerow = (mng_fptr)mng_store_g8; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g8; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 1; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples; pData->iRowmax = pData->iDatawidth + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G8_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_init_g16_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G16_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_g16; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_g16; else #endif pData->fStorerow = (mng_fptr)mng_store_g16; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g16; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 2; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples << 1; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 2; pData->bIsRGBA16 = MNG_TRUE; /* intermediate row is 16-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G16_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_init_g16_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G16_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_g16; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_g16; else #endif pData->fStorerow = (mng_fptr)mng_store_g16; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g16; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 2; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples << 1; pData->iRowmax = (pData->iDatawidth << 1) + pData->iPixelofs; pData->iFilterbpp = 2; pData->bIsRGBA16 = MNG_TRUE; /* intermediate row is 16-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_G16_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* ************************************************************************** */ mng_retcode mng_init_rgb8_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGB8_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_rgb8; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_rgb8; else #endif pData->fStorerow = (mng_fptr)mng_store_rgb8; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_rgb8; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 3; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples * 3; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 3; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGB8_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_rgb8_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGB8_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_rgb8; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_rgb8; else #endif pData->fStorerow = (mng_fptr)mng_store_rgb8; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_rgb8; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 3; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples * 3; pData->iRowmax = (pData->iDatawidth * 3) + pData->iPixelofs; pData->iFilterbpp = 3; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGB8_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_init_rgb16_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGB16_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_rgb16; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_rgb16; else #endif pData->fStorerow = (mng_fptr)mng_store_rgb16; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_rgb16; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 6; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples * 6; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 6; pData->bIsRGBA16 = MNG_TRUE; /* intermediate row is 16-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGB16_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_init_rgb16_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGB16_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_rgb16; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_rgb16; else #endif pData->fStorerow = (mng_fptr)mng_store_rgb16; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_rgb16; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 6; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples * 6; pData->iRowmax = (pData->iDatawidth * 6) + pData->iPixelofs; pData->iFilterbpp = 6; pData->bIsRGBA16 = MNG_TRUE; /* intermediate row is 16-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGB16_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_init_idx1_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX1_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_idx1; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_idx1; else #endif pData->fStorerow = (mng_fptr)mng_store_idx1; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_idx1; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 7; pData->iSamplediv = 3; pData->iRowsize = (pData->iRowsamples + 7) >> 3; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX1_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_idx1_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX1_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_idx1; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_idx1; else #endif pData->fStorerow = (mng_fptr)mng_store_idx1; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_idx1; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 1; pData->iSampleofs = 7; pData->iSamplediv = 3; pData->iRowsize = (pData->iRowsamples + 7) >> 3; pData->iRowmax = ((pData->iDatawidth + 7) >> 3) + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX1_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_idx2_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX2_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_idx2; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_idx2; else #endif pData->fStorerow = (mng_fptr)mng_store_idx2; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_idx2; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 3; pData->iSamplediv = 2; pData->iRowsize = (pData->iRowsamples + 3) >> 2; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX2_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_idx2_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX2_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_idx2; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_idx2; else #endif pData->fStorerow = (mng_fptr)mng_store_idx2; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_idx2; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 1; pData->iSampleofs = 3; pData->iSamplediv = 2; pData->iRowsize = (pData->iRowsamples + 3) >> 2; pData->iRowmax = ((pData->iDatawidth + 3) >> 2) + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX2_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_idx4_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX4_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_idx4; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_idx4; else #endif pData->fStorerow = (mng_fptr)mng_store_idx4; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_idx4; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 1; pData->iSamplediv = 1; pData->iRowsize = (pData->iRowsamples + 1) >> 1; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX4_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_idx4_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX4_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_idx4; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_idx4; else #endif pData->fStorerow = (mng_fptr)mng_store_idx4; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_idx4; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 1; pData->iSampleofs = 1; pData->iSamplediv = 1; pData->iRowsize = (pData->iRowsamples + 1) >> 1; pData->iRowmax = ((pData->iDatawidth + 1) >> 1) + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX4_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_init_idx8_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX8_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_idx8; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_idx8; else #endif pData->fStorerow = (mng_fptr)mng_store_idx8; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_idx8; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX8_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_idx8_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX8_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_idx8; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_idx8; else #endif pData->fStorerow = (mng_fptr)mng_store_idx8; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_idx8; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 1; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples; pData->iRowmax = pData->iDatawidth + pData->iPixelofs; pData->iFilterbpp = 1; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_IDX8_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_ga8_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GA8_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_ga8; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_ga8; else #endif pData->fStorerow = (mng_fptr)mng_store_ga8; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_ga8; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 2; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples << 1; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 2; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GA8_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_ga8_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GA8_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_ga8; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_ga8; else #endif pData->fStorerow = (mng_fptr)mng_store_ga8; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_ga8; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 2; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples << 1; pData->iRowmax = (pData->iDatawidth << 1) + pData->iPixelofs; pData->iFilterbpp = 2; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GA8_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_init_ga16_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GA16_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_ga16; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_ga16; else #endif pData->fStorerow = (mng_fptr)mng_store_ga16; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_ga16; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 4; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples << 2; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 4; pData->bIsRGBA16 = MNG_TRUE; /* intermediate row is 16-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GA16_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_init_ga16_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GA16_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_ga16; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_ga16; else #endif pData->fStorerow = (mng_fptr)mng_store_ga16; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_ga16; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 4; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples << 2; pData->iRowmax = (pData->iDatawidth << 2) + pData->iPixelofs; pData->iFilterbpp = 4; pData->bIsRGBA16 = MNG_TRUE; /* intermediate row is 16-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_GA16_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* ************************************************************************** */ mng_retcode mng_init_rgba8_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGBA8_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_rgba8; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_rgba8; else #endif pData->fStorerow = (mng_fptr)mng_store_rgba8; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_rgba8; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 4; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples << 2; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 4; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGBA8_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_rgba8_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGBA8_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_rgba8; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_rgba8; else #endif pData->fStorerow = (mng_fptr)mng_store_rgba8; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_rgba8; #endif pData->iPass = 0; /* from 0..6; is 1..7 in specifications */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 4; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples << 2; pData->iRowmax = (pData->iDatawidth << 2) + pData->iPixelofs; pData->iFilterbpp = 4; pData->bIsRGBA16 = MNG_FALSE; /* intermediate row is 8-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGBA8_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_init_rgba16_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGBA16_NI, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_rgba16; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_rgba16; else #endif pData->fStorerow = (mng_fptr)mng_store_rgba16; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_rgba16; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 8; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples << 3; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 8; pData->bIsRGBA16 = MNG_TRUE; /* intermediate row is 16-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGBA16_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_init_rgba16_i (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGBA16_I, MNG_LC_START); #endif if (pData->fDisplayrow) pData->fProcessrow = (mng_fptr)mng_process_rgba16; if (pData->pStoreobj) /* store in object too ? */ { /* immediate delta ? */ #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) pData->fStorerow = (mng_fptr)mng_delta_rgba16; else #endif pData->fStorerow = (mng_fptr)mng_store_rgba16; } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_rgba16; #endif pData->iPass = 0; /* from 0..6; (1..7 in specification) */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iSamplemul = 8; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples << 3; pData->iRowmax = (pData->iDatawidth << 3) + pData->iPixelofs; pData->iFilterbpp = 8; pData->bIsRGBA16 = MNG_TRUE; /* intermediate row is 16-bit deep */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_RGBA16_I, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* ************************************************************************** */ /* * * */ /* * Row processing initialization routines (JPEG) - set up the variables * */ /* * needed to process uncompressed row-data * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG /* ************************************************************************** */ #ifndef MNG_NO_1_2_4BIT_SUPPORT mng_retcode mng_init_jpeg_a1_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JPEG_A1_NI, MNG_LC_START); #endif if (pData->pStoreobj) /* store in object too ? */ { if (pData->iJHDRimgbitdepth == 8) { switch (pData->iJHDRcolortype) { case 12 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_g8_a1; break; } case 14 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_rgb8_a1; break; } } } /* TODO: bitdepth 12 & 20 */ } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g1; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 7; pData->iSamplediv = 3; pData->iRowsize = (pData->iRowsamples + 7) >> 3; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JPEG_A1_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_jpeg_a2_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JPEG_A2_NI, MNG_LC_START); #endif if (pData->pStoreobj) /* store in object too ? */ { if (pData->iJHDRimgbitdepth == 8) { switch (pData->iJHDRcolortype) { case 12 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_g8_a2; break; } case 14 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_rgb8_a2; break; } } } /* TODO: bitdepth 12 & 20 */ } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g2; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 3; pData->iSamplediv = 2; pData->iRowsize = (pData->iRowsamples + 3) >> 2; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JPEG_A2_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ mng_retcode mng_init_jpeg_a4_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JPEG_A4_NI, MNG_LC_START); #endif if (pData->pStoreobj) /* store in object too ? */ { if (pData->iJHDRimgbitdepth == 8) { switch (pData->iJHDRcolortype) { case 12 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_g8_a4; break; } case 14 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_rgb8_a4; break; } } } /* TODO: bitdepth 12 & 20 */ } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g4; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 1; pData->iSamplediv = 1; pData->iRowsize = (pData->iRowsamples + 1) >> 1; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JPEG_A4_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* MNG_NO_1_2_4BIT_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_init_jpeg_a8_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JPEG_A8_NI, MNG_LC_START); #endif if (pData->pStoreobj) /* store in object too ? */ { if (pData->iJHDRimgbitdepth == 8) { switch (pData->iJHDRcolortype) { case 12 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_g8_a8; break; } case 14 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_rgb8_a8; break; } } } /* TODO: bitdepth 12 & 20 */ } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g8; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 1; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 1; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JPEG_A8_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_init_jpeg_a16_ni (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JPEG_A16_NI, MNG_LC_START); #endif if (pData->pStoreobj) /* store in object too ? */ { if (pData->iJHDRimgbitdepth == 8) { switch (pData->iJHDRcolortype) { case 12 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_g8_a16; break; } case 14 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_rgb8_a16; break; } } } /* TODO: bitdepth 12 & 20 */ } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) pData->fDifferrow = (mng_fptr)mng_differ_g16; #endif pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; pData->iSamplemul = 2; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iRowsize = pData->iRowsamples << 1; pData->iRowmax = pData->iRowsize + pData->iPixelofs; pData->iFilterbpp = 2; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_JPEG_A16_NI, MNG_LC_END); #endif return mng_init_rowproc (pData); } #endif /* ************************************************************************** */ #endif /* MNG_INCLUDE_JNG */ #endif /* MNG_OPTIMIZE_FOOTPRINT_INIT */ /* ************************************************************************** */ /* * * */ /* * Generic row processing initialization & cleanup routines * */ /* * - initialize the buffers used by the row processing routines * */ /* * - cleanup the buffers used by the row processing routines * */ /* * * */ /* ************************************************************************** */ mng_retcode mng_init_rowproc (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ROWPROC, MNG_LC_START); #endif #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT if (pData->ePng_imgtype != png_none) { if (pData->fDisplayrow) switch (pData->ePng_imgtype) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case png_g1: pData->fProcessrow = (mng_fptr)mng_process_g1; break; case png_g2: pData->fProcessrow = (mng_fptr)mng_process_g2; break; case png_g4: pData->fProcessrow = (mng_fptr)mng_process_g4; break; #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case png_g8: pData->fProcessrow = (mng_fptr)mng_process_g8; break; #ifndef MNG_NO_1_2_4BIT_SUPPORT case png_idx1: pData->fProcessrow = (mng_fptr)mng_process_idx1; break; case png_idx2: pData->fProcessrow = (mng_fptr)mng_process_idx2; break; case png_idx4: pData->fProcessrow = (mng_fptr)mng_process_idx4; break; #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case png_idx8: pData->fProcessrow = (mng_fptr)mng_process_idx8; break; case png_ga8: pData->fProcessrow = (mng_fptr)mng_process_ga8; break; case png_rgb8: pData->fProcessrow = (mng_fptr)mng_process_rgb8; break; case png_rgba8: pData->fProcessrow = (mng_fptr)mng_process_rgba8; break; #ifndef MNG_NO_16BIT_SUPPORT case png_g16: pData->fProcessrow = (mng_fptr)mng_process_g16; break; case png_ga16: pData->fProcessrow = (mng_fptr)mng_process_ga16; break; case png_rgb16: pData->fProcessrow = (mng_fptr)mng_process_rgb16; break; case png_rgba16: pData->fProcessrow = (mng_fptr)mng_process_rgba16; break; #endif default: break; } if (pData->pStoreobj) /* store in object too ? */ { #ifndef MNG_NO_DELTA_PNG if ((pData->bHasDHDR) && (pData->bDeltaimmediate)) switch (pData->ePng_imgtype) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case png_g1: pData->fStorerow = (mng_fptr)mng_delta_g1; break; case png_g2: pData->fStorerow = (mng_fptr)mng_delta_g2; break; case png_g4: pData->fStorerow = (mng_fptr)mng_delta_g4; break; #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case png_g8: pData->fStorerow = (mng_fptr)mng_delta_g8; break; #ifndef MNG_NO_1_2_4BIT_SUPPORT case png_idx1: pData->fStorerow = (mng_fptr)mng_delta_idx1; break; case png_idx2: pData->fStorerow = (mng_fptr)mng_delta_idx2; break; case png_idx4: pData->fStorerow = (mng_fptr)mng_delta_idx4; break; #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case png_idx8: pData->fStorerow = (mng_fptr)mng_delta_idx8; break; case png_ga8: pData->fStorerow = (mng_fptr)mng_delta_ga8; break; case png_rgb8: pData->fStorerow = (mng_fptr)mng_delta_rgb8; break; case png_rgba8: pData->fStorerow = (mng_fptr)mng_delta_rgba8; break; #ifndef MNG_NO_16BIT_SUPPORT case png_g16: pData->fStorerow = (mng_fptr)mng_delta_g16; break; case png_ga16: pData->fStorerow = (mng_fptr)mng_delta_ga16; break; case png_rgb16: pData->fStorerow = (mng_fptr)mng_delta_rgb16; break; case png_rgba16: pData->fStorerow = (mng_fptr)mng_delta_rgba16; break; #endif default: break; } else #endif /* MNG_NO_DELTA_PNG */ switch (pData->ePng_imgtype) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case png_g1: pData->fStorerow = (mng_fptr)mng_store_g1; break; case png_g2: pData->fStorerow = (mng_fptr)mng_store_g2; break; case png_g4: pData->fStorerow = (mng_fptr)mng_store_g4; break; #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case png_g8: pData->fStorerow = (mng_fptr)mng_store_g8; break; #ifndef MNG_NO_1_2_4BIT_SUPPORT case png_idx1: pData->fStorerow = (mng_fptr)mng_store_idx1; break; case png_idx2: pData->fStorerow = (mng_fptr)mng_store_idx2; break; case png_idx4: pData->fStorerow = (mng_fptr)mng_store_idx4; break; #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case png_idx8: pData->fStorerow = (mng_fptr)mng_store_idx8; break; case png_ga8: pData->fStorerow = (mng_fptr)mng_store_ga8; break; case png_rgb8: pData->fStorerow = (mng_fptr)mng_store_rgb8; break; case png_rgba8: pData->fStorerow = (mng_fptr)mng_store_rgba8; break; #ifndef MNG_NO_16BIT_SUPPORT case png_g16: pData->fStorerow = (mng_fptr)mng_store_g16; break; case png_ga16: pData->fStorerow = (mng_fptr)mng_store_ga16; break; case png_rgb16: pData->fStorerow = (mng_fptr)mng_store_rgb16; break; case png_rgba16: pData->fStorerow = (mng_fptr)mng_store_rgba16; break; #endif #ifdef MNG_INCLUDE_JNG #ifndef MNG_NO_1_2_4BIT_SUPPORT case png_jpeg_a1: /* if (pData->iJHDRimgbitdepth == 8) */ { switch (pData->iJHDRcolortype) { case 12 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_g8_a1; break; } case 14 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_rgb8_a1; break; } } } /* TODO: bitdepth 12 & 20 */ break; case png_jpeg_a2: /* if (pData->iJHDRimgbitdepth == 8) */ { switch (pData->iJHDRcolortype) { case 12 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_g8_a2; break; } case 14 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_rgb8_a2; break; } } } break; /* TODO: bitdepth 12 & 20 */ case png_jpeg_a4: /* if (pData->iJHDRimgbitdepth == 8) */ { switch (pData->iJHDRcolortype) { case 12 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_g8_a4; break; } case 14 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_rgb8_a4; break; } } } break; #endif /* MNG_NO_1_2_4BIT_SUPPORT */ /* TODO: bitdepth 12 & 20 */ case png_jpeg_a8: /* if (pData->iJHDRimgbitdepth == 8) */ { switch (pData->iJHDRcolortype) { case 12 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_g8_a8; break; } case 14 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_rgb8_a8; break; } } } break; /* TODO: bitdepth 12 & 20 */ #ifndef MNG_NO_16BIT_SUPPORT case png_jpeg_a16: /* if (pData->iJHDRimgbitdepth == 8) */ { switch (pData->iJHDRcolortype) { case 12 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_g8_a16; break; } case 14 : { pData->fStorerow = (mng_fptr)mng_store_jpeg_rgb8_a16; break; } } } break; /* TODO: bitdepth 12 & 20 */ #endif #endif /* MNG_INCLUDE_JNG */ default: break; } } #ifdef FILTER192 /* leveling & differing ? */ if (pData->iFilter == MNG_FILTER_DIFFERING) switch (pData->ePng_imgtype) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case png_g1: #ifdef MNG_INCLUDE_JNG case png_jpeg_a1: #endif pData->fDifferrow = (mng_fptr)mng_differ_g1; break; case png_g2: #ifdef MNG_INCLUDE_JNG case png_jpeg_a2: #endif pData->fDifferrow = (mng_fptr)mng_differ_g2; break; case png_g4: #ifdef MNG_INCLUDE_JNG case png_jpeg_a4: #endif pData->fDifferrow = (mng_fptr)mng_differ_g4; break; #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case png_g8: #ifdef MNG_INCLUDE_JNG case png_jpeg_a8: #endif pData->fDifferrow = (mng_fptr)mng_differ_g8; break; case png_rgb8: pData->fDifferrow = (mng_fptr)mng_differ_rgb8; break; #ifndef MNG_NO_1_2_4BIT_SUPPORT case png_idx1: pData->fDifferrow = (mng_fptr)mng_differ_idx1; break; case png_idx2: pData->fDifferrow = (mng_fptr)mng_differ_idx2; break; case png_idx4: pData->fDifferrow = (mng_fptr)mng_differ_idx4; break; #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case png_idx8: pData->fDifferrow = (mng_fptr)mng_differ_idx8; break; case png_ga8: pData->fDifferrow = (mng_fptr)mng_differ_ga8; break; case png_rgb8: pData->fDifferrow = (mng_fptr)mng_differ_rgb8; break; case png_rgba8: pData->fDifferrow = (mng_fptr)mng_differ_rgba8; break; #ifndef MNG_NO_16BIT_SUPPORT case png_g16: #ifdef MNG_INCLUDE_JNG case png_jpeg_a16: #endif pData->fDifferrow = (mng_fptr)mng_differ_g16; break; case png_ga16: pData->fDifferrow = (mng_fptr)mng_differ_ga16; break; case png_rgb16: pData->fDifferrow = (mng_fptr)mng_differ_rgb16; break; case png_rgba16: pData->fDifferrow = (mng_fptr)mng_differ_rgba16; break; #endif default: break; } #endif switch (pData->ePng_imgtype) { #ifndef MNG_NO_1_2_4BIT_SUPPORT case png_g1: case png_idx1: #ifdef MNG_INCLUDE_JNG case png_jpeg_a1: #endif pData->iSamplemul = 1; pData->iSampleofs = 7; pData->iSamplediv = 3; pData->iFilterbpp = 1; break; case png_g2: case png_idx2: #ifdef MNG_INCLUDE_JNG case png_jpeg_a2: #endif pData->iSamplemul = 1; pData->iSampleofs = 3; pData->iSamplediv = 2; pData->iFilterbpp = 1; break; case png_g4: case png_idx4: #ifdef MNG_INCLUDE_JNG case png_jpeg_a4: #endif pData->iSamplemul = 1; pData->iSampleofs = 1; pData->iSamplediv = 1; pData->iFilterbpp = 1; break; #endif /* MNG_NO_1_2_4BIT_SUPPORT */ case png_g8: case png_idx8: #ifdef MNG_INCLUDE_JNG case png_jpeg_a8: #endif pData->iSamplemul = 1; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iFilterbpp = 1; break; case png_ga8: #ifndef MNG_NO_16BIT_SUPPORT case png_g16: #ifdef MNG_INCLUDE_JNG case png_jpeg_a16: #endif #endif pData->iSamplemul = 2; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iFilterbpp = 2; break; case png_rgb8: pData->iSamplemul = 3; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iFilterbpp = 3; break; #ifndef MNG_NO_16BIT_SUPPORT case png_ga16: #endif case png_rgba8: pData->iSamplemul = 4; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iFilterbpp = 4; break; #ifndef MNG_NO_16BIT_SUPPORT case png_rgb16: pData->iSamplemul = 6; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iFilterbpp = 6; break; case png_rgba16: pData->iSamplemul = 8; pData->iSampleofs = 0; pData->iSamplediv = 0; pData->iFilterbpp = 8; break; #endif default: break; } if (pData->iInterlace) /* noninterlaced */ { pData->iPass = 0; /* from 0..6; (1..7 in specification) */ pData->iRow = interlace_row [0]; pData->iRowinc = interlace_rowskip [0]; pData->iCol = interlace_col [0]; pData->iColinc = interlace_colskip [0]; pData->iRowsamples = (pData->iDatawidth + interlace_roundoff [0]) >> interlace_divider [0]; pData->iRowmax = ((pData->iDatawidth * pData->iSamplemul + pData->iSampleofs) >> pData->iSamplediv) + pData->iPixelofs; } else /* interlaced */ { pData->iPass = -1; pData->iRow = 0; pData->iRowinc = 1; pData->iCol = 0; pData->iColinc = 1; pData->iRowsamples = pData->iDatawidth; } if (pData->iSamplediv > 0) pData->iRowsize = (pData->iRowsamples + pData->iSampleofs) >> pData->iSamplediv; else pData->iRowsize = (pData->iRowsamples * pData->iSamplemul); if (!pData->iInterlace) /* noninterlaced */ pData->iRowmax = pData->iRowsize + pData->iPixelofs; #ifdef MNG_NO_16BIT_SUPPORT pData->bIsRGBA16 = MNG_FALSE; #else switch (pData->ePng_imgtype) { case png_g16: case png_ga16: case png_rgb16: case png_rgba16: pData->bIsRGBA16 = MNG_TRUE; break; default: pData->bIsRGBA16 = MNG_FALSE; break; } #endif } #endif /* MNG_OPTIMIZE_FOOTPRINT_INIT */ if (pData->pStoreobj) /* storage object selected ? */ { pData->pStorebuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; /* and so it becomes viewable ! */ ((mng_imagep)pData->pStoreobj)->bViewable = MNG_TRUE; ((mng_imagedatap)pData->pStorebuf)->bViewable = MNG_TRUE; } /* allocate the buffers; the individual init routines have already calculated the required maximum size; except in the case of a JNG without alpha!!! */ if (pData->iRowmax) { #if defined(MNG_NO_16BIT_SUPPORT) || defined (MNG_NO_1_2_4BIT_SUPPORT) mng_uint8 iRowadd = 0; #ifdef MNG_NO_1_2_4BIT_SUPPORT if (pData->iPNGdepth < 8) iRowadd=(pData->iPNGdepth*pData->iRowmax+7)/8; #endif #ifdef MNG_NO_16BIT_SUPPORT if (pData->iPNGdepth > 8) iRowadd=pData->iRowmax; #endif MNG_ALLOC (pData, pData->pWorkrow, pData->iRowmax+iRowadd); MNG_ALLOC (pData, pData->pPrevrow, pData->iRowmax+iRowadd); #else MNG_ALLOC (pData, pData->pWorkrow, pData->iRowmax); MNG_ALLOC (pData, pData->pPrevrow, pData->iRowmax); #endif } /* allocate an RGBA16 row for intermediate processing */ MNG_ALLOC (pData, pData->pRGBArow, (pData->iDatawidth << 3)); #ifndef MNG_NO_CMS if (pData->fDisplayrow) /* display "on-the-fly" ? */ { #if defined(MNG_FULL_CMS) /* determine color-management initialization */ mng_retcode iRetcode = mng_init_full_cms (pData, MNG_TRUE, MNG_TRUE, MNG_FALSE); #elif defined(MNG_GAMMA_ONLY) mng_retcode iRetcode = mng_init_gamma_only (pData, MNG_TRUE, MNG_TRUE, MNG_FALSE); #elif defined(MNG_APP_CMS) mng_retcode iRetcode = mng_init_app_cms (pData, MNG_TRUE, MNG_TRUE, MNG_FALSE); #endif if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* !MNG_NO_CMS */ #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ROWPROC, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_next_row (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_NEXT_ROW, MNG_LC_START); #endif pData->iRow += pData->iRowinc; /* increase the row counter */ if (pData->iPass >= 0) /* interlaced ? */ { while ((pData->iPass < 7) && /* went 'outside' the image ? */ ((pData->iRow >= (mng_int32)pData->iDataheight) || (pData->iCol >= (mng_int32)pData->iDatawidth ) )) { pData->iPass++; /* next pass ! */ if (pData->iPass < 7) /* there's only 7 passes ! */ { pData->iRow = interlace_row [pData->iPass]; pData->iRowinc = interlace_rowskip [pData->iPass]; pData->iCol = interlace_col [pData->iPass]; pData->iColinc = interlace_colskip [pData->iPass]; pData->iRowsamples = (pData->iDatawidth - pData->iCol + interlace_roundoff [pData->iPass]) >> interlace_divider [pData->iPass]; if (pData->iSamplemul > 1) /* recalculate row dimension */ pData->iRowsize = pData->iRowsamples * pData->iSamplemul; else if (pData->iSamplediv > 0) pData->iRowsize = (pData->iRowsamples + pData->iSampleofs) >> pData->iSamplediv; else pData->iRowsize = pData->iRowsamples; } if ((pData->iPass < 7) && /* reset previous row to zeroes ? */ (pData->iRow < (mng_int32)pData->iDataheight) && (pData->iCol < (mng_int32)pData->iDatawidth ) ) { /* making sure the filters will work properly! */ mng_int32 iX; mng_uint8p pTemp = pData->pPrevrow; #ifdef MNG_NO_16BIT_SUPPORT #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iPNGmult*pData->iRowsize; iX > 0; iX--) #else for (iX = 0; iX < pData->iPNGmult*pData->iRowsize; iX++) #endif #else #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsize; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsize; iX++) #endif #endif { *pTemp = 0; pTemp++; } } } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_NEXT_ROW, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_cleanup_rowproc (mng_datap pData) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CLEANUP_ROWPROC, MNG_LC_START); #endif #ifdef MNG_INCLUDE_LCMS /* cleanup cms profile/transform */ { mng_retcode iRetcode = mng_clear_cms (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #endif /* MNG_INCLUDE_LCMS */ if (pData->pRGBArow) /* cleanup buffer for intermediate row */ MNG_FREEX (pData, pData->pRGBArow, (pData->iDatawidth << 3)); if (pData->pPrevrow) /* cleanup buffer for previous row */ MNG_FREEX (pData, pData->pPrevrow, pData->iRowmax); if (pData->pWorkrow) /* cleanup buffer for working row */ MNG_FREEX (pData, pData->pWorkrow, pData->iRowmax); pData->pWorkrow = MNG_NULL; /* propogate uninitialized buffers */ pData->pPrevrow = MNG_NULL; pData->pRGBArow = MNG_NULL; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CLEANUP_ROWPROC, MNG_LC_END); #endif return MNG_NOERROR; /* woohiii */ } /* ************************************************************************** */ /* * * */ /* * Generic row processing routines for JNG * */ /* * * */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG /* ************************************************************************** */ mng_retcode mng_display_jpeg_rows (mng_datap pData) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_JPEG_ROWS, MNG_LC_START); #endif /* any completed rows ? */ if ((pData->iJPEGrow > pData->iJPEGdisprow) && (pData->iJPEGalpharow > pData->iJPEGdisprow) ) { mng_uint32 iX, iMax; mng_uint32 iSaverow = pData->iRow; /* save alpha decompression row-count */ /* determine the highest complete(!) row */ if (pData->iJPEGrow > pData->iJPEGalpharow) iMax = pData->iJPEGalpharow; else iMax = pData->iJPEGrow; /* display the rows */ for (iX = pData->iJPEGdisprow; iX < iMax; iX++) { pData->iRow = iX; /* make sure we all know which row to handle */ /* makeup an intermediate row from the buffer */ iRetcode = ((mng_retrieverow)pData->fRetrieverow) (pData); /* color-correct it if necessary */ if ((!iRetcode) && (pData->fCorrectrow)) iRetcode = ((mng_correctrow)pData->fCorrectrow) (pData); if (!iRetcode) /* and display it */ { iRetcode = ((mng_displayrow)pData->fDisplayrow) (pData); if (!iRetcode) /* check progressive display refresh */ iRetcode = mng_display_progressive_check (pData); } if (iRetcode) /* on error bail out */ return iRetcode; } pData->iJPEGdisprow = iMax; /* keep track of the last displayed row */ pData->iRow = iSaverow; /* restore alpha decompression row-count */ } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DISPLAY_JPEG_ROWS, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_next_jpeg_alpharow (mng_datap pData) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_NEXT_JPEG_ALPHAROW, MNG_LC_START); #endif pData->iJPEGalpharow++; /* count the row */ if (pData->fDisplayrow) /* display "on-the-fly" ? */ { /* try to display what you can */ iRetcode = mng_display_jpeg_rows (pData); if (iRetcode) /* on error bail out */ return iRetcode; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_NEXT_JPEG_ALPHAROW, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_next_jpeg_row (mng_datap pData) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_NEXT_JPEG_ROW, MNG_LC_START); #endif pData->iJPEGrow++; /* increase the row-counter */ if (pData->fDisplayrow) /* display "on-the-fly" ? */ { /* has alpha channel ? */ if ((pData->iJHDRcolortype == MNG_COLORTYPE_JPEGGRAYA ) || (pData->iJHDRcolortype == MNG_COLORTYPE_JPEGCOLORA) ) { /* try to display what you can */ iRetcode = mng_display_jpeg_rows (pData); } else { /* make sure we all know which row to handle */ pData->iRow = pData->iJPEGrow - 1; /* makeup an intermediate row from the buffer */ iRetcode = ((mng_retrieverow)pData->fRetrieverow) (pData); /* color-correct it if necessary */ if ((!iRetcode) && (pData->fCorrectrow)) iRetcode = ((mng_correctrow)pData->fCorrectrow) (pData); if (!iRetcode) /* and display it */ { iRetcode = ((mng_displayrow)pData->fDisplayrow) (pData); if (!iRetcode) /* check progressive display refresh */ iRetcode = mng_display_progressive_check (pData); } } if (iRetcode) /* on error bail out */ return iRetcode; } /* surpassed last filled row ? */ if (pData->iJPEGrow > pData->iJPEGrgbrow) pData->iJPEGrgbrow = pData->iJPEGrow; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_NEXT_JPEG_ROW, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_MAGN #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN #ifndef MNG_NO_GRAY_SUPPORT mng_retcode mng_magnify_g8_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX, iS, iM; mng_uint8p pTempsrc1; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_X1, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; if (iX == 0) /* first interval ? */ iM = iML; else if (iX == (iWidth - 1)) /* last interval ? */ iM = iMR; else iM = iMX; for (iS = 1; iS < iM; iS++) /* fill interval */ { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; } pTempsrc1++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_X1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_g8_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_X2, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 1; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { /* is it same as first ? */ if (*pTempsrc1 == *pTempsrc2) { for (iS = 1; iS < iM; iS++) /* then just repeat the first */ { *pTempdst = *pTempsrc1; pTempdst++; } } else { for (iS = 1; iS < iM; iS++) /* calculate the distances */ { *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2)) + (mng_int32)(*pTempsrc1) ); pTempdst++; } } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; } } } pTempsrc1++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_X2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_g8_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_X3, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 1; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { /* is it same as first ? */ if (*pTempsrc1 == *pTempsrc2) { for (iS = 1; iS < iM; iS++) /* then just repeat the first */ { *pTempdst = *pTempsrc1; pTempdst++; } } else { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* replicate first half */ { *pTempdst = *pTempsrc1; pTempdst++; } for (iS = iH; iS < iM; iS++) /* replicate second half */ { *pTempdst = *pTempsrc2; pTempdst++; } } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; } } } pTempsrc1++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_X3, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_GRAY_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_magnify_rgb8_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX, iS, iM; mng_uint8p pTempsrc1; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_X1, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; if (iX == 0) /* first interval ? */ iM = iML; else if (iX == (iWidth - 1)) /* last interval ? */ iM = iMR; else iM = iMX; for (iS = 1; iS < iM; iS++) /* fill interval */ { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; } pTempsrc1 += 3; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_X1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgb8_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_X2, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 3; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { for (iS = 1; iS < iM; iS++) { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2)) + (mng_int32)(*pTempsrc1) ); pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1); else *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+1)) - (mng_int32)(*(pTempsrc1+1)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+1)) ); pTempdst++; if (*(pTempsrc1+2) == *(pTempsrc2+2)) *pTempdst = *(pTempsrc1+2); else *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+2)) - (mng_int32)(*(pTempsrc1+2)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+2)) ); pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; } } } pTempsrc1 += 3; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_X2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgb8_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_X3, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 3; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* replicate first half */ { *pTempdst = *pTempsrc1; *(pTempdst+1) = *(pTempsrc1+1); *(pTempdst+2) = *(pTempsrc1+2); pTempdst += 3; } for (iS = iH; iS < iM; iS++) /* replicate second half */ { *pTempdst = *pTempsrc2; *(pTempdst+1) = *(pTempsrc2+1); *(pTempdst+2) = *(pTempsrc2+2); pTempdst += 3; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; } } } pTempsrc1 += 3; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_X3, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_GRAY_SUPPORT mng_retcode mng_magnify_ga8_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX, iS, iM; mng_uint8p pTempsrc1; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_X1, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; if (iX == 0) /* first interval ? */ iM = iML; else if (iX == (iWidth - 1)) /* last interval ? */ iM = iMR; else iM = iMX; for (iS = 1; iS < iM; iS++) /* fill interval */ { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; } pTempsrc1 += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_X1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga8_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_X2, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 2; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { for (iS = 1; iS < iM; iS++) { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2)) + (mng_int32)(*pTempsrc1) ); pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1); else *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+1)) - (mng_int32)(*(pTempsrc1+1)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+1)) ); pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; } } } pTempsrc1 += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_X2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga8_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_X3, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 2; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* replicate first half */ { *pTempdst = *pTempsrc1; *(pTempdst+1) = *(pTempsrc1+1); pTempdst += 2; } for (iS = iH; iS < iM; iS++) /* replicate second half */ { *pTempdst = *pTempsrc2; *(pTempdst+1) = *(pTempsrc2+1); pTempdst += 2; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; } } } pTempsrc1 += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_X3, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga8_x4 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_X4, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 2; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* first half */ { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2)) + (mng_int32)(*pTempsrc1) ); pTempdst++; *pTempdst = *(pTempsrc1+1); /* replicate alpha from left */ pTempdst++; } for (iS = iH; iS < iM; iS++) /* second half */ { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2)) + (mng_int32)(*pTempsrc1) ); pTempdst++; *pTempdst = *(pTempsrc2+1); /* replicate alpha from right */ pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; } } } pTempsrc1 += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_X4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga8_x5 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_X5, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 2; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* first half */ { *pTempdst = *pTempsrc1; /* replicate gray from left */ pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1);/* just repeat the first */ else /* calculate the distance */ *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+1)) - (mng_int32)(*(pTempsrc1+1)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+1)) ); pTempdst++; } for (iS = iH; iS < iM; iS++) /* second half */ { *pTempdst = *pTempsrc2; /* replicate gray from right */ pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1);/* just repeat the first */ else /* calculate the distance */ *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+1)) - (mng_int32)(*(pTempsrc1+1)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+1)) ); pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; } } } pTempsrc1 += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_X5, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_GRAY_SUPPORT */ #endif /* MNG_OPTIMIZE_FOOTPRINT_MAGN */ /* ************************************************************************** */ mng_retcode mng_magnify_rgba8_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX, iS, iM; mng_uint8p pTempsrc1; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_X1, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; if (iX == 0) /* first interval ? */ iM = iML; else if (iX == (iWidth - 1)) /* last interval ? */ iM = iMR; else iM = iMX; for (iS = 1; iS < iM; iS++) /* fill interval */ { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; } pTempsrc1 += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_X1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba8_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_X2, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 4; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { for (iS = 1; iS < iM; iS++) { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2)) + (mng_int32)(*pTempsrc1) ); pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1); else *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+1)) - (mng_int32)(*(pTempsrc1+1)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+1)) ); pTempdst++; if (*(pTempsrc1+2) == *(pTempsrc2+2)) *pTempdst = *(pTempsrc1+2); else *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+2)) - (mng_int32)(*(pTempsrc1+2)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+2)) ); pTempdst++; if (*(pTempsrc1+3) == *(pTempsrc2+3)) *pTempdst = *(pTempsrc1+3); else *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+3)) - (mng_int32)(*(pTempsrc1+3)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+3)) ); pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; } } } pTempsrc1 += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_X2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba8_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_X3, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 4; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* replicate first half */ { *pTempdst = *pTempsrc1; *(pTempdst+1) = *(pTempsrc1+1); *(pTempdst+2) = *(pTempsrc1+2); *(pTempdst+3) = *(pTempsrc1+3); pTempdst += 4; } for (iS = iH; iS < iM; iS++) /* replicate second half */ { *pTempdst = *pTempsrc2; *(pTempdst+1) = *(pTempsrc2+1); *(pTempdst+2) = *(pTempsrc2+2); *(pTempdst+3) = *(pTempsrc2+3); pTempdst += 4; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; } } } pTempsrc1 += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_X3, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba8_x4 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_X4, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 4; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* first half */ { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2)) + (mng_int32)(*pTempsrc1) ); pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1); else *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+1)) - (mng_int32)(*(pTempsrc1+1)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+1)) ); pTempdst++; if (*(pTempsrc1+2) == *(pTempsrc2+2)) *pTempdst = *(pTempsrc1+2); else *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+2)) - (mng_int32)(*(pTempsrc1+2)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+2)) ); pTempdst++; /* replicate alpha from left */ *pTempdst = *(pTempsrc1+3); pTempdst++; } for (iS = iH; iS < iM; iS++) /* second half */ { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2)) + (mng_int32)(*pTempsrc1) ); pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1); else *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+1)) - (mng_int32)(*(pTempsrc1+1)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+1)) ); pTempdst++; if (*(pTempsrc1+2) == *(pTempsrc2+2)) *pTempdst = *(pTempsrc1+2); else *pTempdst = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+2)) - (mng_int32)(*(pTempsrc1+2)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+2)) ); pTempdst++; /* replicate alpha from right */ *pTempdst = *(pTempsrc2+3); pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; } } } pTempsrc1 += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_X4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba8_x5 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_X5, MNG_LC_START); #endif pTempsrc1 = pSrcline; /* initialize pixel-loop */ pTempdst = pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 4; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* first half */ { *pTempdst = *pTempsrc1; /* replicate color from left */ *(pTempdst+1) = *(pTempsrc1+1); *(pTempdst+2) = *(pTempsrc1+2); if (*(pTempsrc1+3) == *(pTempsrc2+3)) *(pTempdst+3) = *(pTempsrc1+3); else *(pTempdst+3) = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+3)) - (mng_int32)(*(pTempsrc1+3)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+3)) ); pTempdst += 4; } for (iS = iH; iS < iM; iS++) /* second half */ { *pTempdst = *pTempsrc2; /* replicate color from right */ *(pTempdst+1) = *(pTempsrc2+1); *(pTempdst+2) = *(pTempsrc2+2); if (*(pTempsrc1+3) == *(pTempsrc2+3)) *(pTempdst+3) = *(pTempsrc1+3); else *(pTempdst+3) = (mng_uint8)(((2 * iS * ( (mng_int32)(*(pTempsrc2+3)) - (mng_int32)(*(pTempsrc1+3)) ) + iM) / (iM * 2)) + (mng_int32)(*(pTempsrc1+3)) ); pTempdst += 4; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; } } } pTempsrc1 += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_X4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN #ifndef MNG_NO_GRAY_SUPPORT mng_retcode mng_magnify_g8_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_Y1, MNG_LC_START); #endif MNG_COPY (pDstline, pSrcline1, iWidth); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_Y1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_g8_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_Y2, MNG_LC_START); #endif pTempsrc1 = pSrcline1; /* initialize pixel-loop */ pTempsrc2 = pSrcline2; pTempdst = pDstline; if (pTempsrc2) /* do we have a second line ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, iWidth); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_g8_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_Y3, MNG_LC_START); #endif if (pSrcline2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ MNG_COPY (pDstline, pSrcline1, iWidth) else MNG_COPY (pDstline, pSrcline2, iWidth); } else { /* just repeat the entire line */ MNG_COPY (pDstline, pSrcline1, iWidth); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G8_Y3, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_GRAY_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_magnify_rgb8_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_Y1, MNG_LC_START); #endif MNG_COPY (pDstline, pSrcline1, iWidth * 3); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_Y1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgb8_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_Y2, MNG_LC_START); #endif pTempsrc1 = pSrcline1; /* initialize pixel-loop */ pTempsrc2 = pSrcline2; pTempdst = pDstline; if (pTempsrc2) /* do we have a second line ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, iWidth * 3); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgb8_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_Y3, MNG_LC_START); #endif if (pSrcline2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ MNG_COPY (pDstline, pSrcline1, iWidth * 3) else MNG_COPY (pDstline, pSrcline2, iWidth * 3); } else { /* just repeat the entire line */ MNG_COPY (pDstline, pSrcline1, iWidth * 3); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB8_Y3, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_GRAY_SUPPORT mng_retcode mng_magnify_ga8_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_Y1, MNG_LC_START); #endif MNG_COPY (pDstline, pSrcline1, iWidth << 1); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_Y1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga8_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_Y2, MNG_LC_START); #endif pTempsrc1 = pSrcline1; /* initialize pixel-loop */ pTempsrc2 = pSrcline2; pTempdst = pDstline; if (pTempsrc2) /* do we have a second line ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, iWidth << 1); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga8_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_Y3, MNG_LC_START); #endif if (pSrcline2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ MNG_COPY (pDstline, pSrcline1, iWidth << 1) else MNG_COPY (pDstline, pSrcline2, iWidth << 1); } else { /* just repeat the entire line */ MNG_COPY (pDstline, pSrcline1, iWidth << 1); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga8_y4 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_Y4, MNG_LC_START); #endif pTempsrc1 = pSrcline1; /* initialize pixel-loop */ pTempsrc2 = pSrcline2; pTempdst = pDstline; if (pTempsrc2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2 += 2; *pTempdst++ = *pTempsrc1++; /* replicate alpha from top */ } } else { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1 += 2; pTempsrc2++; *pTempdst++ = *pTempsrc2++; /* replicate alpha from bottom */ } } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, iWidth << 1); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_Y4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga8_y5 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_Y5, MNG_LC_START); #endif pTempsrc1 = pSrcline1; /* initialize pixel-loop */ pTempsrc2 = pSrcline2; pTempdst = pDstline; if (pTempsrc2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ { for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc1; /* replicate gray from top */ pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) /* calculate the distances */ *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc2; /* replicate gray from bottom */ pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) /* calculate the distances */ *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, iWidth << 1); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA8_Y5, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_GRAY_SUPPORT */ #endif /* MNG_OPTIMIZE_FOOTPRINT_MAGN */ /* ************************************************************************** */ mng_retcode mng_magnify_rgba8_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_Y1, MNG_LC_START); #endif MNG_COPY (pDstline, pSrcline1, iWidth << 2); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_Y1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba8_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_Y2, MNG_LC_START); #endif pTempsrc1 = pSrcline1; /* initialize pixel-loop */ pTempsrc2 = pSrcline2; pTempdst = pDstline; if (pTempsrc2) /* do we have a second line ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, iWidth << 2); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba8_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_Y3, MNG_LC_START); #endif if (pSrcline2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ MNG_COPY (pDstline, pSrcline1, iWidth << 2) else MNG_COPY (pDstline, pSrcline2, iWidth << 2); } else { /* just repeat the entire line */ MNG_COPY (pDstline, pSrcline1, iWidth << 2); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba8_y4 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_Y4, MNG_LC_START); #endif pTempsrc1 = pSrcline1; /* initialize pixel-loop */ pTempsrc2 = pSrcline2; pTempdst = pDstline; if (pTempsrc2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2 += 2; *pTempdst++ = *pTempsrc1++; /* replicate alpha from top */ } } else { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1 += 2; pTempsrc2++; *pTempdst++ = *pTempsrc2++; /* replicate alpha from bottom */ } } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, iWidth << 2); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_Y4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba8_y5 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint8p pTempsrc1; mng_uint8p pTempsrc2; mng_uint8p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_Y5, MNG_LC_START); #endif pTempsrc1 = pSrcline1; /* initialize pixel-loop */ pTempsrc2 = pSrcline2; pTempdst = pDstline; if (pTempsrc2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ { for (iX = 0; iX < iWidth; iX++) { *pTempdst++ = *pTempsrc1++; /* replicate color from top */ *pTempdst++ = *pTempsrc1++; *pTempdst++ = *pTempsrc1++; pTempsrc2 += 3; if (*pTempsrc1 == *pTempsrc2) /* calculate the distances */ *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { for (iX = 0; iX < iWidth; iX++) { *pTempdst++ = *pTempsrc2++; /* replicate color from bottom */ *pTempdst++ = *pTempsrc2++; *pTempdst++ = *pTempsrc2++; pTempsrc1 += 3; if (*pTempsrc1 == *pTempsrc2) /* calculate the distances */ *pTempdst = *pTempsrc1; else *pTempdst = (mng_uint8)( ( (2 * iS * ( (mng_int32)(*pTempsrc2) - (mng_int32)(*pTempsrc1) ) + iM) / (iM * 2) ) + (mng_int32)(*pTempsrc1) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, iWidth << 2); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA8_Y5, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN #ifndef MNG_NO_16BIT_SUPPORT #ifndef MNG_NO_GRAY_SUPPORT mng_retcode mng_magnify_g16_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX, iS, iM; mng_uint16p pTempsrc1; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_X1, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; if (iX == 0) /* first interval ? */ iM = iML; else if (iX == (iWidth - 1)) /* last interval ? */ iM = iMR; else iM = iMX; for (iS = 1; iS < iM; iS++) /* fill interval */ { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; } pTempsrc1++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_X1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_g16_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_X2, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 1; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { /* is it same as first ? */ if (*pTempsrc1 == *pTempsrc2) { for (iS = 1; iS < iM; iS++) /* then just repeat the first */ { *pTempdst = *pTempsrc1; pTempdst++; } } else { for (iS = 1; iS < iM; iS++) /* calculate the distances */ { mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) )); pTempdst++; } } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; } } } pTempsrc1++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_X2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_g16_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_X3, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 1; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { /* is it same as first ? */ if (*pTempsrc1 == *pTempsrc2) { for (iS = 1; iS < iM; iS++) /* then just repeat the first */ { *pTempdst = *pTempsrc1; pTempdst++; } } else { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* replicate first half */ { *pTempdst = *pTempsrc1; pTempdst++; } for (iS = iH; iS < iM; iS++) /* replicate second half */ { *pTempdst = *pTempsrc2; pTempdst++; } } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; } } } pTempsrc1++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_X3, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_GRAY_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_magnify_rgb16_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX, iS, iM; mng_uint16p pTempsrc1; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_X1, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; if (iX == 0) /* first interval ? */ iM = iML; else if (iX == (iWidth - 1)) /* last interval ? */ iM = iMR; else iM = iMX; for (iS = 1; iS < iM; iS++) /* fill interval */ { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; } pTempsrc1 += 3; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_X1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgb16_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_X2, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 3; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { for (iS = 1; iS < iM; iS++) { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1); else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+1))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) ); pTempdst++; if (*(pTempsrc1+2) == *(pTempsrc2+2)) *pTempdst = *(pTempsrc1+2); else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+2))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+2))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+2))) ) ); pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; } } } pTempsrc1 += 3; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_X2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgb16_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_X3, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 3; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* replicate first half */ { *pTempdst = *pTempsrc1; *(pTempdst+1) = *(pTempsrc1+1); *(pTempdst+2) = *(pTempsrc1+2); pTempdst += 3; } for (iS = iH; iS < iM; iS++) /* replicate second half */ { *pTempdst = *pTempsrc2; *(pTempdst+1) = *(pTempsrc2+1); *(pTempdst+2) = *(pTempsrc2+2); pTempdst += 3; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; } } } pTempsrc1 += 3; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_X3, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_GRAY_SUPPORT mng_retcode mng_magnify_ga16_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX, iS, iM; mng_uint16p pTempsrc1; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_X1, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p) pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; if (iX == 0) /* first interval ? */ iM = iML; else if (iX == (iWidth - 1)) /* last interval ? */ iM = iMR; else iM = iMX; for (iS = 1; iS < iM; iS++) /* fill interval */ { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; } pTempsrc1 += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_X1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga16_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_X2, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 2; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { for (iS = 1; iS < iM; iS++) { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1); else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+1))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) ); pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; } } } pTempsrc1 += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_X2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga16_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_X3, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 2; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* replicate first half */ { *pTempdst = *pTempsrc1; *(pTempdst+1) = *(pTempsrc1+1); pTempdst += 2; } for (iS = iH; iS < iM; iS++) /* replicate second half */ { *pTempdst = *pTempsrc2; *(pTempdst+1) = *(pTempsrc2+1); pTempdst += 2; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; } } } pTempsrc1 += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_X3, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga16_x4 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_X4, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 2; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* first half */ { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; *pTempdst = *(pTempsrc1+1); /* replicate alpha from left */ pTempdst++; } for (iS = iH; iS < iM; iS++) /* second half */ { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; *pTempdst = *(pTempsrc2+1); /* replicate alpha from right */ pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; } } } pTempsrc1 += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_X4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga16_x5 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_X5, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 2; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = iMR; else iM = iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* first half */ { *pTempdst = *pTempsrc1; /* replicate gray from left */ pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1);/* just repeat the first */ else /* calculate the distance */ mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+1))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) ); pTempdst++; } for (iS = iH; iS < iM; iS++) /* second half */ { *pTempdst = *pTempsrc2; /* replicate gray from right */ pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1);/* just repeat the first */ else /* calculate the distance */ mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+1))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) ); pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; } } } pTempsrc1 += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_X5, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_GRAY_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_magnify_rgba16_x1 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX, iS, iM; mng_uint16p pTempsrc1; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_X1, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; if (iX == 0) /* first interval ? */ iM = iML; else if (iX == (iWidth - 1)) /* last interval ? */ iM = iMR; else iM = iMX; for (iS = 1; iS < iM; iS++) /* fill interval */ { *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; } pTempsrc1 += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_X1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba16_x2 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_X2, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 4; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { for (iS = 1; iS < iM; iS++) { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1); else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+1))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) ); pTempdst++; if (*(pTempsrc1+2) == *(pTempsrc2+2)) *pTempdst = *(pTempsrc1+2); else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+2))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+2))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+2))) ) ); pTempdst++; if (*(pTempsrc1+3) == *(pTempsrc2+3)) *pTempdst = *(pTempsrc1+3); else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+3))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+3))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+3))) ) ); pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; } } } pTempsrc1 += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_X2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba16_x3 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_X3, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 4; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* replicate first half */ { *pTempdst = *pTempsrc1; *(pTempdst+1) = *(pTempsrc1+1); *(pTempdst+2) = *(pTempsrc1+2); *(pTempdst+3) = *(pTempsrc1+3); pTempdst += 4; } for (iS = iH; iS < iM; iS++) /* replicate second half */ { *pTempdst = *pTempsrc2; *(pTempdst+1) = *(pTempsrc2+1); *(pTempdst+2) = *(pTempsrc2+2); *(pTempdst+3) = *(pTempsrc2+3); pTempdst += 4; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; } } } pTempsrc1 += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_X3, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba16_x4 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_X4, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 4; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* first half */ { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1); else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+1))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) ); pTempdst++; if (*(pTempsrc1+2) == *(pTempsrc2+2)) *pTempdst = *(pTempsrc1+2); else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+2))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+2))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+2))) ) ); pTempdst++; /* replicate alpha from left */ *pTempdst = *(pTempsrc1+3); pTempdst++; } for (iS = iH; iS < iM; iS++) /* second half */ { if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; /* just repeat the first */ else /* calculate the distance */ mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; if (*(pTempsrc1+1) == *(pTempsrc2+1)) *pTempdst = *(pTempsrc1+1); else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+1))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+1))) ) ); pTempdst++; if (*(pTempsrc1+2) == *(pTempsrc2+2)) *pTempdst = *(pTempsrc1+2); else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+2))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+2))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+2))) ) ); pTempdst++; /* replicate alpha from right */ *pTempdst = *(pTempsrc2+3); pTempdst++; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; } } } pTempsrc1 += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_X4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba16_x5 (mng_datap pData, mng_uint16 iMX, mng_uint16 iML, mng_uint16 iMR, mng_uint32 iWidth, mng_uint8p pSrcline, mng_uint8p pDstline) { mng_uint32 iX; mng_int32 iS, iM, iH; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_X5, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline; /* initialize pixel-loop */ pTempdst = (mng_uint16p)pDstline; for (iX = 0; iX < iWidth; iX++) { pTempsrc2 = pTempsrc1 + 4; *pTempdst = *pTempsrc1; /* copy original source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; if (iX == 0) /* first interval ? */ { if (iWidth == 1) /* single pixel ? */ pTempsrc2 = MNG_NULL; iM = (mng_int32)iML; } else if (iX == (iWidth - 2)) /* last interval ? */ iM = (mng_int32)iMR; else iM = (mng_int32)iMX; /* fill interval ? */ if ((iX < iWidth - 1) || (iWidth == 1)) { if (pTempsrc2) /* do we have the second pixel ? */ { iH = (iM+1) / 2; /* calculate halfway point */ for (iS = 1; iS < iH; iS++) /* first half */ { *pTempdst = *pTempsrc1; /* replicate color from left */ *(pTempdst+1) = *(pTempsrc1+1); *(pTempdst+2) = *(pTempsrc1+2); if (*(pTempsrc1+3) == *(pTempsrc2+3)) *(pTempdst+3) = *(pTempsrc1+3); else mng_put_uint16 ((mng_uint8p)(pTempdst+3), (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+3))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+3))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+3))) ) ); pTempdst += 4; } for (iS = iH; iS < iM; iS++) /* second half */ { *pTempdst = *pTempsrc2; /* replicate color from right */ *(pTempdst+1) = *(pTempsrc2+1); *(pTempdst+2) = *(pTempsrc2+2); if (*(pTempsrc1+3) == *(pTempsrc2+3)) *(pTempdst+3) = *(pTempsrc1+3); else mng_put_uint16 ((mng_uint8p)(pTempdst+3), (mng_uint16)(((2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc2+3))) - (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+3))) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)(pTempsrc1+3))) ) ); pTempdst += 4; } } else { for (iS = 1; iS < iM; iS++) { *pTempdst = *pTempsrc1; /* repeat first source pixel */ pTempdst++; *pTempdst = *(pTempsrc1+1); pTempdst++; *pTempdst = *(pTempsrc1+2); pTempdst++; *pTempdst = *(pTempsrc1+3); pTempdst++; } } } pTempsrc1 += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_X4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_GRAY_SUPPORT mng_retcode mng_magnify_g16_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_Y1, MNG_LC_START); #endif MNG_COPY (pDstline, pSrcline1, (iWidth << 1)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_Y1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_g16_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_Y2, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline1; /* initialize pixel-loop */ pTempsrc2 = (mng_uint16p)pSrcline2; pTempdst = (mng_uint16p)pDstline; if (pTempsrc2) /* do we have a second line ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, (iWidth << 1)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_g16_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_Y3, MNG_LC_START); #endif if (pSrcline2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ MNG_COPY (pDstline, pSrcline1, (iWidth << 1)) else MNG_COPY (pDstline, pSrcline2, (iWidth << 1)); } else { /* just repeat the entire line */ MNG_COPY (pDstline, pSrcline1, (iWidth << 1)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_G16_Y3, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_GRAY_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_magnify_rgb16_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_Y1, MNG_LC_START); #endif MNG_COPY (pDstline, pSrcline1, iWidth * 6); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_Y1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgb16_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_Y2, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline1; /* initialize pixel-loop */ pTempsrc2 = (mng_uint16p)pSrcline2; pTempdst = (mng_uint16p)pDstline; if (pTempsrc2) /* do we have a second line ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, iWidth * 6); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgb16_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_Y3, MNG_LC_START); #endif if (pSrcline2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ MNG_COPY (pDstline, pSrcline1, iWidth * 6) else MNG_COPY (pDstline, pSrcline2, iWidth * 6); } else { /* just repeat the entire line */ MNG_COPY (pDstline, pSrcline1, iWidth * 6); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGB16_Y3, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_GRAY_SUPPORT mng_retcode mng_magnify_ga16_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_Y1, MNG_LC_START); #endif MNG_COPY (pDstline, pSrcline1, (iWidth << 2)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_Y1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga16_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_Y2, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline1; /* initialize pixel-loop */ pTempsrc2 = (mng_uint16p)pSrcline2; pTempdst = (mng_uint16p)pDstline; if (pTempsrc2) /* do we have a second line ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, (iWidth << 2)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga16_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_Y3, MNG_LC_START); #endif if (pSrcline2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ MNG_COPY (pDstline, pSrcline1, (iWidth << 2)) else MNG_COPY (pDstline, pSrcline2, (iWidth << 2)); } else { /* just repeat the entire line */ MNG_COPY (pDstline, pSrcline1, (iWidth << 2)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga16_y4 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_Y4, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline1; /* initialize pixel-loop */ pTempsrc2 = (mng_uint16p)pSrcline2; pTempdst = (mng_uint16p)pDstline; if (pTempsrc2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2 += 2; *pTempdst++ = *pTempsrc1++; /* replicate alpha from top */ } } else { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1 += 2; pTempsrc2++; *pTempdst++ = *pTempsrc2++; /* replicate alpha from bottom */ } } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, (iWidth << 2)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_Y4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_ga16_y5 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_Y5, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline1; /* initialize pixel-loop */ pTempsrc2 = (mng_uint16p)pSrcline2; pTempdst = (mng_uint16p)pDstline; if (pTempsrc2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ { for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc1; /* replicate gray from top */ pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) /* calculate the distances */ *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { for (iX = 0; iX < iWidth; iX++) { *pTempdst = *pTempsrc2; /* replicate gray from bottom */ pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) /* calculate the distances */ *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, (iWidth << 2)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_GA16_Y5, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_GRAY_SUPPORT */ /* ************************************************************************** */ mng_retcode mng_magnify_rgba16_y1 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_Y1, MNG_LC_START); #endif MNG_COPY (pDstline, pSrcline1, (iWidth << 3)); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_Y1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba16_y2 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_Y2, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline1; /* initialize pixel-loop */ pTempsrc2 = (mng_uint16p)pSrcline2; pTempdst = (mng_uint16p)pDstline; if (pTempsrc2) /* do we have a second line ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, (iWidth << 3)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba16_y3 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_Y3, MNG_LC_START); #endif if (pSrcline2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ MNG_COPY (pDstline, pSrcline1, (iWidth << 3)) else MNG_COPY (pDstline, pSrcline2, (iWidth << 3)); } else { /* just repeat the entire line */ MNG_COPY (pDstline, pSrcline1, (iWidth << 3)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_Y2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba16_y4 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_Y4, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline1; /* initialize pixel-loop */ pTempsrc2 = (mng_uint16p)pSrcline2; pTempdst = (mng_uint16p)pDstline; if (pTempsrc2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2 += 2; *pTempdst++ = *pTempsrc1++; /* replicate alpha from top */ } } else { for (iX = 0; iX < iWidth; iX++) { /* calculate the distances */ if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; if (*pTempsrc1 == *pTempsrc2) *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1 += 2; pTempsrc2++; *pTempdst++ = *pTempsrc2++; /* replicate alpha from bottom */ } } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, (iWidth << 3)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_Y4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_magnify_rgba16_y5 (mng_datap pData, mng_int32 iS, mng_int32 iM, mng_uint32 iWidth, mng_uint8p pSrcline1, mng_uint8p pSrcline2, mng_uint8p pDstline) { mng_uint32 iX; mng_uint16p pTempsrc1; mng_uint16p pTempsrc2; mng_uint16p pTempdst; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_Y5, MNG_LC_START); #endif pTempsrc1 = (mng_uint16p)pSrcline1; /* initialize pixel-loop */ pTempsrc2 = (mng_uint16p)pSrcline2; pTempdst = (mng_uint16p)pDstline; if (pTempsrc2) /* do we have a second line ? */ { if (iS < (iM+1) / 2) /* top half ? */ { for (iX = 0; iX < iWidth; iX++) { *pTempdst++ = *pTempsrc1++; /* replicate color from top */ *pTempdst++ = *pTempsrc1++; *pTempdst++ = *pTempsrc1++; pTempsrc2 += 3; if (*pTempsrc1 == *pTempsrc2) /* calculate the distances */ *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } else { for (iX = 0; iX < iWidth; iX++) { *pTempdst++ = *pTempsrc2++; /* replicate color from bottom */ *pTempdst++ = *pTempsrc2++; *pTempdst++ = *pTempsrc2++; pTempsrc1 += 3; if (*pTempsrc1 == *pTempsrc2) /* calculate the distances */ *pTempdst = *pTempsrc1; else mng_put_uint16 ((mng_uint8p)pTempdst, (mng_uint16)( ( (2 * iS * ( (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc2)) - (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) + iM) / (iM * 2)) + (mng_int32)(mng_get_uint16 ((mng_uint8p)pTempsrc1)) ) ); pTempdst++; pTempsrc1++; pTempsrc2++; } } } else { /* just repeat the entire line */ MNG_COPY (pTempdst, pTempsrc1, (iWidth << 3)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_MAGNIFY_RGBA16_Y5, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* MNG_NO_16BIT_SUPPORT */ #endif /* MNG_OPTIMIZE_FOOTPRINT_MAGN */ #endif /* MNG_SKIPCHUNK_MAGN */ /* ************************************************************************** */ /* * * */ /* * PAST composition routines - compose over/under with a target object * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_composeover_rgba8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iFGa8, iBGa8; mng_uint8 iCr8, iCg8, iCb8, iCa8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_COMPOSEOVER_RGBA8, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iFGa8 = *(pWorkrow+3); /* get alpha values */ iBGa8 = *(pOutrow+3); if (iFGa8) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa8 == 0xFF) || (iBGa8 == 0)) { /* then simply copy the values */ *pOutrow = *pWorkrow; *(pOutrow+1) = *(pWorkrow+1); *(pOutrow+2) = *(pWorkrow+2); *(pOutrow+3) = iFGa8; } else { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ #ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pOutrow+i), *(pWorkrow+i), iFGa8, *(pOutrow+i)); } #else MNG_COMPOSE8 (*pOutrow, *pWorkrow, iFGa8, *pOutrow ); MNG_COMPOSE8 (*(pOutrow+1), *(pWorkrow+1), iFGa8, *(pOutrow+1)); MNG_COMPOSE8 (*(pOutrow+2), *(pWorkrow+2), iFGa8, *(pOutrow+2)); #endif /* alpha remains fully opaque !!! */ } else { /* here we'll have to blend */ MNG_BLEND8 (*pWorkrow, *(pWorkrow+1), *(pWorkrow+2), iFGa8, *pOutrow, *(pOutrow+1), *(pOutrow+2), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pOutrow = iCr8; *(pOutrow+1) = iCg8; *(pOutrow+2) = iCb8; *(pOutrow+3) = iCa8; } } } pOutrow += 4; pWorkrow += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_COMPOSEOVER_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_composeover_rgba16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint16p pWorkrow; mng_uint16p pOutrow; mng_int32 iX; mng_uint16 iFGa16, iFGr16, iFGg16, iFGb16; mng_uint16 iBGa16, iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16, iCa16; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_COMPOSEOVER_RGBA16, MNG_LC_START); #endif pWorkrow = (mng_uint16p)pData->pRGBArow; pOutrow = (mng_uint16p)(pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize)); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* get alpha values */ iFGa16 = mng_get_uint16 ((mng_uint8p)(pWorkrow+3)); iBGa16 = mng_get_uint16 ((mng_uint8p)(pOutrow+3)); if (iFGa16) /* any opacity at all ? */ { /* fully opaque or background fully transparent ? */ if ((iFGa16 == 0xFFFF) || (iBGa16 == 0)) { /* then simply copy the values */ *pOutrow = *pWorkrow; *(pOutrow+1) = *(pWorkrow+1); *(pOutrow+2) = *(pWorkrow+2); *(pOutrow+3) = *(pWorkrow+3); } else { /* get color values */ iFGr16 = mng_get_uint16 ((mng_uint8p)pWorkrow); iFGg16 = mng_get_uint16 ((mng_uint8p)(pWorkrow+1)); iFGb16 = mng_get_uint16 ((mng_uint8p)(pWorkrow+2)); iBGr16 = mng_get_uint16 ((mng_uint8p)pOutrow); iBGg16 = mng_get_uint16 ((mng_uint8p)(pOutrow+1)); iBGb16 = mng_get_uint16 ((mng_uint8p)(pOutrow+2)); if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* do alpha composing */ MNG_COMPOSE16 (iFGr16, iFGr16, iFGa16, iBGr16); MNG_COMPOSE16 (iFGg16, iFGg16, iFGa16, iBGg16); MNG_COMPOSE16 (iFGb16, iFGb16, iFGa16, iBGb16); mng_put_uint16 ((mng_uint8p)pOutrow, iFGr16); mng_put_uint16 ((mng_uint8p)(pOutrow+1), iFGg16); mng_put_uint16 ((mng_uint8p)(pOutrow+2), iFGb16); /* alpha remains fully opaque !!! */ } else { /* here we'll have to blend */ MNG_BLEND16 (iFGr16, iFGg16, iFGb16, iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ mng_put_uint16 ((mng_uint8p)pOutrow, iCr16); mng_put_uint16 ((mng_uint8p)(pOutrow+1), iCg16); mng_put_uint16 ((mng_uint8p)(pOutrow+2), iCb16); mng_put_uint16 ((mng_uint8p)(pOutrow+3), iCa16); } } } pOutrow += 4; pWorkrow += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_COMPOSEOVER_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_composeunder_rgba8 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint8p pWorkrow; mng_uint8p pOutrow; mng_int32 iX; mng_uint8 iFGa8, iBGa8; mng_uint8 iCr8, iCg8, iCb8, iCa8; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_COMPOSEUNDER_RGBA8, MNG_LC_START); #endif pWorkrow = pData->pRGBArow; pOutrow = pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { iFGa8 = *(pOutrow+3); /* get alpha values */ iBGa8 = *(pWorkrow+3); /* anything to do at all ? */ if ((iBGa8) && (iFGa8 != 0xFF)) { if (iBGa8 == 0xFF) /* background fully opaque ? */ { /* do alpha composing */ #ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE int i; for (i=2; i >= 0; i--) { MNG_COMPOSE8 (*(pOutrow+i), *(pOutrow+i), iFGa8, *(pWorkrow+i)); } #else MNG_COMPOSE8 (*pOutrow, *pOutrow, iFGa8, *pWorkrow ); MNG_COMPOSE8 (*(pOutrow+1), *(pOutrow+1), iFGa8, *(pWorkrow+1)); MNG_COMPOSE8 (*(pOutrow+2), *(pOutrow+2), iFGa8, *(pWorkrow+2)); #endif *(pOutrow+3) = 0xFF; /* alpha becomes fully opaque !!! */ } else { /* here we'll have to blend */ MNG_BLEND8 (*pOutrow, *(pOutrow+1), *(pOutrow+2), iFGa8, *pWorkrow, *(pWorkrow+1), *(pWorkrow+2), iBGa8, iCr8, iCg8, iCb8, iCa8); /* and return the composed values */ *pOutrow = iCr8; *(pOutrow+1) = iCg8; *(pOutrow+2) = iCb8; *(pOutrow+3) = iCa8; } } pOutrow += 4; pWorkrow += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_COMPOSEUNDER_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_composeunder_rgba16 (mng_datap pData) { mng_imagedatap pBuf = ((mng_imagep)pData->pStoreobj)->pImgbuf; mng_uint16p pWorkrow; mng_uint16p pOutrow; mng_int32 iX; mng_uint16 iFGa16, iFGr16, iFGg16, iFGb16; mng_uint16 iBGa16, iBGr16, iBGg16, iBGb16; mng_uint16 iCr16, iCg16, iCb16, iCa16; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_COMPOSEUNDER_RGBA16, MNG_LC_START); #endif pWorkrow = (mng_uint16p)pData->pRGBArow; pOutrow = (mng_uint16p)(pBuf->pImgdata + (pData->iRow * pBuf->iRowsize ) + (pData->iCol * pBuf->iSamplesize)); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* get alpha values */ iFGa16 = mng_get_uint16 ((mng_uint8p)(pOutrow+3)); iBGa16 = mng_get_uint16 ((mng_uint8p)(pWorkrow+3)); /* anything to do at all ? */ if ((iBGa16) && (iFGa16 != 0xFFFF)) { iFGr16 = mng_get_uint16 ((mng_uint8p)pOutrow); iFGg16 = mng_get_uint16 ((mng_uint8p)(pOutrow+1)); iFGb16 = mng_get_uint16 ((mng_uint8p)(pOutrow+2)); iBGr16 = mng_get_uint16 ((mng_uint8p)pWorkrow); iBGg16 = mng_get_uint16 ((mng_uint8p)(pWorkrow+1)); iBGb16 = mng_get_uint16 ((mng_uint8p)(pWorkrow+2)); if (iBGa16 == 0xFFFF) /* background fully opaque ? */ { /* do alpha composing */ MNG_COMPOSE16 (iFGr16, iFGr16, iFGa16, iBGr16); MNG_COMPOSE16 (iFGg16, iFGg16, iFGa16, iBGg16); MNG_COMPOSE16 (iFGb16, iFGb16, iFGa16, iBGb16); mng_put_uint16 ((mng_uint8p)pOutrow, iFGr16); mng_put_uint16 ((mng_uint8p)(pOutrow+1), iFGg16); mng_put_uint16 ((mng_uint8p)(pOutrow+2), iFGb16); *(pOutrow+3) = 0xFFFF; /* alpha becomes fully opaque !!! */ } else { /* here we'll have to blend */ MNG_BLEND16 (iFGr16, iFGg16, iFGb16, iFGa16, iBGr16, iBGg16, iBGb16, iBGa16, iCr16, iCg16, iCb16, iCa16); /* and return the composed values */ mng_put_uint16 ((mng_uint8p)pOutrow, iCr16); mng_put_uint16 ((mng_uint8p)(pOutrow+1), iCg16); mng_put_uint16 ((mng_uint8p)(pOutrow+2), iCb16); mng_put_uint16 ((mng_uint8p)(pOutrow+3), iCa16); } } pOutrow += 4; pWorkrow += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_COMPOSEUNDER_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* ************************************************************************** */ /* * * */ /* * PAST flip & tile routines - flip or tile a row of pixels * */ /* * * */ /* ************************************************************************** */ #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_flip_rgba8 (mng_datap pData) { mng_uint32p pWorkrow; mng_uint32p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FLIP_RGBA8, MNG_LC_START); #endif /* setup temp pointers */ pWorkrow = (mng_uint32p)pData->pRGBArow + pData->iRowsamples - 1; pOutrow = (mng_uint32p)pData->pWorkrow; /* swap original buffers */ pData->pWorkrow = pData->pRGBArow; pData->pRGBArow = (mng_uint8p)pOutrow; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* let's flip */ *pOutrow = *pWorkrow; pOutrow++; pWorkrow--; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FLIP_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_flip_rgba16 (mng_datap pData) { mng_uint32p pWorkrow; mng_uint32p pOutrow; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FLIP_RGBA16, MNG_LC_START); #endif /* setup temp pointers */ pWorkrow = (mng_uint32p)pData->pRGBArow + ((pData->iRowsamples - 1) << 1); pOutrow = (mng_uint32p)pData->pWorkrow; /* swap original buffers */ pData->pWorkrow = pData->pRGBArow; pData->pRGBArow = (mng_uint8p)pOutrow; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples; iX > 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { /* let's flip */ *pOutrow = *pWorkrow; *(pOutrow + 1) = *(pWorkrow + 1); pOutrow += 2; pWorkrow -= 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FLIP_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif /* ************************************************************************** */ mng_retcode mng_tile_rgba8 (mng_datap pData) { mng_uint32p pWorkrow; mng_uint32p pOutrow; mng_int32 iX; mng_uint32 iZ, iMax; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_TILE_RGBA8, MNG_LC_START); #endif iZ = pData->iSourcel; /* indent ? */ /* what's our source-length */ iMax = ((mng_imagep)pData->pRetrieveobj)->pImgbuf->iWidth; /* setup temp pointers */ pWorkrow = (mng_uint32p)pData->pRGBArow + iZ; pOutrow = (mng_uint32p)pData->pWorkrow; /* swap original buffers */ pData->pWorkrow = pData->pRGBArow; pData->pRGBArow = (mng_uint8p)pOutrow; for (iX = pData->iDestl; iX < pData->iDestr; iX++) { /* tiiiile */ *pOutrow = *pWorkrow; pWorkrow++; pOutrow++; iZ++; if (iZ >= iMax) /* end of source ? */ { iZ = 0; pWorkrow = (mng_uint32p)pData->pWorkrow; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_TILE_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #ifndef MNG_NO_16BIT_SUPPORT mng_retcode mng_tile_rgba16 (mng_datap pData) { mng_uint32p pWorkrow; mng_uint32p pOutrow; mng_int32 iX; mng_uint32 iZ, iMax; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_TILE_RGBA16, MNG_LC_START); #endif iZ = pData->iSourcel; /* indent ? */ /* what's our source-length */ iMax = ((mng_imagep)pData->pRetrieveobj)->pImgbuf->iWidth; /* setup temp pointers */ pWorkrow = (mng_uint32p)pData->pRGBArow + (iZ << 1); pOutrow = (mng_uint32p)pData->pWorkrow; /* swap original buffers */ pData->pWorkrow = pData->pRGBArow; pData->pRGBArow = (mng_uint8p)pOutrow; for (iX = pData->iDestl; iX < pData->iDestr; iX++) { /* tiiiile */ *pOutrow = *pWorkrow; *(pOutrow + 1) = *(pWorkrow + 1); pWorkrow += 2; pOutrow += 2; iZ++; if (iZ >= iMax) /* end of source ? */ { iZ = 0; pWorkrow = (mng_uint32p)pData->pWorkrow; } } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_TILE_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } #endif #endif /* MNG_SKIPCHUNK_PAST */ /* ************************************************************************** */ #endif /* MNG_INCLUDE_DISPLAY_PROCS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/aclocal.m40000644000000000000000000010746012115360515013330 0ustar rootroot# generated automatically by aclocal 1.13.1 -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.13' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.13.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.13.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of '-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) libmng-2.0.2/README.footprint0000644000000000000000000000253412005307152014363 0ustar rootroot/* You can use one or more of the following defines to reduce the size of the compiled library. Define the SKIPCANVAS macros for any canvas configurations that your application doesn't use. Define the SKIPCHUNK macros for any chunks that your application doesn't process. Define MNG_OPTIMIZE_FOOTPRINT to choose smaller code size over faster execution and less memory usage. These macros became available in version 1.0.6. */ /* eliminate unused features from libmng */ #define MNG_OPTIMIZE_FOOTPRINT #define MNG_OPTIMIZE_OBJCLEANUP #define MNG_OPTIMIZE_CHUNKINITFREE #define MNG_OPTIMIZE_CHUNKASSIGN #define MNG_OPTIMIZE_CHUNKREADER #define MNG_SKIPCANVAS_ABGR8 #define MNG_SKIPCANVAS_ARGB8 #define MNG_SKIPCANVAS_BGR8 #define MNG_SKIPCANVAS_BGRA8 #define MNG_SKIPCANVAS_BGRA8_PM #define MNG_SKIPCANVAS_BGRX8 #define MNG_SKIPCANVAS_RGBA8 #define MNG_SKIPCANVAS_BGR565 #define MNG_SKIPCANVAS_RGB565 #define MNG_SKIPCANVAS_BGRA565 #define MNG_SKIPCANVAS_RGBA565 #define MNG_SKIPCHUNK_iCCP #define MNG_SKIPCHUNK_tEXt #define MNG_SKIPCHUNK_zTXt #define MNG_SKIPCHUNK_iTXt #define MNG_SKIPCHUNK_bKGD #define MNG_SKIPCHUNK_pHYs #define MNG_SKIPCHUNK_sBIT #define MNG_SKIPCHUNK_sPLT #define MNG_SKIPCHUNK_hIST #define MNG_SKIPCHUNK_tIME #define MNG_SKIPCHUNK_eXPI #define MNG_SKIPCHUNK_fPRI #define MNG_SKIPCHUNK_nEED #define MNG_SKIPCHUNK_pHYg libmng-2.0.2/Unix/0000755000000000000000000000000012005307152012377 5ustar rootrootlibmng-2.0.2/Unix/mngtree/0000755000000000000000000000000012005307152014040 5ustar rootrootlibmng-2.0.2/Makefile.in0000644000000000000000000007540312115360516013537 0ustar rootroot# Makefile.in generated by automake 1.13.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in $(srcdir)/libmng.pc.in \ $(include_HEADERS) $(noinst_HEADERS) README config.guess \ config.sub install-sh missing ltmain.sh ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = libmng.pc CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" \ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libmng_la_LIBADD = am_libmng_la_OBJECTS = libmng_callback_xs.lo libmng_chunk_io.lo \ libmng_chunk_prc.lo libmng_chunk_xs.lo libmng_cms.lo \ libmng_display.lo libmng_dither.lo libmng_error.lo \ libmng_filter.lo libmng_hlapi.lo libmng_jpeg.lo \ libmng_object_prc.lo libmng_pixels.lo libmng_prop_xs.lo \ libmng_read.lo libmng_trace.lo libmng_write.lo libmng_zlib.lo libmng_la_OBJECTS = $(am_libmng_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libmng_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libmng_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = am__depfiles_maybe = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmng_la_SOURCES) DIST_SOURCES = $(libmng_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac man3dir = $(mandir)/man3 man5dir = $(mandir)/man5 NROFF = nroff MANS = $(man_MANS) DATA = $(pkgconfig_DATA) HEADERS = $(include_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope AM_RECURSIVE_TARGETS = cscope DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MNG_MAJOR_NR = @MNG_MAJOR_NR@ MNG_MINOR_NR = @MNG_MINOR_NR@ MNG_RELEASE_NR = @MNG_RELEASE_NR@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ MAINTAINERCLEANFILES = Makefile.in ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = 1.3 foreign no-dependencies # include the app subdirectories in the distribution EXTRA_DIST = makefiles doc contrib # libmng release @VERSION@ libmng_la_LDFLAGS = \ -version-number @MNG_MAJOR_NR@:@MNG_MINOR_NR@:@MNG_RELEASE_NR@ lib_LTLIBRARIES = libmng.la include_HEADERS = libmng.h libmng_conf.h libmng_types.h noinst_HEADERS = libmng_chunk_io.h libmng_chunk_prc.h libmng_chunks.h \ libmng_cms.h libmng_data.h libmng_display.h libmng_dither.h \ libmng_error.h libmng_filter.h libmng_jpeg.h libmng_memory.h \ libmng_object_prc.h libmng_objects.h libmng_pixels.h \ libmng_read.h libmng_trace.h libmng_write.h libmng_zlib.h libmng_la_SOURCES = libmng_callback_xs.c libmng_chunk_io.c \ libmng_chunk_prc.c libmng_chunk_xs.c libmng_cms.c \ libmng_display.c libmng_dither.c libmng_error.c \ libmng_filter.c libmng_hlapi.c libmng_jpeg.c \ libmng_object_prc.c libmng_pixels.c libmng_prop_xs.c \ libmng_read.c libmng_trace.c libmng_write.c libmng_zlib.c man_MANS = doc/man/libmng.3 doc/man/jng.5 doc/man/mng.5 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libmng.pc all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 libmng.pc: $(top_builddir)/config.status $(srcdir)/libmng.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libmng.la: $(libmng_la_OBJECTS) $(libmng_la_DEPENDENCIES) $(EXTRA_libmng_la_DEPENDENCIES) $(AM_V_CCLD)$(libmng_la_LINK) -rpath $(libdir) $(libmng_la_OBJECTS) $(libmng_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c .c.o: $(AM_V_CC)$(COMPILE) -c $< .c.obj: $(AM_V_CC)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-man3: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man3dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.3[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ done; } uninstall-man3: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man3dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.3[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) install-man5: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man5dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.5[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS) config.h installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-man \ install-pkgconfigDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man3 install-man5 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \ uninstall-man uninstall-pkgconfigDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-man: uninstall-man3 uninstall-man5 .MAKE: all install-am install-strip uninstall-am .PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \ clean-cscope clean-generic clean-libLTLIBRARIES clean-libtool \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-includeHEADERS \ install-info install-info-am install-libLTLIBRARIES \ install-man install-man3 install-man5 install-pdf \ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-hook uninstall-includeHEADERS \ uninstall-libLTLIBRARIES uninstall-man uninstall-man3 \ uninstall-man5 uninstall-pkgconfigDATA uninstall-hook: rm -f $(DESTDIR)$(pkgconfigdir)/libmng.pc rm -f $(DESTDIR)$(includedir)/libmng.h rm -f $(DESTDIR)$(includedir)/libmng_conf.h rm -f $(DESTDIR)$(includedir)/libmng_types.h # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libmng-2.0.2/libmng_display.h0000644000000000000000000004111112005307152014620 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_display.h copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.10 * */ /* * * */ /* * purpose : Display management (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the display managament routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.5.2 - 05/20/2000 - G.Juyn * */ /* * - added JNG support stuff * */ /* * * */ /* * 0.5.3 - 06/16/2000 - G.Juyn * */ /* * - changed progressive-display processing * */ /* * 0.5.3 - 06/22/2000 - G.Juyn * */ /* * - added support for delta-image processing * */ /* * - added support for PPLT chunk processing * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * 0.9.3 - 08/07/2000 - G.Juyn * */ /* * - B111300 - fixup for improved portability * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added JDAA chunk * */ /* * * */ /* * 0.9.4 - 11/24/2000 - G.Juyn * */ /* * - moved restore of object 0 to libmng_display * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/13/2002 - G.Juyn * */ /* * - fixed read/write of MAGN chunk * */ /* * 1.0.5 - 09/20/2002 - G.Juyn * */ /* * - added support for PAST * */ /* * 1.0.5 - 10/07/2002 - G.Juyn * */ /* * - added proposed change in handling of TERM- & if-delay * */ /* * 1.0.5 - 10/20/2002 - G.Juyn * */ /* * - fixed display of visible target of PAST operation * */ /* * * */ /* * 1.0.7 - 03/24/2004 - G.R-P. * */ /* * - added some SKIPCHUNK conditionals * */ /* * * */ /* * 1.0.9 - 12/11/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_DISPLAYCALLS * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_display_h_ #define _libmng_display_h_ /* ************************************************************************** */ #ifdef MNG_INCLUDE_DISPLAY_PROCS /* ************************************************************************** */ mng_retcode mng_display_progressive_refresh (mng_datap pData, mng_uint32 iInterval); /* ************************************************************************** */ mng_retcode mng_reset_objzero (mng_datap pData); mng_retcode mng_display_image (mng_datap pData, mng_imagep pImage, mng_bool bLayeradvanced); mng_retcode mng_execute_delta_image (mng_datap pData, mng_imagep pTarget, mng_imagep pDelta); /* ************************************************************************** */ mng_retcode mng_process_display (mng_datap pData); /* ************************************************************************** */ #ifdef MNG_OPTIMIZE_FOOTPRINT_INIT png_imgtype mng_png_imgtype (mng_uint8 colortype, mng_uint8 bitdepth); #endif /* ************************************************************************** */ #ifndef MNG_OPTIMIZE_DISPLAYCALLS mng_retcode mng_process_display_ihdr (mng_datap pData); #ifdef MNG_INCLUDE_MPNG_PROPOSAL mng_retcode mng_process_display_mpng (mng_datap pData); #endif #ifdef MNG_INCLUDE_ANG_PROPOSAL mng_retcode mng_process_display_ang (mng_datap pData); #endif mng_retcode mng_process_display_idat (mng_datap pData, mng_uint32 iRawlen, mng_uint8p pRawdata); mng_retcode mng_process_display_iend (mng_datap pData); mng_retcode mng_process_display_mend (mng_datap pData); mng_retcode mng_process_display_mend2 (mng_datap pData); mng_retcode mng_process_display_defi (mng_datap pData); #ifndef MNG_SKIPCHUNK_BASI mng_retcode mng_process_display_basi (mng_datap pData, mng_uint16 iRed, mng_uint16 iGreen, mng_uint16 iBlue, mng_bool bHasalpha, mng_uint16 iAlpha, mng_uint8 iViewable); #endif #ifndef MNG_SKIPCHUNK_CLON mng_retcode mng_process_display_clon (mng_datap pData, mng_uint16 iSourceid, mng_uint16 iCloneid, mng_uint8 iClonetype, mng_bool bHasdonotshow, mng_uint8 iDonotshow, mng_uint8 iConcrete, mng_bool bHasloca, mng_uint8 iLocationtype, mng_int32 iLocationx, mng_int32 iLocationy); mng_retcode mng_process_display_clon2 (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_DISC mng_retcode mng_process_display_disc (mng_datap pData, mng_uint32 iCount, mng_uint16p pIds); #endif #ifndef MNG_SKIPCHUNK_FRAM mng_retcode mng_process_display_fram (mng_datap pData, mng_uint8 iFramemode, mng_uint8 iChangedelay, mng_uint32 iDelay, mng_uint8 iChangetimeout, mng_uint32 iTimeout, mng_uint8 iChangeclipping, mng_uint8 iCliptype, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb); mng_retcode mng_process_display_fram2 (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_MOVE mng_retcode mng_process_display_move (mng_datap pData, mng_uint16 iFromid, mng_uint16 iToid, mng_uint8 iMovetype, mng_int32 iMovex, mng_int32 iMovey); #endif #ifndef MNG_SKIPCHUNK_CLIP mng_retcode mng_process_display_clip (mng_datap pData, mng_uint16 iFromid, mng_uint16 iToid, mng_uint8 iCliptype, mng_int32 iClipl, mng_int32 iClipr, mng_int32 iClipt, mng_int32 iClipb); #endif #ifndef MNG_SKIPCHUNK_SHOW mng_retcode mng_process_display_show (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_SAVE mng_retcode mng_process_display_save (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_SEEK mng_retcode mng_process_display_seek (mng_datap pData); #endif #ifdef MNG_INCLUDE_JNG mng_retcode mng_process_display_jhdr (mng_datap pData); mng_retcode mng_process_display_jdaa (mng_datap pData, mng_uint32 iRawlen, mng_uint8p pRawdata); mng_retcode mng_process_display_jdat (mng_datap pData, mng_uint32 iRawlen, mng_uint8p pRawdata); #endif #ifndef MNG_NO_DELTA_PNG mng_retcode mng_process_display_dhdr (mng_datap pData, mng_uint16 iObjectid, mng_uint8 iImagetype, mng_uint8 iDeltatype, mng_uint32 iBlockwidth, mng_uint32 iBlockheight, mng_uint32 iBlockx, mng_uint32 iBlocky); mng_retcode mng_process_display_prom (mng_datap pData, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iFilltype); mng_retcode mng_process_display_ipng (mng_datap pData); #ifdef MNG_INCLUDE_JNG mng_retcode mng_process_display_ijng (mng_datap pData); #endif mng_retcode mng_process_display_pplt (mng_datap pData, mng_uint8 iType, mng_uint32 iCount, mng_palette8ep paIndexentries, mng_uint8p paAlphaentries, mng_uint8p paUsedentries); #endif #ifndef MNG_SKIPCHUNK_MAGN mng_retcode mng_process_display_magn (mng_datap pData, mng_uint16 iFirstid, mng_uint16 iLastid, mng_uint8 iMethodX, mng_uint16 iMX, mng_uint16 iMY, mng_uint16 iML, mng_uint16 iMR, mng_uint16 iMT, mng_uint16 iMB, mng_uint8 iMethodY); mng_retcode mng_process_display_magn2 (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_process_display_past (mng_datap pData, mng_uint16 iTargetid, mng_uint8 iTargettype, mng_int32 iTargetx, mng_int32 iTargety, mng_uint32 iCount, mng_ptr pSources); mng_retcode mng_process_display_past2 (mng_datap pData); #endif #else /* MNG_OPTIMIZE_DISPLAYCALLS */ mng_retcode mng_process_display_ihdr (mng_datap pData); #ifdef MNG_INCLUDE_MPNG_PROPOSAL mng_retcode mng_process_display_mpng (mng_datap pData); #endif mng_retcode mng_process_display_idat (mng_datap pData); mng_retcode mng_process_display_iend (mng_datap pData); mng_retcode mng_process_display_mend (mng_datap pData); mng_retcode mng_process_display_mend2 (mng_datap pData); mng_retcode mng_process_display_defi (mng_datap pData); #ifndef MNG_SKIPCHUNK_BASI mng_retcode mng_process_display_basi (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_CLON mng_retcode mng_process_display_clon (mng_datap pData); mng_retcode mng_process_display_clon2 (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_DISC mng_retcode mng_process_display_disc (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_FRAM mng_retcode mng_process_display_fram (mng_datap pData); mng_retcode mng_process_display_fram2 (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_MOVE mng_retcode mng_process_display_move (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_CLIP mng_retcode mng_process_display_clip (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_SHOW mng_retcode mng_process_display_show (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_SAVE mng_retcode mng_process_display_save (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_SEEK mng_retcode mng_process_display_seek (mng_datap pData); #endif #ifdef MNG_INCLUDE_JNG mng_retcode mng_process_display_jhdr (mng_datap pData); mng_retcode mng_process_display_jdaa (mng_datap pData); mng_retcode mng_process_display_jdat (mng_datap pData); #endif #ifndef MNG_NO_DELTA_PNG mng_retcode mng_process_display_dhdr (mng_datap pData); mng_retcode mng_process_display_prom (mng_datap pData); mng_retcode mng_process_display_ipng (mng_datap pData); #ifdef MNG_INCLUDE_JNG mng_retcode mng_process_display_ijng (mng_datap pData); #endif mng_retcode mng_process_display_pplt (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_MAGN mng_retcode mng_process_display_magn (mng_datap pData); mng_retcode mng_process_display_magn2 (mng_datap pData); #endif #ifndef MNG_SKIPCHUNK_PAST mng_retcode mng_process_display_past (mng_datap pData); mng_retcode mng_process_display_past2 (mng_datap pData); #endif #endif /* MNG_OPTIMIZE_DISPLAYCALLS */ /* ************************************************************************** */ #endif /* MNG_INCLUDE_DISPLAY_PROCS */ /* ************************************************************************** */ #endif /* _libmng_display_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_filter.c0000644000000000000000000006270112005307152014443 0ustar rootroot#include "config.h" /* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_filter.c copyright (c) 2000-2004 G.Juyn * */ /* * version : 1.0.9 * */ /* * * */ /* * purpose : Filtering routines (implementation) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : implementation of the filtering routines * */ /* * * */ /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/12/2000 - G.Juyn * */ /* * - changed trace to macro for callback error-reporting * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 09/07/2000 - G.Juyn * */ /* * - added support for new filter_types * */ /* * * */ /* * 1.0.5 - 08/07/2002 - G.Juyn * */ /* * - added test-option for PNG filter method 193 (=no filter) * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - reversed some loops to use decrementing counter * */ /* * * */ /* * 1.0.9 - 12/20/2004 - G.Juyn * */ /* * - cleaned up macro-invocations (thanks to D. Airlie) * */ /* * * */ /* ************************************************************************** */ #include "libmng.h" #include "libmng_data.h" #include "libmng_error.h" #include "libmng_trace.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "libmng_filter.h" #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif /* ************************************************************************** */ #ifdef MNG_INCLUDE_FILTERS /* ************************************************************************** */ MNG_LOCAL mng_retcode filter_sub (mng_datap pData) { mng_uint32 iBpp; mng_uint8p pRawx; mng_uint8p pRawx_prev; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FILTER_SUB, MNG_LC_START); #endif iBpp = pData->iFilterbpp; pRawx = pData->pWorkrow + pData->iPixelofs + iBpp; pRawx_prev = pData->pWorkrow + pData->iPixelofs; for (iX = iBpp; iX < pData->iRowsize; iX++) { *pRawx = (mng_uint8)(*pRawx + *pRawx_prev); pRawx++; pRawx_prev++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FILTER_SUB, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode filter_up (mng_datap pData) { mng_uint8p pRawx; mng_uint8p pPriorx; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FILTER_UP, MNG_LC_START); #endif pRawx = pData->pWorkrow + pData->iPixelofs; pPriorx = pData->pPrevrow + pData->iPixelofs; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsize - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsize; iX++) #endif { *pRawx = (mng_uint8)(*pRawx + *pPriorx); pRawx++; pPriorx++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FILTER_UP, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode filter_average (mng_datap pData) { mng_int32 iBpp; mng_uint8p pRawx; mng_uint8p pRawx_prev; mng_uint8p pPriorx; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FILTER_AVERAGE, MNG_LC_START); #endif iBpp = pData->iFilterbpp; pRawx = pData->pWorkrow + pData->iPixelofs; pPriorx = pData->pPrevrow + pData->iPixelofs; pRawx_prev = pData->pWorkrow + pData->iPixelofs; #ifdef MNG_DECREMENT_LOOPS for (iX = iBpp - 1; iX >= 0; iX--) #else for (iX = 0; iX < iBpp; iX++) #endif { *pRawx = (mng_uint8)(*pRawx + ((*pPriorx) >> 1)); pRawx++; pPriorx++; } for (iX = iBpp; iX < pData->iRowsize; iX++) { *pRawx = (mng_uint8)(*pRawx + ((*pRawx_prev + *pPriorx) >> 1)); pRawx++; pPriorx++; pRawx_prev++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FILTER_AVERAGE, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ MNG_LOCAL mng_retcode filter_paeth (mng_datap pData) { mng_int32 iBpp; mng_uint8p pRawx; mng_uint8p pRawx_prev; mng_uint8p pPriorx; mng_uint8p pPriorx_prev; mng_int32 iX; mng_uint32 iA, iB, iC; mng_uint32 iP; mng_uint32 iPa, iPb, iPc; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FILTER_PAETH, MNG_LC_START); #endif iBpp = pData->iFilterbpp; pRawx = pData->pWorkrow + pData->iPixelofs; pPriorx = pData->pPrevrow + pData->iPixelofs; pRawx_prev = pData->pWorkrow + pData->iPixelofs; pPriorx_prev = pData->pPrevrow + pData->iPixelofs; #ifdef MNG_DECREMENT_LOOPS for (iX = iBpp - 1; iX >= 0; iX--) #else for (iX = 0; iX < iBpp; iX++) #endif { *pRawx = (mng_uint8)(*pRawx + *pPriorx); pRawx++; pPriorx++; } for (iX = iBpp; iX < pData->iRowsize; iX++) { iA = (mng_uint32)*pRawx_prev; iB = (mng_uint32)*pPriorx; iC = (mng_uint32)*pPriorx_prev; iP = iA + iB - iC; iPa = abs (iP - iA); iPb = abs (iP - iB); iPc = abs (iP - iC); if ((iPa <= iPb) && (iPa <= iPc)) *pRawx = (mng_uint8)(*pRawx + iA); else if (iPb <= iPc) *pRawx = (mng_uint8)(*pRawx + iB); else *pRawx = (mng_uint8)(*pRawx + iC); pRawx++; pPriorx++; pRawx_prev++; pPriorx_prev++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FILTER_PAETH, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_filter_a_row (mng_datap pData) { mng_retcode iRetcode; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FILTER_A_ROW, MNG_LC_START); #endif switch (*(pData->pWorkrow + pData->iFilterofs)) { case 1 : { iRetcode = filter_sub (pData); break; } case 2 : { iRetcode = filter_up (pData); break; } case 3 : { iRetcode = filter_average (pData); break; } case 4 : { iRetcode = filter_paeth (pData); break; } default : iRetcode = MNG_INVALIDFILTER; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FILTER_A_ROW, MNG_LC_END); #endif return iRetcode; } /* ************************************************************************** */ /* ************************************************************************** */ #ifdef FILTER192 mng_retcode mng_init_rowdiffering (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ROWDIFFERING, MNG_LC_START); #endif if (pData->iFilter == 0xC0) /* has leveling parameters ? */ { switch (pData->iColortype) /* salvage leveling parameters */ { case 0 : { /* gray */ if (pData->iBitdepth <= 8) pData->iLevel0 = (mng_uint16)*pData->pWorkrow; else pData->iLevel0 = mng_get_uint16 (pData->pWorkrow); break; } case 2 : { /* rgb */ if (pData->iBitdepth <= 8) { pData->iLevel0 = (mng_uint16)*pData->pWorkrow; pData->iLevel1 = (mng_uint16)*(pData->pWorkrow+1); pData->iLevel2 = (mng_uint16)*(pData->pWorkrow+2); } else { pData->iLevel0 = mng_get_uint16 (pData->pWorkrow); pData->iLevel1 = mng_get_uint16 (pData->pWorkrow+2); pData->iLevel2 = mng_get_uint16 (pData->pWorkrow+4); } break; } case 3 : { /* indexed */ pData->iLevel0 = (mng_uint16)*pData->pWorkrow; break; } case 4 : { /* gray+alpha */ if (pData->iBitdepth <= 8) { pData->iLevel0 = (mng_uint16)*pData->pWorkrow; pData->iLevel1 = (mng_uint16)*(pData->pWorkrow+1); } else { pData->iLevel0 = mng_get_uint16 (pData->pWorkrow); pData->iLevel1 = mng_get_uint16 (pData->pWorkrow+2); } break; } case 6 : { /* rgb+alpha */ if (pData->iBitdepth <= 8) { pData->iLevel0 = (mng_uint16)*pData->pWorkrow; pData->iLevel1 = (mng_uint16)*(pData->pWorkrow+1); pData->iLevel2 = (mng_uint16)*(pData->pWorkrow+2); pData->iLevel3 = (mng_uint16)*(pData->pWorkrow+3); } else { pData->iLevel0 = mng_get_uint16 (pData->pWorkrow); pData->iLevel1 = mng_get_uint16 (pData->pWorkrow+2); pData->iLevel2 = mng_get_uint16 (pData->pWorkrow+4); pData->iLevel3 = mng_get_uint16 (pData->pWorkrow+6); } break; } } } /* shift the entire row back in place */ pRawi = pData->pWorkrow + pData->iFilterofs; pRawo = pData->pWorkrow; for (iX = 0; iX < pData->iRowsize + pData->iPixelofs - pData->iFilterofs; iX++) *pRawo++ = *pRawi++; pData->iFilterofs = 0; /* indicate so ! */ #ifdef FILTER193 if (pData->iFilter == 0xC1) /* no adaptive filtering ? */ pData->iPixelofs = pData->iFilterofs; else #endif pData->iPixelofs = pData->iFilterofs + 1; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ROWDIFFERING, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_g1 (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G1, MNG_LC_START); #endif if (pData->iLevel0 & 0x01) /* is it uneven level ? */ { pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; /* just invert every bit */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsize - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsize; iX++) #endif *pRawo++ = (mng_uint8)(~(*pRawi++)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_g2 (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; mng_int32 iC, iS; mng_uint8 iB, iN, iQ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G2, MNG_LC_START); #endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; iC = 0; iB = 0; iN = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iC) { iC = 4; iB = *pRawi++; iN = 0; iS = 8; } iS -= 2; iQ = (mng_uint8)(((iB >> iS) + pData->iLevel0) & 0x03); iN = (mng_uint8)((iN << 2) + iQ); iC--; if (!iC) *pRawo++ = iN; } if (iC) *pRawo = (mng_uint8)(iN << iS); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_g4 (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; mng_int32 iC, iS; mng_uint8 iB, iN, iQ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G4, MNG_LC_START); #endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; iC = 0; iB = 0; iN = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iC) { iC = 2; iB = *pRawi++; iN = 0; iS = 8; } iS -= 4; iQ = (mng_uint8)(((iB >> iS) + pData->iLevel0) & 0x0F); iN = (mng_uint8)((iN << 4) + iQ); iC--; if (!iC) *pRawo++ = iN; } if (iC) *pRawo = (mng_uint8)(iN << iS); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_g8 (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G8, MNG_LC_START); #endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pRawo++ = (mng_uint8)(((mng_uint16)*pRawi + pData->iLevel0) & 0xFF); pRawi++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_g16 (mng_datap pData) { mng_uint16p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G16, MNG_LC_START); #endif pRawi = (mng_uint16p)(pData->pWorkrow + pData->iPixelofs); pRawo = (mng_uint16p)(pData->pPrevrow + pData->iPixelofs); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pRawo++ = (mng_uint16)(((mng_uint32)*pRawi + (mng_uint32)pData->iLevel0) & 0xFFFF); pRawi++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G16, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_rgb8 (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGB8, MNG_LC_START); #endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *(pRawo+1) = (mng_uint8)(((mng_uint16)*(pRawi+1) + pData->iLevel1) & 0xFF); *pRawo = (mng_uint8)(((mng_uint16)*pRawi + pData->iLevel0 + (mng_uint16)*(pRawo+1)) & 0xFF); *(pRawo+2) = (mng_uint8)(((mng_uint16)*(pRawi+2) + pData->iLevel2 + (mng_uint16)*(pRawo+1)) & 0xFF); pRawi += 3; pRawo += 3; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGB8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_rgb16 (mng_datap pData) { mng_uint16p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGB16, MNG_LC_START); #endif pRawi = (mng_uint16p)(pData->pWorkrow + pData->iPixelofs); pRawo = (mng_uint16p)(pData->pPrevrow + pData->iPixelofs); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *(pRawo+1) = (mng_uint16)(((mng_uint32)*(pRawi+1) + (mng_uint32)pData->iLevel1) & 0xFFFF); *pRawo = (mng_uint16)(((mng_uint32)*pRawi + (mng_uint32)pData->iLevel0 + (mng_uint32)*(pRawo+1)) & 0xFFFF); *(pRawo+2) = (mng_uint16)(((mng_uint32)*(pRawi+2) + (mng_uint32)pData->iLevel2 + (mng_uint32)*(pRawo+1)) & 0xFFFF); pRawi += 3; pRawo += 3; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGB16, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_idx1 (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX1, MNG_LC_START); #endif if (pData->iLevel0 & 0x01) /* is it uneven level ? */ { pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; /* just invert every bit */ #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsize - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsize; iX++) #endif *pRawo++ = (mng_uint8)(~(*pRawi++)); } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX1, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_idx2 (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; mng_int32 iC, iS; mng_uint8 iB, iN, iQ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX2, MNG_LC_START); #endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; iC = 0; iB = 0; iN = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iC) { iC = 4; iB = *pRawi++; iN = 0; iS = 8; } iS -= 2; iQ = (mng_uint8)(((iB >> iS) + pData->iLevel0) & 0x03); iN = (mng_uint8)((iN << 2) + iQ); iC--; if (!iC) *pRawo++ = iN; } if (iC) *pRawo = (mng_uint8)(iN << iS); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX2, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_idx4 (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; mng_int32 iC, iS; mng_uint8 iB, iN, iQ; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX4, MNG_LC_START); #endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; iC = 0; iB = 0; iN = 0; iS = 0; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { if (!iC) { iC = 2; iB = *pRawi++; iN = 0; iS = 8; } iS -= 4; iQ = (mng_uint8)(((iB >> iS) + pData->iLevel0) & 0x0F); iN = (mng_uint8)((iN << 4) + iQ); iC--; if (!iC) *pRawo++ = iN; } if (iC) *pRawo = (mng_uint8)(iN << iS); #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX4, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_idx8 (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX8, MNG_LC_START); #endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pRawo++ = (mng_uint8)(((mng_uint16)*pRawi + pData->iLevel0) & 0xFF); pRawi++; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_ga8 (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_GA8, MNG_LC_START); #endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pRawo = (mng_uint8)(((mng_uint16)*pRawi + pData->iLevel0) & 0xFF); *(pRawo+1) = (mng_uint8)(((mng_uint16)*(pRawi+1) + pData->iLevel1) & 0xFF); pRawi += 2; pRawo += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_GA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_ga16 (mng_datap pData) { mng_uint16p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_GA16, MNG_LC_START); #endif pRawi = (mng_uint16p)(pData->pWorkrow + pData->iPixelofs); pRawo = (mng_uint16p)(pData->pPrevrow + pData->iPixelofs); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *pRawo = (mng_uint16)(((mng_uint32)*pRawi + (mng_uint32)pData->iLevel0) & 0xFFFF); *(pRawo+1) = (mng_uint16)(((mng_uint32)*(pRawi+1) + (mng_uint32)pData->iLevel1) & 0xFFFF); pRawi += 2; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_GA16, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_rgba8 (mng_datap pData) { mng_uint8p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGBA8, MNG_LC_START); #endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *(pRawo+1) = (mng_uint8)(((mng_uint16)*(pRawi+1) + pData->iLevel1) & 0xFF); *pRawo = (mng_uint8)(((mng_uint16)*pRawi + pData->iLevel0 + (mng_uint16)*(pRawo+1)) & 0xFF); *(pRawo+2) = (mng_uint8)(((mng_uint16)*(pRawi+2) + pData->iLevel2 + (mng_uint16)*(pRawo+1)) & 0xFF); *(pRawo+3) = (mng_uint8)(((mng_uint16)*(pRawi+3) + pData->iLevel3) & 0xFF); pRawi += 4; pRawo += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGBA8, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ mng_retcode mng_differ_rgba16 (mng_datap pData) { mng_uint16p pRawi, pRawo; mng_int32 iX; #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGBA16, MNG_LC_START); #endif pRawi = (mng_uint16p)(pData->pWorkrow + pData->iPixelofs); pRawo = (mng_uint16p)(pData->pPrevrow + pData->iPixelofs); #ifdef MNG_DECREMENT_LOOPS for (iX = pData->iRowsamples - 1; iX >= 0; iX--) #else for (iX = 0; iX < pData->iRowsamples; iX++) #endif { *(pRawo+1) = (mng_uint16)(((mng_uint32)*(pRawi+1) + (mng_uint32)pData->iLevel1) & 0xFFFF); *pRawo = (mng_uint16)(((mng_uint32)*pRawi + (mng_uint32)pData->iLevel0 + (mng_uint32)*(pRawo+1)) & 0xFFFF); *(pRawo+2) = (mng_uint16)(((mng_uint32)*(pRawi+2) + (mng_uint32)pData->iLevel2 + (mng_uint32)*(pRawo+1)) & 0xFFFF); *(pRawo+3) = (mng_uint16)(((mng_uint32)*(pRawi+3) + (mng_uint32)pData->iLevel3) & 0xFFFF); pRawi += 4; pRawo += 4; } #ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGBA16, MNG_LC_END); #endif return MNG_NOERROR; } /* ************************************************************************** */ #endif /* FILTER192 */ /* ************************************************************************** */ #endif /* MNG_INCLUDE_FILTERS */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/libmng_chunk_io.h0000644000000000000000000003300512005307152014755 0ustar rootroot/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_chunk_io.h copyright (c) 2000-2007 G.Juyn * */ /* * version : 1.0.109 * */ /* * * */ /* * purpose : Chunk I/O routines (definition) * */ /* * * */ /* * author : G.Juyn * */ /* * * */ /* * comment : Definition of the chunk input/output routines * */ /* * * */ /* * changes : 0.5.1 - 05/04/2000 - G.Juyn * */ /* * - changed CRC initialization to use dynamic structure * */ /* * (wasn't thread-safe the old way !) * */ /* * 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - changed write routines definition * */ /* * - changed strict-ANSI stuff * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/26/2000 - G.Juyn * */ /* * - added MAGN chunk * */ /* * 0.9.3 - 10/16/2000 - G.Juyn * */ /* * - added support for JDAA * */ /* * * */ /* * 1.0.5 - 08/19/2002 - G.Juyn * */ /* * - B597134 - libmng pollutes the linker namespace * */ /* * 1.0.5 - 09/14/2002 - G.Juyn * */ /* * - added event handling for dynamic MNG * */ /* * * */ /* * 1.0.6 - 07/07/2003 - G.R-P * */ /* * - added SKIP_CHUNK and NO_DELTA_PNG support * */ /* * 1.0.6 - 07/29/2003 - G.R-P * */ /* * - added conditionals around PAST chunk support * */ /* * * */ /* * 1.0.7 - 03/24/2004 - G.R-P * */ /* * - fixed SKIPCHUNK_itXT and SKIPCHUNK_ztXT typos * */ /* * * */ /* * 1.0.9 - 12/07/2004 - G.Juyn * */ /* * - added conditional MNG_OPTIMIZE_CHUNKREADER * */ /* * * */ /* * 1.0.10 - 04/08/2007 - G.Juyn * */ /* * - added support for mPNG proposal * */ /* * 1.0.10 - 04/12/2007 - G.Juyn * */ /* * - added support for ANG proposal * */ /* * * */ /* ************************************************************************** */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* force ANSI-C */ #endif #ifndef _libmng_chunk_io_h_ #define _libmng_chunk_io_h_ /* ************************************************************************** */ mng_uint32 mng_crc (mng_datap pData, mng_uint8p buf, mng_int32 len); /* ************************************************************************** */ #ifdef MNG_INCLUDE_READ_PROCS /* ************************************************************************** */ mng_retcode mng_inflate_buffer (mng_datap pData, mng_uint8p pInbuf, mng_uint32 iInsize, mng_uint8p *pOutbuf, mng_uint32 *iOutsize, mng_uint32 *iRealsize); /* ************************************************************************** */ #define READ_CHUNK(n) mng_retcode n (mng_datap pData, \ mng_chunkp pHeader, \ mng_uint32 iRawlen, \ mng_uint8p pRawdata, \ mng_chunkp* ppChunk) #ifdef MNG_OPTIMIZE_CHUNKREADER READ_CHUNK (mng_read_general) ; #endif READ_CHUNK (mng_read_ihdr) ; READ_CHUNK (mng_read_plte) ; READ_CHUNK (mng_read_idat) ; READ_CHUNK (mng_read_iend) ; READ_CHUNK (mng_read_trns) ; READ_CHUNK (mng_read_gama) ; READ_CHUNK (mng_read_chrm) ; READ_CHUNK (mng_read_srgb) ; #ifndef MNG_SKIPCHUNK_iCCP READ_CHUNK (mng_read_iccp) ; #endif #ifndef MNG_SKIPCHUNK_tEXt READ_CHUNK (mng_read_text) ; #endif #ifndef MNG_SKIPCHUNK_zTXt READ_CHUNK (mng_read_ztxt) ; #endif #ifndef MNG_SKIPCHUNK_iTXt READ_CHUNK (mng_read_itxt) ; #endif #ifndef MNG_SKIPCHUNK_bKGD READ_CHUNK (mng_read_bkgd) ; #endif #ifndef MNG_SKIPCHUNK_pHYs READ_CHUNK (mng_read_phys) ; #endif #ifndef MNG_SKIPCHUNK_sBIT READ_CHUNK (mng_read_sbit) ; #endif #ifndef MNG_SKIPCHUNK_sPLT READ_CHUNK (mng_read_splt) ; #endif #ifndef MNG_SKIPCHUNK_hIST READ_CHUNK (mng_read_hist) ; #endif #ifndef MNG_SKIPCHUNK_tIME READ_CHUNK (mng_read_time) ; #endif READ_CHUNK (mng_read_mhdr) ; READ_CHUNK (mng_read_mend) ; READ_CHUNK (mng_read_loop) ; READ_CHUNK (mng_read_endl) ; READ_CHUNK (mng_read_defi) ; READ_CHUNK (mng_read_basi) ; READ_CHUNK (mng_read_clon) ; #ifndef MNG_SKIPCHUNK_PAST READ_CHUNK (mng_read_past) ; #endif READ_CHUNK (mng_read_disc) ; READ_CHUNK (mng_read_back) ; READ_CHUNK (mng_read_fram) ; READ_CHUNK (mng_read_move) ; READ_CHUNK (mng_read_clip) ; READ_CHUNK (mng_read_show) ; READ_CHUNK (mng_read_term) ; READ_CHUNK (mng_read_save) ; READ_CHUNK (mng_read_seek) ; #ifndef MNG_SKIPCHUNK_eXPI READ_CHUNK (mng_read_expi) ; #endif #ifndef MNG_SKIPCHUNK_fPRI READ_CHUNK (mng_read_fpri) ; #endif #ifndef MNG_SKIPCHUNK_pHYg READ_CHUNK (mng_read_phyg) ; #endif #ifdef MNG_INCLUDE_JNG READ_CHUNK (mng_read_jhdr) ; READ_CHUNK (mng_read_jdaa) ; READ_CHUNK (mng_read_jdat) ; READ_CHUNK (mng_read_jsep) ; #endif #ifndef MNG_NO_DELTA_PNG READ_CHUNK (mng_read_dhdr) ; READ_CHUNK (mng_read_prom) ; READ_CHUNK (mng_read_ipng) ; READ_CHUNK (mng_read_pplt) ; #ifdef MNG_INCLUDE_JNG READ_CHUNK (mng_read_ijng) ; #endif READ_CHUNK (mng_read_drop) ; READ_CHUNK (mng_read_dbyk) ; READ_CHUNK (mng_read_ordr) ; #endif READ_CHUNK (mng_read_magn) ; #ifndef MNG_SKIPCHUNK_nEED READ_CHUNK (mng_read_need) ; #endif #ifdef MNG_INCLUDE_MPNG_PROPOSAL READ_CHUNK (mng_read_mpng) ; #endif #ifndef MNG_SKIPCHUNK_evNT READ_CHUNK (mng_read_evnt) ; #endif READ_CHUNK (mng_read_unknown) ; /* ************************************************************************** */ #else /* MNG_INCLUDE_READ_PROCS */ #define mng_read_ihdr 0 #define mng_read_plte 0 #define mng_read_idat 0 #define mng_read_iend 0 #define mng_read_trns 0 #define mng_read_gama 0 #define mng_read_chrm 0 #define mng_read_srgb 0 #define mng_read_iccp 0 #define mng_read_text 0 #define mng_read_ztxt 0 #define mng_read_itxt 0 #define mng_read_bkgd 0 #define mng_read_phys 0 #define mng_read_sbit 0 #define mng_read_splt 0 #define mng_read_hist 0 #define mng_read_time 0 #define mng_read_mhdr 0 #define mng_read_mend 0 #define mng_read_loop 0 #define mng_read_endl 0 #define mng_read_defi 0 #define mng_read_basi 0 #define mng_read_clon 0 #ifndef MNG_SKIPCHUNK_PAST #define mng_read_past 0 #endif #define mng_read_disc 0 #define mng_read_back 0 #define mng_read_fram 0 #define mng_read_move 0 #define mng_read_clip 0 #define mng_read_show 0 #define mng_read_term 0 #define mng_read_save 0 #define mng_read_seek 0 #define mng_read_expi 0 #define mng_read_fpri 0 #define mng_read_phyg 0 #ifdef MNG_INCLUDE_JNG #define mng_read_jhdr 0 #define mng_read_jdaa 0 #define mng_read_jdat 0 #define mng_read_jsep 0 #endif #ifndef MNG_NO_DELTA_PNG #define mng_read_dhdr 0 #define mng_read_prom 0 #define mng_read_ipng 0 #define mng_read_pplt 0 #ifdef MNG_INCLUDE_JNG #define mng_read_ijng 0 #endif #define mng_read_drop 0 #define mng_read_dbyk 0 #define mng_read_ordr 0 #endif #define mng_read_magn 0 #define mng_read_need 0 #ifdef MNG_INCLUDE_MPNG_PROPOSAL #define mng_read_mpng 0 #endif #define mng_read_evnt 0 #define mng_read_unknown 0 #endif /* MNG_INCLUDE_READ_PROCS */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_WRITE_PROCS #define WRITE_CHUNK(n) mng_retcode n (mng_datap pData, \ mng_chunkp pChunk) WRITE_CHUNK (mng_write_ihdr) ; WRITE_CHUNK (mng_write_plte) ; WRITE_CHUNK (mng_write_idat) ; WRITE_CHUNK (mng_write_iend) ; WRITE_CHUNK (mng_write_trns) ; WRITE_CHUNK (mng_write_gama) ; WRITE_CHUNK (mng_write_chrm) ; WRITE_CHUNK (mng_write_srgb) ; WRITE_CHUNK (mng_write_iccp) ; WRITE_CHUNK (mng_write_text) ; WRITE_CHUNK (mng_write_ztxt) ; WRITE_CHUNK (mng_write_itxt) ; WRITE_CHUNK (mng_write_bkgd) ; WRITE_CHUNK (mng_write_phys) ; WRITE_CHUNK (mng_write_sbit) ; WRITE_CHUNK (mng_write_splt) ; WRITE_CHUNK (mng_write_hist) ; WRITE_CHUNK (mng_write_time) ; WRITE_CHUNK (mng_write_mhdr) ; WRITE_CHUNK (mng_write_mend) ; WRITE_CHUNK (mng_write_loop) ; WRITE_CHUNK (mng_write_endl) ; WRITE_CHUNK (mng_write_defi) ; WRITE_CHUNK (mng_write_basi) ; WRITE_CHUNK (mng_write_clon) ; #ifndef MNG_SKIPCHUNK_PAST WRITE_CHUNK (mng_write_past) ; #endif WRITE_CHUNK (mng_write_disc) ; WRITE_CHUNK (mng_write_back) ; WRITE_CHUNK (mng_write_fram) ; WRITE_CHUNK (mng_write_move) ; WRITE_CHUNK (mng_write_clip) ; WRITE_CHUNK (mng_write_show) ; WRITE_CHUNK (mng_write_term) ; WRITE_CHUNK (mng_write_save) ; WRITE_CHUNK (mng_write_seek) ; WRITE_CHUNK (mng_write_expi) ; WRITE_CHUNK (mng_write_fpri) ; WRITE_CHUNK (mng_write_phyg) ; #ifdef MNG_INCLUDE_JNG WRITE_CHUNK (mng_write_jhdr) ; WRITE_CHUNK (mng_write_jdaa) ; WRITE_CHUNK (mng_write_jdat) ; WRITE_CHUNK (mng_write_jsep) ; #endif #ifndef MNG_NO_DELTA_PNG WRITE_CHUNK (mng_write_dhdr) ; WRITE_CHUNK (mng_write_prom) ; WRITE_CHUNK (mng_write_ipng) ; WRITE_CHUNK (mng_write_pplt) ; #ifdef MNG_INCLUDE_JNG WRITE_CHUNK (mng_write_ijng) ; #endif WRITE_CHUNK (mng_write_drop) ; WRITE_CHUNK (mng_write_dbyk) ; WRITE_CHUNK (mng_write_ordr) ; #endif WRITE_CHUNK (mng_write_magn) ; WRITE_CHUNK (mng_write_need) ; #ifdef MNG_INCLUDE_MPNG_PROPOSAL WRITE_CHUNK (mng_write_mpng) ; #endif #ifdef MNG_INCLUDE_ANG_PROPOSAL WRITE_CHUNK (mng_write_ahdr) ; WRITE_CHUNK (mng_write_adat) ; #endif WRITE_CHUNK (mng_write_evnt) ; WRITE_CHUNK (mng_write_unknown) ; /* ************************************************************************** */ #else /* MNG_INCLUDE_WRITE_PROCS */ #define mng_write_ihdr 0 #define mng_write_plte 0 #define mng_write_idat 0 #define mng_write_iend 0 #define mng_write_trns 0 #define mng_write_gama 0 #define mng_write_chrm 0 #define mng_write_srgb 0 #define mng_write_iccp 0 #define mng_write_text 0 #define mng_write_ztxt 0 #define mng_write_itxt 0 #define mng_write_bkgd 0 #define mng_write_phys 0 #define mng_write_sbit 0 #define mng_write_splt 0 #define mng_write_hist 0 #define mng_write_time 0 #define mng_write_mhdr 0 #define mng_write_mend 0 #define mng_write_loop 0 #define mng_write_endl 0 #define mng_write_defi 0 #define mng_write_basi 0 #define mng_write_clon 0 #ifndef MNG_SKIPCHUNK_PAST #define mng_write_past 0 #endif #define mng_write_disc 0 #define mng_write_back 0 #define mng_write_fram 0 #define mng_write_move 0 #define mng_write_clip 0 #define mng_write_show 0 #define mng_write_term 0 #define mng_write_save 0 #define mng_write_seek 0 #define mng_write_expi 0 #define mng_write_fpri 0 #define mng_write_phyg 0 #ifdef MNG_INCLUDE_JNG #define mng_write_jhdr 0 #define mng_write_jdaa 0 #define mng_write_jdat 0 #define mng_write_jsep 0 #endif #ifndef MNG_NO_DELTA_PNG #define mng_write_dhdr 0 #define mng_write_prom 0 #define mng_write_ipng 0 #define mng_write_pplt 0 #ifdef MNG_INCLUDE_JNG #define mng_write_ijng 0 #endif #define mng_write_drop 0 #define mng_write_dbyk 0 #define mng_write_ordr 0 #endif #define mng_write_magn 0 #define mng_write_need 0 #ifdef MNG_INCLUDE_MPNG_PROPOSAL #define mng_write_mpng 0 #endif #ifdef MNG_INCLUDE_ANG_PROPOSAL #define mng_write_adat 0 #define mng_write_ahdr 0 #endif #define mng_write_evnt 0 #define mng_write_unknown 0 #endif /* MNG_INCLUDE_WRITE_PROCS */ /* ************************************************************************** */ #endif /* _libmng_chunk_io_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */ libmng-2.0.2/LICENSE0000644000000000000000000001101612005307152012460 0ustar rootroot/* ************************************************************************** */ /* * * */ /* * COPYRIGHT NOTICE: * */ /* * * */ /* * Copyright (c) 2000-2007 Gerard Juyn (gerard@libmng.com) * */ /* * [You may insert additional notices after this sentence if you modify * */ /* * this source] * */ /* * * */ /* * For the purposes of this copyright and license, "Contributing Authors" * */ /* * is defined as the following set of individuals: * */ /* * * */ /* * Gerard Juyn * */ /* * Glenn Randers-Pehrson * */ /* * * */ /* * The MNG Library is supplied "AS IS". The Contributing Authors * */ /* * disclaim all warranties, expressed or implied, including, without * */ /* * limitation, the warranties of merchantability and of fitness for any * */ /* * purpose. The Contributing Authors assume no liability for direct, * */ /* * indirect, incidental, special, exemplary, or consequential damages, * */ /* * which may result from the use of the MNG Library, even if advised of * */ /* * the possibility of such damage. * */ /* * * */ /* * Permission is hereby granted to use, copy, modify, and distribute this * */ /* * source code, or portions hereof, for any purpose, without fee, subject * */ /* * to the following restrictions: * */ /* * * */ /* * 1. The origin of this source code must not be misrepresented; * */ /* * you must not claim that you wrote the original software. * */ /* * * */ /* * 2. Altered versions must be plainly marked as such and must not be * */ /* * misrepresented as being the original source. * */ /* * * */ /* * 3. This Copyright notice may not be removed or altered from any source * */ /* * or altered source distribution. * */ /* * * */ /* * The Contributing Authors specifically permit, without fee, and * */ /* * encourage the use of this source code as a component to supporting * */ /* * the MNG and JNG file format in commercial products. If you use this * */ /* * source code in a product, acknowledgment would be highly appreciated. * */ /* * * */ /* ************************************************************************** */ /* * * */ /* * Parts of this software have been adapted from the libpng package. * */ /* * Although this library supports all features from the PNG specification * */ /* * (as MNG descends from it) it does not require the libpng package. * */ /* * It does require the zlib library and optionally the IJG jpeg library, * */ /* * and/or the "little-cms" library by Marti Maria (depending on the * */ /* * inclusion of support for JNG and Full-Color-Management respectively. * */ /* * * */ /* * This library's function is primarily to read and display MNG * */ /* * animations. It is not meant as a full-featured image-editing * */ /* * component! It does however offer creation and editing functionality * */ /* * at the chunk level. * */ /* * (future modifications may include some more support for creation * */ /* * and or editing) * */ /* * * */ /* ************************************************************************** */