From 714e1f74560561d292498fc38e4e1934f8ee830c Mon Sep 17 00:00:00 2001 From: Lance Date: Thu, 23 Dec 2010 08:53:23 +0000 Subject: [PATCH] VC6 project files uptodate, mingl, gl, ded server & sdl targets working (both debug and release), various fixes and hacks to provide VC6 support again. VC6 static libs provided (/libs/vc6-libs), including SDL for the debug SDL target (all old versions though as the updated versions of the libraries have stopped providing VC6 project files to compile them with). git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3711 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/client/cl_parse.c | 26 +- engine/client/snd_directx.c | 9 + engine/client/snd_sdl.c | 2 +- engine/client/sys_win.c | 13 +- engine/common/bothdefs.h | 4 + engine/common/fs_zip.c | 8 +- engine/common/netinc.h | 2 + engine/ftequake/ftequake.dsp | 149 +- engine/libs/vc6-libs/jconfig.h | 45 + engine/libs/vc6-libs/jerror.h | 291 +++ engine/libs/vc6-libs/jmorecfg.h | 374 ++++ engine/libs/vc6-libs/jpeg.lib | Bin 0 -> 153986 bytes engine/libs/vc6-libs/jpeglib.h | 1096 +++++++++ engine/libs/vc6-libs/libpng.lib | Bin 0 -> 407514 bytes engine/libs/vc6-libs/png.h | 3666 +++++++++++++++++++++++++++++++ engine/libs/vc6-libs/pngconf.h | 1489 +++++++++++++ engine/libs/vc6-libs/zconf.h | 332 +++ engine/libs/vc6-libs/zlib.h | 1357 ++++++++++++ engine/libs/vc6-libs/zlib.lib | Bin 0 -> 90344 bytes 19 files changed, 8779 insertions(+), 84 deletions(-) create mode 100644 engine/libs/vc6-libs/jconfig.h create mode 100644 engine/libs/vc6-libs/jerror.h create mode 100644 engine/libs/vc6-libs/jmorecfg.h create mode 100644 engine/libs/vc6-libs/jpeg.lib create mode 100644 engine/libs/vc6-libs/jpeglib.h create mode 100644 engine/libs/vc6-libs/libpng.lib create mode 100644 engine/libs/vc6-libs/png.h create mode 100644 engine/libs/vc6-libs/pngconf.h create mode 100644 engine/libs/vc6-libs/zconf.h create mode 100644 engine/libs/vc6-libs/zlib.h create mode 100644 engine/libs/vc6-libs/zlib.lib diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index fdb175d43..7a14a9276 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -512,7 +512,7 @@ void CL_DownloadFinished(void) ext = COM_FileExtension(filename); - + if (!strcmp(ext, "pk3") || !strcmp(ext, "pak")) FS_ReloadPackFiles(); @@ -675,7 +675,7 @@ qboolean CL_CheckHLBspWads(char *file) lump.fileofs = LittleLong(dh->lumps[LUMP_ENTITIES].fileofs); lump.filelen = LittleLong(dh->lumps[LUMP_ENTITIES].filelen); - + s = file + lump.fileofs; s = COM_Parse(s); @@ -1163,7 +1163,7 @@ CL_RequestNextDownload */ void CL_RequestNextDownload (void) { - + int stage; if (cls.downloadmethod) return; @@ -1183,7 +1183,7 @@ void CL_RequestNextDownload (void) if (!dl) dl = cl.downloadlist; fl = dl->flags; - + if (cls.state == ca_active || requiredownloads.value || (fl & DLLF_REQUIRED)) { if ((fl & DLLF_OVERWRITE) || !COM_FCheckExists (dl->localname)) @@ -1757,7 +1757,7 @@ void CLDP_ParseDownloadData(void) int size; start = MSG_ReadLong(); size = (unsigned short)MSG_ReadShort(); - + MSG_ReadData(buffer, size); if (cls.downloadqw) @@ -1797,7 +1797,7 @@ void CLDP_ParseDownloadBegin(char *s) FS_CreatePath (cls.downloadtempname, FS_GAME); cls.downloadqw = FS_OpenVFS (cls.downloadtempname, "wb", FS_GAME); cls.downloadmethod = DL_DARKPLACES; - + if (cls.downloadqw) { //fill the file with 0 bytes @@ -1847,7 +1847,7 @@ void CLDP_ParseDownloadFinished(char *s) { Con_Printf("Download failed: unable to check CRC of download\n"); CL_DownloadFailed(cls.downloadremotename); - return; + return; } Cmd_TokenizeString(s+1, false, false); @@ -2543,7 +2543,9 @@ void CLNQ_ParseServerData(void) //Doesn't change gamedir - use with caution. //pretend it came from the server, and update cheat/permissions/etc CL_CheckServerInfo(); + #if _MSC_VER > 1200 Sys_RecentServer("+nqconnect", cls.servername, cls.servername, "Join NQ Server"); + #endif #ifdef PEXT_CSQC CSQC_Shutdown(); @@ -3112,7 +3114,7 @@ qboolean CL_CheckBaselines (int size) if (size <= cl_baselines_count) return true; - cl_baselines = BZ_Realloc(cl_baselines, sizeof(*cl_baselines)*size); + cl_baselines = BZ_Realloc(cl_baselines, sizeof(*cl_baselines)*size); for (i = cl_baselines_count; i < size; i++) { memcpy(cl_baselines + i, &nullentitystate, sizeof(*cl_baselines)); @@ -4385,7 +4387,7 @@ void CL_PrintChat(player_info_t *plr, char *rawmsg, char *msg, int plrflags) extern cvar_t cl_parsewhitetext; qboolean memessage = false; char fullchatmessage[2048]; - + fullchatmessage[0] = 0; if (plrflags & TPM_FAKED) { @@ -4599,8 +4601,10 @@ void CL_ParseStuffCmd(char *msg, int destsplit) //this protects stuffcmds from n if (!strncmp(stufftext, "fullserverinfo ", 15)) { Cmd_ExecuteString(stufftext, RESTRICT_SERVER+destsplit); //do this NOW so that it's done before any models or anything are loaded + #if _MSC_VER > 1200 if (cls.netchan.remote_address.type != NA_LOOPBACK) Sys_RecentServer("+connect", cls.servername, va("%s (%s)", Info_ValueForKey(cl.serverinfo, "hostname"), cls.servername), "Join QW Server"); + #endif } else { @@ -5539,7 +5543,7 @@ qboolean CLNQ_ParseNQPrints(char *s) if (*s == '-') s++; if (*s >= '0' && *s <= '9') - { + { while(*s >= '0' && *s <= '9') s++; if (*s == ' ' && s-start >= 4) @@ -5779,7 +5783,7 @@ void CLNQ_ParseServerMessage (void) case svc_spawnbaseline: i = MSG_ReadShort (); if (!CL_CheckBaselines(i)) - Host_EndGame("CLNQ_ParseServerMessage: svc_spawnbaseline failed with size %i", i); + Host_EndGame("CLNQ_ParseServerMessage: svc_spawnbaseline failed with size %i", i); CL_ParseBaseline (cl_baselines + i); break; diff --git a/engine/client/snd_directx.c b/engine/client/snd_directx.c index dba7bd35a..f514cb100 100644 --- a/engine/client/snd_directx.c +++ b/engine/client/snd_directx.c @@ -27,9 +27,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } // SDL fix, seems SDL builds complain about multiple definitions of those 2 #ifndef _SDL +#if _MSC_VER <= 1200 + DEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93); + DEFINE_GUID(IID_IDirectSound, 0x279AFA83, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); +#else FORCE_DEFINE_GUID(IID_IDirectSound, 0x279AFA83, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); FORCE_DEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93); #endif +#endif #define SND_ERROR 0 #define SND_LOADED 1 @@ -617,6 +622,7 @@ int DSOUND_InitCard (soundcardinfo_t *sc, int cardnum) sc->handle = Z_Malloc(sizeof(dshandle_t)); dh = sc->handle; //EAX attempt +#if _MSC_VER > 1200 #ifndef MINIMAL #ifdef _IKsPropertySet_ dh->pDS = NULL; @@ -631,6 +637,7 @@ int DSOUND_InitCard (soundcardinfo_t *sc, int cardnum) if (!dh->pDS) #endif +#endif #endif { while ((hresult = iDirectSoundCreate(dsndguid, &dh->pDS, NULL)) != DS_OK) @@ -845,6 +852,7 @@ int DSOUND_InitCard (soundcardinfo_t *sc, int cardnum) sc->GetDMAPos = DSOUND_GetDMAPos; sc->Restore = DSOUND_Restore; +#if _MSC_VER > 1200 #ifdef _IKsPropertySet_ //attempt at eax support if (snd_eax.ival) @@ -872,6 +880,7 @@ int DSOUND_InitCard (soundcardinfo_t *sc, int cardnum) dh->EaxKsPropertiesSet = NULL; } } +#endif #endif return SND_LOADED; } diff --git a/engine/client/snd_sdl.c b/engine/client/snd_sdl.c index b9f117ca4..e8364c024 100644 --- a/engine/client/snd_sdl.c +++ b/engine/client/snd_sdl.c @@ -2,7 +2,7 @@ #include "winquake.h" #include -#pragma comment(lib, "sdl.lib") +#pragma comment(lib, MSVCLIBSPATH "sdl.lib") //SDL calls a callback each time it needs to repaint the 'hardware' buffers //This results in extra latency. diff --git a/engine/client/sys_win.c b/engine/client/sys_win.c index 14d522dbd..fb5076de1 100644 --- a/engine/client/sys_win.c +++ b/engine/client/sys_win.c @@ -1271,9 +1271,13 @@ HWND hwnd_dialog; #define COBJMACROS #ifndef MINGW +#if _MSC_VER > 1200 #include #endif -#include +#endif +#if _MSC_VER > 1200 + #include +#endif #include //#include @@ -1346,6 +1350,7 @@ typedef struct IPropertyStore static const IID IID_IPropertyStore = {0x886d8eeb, 0x8cf2, 0x4446, {0x8d, 0x02, 0xcd, 0xba, 0x1d, 0xbd, 0xcf, 0x99}}; #endif +#if _MSC_VER > 1200 #define WIN7_APPNAME L"FTEQuake" void Sys_RecentServer(char *command, char *target, char *title, char *desc) { @@ -1413,6 +1418,8 @@ void Win7_Init(void) pSetCurrentProcessExplicitAppUserModelID(WIN7_APPNAME); } } +#endif + /* #ifdef _MSC_VER @@ -1439,8 +1446,10 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin return 0; #ifndef MINGW + #if _MSC_VER > 1200 Win7_Init(); #endif + #endif #ifdef _MSC_VER #if _M_IX86_FP >= 1 @@ -1657,6 +1666,7 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin //client console should now be initialized. #ifndef MINGW + #if _MSC_VER > 1200 switch(M_GameType()) { case MGT_QUAKE1: @@ -1673,6 +1683,7 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin break; } #endif + #endif /* main window message loop */ while (1) diff --git a/engine/common/bothdefs.h b/engine/common/bothdefs.h index 0b0b157a0..b9d269d5b 100644 --- a/engine/common/bothdefs.h +++ b/engine/common/bothdefs.h @@ -36,8 +36,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "config.h" #else #ifndef MSVCLIBSPATH + #if _MSC_VER == 1200 + #define MSVCLIBSPATH "../libs/vc6-libs/" + #else #define MSVCLIBSPATH "../libs/" #endif + #endif #ifdef NO_LIBRARIES #define NO_DIRECTX diff --git a/engine/common/fs_zip.c b/engine/common/fs_zip.c index f011ad785..cd995e5ee 100644 --- a/engine/common/fs_zip.c +++ b/engine/common/fs_zip.c @@ -33,18 +33,20 @@ void *zlib_handle; #ifdef _MSC_VER # ifdef _WIN64 -# pragma comment (lib, "../libs/zlib64.lib") +# pragma comment(lib, MSVCLIBSPATH "zlib64.lib") # else -# pragma comment (lib, "../libs/zlib.lib") +# pragma comment(lib, MSVCLIBSPATH "zlib.lib") # endif #endif #endif +#pragma comment(lib, MSVCLIBSPATH "zlib.lib") + static int (ZEXPORT *qinflateEnd) OF((z_streamp strm)) ZSTATIC(inflateEnd); static int (ZEXPORT *qinflate) OF((z_streamp strm, int flush)) ZSTATIC(inflate); static int (ZEXPORT *qinflateInit2_) OF((z_streamp strm, int windowBits, const char *version, int stream_size)) ZSTATIC(inflateInit2_); -static uLong (ZEXPORT *qcrc32) OF((uLong crc, const Bytef *buf, uInt len)) ZSTATIC(crc32); +static uLong (ZEXPORT *qcrc32) OF((uLong crc, const Bytef *buf, uInt len)) ZSTATIC(crc32); #define qinflateInit2(strm, windowBits) \ qinflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) diff --git a/engine/common/netinc.h b/engine/common/netinc.h index fb1b39c25..463f8d1e0 100644 --- a/engine/common/netinc.h +++ b/engine/common/netinc.h @@ -36,6 +36,7 @@ { u_char s6_addr[16]; /* IPv6 address */ }; +#if _MSC_VER > 1200 typedef struct sockaddr_in6 { short sin6_family; @@ -48,6 +49,7 @@ struct ip6_scope_id sin6_scope_struct; }; }; +#endif struct addrinfo { int ai_flags; diff --git a/engine/ftequake/ftequake.dsp b/engine/ftequake/ftequake.dsp index 831254c46..cc99ad4cc 100644 --- a/engine/ftequake/ftequake.dsp +++ b/engine/ftequake/ftequake.dsp @@ -56,7 +56,7 @@ RSC=rc.exe # 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 /G6 /MT /W3 /GX /O2 /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "NDEBUG" /D "_MBCS" /D "WIN32" /D "_WINDOWS" /D "GLQUAKE" /D "NEWBACKEND" /FR /Yu"quakedef.h" /FD /c +# ADD CPP /nologo /G6 /MT /W3 /GX /O2 /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "NDEBUG" /D "_MBCS" /D "WIN32" /D "_WINDOWS" /D "GLQUAKE" /D "NEWBACKEND" /FR /Yu"quakedef.h" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" @@ -82,7 +82,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # 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 /G6 /MT /W3 /Gm /GX /ZI /Od /I "../client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "GLQUAKE" /D "NEWBACKEND" /FR".\Debug/" /Fp".\Debug/qwcl.pch" /Yu"quakedef.h" /Fo".\Debug/" /Fd".\Debug/" /FD /c +# ADD CPP /nologo /G6 /MT /W3 /Gm /GX /ZI /Od /I "../client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "GLQUAKE" /D "NEWBACKEND" /FR".\Debug/" /Fp".\Debug/qwcl.pch" /Yu"quakedef.h" /Fo".\Debug/" /Fd".\Debug/" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" @@ -109,7 +109,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # 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 /G5 /MT /W3 /GX /ZI /Od /I "..\client" /I "../libs/freetype2/include" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c +# ADD CPP /nologo /G5 /MT /W3 /GX /ZI /Od /I "..\client" /I "../libs/freetype2/include" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c # SUBTRACT CPP /X # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 @@ -138,7 +138,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /I "..\client" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /Gr /MT /W3 /GX /O2 /Ob2 /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "NDEBUG" /D "_MBCS" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR /Yu"quakedef.h" /FD /c +# ADD CPP /nologo /G6 /Gr /MT /W3 /GX /O2 /Ob2 /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "NDEBUG" /D "_MBCS" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR /Yu"quakedef.h" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" @@ -166,7 +166,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client\gltod3d\sdk7\include" /I "..\client\gltod3d\D3DFrame" /I "..\dxsdk\sdk\inc" /I "..\scitech\include" /I "..\client" /D "NQPROT" /D "_DEBUG" /D "GLQUAKE" /D "SERVERDLL" /D "WIN32" /D "_WINDOWS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c -# ADD CPP /nologo /G5 /W3 /Gi /GX /ZI /Od /I "..\client" /I "../libs/dxsdk9/include" /I "../d3d" /I "../d3d9" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "GLQUAKE" /D "SWQUAKE" /D "USE_D3D" /D "D3DQUAKE" /Fr /Fp".\MDebug/qwcl.pch" /Yu"quakedef.h" /FD /c +# ADD CPP /nologo /G5 /W3 /Gi /GX /ZI /Od /I "..\client" /I "../libs/dxsdk9/include" /I "../d3d" /I "../d3d9" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "GLQUAKE" /D "SWQUAKE" /D "USE_D3D" /D "D3DQUAKE" /Fr /Fp".\MDebug/qwcl.pch" /Yu"quakedef.h" /FD /c # SUBTRACT CPP /WX # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 @@ -196,7 +196,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /I "..\client\gltod3d\sdk7\include" /I "..\client\gltod3d\D3DFrame" /I "..\dxsdk\sdk\inc" /I "..\scitech\include" /I "..\client" /D "NOSOUNDASM" /D "NDEBUG" /D "_MBCS" /D "GLQUAKE" /D "SERVERDLL" /D "NQPROT" /D "WIN32" /D "_WINDOWS" /FR /YX /FD /c -# ADD CPP /nologo /G6 /GX /O2 /I "..\client" /I "../libs/dxsdk9/include" /I "../d3d" /I "../d3d9" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "NDEBUG" /D "_MBCS" /D "WIN32" /D "_WINDOWS" /D "GLQUAKE" /D "SWQUAKE" /D "USE_D3D" /D "D3DQUAKE" /Fr /Yu"quakedef.h" /FD /c +# ADD CPP /nologo /G6 /GX /O2 /I "..\client" /I "../libs/dxsdk9/include" /I "../d3d" /I "../d3d9" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "NDEBUG" /D "_MBCS" /D "WIN32" /D "_WINDOWS" /D "GLQUAKE" /D "SWQUAKE" /D "USE_D3D" /D "D3DQUAKE" /Fr /Yu"quakedef.h" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" @@ -223,7 +223,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client\gltod3d\sdk7\include" /I "..\client\gltod3d\D3DFrame" /I "..\dxsdk\sdk\inc" /I "..\scitech\include" /I "..\client" /D "NQPROT" /D "_DEBUG" /D "GLQUAKE" /D "SERVERDLL" /D "WIN32" /D "_WINDOWS" /D "Q2SERVER" /D "DYNAMIC_ENTS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c -# ADD CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "MINIMAL" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLMinDebug/" /Fp".\GLMinDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLMinDebug/" /Fd".\GLMinDebug/" /FD /c +# ADD CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "MINIMAL" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLMinDebug/" /Fp".\GLMinDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLMinDebug/" /Fd".\GLMinDebug/" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" @@ -251,7 +251,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /G6 /Gr /W3 /GX /O2 /Ob2 /I "..\client\gltod3d\sdk7\include" /I "..\client\gltod3d\D3DFrame" /I "..\dxsdk\sdk\inc" /I "..\scitech\include" /I "..\client" /D "NOSOUNDASM" /D "NDEBUG" /D "_MBCS" /D "GLQUAKE" /D "SERVERDLL" /D "NQPROT" /D "WIN32" /D "_WINDOWS" /D "Q2SERVER" /D "DYNAMIC_ENTS" /FR /YX /FD /c -# ADD CPP /nologo /G6 /Gr /W3 /GX /O2 /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "MINIMAL" /D "NDEBUG" /D "_MBCS" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR"MinGLRelease/" /Fp"MinGLRelease/ftequake.pch" /Yu"quakedef.h" /Fo"MinGLRelease/" /Fd"MinGLRelease/" /FD /c +# ADD CPP /nologo /G6 /Gr /W3 /GX /O2 /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "MINIMAL" /D "NDEBUG" /D "_MBCS" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR"MinGLRelease/" /Fp"MinGLRelease/ftequake.pch" /Yu"quakedef.h" /Fo"MinGLRelease/" /Fd"MinGLRelease/" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" @@ -277,8 +277,8 @@ LINK32=link.exe # PROP Intermediate_Dir "DebugServer" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /D "MINIMAL" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c -# ADD CPP /nologo /G6 /ML /W3 /Gm /Gi /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SERVERONLY" /FR".\DebugServer/" /Fp".\DebugServer/qwcl.pch" /Yu"quakedef.h" /Fo".\DebugServer/" /Fd".\DebugServer/" /FD /c +# ADD BASE CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /D "MINIMAL" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c +# ADD CPP /nologo /G6 /ML /W3 /Gm /Gi /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SERVERONLY" /FR".\DebugServer/" /Fp".\DebugServer/qwcl.pch" /Yu"quakedef.h" /Fo".\DebugServer/" /Fd".\DebugServer/" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" @@ -306,8 +306,8 @@ LINK32=link.exe # PROP Intermediate_Dir "ftequake___Win32_Release_Dedicated_Server" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /D "MINIMAL" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /D "SERVERONLY" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c -# ADD CPP /nologo /G6 /ML /W3 /GX /O1 /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SERVERONLY" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c +# ADD BASE CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /D "MINIMAL" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /D "SERVERONLY" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c +# ADD CPP /nologo /G6 /ML /W3 /GX /O1 /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SERVERONLY" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" @@ -335,8 +335,8 @@ LINK32=link.exe # PROP Intermediate_Dir "ftequake___Win32_MinSW" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /G6 /W3 /Gm /GX /ZI /Od /I "../client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SWQUAKE" /FR".\Debug/" /Fp".\Debug/qwcl.pch" /YX /Fo".\Debug/" /Fd".\Debug/" /FD /c -# ADD CPP /nologo /G6 /W3 /Gm /GX /ZI /Od /I "../client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SWQUAKE" /D "MINIMAL" /FR".\Debug/" /Fp".\Debug/qwcl.pch" /Yu"quakedef.h" /Fo".\Debug/" /Fd".\Debug/" /FD /c +# ADD BASE CPP /nologo /G6 /W3 /Gm /GX /ZI /Od /I "../client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SWQUAKE" /FR".\Debug/" /Fp".\Debug/qwcl.pch" /YX /Fo".\Debug/" /Fd".\Debug/" /FD /c +# ADD CPP /nologo /G6 /W3 /Gm /GX /ZI /Od /I "../client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SWQUAKE" /D "MINIMAL" /FR".\Debug/" /Fp".\Debug/qwcl.pch" /Yu"quakedef.h" /Fo".\Debug/" /Fd".\Debug/" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" @@ -362,9 +362,9 @@ LINK32=link.exe # PROP Intermediate_Dir "ftequake___Win32_GLDebugQ3" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /D "AVAIL_OGGVORBIS" /D "Q3CLIENT" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c +# ADD BASE CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /D "AVAIL_OGGVORBIS" /D "Q3CLIENT" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c # SUBTRACT BASE CPP /X -# ADD CPP /nologo /G5 /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR /Fp".\GLDebugQ3/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebugQ3/" /Fd".\GLDebugQ3/" /FD /c +# ADD CPP /nologo /G5 /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR /Fp".\GLDebugQ3/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebugQ3/" /Fd".\GLDebugQ3/" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" @@ -392,8 +392,8 @@ LINK32=link.exe # PROP Intermediate_Dir "ftequake___Win32_Debug_Dedicated_ServerQ3" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /G6 /ML /W3 /Gm /Gi /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SERVERONLY" /FR".\DebugServer/" /Fp".\DebugServer/qwcl.pch" /Yu"quakedef.h" /Fo".\DebugServer/" /Fd".\DebugServer/" /FD /c -# ADD CPP /nologo /G6 /ML /W3 /Gm /Gi /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SERVERONLY" /D "Q3SERVER" /FR".\DebugServer/" /Fp".\DebugServer/qwcl.pch" /Yu"quakedef.h" /Fo".\DebugServer/" /Fd".\DebugServer/" /FD /c +# ADD BASE CPP /nologo /G6 /ML /W3 /Gm /Gi /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SERVERONLY" /FR".\DebugServer/" /Fp".\DebugServer/qwcl.pch" /Yu"quakedef.h" /Fo".\DebugServer/" /Fd".\DebugServer/" /FD /c +# ADD CPP /nologo /G6 /ML /W3 /Gm /Gi /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SERVERONLY" /D "Q3SERVER" /FR".\DebugServer/" /Fp".\DebugServer/qwcl.pch" /Yu"quakedef.h" /Fo".\DebugServer/" /Fd".\DebugServer/" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" @@ -419,9 +419,9 @@ LINK32=link.exe # PROP Intermediate_Dir "D3DDebug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /G5 /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c +# ADD BASE CPP /nologo /G5 /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c # SUBTRACT BASE CPP /X -# ADD CPP /nologo /G5 /W3 /GX /ZI /Od /I "..\client" /I "../d3d" /I "../libs/dxsdk9/include" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "D3DQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\D3DDebug/" /Fp".\D3DDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\D3DDebug/" /Fd".\D3DDebug/" /FD /c +# ADD CPP /nologo /G5 /W3 /GX /ZI /Od /I "..\client" /I "../d3d" /I "../libs/dxsdk9/include" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /I "../libs/freetype2/include" /D "_DEBUG" /D "D3DQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\D3DDebug/" /Fp".\D3DDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\D3DDebug/" /Fd".\D3DDebug/" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" @@ -449,9 +449,9 @@ LINK32=link.exe # PROP Intermediate_Dir "ftequake___Win32_GLSDLDebug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /G5 /MT /W3 /GX /ZI /Od /I "..\client" /I "../libs/freetype2/include" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c +# ADD BASE CPP /nologo /G5 /MT /W3 /GX /ZI /Od /I "..\client" /I " ../libs/sdl/include" /I "../libs/freetype2/include" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c # SUBTRACT BASE CPP /X -# ADD CPP /nologo /G5 /MD /W3 /GX /ZI /Od /I "..\client" /I "../libs/freetype2/include" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /D "_SDL" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c +# ADD CPP /nologo /G5 /MD /W3 /GX /ZI /Od /I "..\client" /I " ../libs/sdl/include" /I "../libs/freetype2/include" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs/vc6-libs" /I "../libs" /I "../libs/speex" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /D "_SDL" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c # SUBTRACT CPP /X # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 @@ -463,7 +463,7 @@ BSC32=bscmake.exe LINK32=link.exe # ADD BASE LINK32 comctl32.lib wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /map /debug /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"../../fteglqwvc6.exe" /libpath:"../libs/dxsdk7/lib" # SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 comctl32.lib wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib sdl.lib sdlmain.lib /nologo /subsystem:windows /map /debug /machine:I386 /nodefaultlib:"libcmt" /out:"../../fteglqw_sdl.exe" /libpath:"../libs/dxsdk7/lib" +# ADD LINK32 comctl32.lib wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib sdl.lib sdlmain.lib /nologo /subsystem:windows /map /debug /machine:I386 /nodefaultlib:"libcmt" /out:"../../fteglqw_sdl.exe" /libpath:"../libs/dxsdk7/lib,../libs/vc6-libs" # SUBTRACT LINK32 /pdb:none !ENDIF @@ -1697,6 +1697,8 @@ SOURCE=..\client\in_win.c !ELSEIF "$(CFG)" == "ftequake - Win32 GLSDLDebug" +# PROP Exclude_From_Build 1 + !ENDIF # End Source File @@ -2286,47 +2288,6 @@ SOURCE=..\client\p_null.c # End Source File # Begin Source File -SOURCE=..\client\p_qmb.c - -!IF "$(CFG)" == "ftequake - Win32 Release" - -!ELSEIF "$(CFG)" == "ftequake - Win32 Debug" - -!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug" - -!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease" - -!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug" - -!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease" - -!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug" - -!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease" - -!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server" - -# PROP Exclude_From_Build 1 - -!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server" - -# PROP Exclude_From_Build 1 - -!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW" - -!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3" - -!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3" - -!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug" - -!ELSEIF "$(CFG)" == "ftequake - Win32 GLSDLDebug" - -!ENDIF - -# End Source File -# Begin Source File - SOURCE=..\client\p_script.c !IF "$(CFG)" == "ftequake - Win32 Release" @@ -2896,6 +2857,50 @@ SOURCE=..\client\snd_directx.c !ELSEIF "$(CFG)" == "ftequake - Win32 GLSDLDebug" +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=..\client\snd_al.c + +!IF "$(CFG)" == "ftequake - Win32 Release" + +!ELSEIF "$(CFG)" == "ftequake - Win32 Debug" + +!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug" + +!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease" + +!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug" + +!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease" + +!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug" + +!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease" + +!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW" + +!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3" + +!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug" + +!ELSEIF "$(CFG)" == "ftequake - Win32 GLSDLDebug" + !ENDIF # End Source File @@ -3093,18 +3098,28 @@ SOURCE=..\client\snd_sdl.c !ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease" +# PROP Exclude_From_Build 1 + !ELSEIF "$(CFG)" == "ftequake - Win32 MDebug" !ELSEIF "$(CFG)" == "ftequake - Win32 MRelease" !ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug" +# PROP Exclude_From_Build 1 + !ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease" +# PROP Exclude_From_Build 1 + !ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server" +# PROP Exclude_From_Build 1 + !ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server" +# PROP Exclude_From_Build 1 + !ELSEIF "$(CFG)" == "ftequake - Win32 MinSW" !ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3" @@ -3113,6 +3128,8 @@ SOURCE=..\client\snd_sdl.c !ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug" +# PROP Exclude_From_Build 1 + !ELSEIF "$(CFG)" == "ftequake - Win32 GLSDLDebug" !ENDIF @@ -4027,10 +4044,6 @@ SOURCE=..\gl\gl_font.c # End Source File # Begin Source File -SOURCE=..\gl\gl_glsl.c -# End Source File -# Begin Source File - SOURCE=..\gl\gl_heightmap.c !IF "$(CFG)" == "ftequake - Win32 Release" diff --git a/engine/libs/vc6-libs/jconfig.h b/engine/libs/vc6-libs/jconfig.h new file mode 100644 index 000000000..7e291c75b --- /dev/null +++ b/engine/libs/vc6-libs/jconfig.h @@ -0,0 +1,45 @@ +/* jconfig.vc --- jconfig.h for Microsoft Visual C++ on Windows 95 or NT. */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS /* we presume a 32-bit flat memory model */ +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +/* Define "boolean" as unsigned char, not int, per Windows custom */ +#ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ +typedef unsigned char boolean; +#endif +#define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ + + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE /* optional */ +#define USE_SETMODE /* Microsoft has setmode() */ +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/engine/libs/vc6-libs/jerror.h b/engine/libs/vc6-libs/jerror.h new file mode 100644 index 000000000..fc2fffeac --- /dev/null +++ b/engine/libs/vc6-libs/jerror.h @@ -0,0 +1,291 @@ +/* + * jerror.h + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the error and message codes for the JPEG library. + * Edit this file to add new codes, or to translate the message strings to + * some other language. + * A set of error-reporting macros are defined too. Some applications using + * the JPEG library may wish to include this file to get the error codes + * and/or the macros. + */ + +/* + * To define the enum list of message codes, include this file without + * defining macro JMESSAGE. To create a message string table, include it + * again with a suitable JMESSAGE definition (see jerror.c for an example). + */ +#ifndef JMESSAGE +#ifndef JERROR_H +/* First time through, define the enum list */ +#define JMAKE_ENUM_LIST +#else +/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ +#define JMESSAGE(code,string) +#endif /* JERROR_H */ +#endif /* JMESSAGE */ + +#ifdef JMAKE_ENUM_LIST + +typedef enum { + +#define JMESSAGE(code,string) code , + +#endif /* JMAKE_ENUM_LIST */ + +JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */ + +/* For maintenance convenience, list is alphabetical by message code name */ +JMESSAGE(JERR_ARITH_NOTIMPL, + "Sorry, there are legal restrictions on arithmetic coding") +JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix") +JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix") +JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode") +JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS") +JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range") +JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported") +JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition") +JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace") +JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace") +JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length") +JMESSAGE(JERR_BAD_LIB_VERSION, + "Wrong JPEG library version: library is %d, caller expects %d") +JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan") +JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d") +JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d") +JMESSAGE(JERR_BAD_PROGRESSION, + "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d") +JMESSAGE(JERR_BAD_PROG_SCRIPT, + "Invalid progressive parameters at scan script entry %d") +JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors") +JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d") +JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d") +JMESSAGE(JERR_BAD_STRUCT_SIZE, + "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u") +JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access") +JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small") +JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here") +JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet") +JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d") +JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request") +JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d") +JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x") +JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d") +JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d") +JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)") +JMESSAGE(JERR_EMS_READ, "Read from EMS failed") +JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed") +JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan") +JMESSAGE(JERR_FILE_READ, "Input file read error") +JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?") +JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet") +JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow") +JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry") +JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels") +JMESSAGE(JERR_INPUT_EMPTY, "Empty input file") +JMESSAGE(JERR_INPUT_EOF, "Premature end of input file") +JMESSAGE(JERR_MISMATCHED_QUANT_TABLE, + "Cannot transcode due to multiple use of quantization table %d") +JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data") +JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change") +JMESSAGE(JERR_NOTIMPL, "Not implemented yet") +JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time") +JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported") +JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined") +JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image") +JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined") +JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x") +JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)") +JMESSAGE(JERR_QUANT_COMPONENTS, + "Cannot quantize more than %d color components") +JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors") +JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors") +JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers") +JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker") +JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x") +JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers") +JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF") +JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s") +JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file") +JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file") +JMESSAGE(JERR_TFILE_WRITE, + "Write failed on temporary file --- out of disk space?") +JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines") +JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x") +JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up") +JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation") +JMESSAGE(JERR_XMS_READ, "Read from XMS failed") +JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed") +JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT) +JMESSAGE(JMSG_VERSION, JVERSION) +JMESSAGE(JTRC_16BIT_TABLES, + "Caution: quantization tables are too coarse for baseline JPEG") +JMESSAGE(JTRC_ADOBE, + "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d") +JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u") +JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u") +JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x") +JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x") +JMESSAGE(JTRC_DQT, "Define Quantization Table %d precision %d") +JMESSAGE(JTRC_DRI, "Define Restart Interval %u") +JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u") +JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u") +JMESSAGE(JTRC_EOI, "End Of Image") +JMESSAGE(JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d") +JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d") +JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE, + "Warning: thumbnail image size does not match data length %u") +JMESSAGE(JTRC_JFIF_EXTENSION, + "JFIF extension marker: type 0x%02x, length %u") +JMESSAGE(JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image") +JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u") +JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x") +JMESSAGE(JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u") +JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors") +JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors") +JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization") +JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d") +JMESSAGE(JTRC_RST, "RST%d") +JMESSAGE(JTRC_SMOOTH_NOTIMPL, + "Smoothing not supported with nonstandard sampling ratios") +JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d") +JMESSAGE(JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d") +JMESSAGE(JTRC_SOI, "Start of Image") +JMESSAGE(JTRC_SOS, "Start Of Scan: %d components") +JMESSAGE(JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d") +JMESSAGE(JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d") +JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s") +JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s") +JMESSAGE(JTRC_THUMB_JPEG, + "JFIF extension marker: JPEG-compressed thumbnail image, length %u") +JMESSAGE(JTRC_THUMB_PALETTE, + "JFIF extension marker: palette thumbnail image, length %u") +JMESSAGE(JTRC_THUMB_RGB, + "JFIF extension marker: RGB thumbnail image, length %u") +JMESSAGE(JTRC_UNKNOWN_IDS, + "Unrecognized component IDs %d %d %d, assuming YCbCr") +JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u") +JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u") +JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d") +JMESSAGE(JWRN_BOGUS_PROGRESSION, + "Inconsistent progression sequence for component %d coefficient %d") +JMESSAGE(JWRN_EXTRANEOUS_DATA, + "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x") +JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment") +JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code") +JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d") +JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file") +JMESSAGE(JWRN_MUST_RESYNC, + "Corrupt JPEG data: found marker 0x%02x instead of RST%d") +JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG") +JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines") + +#ifdef JMAKE_ENUM_LIST + + JMSG_LASTMSGCODE +} J_MESSAGE_CODE; + +#undef JMAKE_ENUM_LIST +#endif /* JMAKE_ENUM_LIST */ + +/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ +#undef JMESSAGE + + +#ifndef JERROR_H +#define JERROR_H + +/* Macros to simplify using the error and trace message stuff */ +/* The first parameter is either type of cinfo pointer */ + +/* Fatal errors (print message and exit) */ +#define ERREXIT(cinfo,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT1(cinfo,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT2(cinfo,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT3(cinfo,code,p1,p2,p3) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT4(cinfo,code,p1,p2,p3,p4) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (cinfo)->err->msg_parm.i[3] = (p4), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXITS(cinfo,code,str) \ + ((cinfo)->err->msg_code = (code), \ + strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) + +#define MAKESTMT(stuff) do { stuff } while (0) + +/* Nonfatal errors (we can keep going, but the data is probably corrupt) */ +#define WARNMS(cinfo,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) +#define WARNMS1(cinfo,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) +#define WARNMS2(cinfo,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) + +/* Informational/debugging messages */ +#define TRACEMS(cinfo,lvl,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS1(cinfo,lvl,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS2(cinfo,lvl,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS3(cinfo,lvl,code,p1,p2,p3) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + _mp[4] = (p5); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMSS(cinfo,lvl,code,str) \ + ((cinfo)->err->msg_code = (code), \ + strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) + +#endif /* JERROR_H */ diff --git a/engine/libs/vc6-libs/jmorecfg.h b/engine/libs/vc6-libs/jmorecfg.h new file mode 100644 index 000000000..55a37a301 --- /dev/null +++ b/engine/libs/vc6-libs/jmorecfg.h @@ -0,0 +1,374 @@ +/* + * jmorecfg.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains additional configuration options that customize the + * JPEG software for special applications or support machine-dependent + * optimizations. Most users will not need to touch this file. + */ + + +/* + * Define BITS_IN_JSAMPLE as either + * 8 for 8-bit sample values (the usual setting) + * 12 for 12-bit sample values + * Only 8 and 12 are legal data precisions for lossy JPEG according to the + * JPEG standard, and the IJG code does not support anything else! + * We do not support run-time selection of data precision, sorry. + */ + +// mh - disable silly warning +#pragma warning( disable : 4142 ) + +#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ + + +/* + * Maximum number of components (color channels) allowed in JPEG image. + * To meet the letter of the JPEG spec, set this to 255. However, darn + * few applications need more than 4 channels (maybe 5 for CMYK + alpha + * mask). We recommend 10 as a reasonable compromise; use 4 if you are + * really short on memory. (Each allowed component costs a hundred or so + * bytes of storage, whether actually used in an image or not.) + */ + +#define MAX_COMPONENTS 10 /* maximum number of image components */ + + +/* + * Basic data types. + * You may need to change these if you have a machine with unusual data + * type sizes; for example, "char" not 8 bits, "short" not 16 bits, + * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, + * but it had better be at least 16. + */ + +/* Representation of a single sample (pixel element value). + * We frequently allocate large arrays of these, so it's important to keep + * them small. But if you have memory to burn and access to char or short + * arrays is very slow on your hardware, you might want to change these. + */ + +#if BITS_IN_JSAMPLE == 8 +/* JSAMPLE should be the smallest type that will hold the values 0..255. + * You can use a signed char by having GETJSAMPLE mask it with 0xFF. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JSAMPLE; +#ifdef CHAR_IS_UNSIGNED +#define GETJSAMPLE(value) ((int) (value)) +#else +#define GETJSAMPLE(value) ((int) (value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + +#define MAXJSAMPLE 255 +#define CENTERJSAMPLE 128 + +#endif /* BITS_IN_JSAMPLE == 8 */ + + +#if BITS_IN_JSAMPLE == 12 +/* JSAMPLE should be the smallest type that will hold the values 0..4095. + * On nearly all machines "short" will do nicely. + */ + +typedef short JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#define MAXJSAMPLE 4095 +#define CENTERJSAMPLE 2048 + +#endif /* BITS_IN_JSAMPLE == 12 */ + + +/* Representation of a DCT frequency coefficient. + * This should be a signed value of at least 16 bits; "short" is usually OK. + * Again, we allocate large arrays of these, but you can change to int + * if you have memory to burn and "short" is really slow. + */ + +typedef short JCOEF; + + +/* Compressed datastreams are represented as arrays of JOCTET. + * These must be EXACTLY 8 bits wide, at least once they are written to + * external storage. Note that when using the stdio data source/destination + * managers, this is also the data type passed to fread/fwrite. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JOCTET; +#define GETJOCTET(value) (value) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JOCTET; +#ifdef CHAR_IS_UNSIGNED +#define GETJOCTET(value) (value) +#else +#define GETJOCTET(value) ((value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + + +/* These typedefs are used for various table entries and so forth. + * They must be at least as wide as specified; but making them too big + * won't cost a huge amount of memory, so we don't provide special + * extraction code like we did for JSAMPLE. (In other words, these + * typedefs live at a different point on the speed/space tradeoff curve.) + */ + +/* UINT8 must hold at least the values 0..255. */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char UINT8; +#else /* not HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char UINT8; +#else /* not CHAR_IS_UNSIGNED */ +typedef short UINT8; +#endif /* CHAR_IS_UNSIGNED */ +#endif /* HAVE_UNSIGNED_CHAR */ + +/* UINT16 must hold at least the values 0..65535. */ + +#ifdef HAVE_UNSIGNED_SHORT +typedef unsigned short UINT16; +#else /* not HAVE_UNSIGNED_SHORT */ +typedef unsigned int UINT16; +#endif /* HAVE_UNSIGNED_SHORT */ + +/* INT16 must hold at least the values -32768..32767. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ +typedef short INT16; +#endif + +/* INT32 must hold at least signed 32-bit values. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ +typedef long INT32; +#endif + +/* Datatype used for image dimensions. The JPEG standard only supports + * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore + * "unsigned int" is sufficient on all machines. However, if you need to + * handle larger images and you don't mind deviating from the spec, you + * can change this datatype. + */ + +typedef unsigned int JDIMENSION; + +#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ + + +/* These macros are used in all function definitions and extern declarations. + * You could modify them if you need to change function linkage conventions; + * in particular, you'll need to do that to make the library a Windows DLL. + * Another application is to make all functions global for use with debuggers + * or code profilers that require it. + */ + +#ifndef JPEG_API +#define JPEG_API +#endif + +/* a function called through method pointers: */ +#define METHODDEF(type) static type JPEG_API +/* a function used only in its module: */ +#define LOCAL(type) static type JPEG_API +/* a function referenced thru EXTERNs: */ +#define GLOBAL(type) type JPEG_API +/* a reference to a GLOBAL function: */ +#define EXTERN(type) extern type JPEG_API + + +/* This macro is used to declare a "method", that is, a function pointer. + * We want to supply prototype parameters if the compiler can cope. + * Note that the arglist parameter must be parenthesized! + * Again, you can customize this if you need special linkage keywords. + */ + +#ifdef HAVE_PROTOTYPES +#define JMETHOD(type,methodname,arglist) type (JPEG_API *methodname) arglist +#else +#define JMETHOD(type,methodname,arglist) type (JPEG_API *methodname) () +#endif + + +/* Here is the pseudo-keyword for declaring pointers that must be "far" + * on 80x86 machines. Most of the specialized coding for 80x86 is handled + * by just saying "FAR *" where such a pointer is needed. In a few places + * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. + */ + +// mfah - FAR is already defined in windef.h for glquake so i removed this block +// later - should have read the documentation fully first... sigh... +#ifdef NEED_FAR_POINTERS +#define FAR far +#else +#ifndef FAR +#define FAR +#endif +#endif + + +/* + * On a few systems, type boolean and/or its values FALSE, TRUE may appear + * in standard header files. Or you may have conflicts with application- + * specific header files that you want to include together with these files. + * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. + */ + +#ifndef HAVE_BOOLEAN +typedef int boolean; +#endif +#ifndef FALSE /* in case these macros already exist */ +#define FALSE 0 /* values of boolean */ +#endif +#ifndef TRUE +#define TRUE 1 +#endif + + +/* + * The remaining options affect code selection within the JPEG library, + * but they don't need to be visible to most applications using the library. + * To minimize application namespace pollution, the symbols won't be + * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. + */ + +#ifdef JPEG_INTERNALS +#define JPEG_INTERNAL_OPTIONS +#endif + +#ifdef JPEG_INTERNAL_OPTIONS + + +/* + * These defines indicate whether to include various optional functions. + * Undefining some of these symbols will produce a smaller but less capable + * library. Note that you can leave certain source files out of the + * compilation/linking process if you've #undef'd the corresponding symbols. + * (You may HAVE to do that if your compiler doesn't like null source files.) + */ + +/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ + +/* Capability options common to encoder and decoder: */ + +#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ +#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ +#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ + +/* Encoder capability options: */ + +#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ +/* Note: if you selected 12-bit data precision, it is dangerous to turn off + * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit + * precision, so jchuff.c normally uses entropy optimization to compute + * usable tables for higher precision. If you don't want to do optimization, + * you'll have to supply different default Huffman tables. + * The exact same statements apply for progressive JPEG: the default tables + * don't work for progressive mode. (This may get fixed, however.) + */ +#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ + +/* Decoder capability options: */ + +#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ +#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ +#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ +#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ +#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ +#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ +#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ + +/* more capability options later, no doubt */ + + +/* + * Ordering of RGB data in scanlines passed to or from the application. + * If your application wants to deal with data in the order B,G,R, just + * change these macros. You can also deal with formats such as R,G,B,X + * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing + * the offsets will also change the order in which colormap data is organized. + * RESTRICTIONS: + * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. + * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not + * useful if you are using JPEG color spaces other than YCbCr or grayscale. + * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE + * is not 3 (they don't understand about dummy color components!). So you + * can't use color quantization if you change that value. + */ + +#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ +#define RGB_GREEN 1 /* Offset of Green */ +#define RGB_BLUE 2 /* Offset of Blue */ +#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ + + +/* Definitions for speed-related optimizations. */ + + +/* If your compiler supports inline functions, define INLINE + * as the inline keyword; otherwise define it as empty. + */ + +#ifndef INLINE +#ifdef __GNUC__ /* for instance, GNU C knows about inline */ +#define INLINE __inline__ +#endif +#ifndef INLINE +#define INLINE /* default is to define it as empty */ +#endif +#endif + + +/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying + * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER + * as short on such a machine. MULTIPLIER must be at least 16 bits wide. + */ + +#ifndef MULTIPLIER +#define MULTIPLIER int /* type for fastest integer multiply */ +#endif + + +/* FAST_FLOAT should be either float or double, whichever is done faster + * by your compiler. (Note that this type is only used in the floating point + * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) + * Typically, float is faster in ANSI C compilers, while double is faster in + * pre-ANSI compilers (because they insist on converting to double anyway). + * The code below therefore chooses float if we have ANSI-style prototypes. + */ + +#ifndef FAST_FLOAT +#ifdef HAVE_PROTOTYPES +#define FAST_FLOAT float +#else +#define FAST_FLOAT double +#endif +#endif + +#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/engine/libs/vc6-libs/jpeg.lib b/engine/libs/vc6-libs/jpeg.lib new file mode 100644 index 0000000000000000000000000000000000000000..60cded8dcd8d4698dab6b6c416c92fedd3d355ad GIT binary patch literal 153986 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 aFb4N!&4cSWjHOZwzCxE7nI^c9BwvWsN;V(ck!o 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 literal 0 HcmV?d00001 diff --git a/engine/libs/vc6-libs/jpeglib.h b/engine/libs/vc6-libs/jpeglib.h new file mode 100644 index 000000000..d1be8ddef --- /dev/null +++ b/engine/libs/vc6-libs/jpeglib.h @@ -0,0 +1,1096 @@ +/* + * jpeglib.h + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the application interface for the JPEG library. + * Most applications using the library need only include this file, + * and perhaps jerror.h if they want to know the exact error codes. + */ + +#ifndef JPEGLIB_H +#define JPEGLIB_H + +/* + * First we include the configuration files that record how this + * installation of the JPEG library is set up. jconfig.h can be + * generated automatically for many systems. jmorecfg.h contains + * manual configuration options that most people need not worry about. + */ + +#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ +#include "jconfig.h" /* widely used configuration options */ +#endif +#include "jmorecfg.h" /* seldom changed options */ + + +/* Version ID for the JPEG library. + * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". + */ + +#define JPEG_LIB_VERSION 62 /* Version 6b */ + + +/* Various constants determining the sizes of things. + * All of these are specified by the JPEG standard, so don't change them + * if you want to be compatible. + */ + +#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ +#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ +#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ +#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ +#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ +#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ +#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ +/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; + * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. + * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU + * to handle it. We even let you do this from the jconfig.h file. However, + * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe + * sometimes emits noncompliant files doesn't mean you should too. + */ +#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ +#ifndef D_MAX_BLOCKS_IN_MCU +#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ +#endif + + +/* Data structures for images (arrays of samples and of DCT coefficients). + * On 80x86 machines, the image arrays are too big for near pointers, + * but the pointer arrays can fit in near memory. + */ + +typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ +typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ +typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ + +typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ +typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ +typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ +typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ + +typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ + + +/* Types for JPEG compression parameters and working tables. */ + + +/* DCT coefficient quantization tables. */ + +typedef struct { + /* This array gives the coefficient quantizers in natural array order + * (not the zigzag order in which they are stored in a JPEG DQT marker). + * CAUTION: IJG versions prior to v6a kept this array in zigzag order. + */ + UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JQUANT_TBL; + + +/* Huffman coding tables. */ + +typedef struct { + /* These two fields directly represent the contents of a JPEG DHT marker */ + UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ + /* length k bits; bits[0] is unused */ + UINT8 huffval[256]; /* The symbols, in order of incr code length */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JHUFF_TBL; + + +/* Basic info about one component (color channel). */ + +typedef struct { + /* These values are fixed over the whole image. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOF marker. */ + int component_id; /* identifier for this component (0..255) */ + int component_index; /* its index in SOF or cinfo->comp_info[] */ + int h_samp_factor; /* horizontal sampling factor (1..4) */ + int v_samp_factor; /* vertical sampling factor (1..4) */ + int quant_tbl_no; /* quantization table selector (0..3) */ + /* These values may vary between scans. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOS marker. */ + /* The decompressor output side may not use these variables. */ + int dc_tbl_no; /* DC entropy table selector (0..3) */ + int ac_tbl_no; /* AC entropy table selector (0..3) */ + + /* Remaining fields should be treated as private by applications. */ + + /* These values are computed during compression or decompression startup: */ + /* Component's size in DCT blocks. + * Any dummy blocks added to complete an MCU are not counted; therefore + * these values do not depend on whether a scan is interleaved or not. + */ + JDIMENSION width_in_blocks; + JDIMENSION height_in_blocks; + /* Size of a DCT block in samples. Always DCTSIZE for compression. + * For decompression this is the size of the output from one DCT block, + * reflecting any scaling we choose to apply during the IDCT step. + * Values of 1,2,4,8 are likely to be supported. Note that different + * components may receive different IDCT scalings. + */ + int DCT_scaled_size; + /* The downsampled dimensions are the component's actual, unpadded number + * of samples at the main buffer (preprocessing/compression interface), thus + * downsampled_width = ceil(image_width * Hi/Hmax) + * and similarly for height. For decompression, IDCT scaling is included, so + * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) + */ + JDIMENSION downsampled_width; /* actual width in samples */ + JDIMENSION downsampled_height; /* actual height in samples */ + /* This flag is used only for decompression. In cases where some of the + * components will be ignored (eg grayscale output from YCbCr image), + * we can skip most computations for the unused components. + */ + boolean component_needed; /* do we need the value of this component? */ + + /* These values are computed before starting a scan of the component. */ + /* The decompressor output side may not use these variables. */ + int MCU_width; /* number of blocks per MCU, horizontally */ + int MCU_height; /* number of blocks per MCU, vertically */ + int MCU_blocks; /* MCU_width * MCU_height */ + int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ + int last_col_width; /* # of non-dummy blocks across in last MCU */ + int last_row_height; /* # of non-dummy blocks down in last MCU */ + + /* Saved quantization table for component; NULL if none yet saved. + * See jdinput.c comments about the need for this information. + * This field is currently used only for decompression. + */ + JQUANT_TBL * quant_table; + + /* Private per-component storage for DCT or IDCT subsystem. */ + void * dct_table; +} jpeg_component_info; + + +/* The script for encoding a multiple-scan file is an array of these: */ + +typedef struct { + int comps_in_scan; /* number of components encoded in this scan */ + int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ + int Ss, Se; /* progressive JPEG spectral selection parms */ + int Ah, Al; /* progressive JPEG successive approx. parms */ +} jpeg_scan_info; + +/* The decompressor can save APPn and COM markers in a list of these: */ + +typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; + +struct jpeg_marker_struct { + jpeg_saved_marker_ptr next; /* next in list, or NULL */ + UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ + unsigned int original_length; /* # bytes of data in the file */ + unsigned int data_length; /* # bytes of data saved at data[] */ + JOCTET FAR * data; /* the data contained in the marker */ + /* the marker length word is not counted in data_length or original_length */ +}; + +/* Known color spaces. */ + +typedef enum { + JCS_UNKNOWN, /* error/unspecified */ + JCS_GRAYSCALE, /* monochrome */ + JCS_RGB, /* red/green/blue */ + JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ + JCS_CMYK, /* C/M/Y/K */ + JCS_YCCK /* Y/Cb/Cr/K */ +} J_COLOR_SPACE; + +/* DCT/IDCT algorithm options. */ + +typedef enum { + JDCT_ISLOW, /* slow but accurate integer algorithm */ + JDCT_IFAST, /* faster, less accurate integer method */ + JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ +} J_DCT_METHOD; + +#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ +#define JDCT_DEFAULT JDCT_ISLOW +#endif +#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ +#define JDCT_FASTEST JDCT_IFAST +#endif + +/* Dithering options for decompression. */ + +typedef enum { + JDITHER_NONE, /* no dithering */ + JDITHER_ORDERED, /* simple ordered dither */ + JDITHER_FS /* Floyd-Steinberg error diffusion dither */ +} J_DITHER_MODE; + + +/* Common fields between JPEG compression and decompression master structs. */ + +#define jpeg_common_fields \ + struct jpeg_error_mgr * err; /* Error handler module */\ + struct jpeg_memory_mgr * mem; /* Memory manager module */\ + struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ + void * client_data; /* Available for use by application */\ + boolean is_decompressor; /* So common code can tell which is which */\ + int global_state /* For checking call sequence validity */ + +/* Routines that are to be used by both halves of the library are declared + * to receive a pointer to this structure. There are no actual instances of + * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. + */ +struct jpeg_common_struct { + jpeg_common_fields; /* Fields common to both master struct types */ + /* Additional fields follow in an actual jpeg_compress_struct or + * jpeg_decompress_struct. All three structs must agree on these + * initial fields! (This would be a lot cleaner in C++.) + */ +}; + +typedef struct jpeg_common_struct * j_common_ptr; +typedef struct jpeg_compress_struct * j_compress_ptr; +typedef struct jpeg_decompress_struct * j_decompress_ptr; + + +/* Master record for a compression instance */ + +struct jpeg_compress_struct { + jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ + + /* Destination for compressed data */ + struct jpeg_destination_mgr * dest; + + /* Description of source image --- these fields must be filled in by + * outer application before starting compression. in_color_space must + * be correct before you can even call jpeg_set_defaults(). + */ + + JDIMENSION image_width; /* input image width */ + JDIMENSION image_height; /* input image height */ + int input_components; /* # of color components in input image */ + J_COLOR_SPACE in_color_space; /* colorspace of input image */ + + double input_gamma; /* image gamma of input image */ + + /* Compression parameters --- these fields must be set before calling + * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to + * initialize everything to reasonable defaults, then changing anything + * the application specifically wants to change. That way you won't get + * burnt when new parameters are added. Also note that there are several + * helper routines to simplify changing parameters. + */ + + int data_precision; /* bits of precision in image data */ + + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + int num_scans; /* # of entries in scan_info array */ + const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ + /* The default value of scan_info is NULL, which causes a single-scan + * sequential JPEG file to be emitted. To create a multi-scan file, + * set num_scans and scan_info to point to an array of scan definitions. + */ + + boolean raw_data_in; /* TRUE=caller supplies downsampled data */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + int smoothing_factor; /* 1..100, or 0 for no input smoothing */ + J_DCT_METHOD dct_method; /* DCT algorithm selector */ + + /* The restart interval can be specified in absolute MCUs by setting + * restart_interval, or in MCU rows by setting restart_in_rows + * (in which case the correct restart_interval will be figured + * for each scan). + */ + unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ + int restart_in_rows; /* if > 0, MCU rows per restart interval */ + + /* Parameters controlling emission of special markers. */ + + boolean write_JFIF_header; /* should a JFIF marker be written? */ + UINT8 JFIF_major_version; /* What to write for the JFIF version number */ + UINT8 JFIF_minor_version; + /* These three values are not used by the JPEG code, merely copied */ + /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ + /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ + /* ratio is defined by X_density/Y_density even when density_unit=0. */ + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean write_Adobe_marker; /* should an Adobe marker be written? */ + + /* State variable: index of next scanline to be written to + * jpeg_write_scanlines(). Application may use this to control its + * processing loop, e.g., "while (next_scanline < image_height)". + */ + + JDIMENSION next_scanline; /* 0 .. image_height-1 */ + + /* Remaining fields are known throughout compressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during compression startup + */ + boolean progressive_mode; /* TRUE if scan script uses progressive mode */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ + /* The coefficient controller receives data in units of MCU rows as defined + * for fully interleaved scans (whether the JPEG file is interleaved or not). + * There are v_samp_factor * DCTSIZE sample rows of each component in an + * "iMCU" (interleaved MCU) row. + */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[C_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* + * Links to compression subobjects (methods and private variables of modules) + */ + struct jpeg_comp_master * master; + struct jpeg_c_main_controller * main; + struct jpeg_c_prep_controller * prep; + struct jpeg_c_coef_controller * coef; + struct jpeg_marker_writer * marker; + struct jpeg_color_converter * cconvert; + struct jpeg_downsampler * downsample; + struct jpeg_forward_dct * fdct; + struct jpeg_entropy_encoder * entropy; + jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ + int script_space_size; +}; + + +/* Master record for a decompression instance */ + +struct jpeg_decompress_struct { + jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ + + /* Source of compressed data */ + struct jpeg_source_mgr * src; + + /* Basic description of image --- filled in by jpeg_read_header(). */ + /* Application may inspect these values to decide how to process image. */ + + JDIMENSION image_width; /* nominal image width (from SOF marker) */ + JDIMENSION image_height; /* nominal image height */ + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + /* Decompression processing parameters --- these fields must be set before + * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes + * them to default values. + */ + + J_COLOR_SPACE out_color_space; /* colorspace for output */ + + unsigned int scale_num, scale_denom; /* fraction by which to scale image */ + + double output_gamma; /* image gamma wanted in output */ + + boolean buffered_image; /* TRUE=multiple output passes */ + boolean raw_data_out; /* TRUE=downsampled data wanted */ + + J_DCT_METHOD dct_method; /* IDCT algorithm selector */ + boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ + boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ + + boolean quantize_colors; /* TRUE=colormapped output wanted */ + /* the following are ignored if not quantize_colors: */ + J_DITHER_MODE dither_mode; /* type of color dithering to use */ + boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ + int desired_number_of_colors; /* max # colors to use in created colormap */ + /* these are significant only in buffered-image mode: */ + boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ + boolean enable_external_quant;/* enable future use of external colormap */ + boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ + + /* Description of actual output image that will be returned to application. + * These fields are computed by jpeg_start_decompress(). + * You can also use jpeg_calc_output_dimensions() to determine these values + * in advance of calling jpeg_start_decompress(). + */ + + JDIMENSION output_width; /* scaled image width */ + JDIMENSION output_height; /* scaled image height */ + int out_color_components; /* # of color components in out_color_space */ + int output_components; /* # of color components returned */ + /* output_components is 1 (a colormap index) when quantizing colors; + * otherwise it equals out_color_components. + */ + int rec_outbuf_height; /* min recommended height of scanline buffer */ + /* If the buffer passed to jpeg_read_scanlines() is less than this many rows + * high, space and time will be wasted due to unnecessary data copying. + * Usually rec_outbuf_height will be 1 or 2, at most 4. + */ + + /* When quantizing colors, the output colormap is described by these fields. + * The application can supply a colormap by setting colormap non-NULL before + * calling jpeg_start_decompress; otherwise a colormap is created during + * jpeg_start_decompress or jpeg_start_output. + * The map has out_color_components rows and actual_number_of_colors columns. + */ + int actual_number_of_colors; /* number of entries in use */ + JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ + + /* State variables: these variables indicate the progress of decompression. + * The application may examine these but must not modify them. + */ + + /* Row index of next scanline to be read from jpeg_read_scanlines(). + * Application may use this to control its processing loop, e.g., + * "while (output_scanline < output_height)". + */ + JDIMENSION output_scanline; /* 0 .. output_height-1 */ + + /* Current input scan number and number of iMCU rows completed in scan. + * These indicate the progress of the decompressor input side. + */ + int input_scan_number; /* Number of SOS markers seen so far */ + JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ + + /* The "output scan number" is the notional scan being displayed by the + * output side. The decompressor will not allow output scan/row number + * to get ahead of input scan/row, but it can fall arbitrarily far behind. + */ + int output_scan_number; /* Nominal scan number being displayed */ + JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ + + /* Current progression status. coef_bits[c][i] indicates the precision + * with which component c's DCT coefficient i (in zigzag order) is known. + * It is -1 when no data has yet been received, otherwise it is the point + * transform (shift) value for the most recent scan of the coefficient + * (thus, 0 at completion of the progression). + * This pointer is NULL when reading a non-progressive file. + */ + int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ + + /* Internal JPEG parameters --- the application usually need not look at + * these fields. Note that the decompressor output side may not use + * any parameters that can change between scans. + */ + + /* Quantization and Huffman tables are carried forward across input + * datastreams when processing abbreviated JPEG datastreams. + */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + /* These parameters are never carried across datastreams, since they + * are given in SOF/SOS markers or defined to be reset by SOI. + */ + + int data_precision; /* bits of precision in image data */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ + + /* These fields record data obtained from optional markers recognized by + * the JPEG library. + */ + boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ + /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ + UINT8 JFIF_major_version; /* JFIF version number */ + UINT8 JFIF_minor_version; + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ + UINT8 Adobe_transform; /* Color transform code from Adobe marker */ + + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + + /* Aside from the specific data retained from APPn markers known to the + * library, the uninterpreted contents of any or all APPn and COM markers + * can be saved in a list for examination by the application. + */ + jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ + + /* Remaining fields are known throughout decompressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during decompression startup + */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ + /* The coefficient controller's input and output progress is measured in + * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows + * in fully interleaved JPEG scans, but are used whether the scan is + * interleaved or not. We define an iMCU row as v_samp_factor DCT block + * rows of each component. Therefore, the IDCT output contains + * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. + */ + + JSAMPLE * sample_range_limit; /* table for fast range-limiting */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + * Note that the decompressor output side must not use these fields. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[D_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* This field is shared between entropy decoder and marker parser. + * It is either zero or the code of a JPEG marker that has been + * read from the data source, but has not yet been processed. + */ + int unread_marker; + + /* + * Links to decompression subobjects (methods, private variables of modules) + */ + struct jpeg_decomp_master * master; + struct jpeg_d_main_controller * main; + struct jpeg_d_coef_controller * coef; + struct jpeg_d_post_controller * post; + struct jpeg_input_controller * inputctl; + struct jpeg_marker_reader * marker; + struct jpeg_entropy_decoder * entropy; + struct jpeg_inverse_dct * idct; + struct jpeg_upsampler * upsample; + struct jpeg_color_deconverter * cconvert; + struct jpeg_color_quantizer * cquantize; +}; + + +/* "Object" declarations for JPEG modules that may be supplied or called + * directly by the surrounding application. + * As with all objects in the JPEG library, these structs only define the + * publicly visible methods and state variables of a module. Additional + * private fields may exist after the public ones. + */ + + +/* Error handler object */ + +struct jpeg_error_mgr { + /* Error exit handler: does not return to caller */ + JMETHOD(void, error_exit, (j_common_ptr cinfo)); + /* Conditionally emit a trace or warning message */ + JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); + /* Routine that actually outputs a trace or error message */ + JMETHOD(void, output_message, (j_common_ptr cinfo)); + /* Format a message string for the most recent JPEG error or message */ + JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); +#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ + /* Reset error state variables at start of a new image */ + JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); + + /* The message ID code and any parameters are saved here. + * A message can have one string parameter or up to 8 int parameters. + */ + int msg_code; +#define JMSG_STR_PARM_MAX 80 + union { + int i[8]; + char s[JMSG_STR_PARM_MAX]; + } msg_parm; + + /* Standard state variables for error facility */ + + int trace_level; /* max msg_level that will be displayed */ + + /* For recoverable corrupt-data errors, we emit a warning message, + * but keep going unless emit_message chooses to abort. emit_message + * should count warnings in num_warnings. The surrounding application + * can check for bad data by seeing if num_warnings is nonzero at the + * end of processing. + */ + long num_warnings; /* number of corrupt-data warnings */ + + /* These fields point to the table(s) of error message strings. + * An application can change the table pointer to switch to a different + * message list (typically, to change the language in which errors are + * reported). Some applications may wish to add additional error codes + * that will be handled by the JPEG library error mechanism; the second + * table pointer is used for this purpose. + * + * First table includes all errors generated by JPEG library itself. + * Error code 0 is reserved for a "no such error string" message. + */ + const char * const * jpeg_message_table; /* Library errors */ + int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ + /* Second table can be added by application (see cjpeg/djpeg for example). + * It contains strings numbered first_addon_message..last_addon_message. + */ + const char * const * addon_message_table; /* Non-library errors */ + int first_addon_message; /* code for first string in addon table */ + int last_addon_message; /* code for last string in addon table */ +}; + + +/* Progress monitor object */ + +struct jpeg_progress_mgr { + JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); + + long pass_counter; /* work units completed in this pass */ + long pass_limit; /* total number of work units in this pass */ + int completed_passes; /* passes completed so far */ + int total_passes; /* total number of passes expected */ +}; + + +/* Data destination object for compression */ + +struct jpeg_destination_mgr { + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + + JMETHOD(void, init_destination, (j_compress_ptr cinfo)); + JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); + JMETHOD(void, term_destination, (j_compress_ptr cinfo)); +}; + + +/* Data source object for decompression */ + +struct jpeg_source_mgr { + const JOCTET * next_input_byte; /* => next byte to read from buffer */ + size_t bytes_in_buffer; /* # of bytes remaining in buffer */ + + JMETHOD(void, init_source, (j_decompress_ptr cinfo)); + JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); + JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); + JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); + JMETHOD(void, term_source, (j_decompress_ptr cinfo)); +}; + + +/* Memory manager object. + * Allocates "small" objects (a few K total), "large" objects (tens of K), + * and "really big" objects (virtual arrays with backing store if needed). + * The memory manager does not allow individual objects to be freed; rather, + * each created object is assigned to a pool, and whole pools can be freed + * at once. This is faster and more convenient than remembering exactly what + * to free, especially where malloc()/free() are not too speedy. + * NB: alloc routines never return NULL. They exit to error_exit if not + * successful. + */ + +#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ +#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ +#define JPOOL_NUMPOOLS 2 + +typedef struct jvirt_sarray_control * jvirt_sarray_ptr; +typedef struct jvirt_barray_control * jvirt_barray_ptr; + + +struct jpeg_memory_mgr { + /* Method pointers */ + JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, + JDIMENSION samplesperrow, + JDIMENSION numrows)); + JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, + JDIMENSION blocksperrow, + JDIMENSION numrows)); + JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION samplesperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION blocksperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); + JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, + jvirt_sarray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, + jvirt_barray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); + JMETHOD(void, self_destruct, (j_common_ptr cinfo)); + + /* Limit on memory allocation for this JPEG object. (Note that this is + * merely advisory, not a guaranteed maximum; it only affects the space + * used for virtual-array buffers.) May be changed by outer application + * after creating the JPEG object. + */ + long max_memory_to_use; + + /* Maximum allocation request accepted by alloc_large. */ + long max_alloc_chunk; +}; + + +/* Routine signature for application-supplied marker processing methods. + * Need not pass marker code since it is stored in cinfo->unread_marker. + */ +typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); + + +/* Declarations for routines called by application. + * The JPP macro hides prototype parameters from compilers that can't cope. + * Note JPP requires double parentheses. + */ + +#ifdef HAVE_PROTOTYPES +#define JPP(arglist) arglist +#else +#define JPP(arglist) () +#endif + + +/* Short forms of external names for systems with brain-damaged linkers. + * We shorten external names to be unique in the first six letters, which + * is good enough for all known systems. + * (If your compiler itself needs names to be unique in less than 15 + * characters, you are out of luck. Get a better compiler.) + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_error jStdError +#define jpeg_CreateCompress jCreaCompress +#define jpeg_CreateDecompress jCreaDecompress +#define jpeg_destroy_compress jDestCompress +#define jpeg_destroy_decompress jDestDecompress +#define jpeg_stdio_dest jStdDest +#define jpeg_stdio_src jStdSrc +#define jpeg_set_defaults jSetDefaults +#define jpeg_set_colorspace jSetColorspace +#define jpeg_default_colorspace jDefColorspace +#define jpeg_set_quality jSetQuality +#define jpeg_set_linear_quality jSetLQuality +#define jpeg_add_quant_table jAddQuantTable +#define jpeg_quality_scaling jQualityScaling +#define jpeg_simple_progression jSimProgress +#define jpeg_suppress_tables jSuppressTables +#define jpeg_alloc_quant_table jAlcQTable +#define jpeg_alloc_huff_table jAlcHTable +#define jpeg_start_compress jStrtCompress +#define jpeg_write_scanlines jWrtScanlines +#define jpeg_finish_compress jFinCompress +#define jpeg_write_raw_data jWrtRawData +#define jpeg_write_marker jWrtMarker +#define jpeg_write_m_header jWrtMHeader +#define jpeg_write_m_byte jWrtMByte +#define jpeg_write_tables jWrtTables +#define jpeg_read_header jReadHeader +#define jpeg_start_decompress jStrtDecompress +#define jpeg_read_scanlines jReadScanlines +#define jpeg_finish_decompress jFinDecompress +#define jpeg_read_raw_data jReadRawData +#define jpeg_has_multiple_scans jHasMultScn +#define jpeg_start_output jStrtOutput +#define jpeg_finish_output jFinOutput +#define jpeg_input_complete jInComplete +#define jpeg_new_colormap jNewCMap +#define jpeg_consume_input jConsumeInput +#define jpeg_calc_output_dimensions jCalcDimensions +#define jpeg_save_markers jSaveMarkers +#define jpeg_set_marker_processor jSetMarker +#define jpeg_read_coefficients jReadCoefs +#define jpeg_write_coefficients jWrtCoefs +#define jpeg_copy_critical_parameters jCopyCrit +#define jpeg_abort_compress jAbrtCompress +#define jpeg_abort_decompress jAbrtDecompress +#define jpeg_abort jAbort +#define jpeg_destroy jDestroy +#define jpeg_resync_to_restart jResyncRestart +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Default error-management setup */ +EXTERN(struct jpeg_error_mgr *) jpeg_std_error + JPP((struct jpeg_error_mgr * err)); + +/* Initialization of JPEG compression objects. + * jpeg_create_compress() and jpeg_create_decompress() are the exported + * names that applications should call. These expand to calls on + * jpeg_CreateCompress and jpeg_CreateDecompress with additional information + * passed for version mismatch checking. + * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. + */ +#define jpeg_create_compress(cinfo) \ + jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_compress_struct)) +#define jpeg_create_decompress(cinfo) \ + jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_decompress_struct)) +EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, + int version, size_t structsize)); +EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, + int version, size_t structsize)); +/* Destruction of JPEG compression objects */ +EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); + +/* Standard data source and destination managers: stdio streams. */ +/* Caller is responsible for opening the file before and closing after. */ +EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); +EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); + +/* Default parameter setup for compression */ +EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); +/* Compression parameter setup aids */ +EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, + J_COLOR_SPACE colorspace)); +EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, + boolean force_baseline)); +EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, + int scale_factor, + boolean force_baseline)); +EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, + boolean force_baseline)); +EXTERN(int) jpeg_quality_scaling JPP((int quality)); +EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, + boolean suppress)); +EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); +EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); + +/* Main entry points for compression */ +EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, + boolean write_all_tables)); +EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION num_lines)); +EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); + +/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION num_lines)); + +/* Write a special marker. See libjpeg.doc concerning safe usage. */ +EXTERN(void) jpeg_write_marker + JPP((j_compress_ptr cinfo, int marker, + const JOCTET * dataptr, unsigned int datalen)); +/* Same, but piecemeal. */ +EXTERN(void) jpeg_write_m_header + JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); +EXTERN(void) jpeg_write_m_byte + JPP((j_compress_ptr cinfo, int val)); + +/* Alternate compression function: just write an abbreviated table file */ +EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); + +/* Decompression startup: read start of JPEG datastream to see what's there */ +EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, + boolean require_image)); +/* Return value is one of: */ +#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ +#define JPEG_HEADER_OK 1 /* Found valid image datastream */ +#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ +/* If you pass require_image = TRUE (normal case), you need not check for + * a TABLES_ONLY return code; an abbreviated file will cause an error exit. + * JPEG_SUSPENDED is only possible if you use a data source module that can + * give a suspension return (the stdio source module doesn't). + */ + +/* Main entry points for decompression */ +EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); +EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION max_lines)); +EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); + +/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION max_lines)); + +/* Additional entry points for buffered-image mode. */ +EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, + int scan_number)); +EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); +EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); +/* Return value is one of: */ +/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ +#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ +#define JPEG_REACHED_EOI 2 /* Reached end of image */ +#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ +#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ + +/* Precalculate output dimensions for current decompression parameters. */ +EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); + +/* Control saving of COM and APPn markers into marker_list. */ +EXTERN(void) jpeg_save_markers + JPP((j_decompress_ptr cinfo, int marker_code, + unsigned int length_limit)); + +/* Install a special processing method for COM or APPn markers. */ +EXTERN(void) jpeg_set_marker_processor + JPP((j_decompress_ptr cinfo, int marker_code, + jpeg_marker_parser_method routine)); + +/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ +EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays)); +EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, + j_compress_ptr dstinfo)); + +/* If you choose to abort compression or decompression before completing + * jpeg_finish_(de)compress, then you need to clean up to release memory, + * temporary files, etc. You can just call jpeg_destroy_(de)compress + * if you're done with the JPEG object, but if you want to clean it up and + * reuse it, call this: + */ +EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); + +/* Generic versions of jpeg_abort and jpeg_destroy that work on either + * flavor of JPEG object. These may be more convenient in some places. + */ +EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); +EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); + +/* Default restart-marker-resync procedure for use by data source modules */ +EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, + int desired)); + + +/* These marker codes are exported since applications and data source modules + * are likely to want to use them. + */ + +#define JPEG_RST0 0xD0 /* RST0 marker code */ +#define JPEG_EOI 0xD9 /* EOI marker code */ +#define JPEG_APP0 0xE0 /* APP0 marker code */ +#define JPEG_COM 0xFE /* COM marker code */ + + +/* If we have a brain-damaged compiler that emits warnings (or worse, errors) + * for structure definitions that are never filled in, keep it quiet by + * supplying dummy definitions for the various substructures. + */ + +#ifdef INCOMPLETE_TYPES_BROKEN +#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ +struct jvirt_sarray_control { long dummy; }; +struct jvirt_barray_control { long dummy; }; +struct jpeg_comp_master { long dummy; }; +struct jpeg_c_main_controller { long dummy; }; +struct jpeg_c_prep_controller { long dummy; }; +struct jpeg_c_coef_controller { long dummy; }; +struct jpeg_marker_writer { long dummy; }; +struct jpeg_color_converter { long dummy; }; +struct jpeg_downsampler { long dummy; }; +struct jpeg_forward_dct { long dummy; }; +struct jpeg_entropy_encoder { long dummy; }; +struct jpeg_decomp_master { long dummy; }; +struct jpeg_d_main_controller { long dummy; }; +struct jpeg_d_coef_controller { long dummy; }; +struct jpeg_d_post_controller { long dummy; }; +struct jpeg_input_controller { long dummy; }; +struct jpeg_marker_reader { long dummy; }; +struct jpeg_entropy_decoder { long dummy; }; +struct jpeg_inverse_dct { long dummy; }; +struct jpeg_upsampler { long dummy; }; +struct jpeg_color_deconverter { long dummy; }; +struct jpeg_color_quantizer { long dummy; }; +#endif /* JPEG_INTERNALS */ +#endif /* INCOMPLETE_TYPES_BROKEN */ + + +/* + * The JPEG library modules define JPEG_INTERNALS before including this file. + * The internal structure declarations are read only when that is true. + * Applications using the library should not include jpegint.h, but may wish + * to include jerror.h. + */ + +#ifdef JPEG_INTERNALS +#include "jpegint.h" /* fetch private declarations */ +#include "jerror.h" /* fetch error codes too */ +#endif + +#endif /* JPEGLIB_H */ diff --git a/engine/libs/vc6-libs/libpng.lib b/engine/libs/vc6-libs/libpng.lib new file mode 100644 index 0000000000000000000000000000000000000000..82423f38119b19a0b76d8265bf0dc709dd24cb5b GIT binary patch literal 407514 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 z

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

;2wwV724q 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 defines should NOT be changed. + */ +#define PNG_INFO_gAMA 0x0001 +#define PNG_INFO_sBIT 0x0002 +#define PNG_INFO_cHRM 0x0004 +#define PNG_INFO_PLTE 0x0008 +#define PNG_INFO_tRNS 0x0010 +#define PNG_INFO_bKGD 0x0020 +#define PNG_INFO_hIST 0x0040 +#define PNG_INFO_pHYs 0x0080 +#define PNG_INFO_oFFs 0x0100 +#define PNG_INFO_tIME 0x0200 +#define PNG_INFO_pCAL 0x0400 +#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ +#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ +#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ +#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ +#define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */ + +/* This is used for the transformation routines, as some of them + * change these values for the row. It also should enable using + * the routines for other purposes. + */ +typedef struct png_row_info_struct +{ + png_uint_32 width; /* width of row */ + png_uint_32 rowbytes; /* number of bytes in row */ + png_byte color_type; /* color type of row */ + png_byte bit_depth; /* bit depth of row */ + png_byte channels; /* number of channels (1, 2, 3, or 4) */ + png_byte pixel_depth; /* bits per pixel (depth * channels) */ +} png_row_info; + +typedef png_row_info FAR * png_row_infop; +typedef png_row_info FAR * FAR * png_row_infopp; + +/* These are the function types for the I/O functions and for the functions + * that allow the user to override the default I/O functions with his or her + * own. The png_error_ptr type should match that of user-supplied warning + * and error functions, while the png_rw_ptr type should match that of the + * user read/write data functions. + */ +typedef struct png_struct_def png_struct; +typedef png_struct FAR * png_structp; + +typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp)); +typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t)); +typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp)); +typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32, + int)); +typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32, + int)); + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, png_infop)); +typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop)); +typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep, + png_uint_32, int)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_LEGACY_SUPPORTED) +typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp, + png_row_infop, png_bytep)); +#endif + +#if defined(PNG_USER_CHUNKS_SUPPORTED) +typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp)); +#endif +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) +typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); +#endif + +/* Transform masks for the high-level interface */ +#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ +#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ +#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ +#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ +#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ +#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ +#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ +#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ +#define PNG_TRANSFORM_BGR 0x0080 /* read and write */ +#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ +#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ +#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ +#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only, deprecated */ +/* Added to libpng-1.2.34 */ +#define PNG_TRANSFORM_STRIP_FILLER_BEFORE 0x0800 /* WRITE only */ +#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* WRITE only */ + +/* Flags for MNG supported features */ +#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 +#define PNG_FLAG_MNG_FILTER_64 0x04 +#define PNG_ALL_MNG_FEATURES 0x05 + +typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t)); +typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp)); + +/* The structure that holds the information to read and write PNG files. + * The only people who need to care about what is inside of this are the + * people who will be modifying the library for their own special needs. + * It should NOT be accessed directly by an application, except to store + * the jmp_buf. + */ + +struct png_struct_def +{ +#ifdef PNG_SETJMP_SUPPORTED + jmp_buf jmpbuf; /* used in png_error */ +#endif + png_error_ptr error_fn; /* function for printing errors and aborting */ + png_error_ptr warning_fn; /* function for printing warnings */ + png_voidp error_ptr; /* user supplied struct for error functions */ + png_rw_ptr write_data_fn; /* function for writing output data */ + png_rw_ptr read_data_fn; /* function for reading input data */ + png_voidp io_ptr; /* ptr to application struct for I/O functions */ + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) + png_user_transform_ptr read_user_transform_fn; /* user read transform */ +#endif + +#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) + png_user_transform_ptr write_user_transform_fn; /* user write transform */ +#endif + +/* These were added in libpng-1.0.2 */ +#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) + png_voidp user_transform_ptr; /* user supplied struct for user transform */ + png_byte user_transform_depth; /* bit depth of user transformed pixels */ + png_byte user_transform_channels; /* channels in user transformed pixels */ +#endif +#endif + + png_uint_32 mode; /* tells us where we are in the PNG file */ + png_uint_32 flags; /* flags indicating various things to libpng */ + png_uint_32 transformations; /* which transformations to perform */ + + z_stream zstream; /* pointer to decompression structure (below) */ + png_bytep zbuf; /* buffer for zlib */ + png_size_t zbuf_size; /* size of zbuf */ + int zlib_level; /* holds zlib compression level */ + int zlib_method; /* holds zlib compression method */ + int zlib_window_bits; /* holds zlib compression window bits */ + int zlib_mem_level; /* holds zlib compression memory level */ + int zlib_strategy; /* holds zlib compression strategy */ + + png_uint_32 width; /* width of image in pixels */ + png_uint_32 height; /* height of image in pixels */ + png_uint_32 num_rows; /* number of rows in current pass */ + png_uint_32 usr_width; /* width of row at start of write */ + png_uint_32 rowbytes; /* size of row in bytes */ + png_uint_32 irowbytes; /* size of current interlaced row in bytes */ + png_uint_32 iwidth; /* width of current interlaced row in pixels */ + png_uint_32 row_number; /* current row in interlace pass */ + png_bytep prev_row; /* buffer to save previous (unfiltered) row */ + png_bytep row_buf; /* buffer to save current (unfiltered) row */ +#ifndef PNG_NO_WRITE_FILTER + png_bytep sub_row; /* buffer to save "sub" row when filtering */ + png_bytep up_row; /* buffer to save "up" row when filtering */ + png_bytep avg_row; /* buffer to save "avg" row when filtering */ + png_bytep paeth_row; /* buffer to save "Paeth" row when filtering */ +#endif + png_row_info row_info; /* used for transformation routines */ + + png_uint_32 idat_size; /* current IDAT size for read */ + png_uint_32 crc; /* current chunk CRC value */ + png_colorp palette; /* palette from the input file */ + png_uint_16 num_palette; /* number of color entries in palette */ + png_uint_16 num_trans; /* number of transparency values */ + png_byte chunk_name[5]; /* null-terminated name of current chunk */ + png_byte compression; /* file compression type (always 0) */ + png_byte filter; /* file filter type (always 0) */ + png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ + png_byte pass; /* current interlace pass (0 - 6) */ + png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */ + png_byte color_type; /* color type of file */ + png_byte bit_depth; /* bit depth of file */ + png_byte usr_bit_depth; /* bit depth of users row */ + png_byte pixel_depth; /* number of bits per pixel */ + png_byte channels; /* number of channels in file */ + png_byte usr_channels; /* channels at start of write */ + png_byte sig_bytes; /* magic bytes read/written from start of file */ + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) +#ifdef PNG_LEGACY_SUPPORTED + png_byte filler; /* filler byte for pixel expansion */ +#else + png_uint_16 filler; /* filler bytes for pixel expansion */ +#endif +#endif + +#if defined(PNG_bKGD_SUPPORTED) + png_byte background_gamma_type; +# ifdef PNG_FLOATING_POINT_SUPPORTED + float background_gamma; +# endif + png_color_16 background; /* background color in screen gamma space */ +#if defined(PNG_READ_GAMMA_SUPPORTED) + png_color_16 background_1; /* background normalized to gamma 1.0 */ +#endif +#endif /* PNG_bKGD_SUPPORTED */ + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) + png_flush_ptr output_flush_fn;/* Function for flushing output */ + png_uint_32 flush_dist; /* how many rows apart to flush, 0 - no flush */ + png_uint_32 flush_rows; /* number of rows written since last flush */ +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + int gamma_shift; /* number of "insignificant" bits 16-bit gamma */ +#ifdef PNG_FLOATING_POINT_SUPPORTED + float gamma; /* file gamma value */ + float screen_gamma; /* screen gamma value (display_exponent) */ +#endif +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_bytep gamma_table; /* gamma table for 8-bit depth files */ + png_bytep gamma_from_1; /* converts from 1.0 to screen */ + png_bytep gamma_to_1; /* converts from file to 1.0 */ + png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */ + png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */ + png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */ +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED) + png_color_8 sig_bit; /* significant bits in each available channel */ +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) + png_color_8 shift; /* shift for significant bit tranformation */ +#endif + +#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \ + || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_bytep trans; /* transparency values for paletted files */ + png_color_16 trans_values; /* transparency values for non-paletted files */ +#endif + + png_read_status_ptr read_row_fn; /* called after each row is decoded */ + png_write_status_ptr write_row_fn; /* called after each row is encoded */ +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED + png_progressive_info_ptr info_fn; /* called after header data fully read */ + png_progressive_row_ptr row_fn; /* called after each prog. row is decoded */ + png_progressive_end_ptr end_fn; /* called after image is complete */ + png_bytep save_buffer_ptr; /* current location in save_buffer */ + png_bytep save_buffer; /* buffer for previously read data */ + png_bytep current_buffer_ptr; /* current location in current_buffer */ + png_bytep current_buffer; /* buffer for recently used data */ + png_uint_32 push_length; /* size of current input chunk */ + png_uint_32 skip_length; /* bytes to skip in input data */ + png_size_t save_buffer_size; /* amount of data now in save_buffer */ + png_size_t save_buffer_max; /* total size of save_buffer */ + png_size_t buffer_size; /* total amount of available input data */ + png_size_t current_buffer_size; /* amount of data now in current_buffer */ + int process_mode; /* what push library is currently doing */ + int cur_palette; /* current push library palette index */ + +# if defined(PNG_TEXT_SUPPORTED) + png_size_t current_text_size; /* current size of text input data */ + png_size_t current_text_left; /* how much text left to read in input */ + png_charp current_text; /* current text chunk buffer */ + png_charp current_text_ptr; /* current location in current_text */ +# endif /* PNG_TEXT_SUPPORTED */ +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + +#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) +/* for the Borland special 64K segment handler */ + png_bytepp offset_table_ptr; + png_bytep offset_table; + png_uint_16 offset_table_number; + png_uint_16 offset_table_count; + png_uint_16 offset_table_count_free; +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) + png_bytep palette_lookup; /* lookup table for dithering */ + png_bytep dither_index; /* index translation for palette files */ +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED) + png_uint_16p hist; /* histogram */ +#endif + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + png_byte heuristic_method; /* heuristic for row filter selection */ + png_byte num_prev_filters; /* number of weights for previous rows */ + png_bytep prev_filters; /* filter type(s) of previous row(s) */ + png_uint_16p filter_weights; /* weight(s) for previous line(s) */ + png_uint_16p inv_filter_weights; /* 1/weight(s) for previous line(s) */ + png_uint_16p filter_costs; /* relative filter calculation cost */ + png_uint_16p inv_filter_costs; /* 1/relative filter calculation cost */ +#endif + +#if defined(PNG_TIME_RFC1123_SUPPORTED) + png_charp time_buffer; /* String to hold RFC 1123 time text */ +#endif + +/* New members added in libpng-1.0.6 */ + +#ifdef PNG_FREE_ME_SUPPORTED + png_uint_32 free_me; /* flags items libpng is responsible for freeing */ +#endif + +#if defined(PNG_USER_CHUNKS_SUPPORTED) + png_voidp user_chunk_ptr; + png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ +#endif + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) + int num_chunk_list; + png_bytep chunk_list; +#endif + +/* New members added in libpng-1.0.3 */ +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) + png_byte rgb_to_gray_status; + /* These were changed from png_byte in libpng-1.0.6 */ + png_uint_16 rgb_to_gray_red_coeff; + png_uint_16 rgb_to_gray_green_coeff; + png_uint_16 rgb_to_gray_blue_coeff; +#endif + +/* New member added in libpng-1.0.4 (renamed in 1.0.9) */ +#if defined(PNG_MNG_FEATURES_SUPPORTED) || \ + defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ + defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) +/* changed from png_byte to png_uint_32 at version 1.2.0 */ +#ifdef PNG_1_0_X + png_byte mng_features_permitted; +#else + png_uint_32 mng_features_permitted; +#endif /* PNG_1_0_X */ +#endif + +/* New member added in libpng-1.0.7 */ +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_fixed_point int_gamma; +#endif + +/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */ +#if defined(PNG_MNG_FEATURES_SUPPORTED) + png_byte filter_type; +#endif + +#if defined(PNG_1_0_X) +/* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */ + png_uint_32 row_buf_size; +#endif + +/* New members added in libpng-1.2.0 */ +#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) +# if !defined(PNG_1_0_X) +# if defined(PNG_MMX_CODE_SUPPORTED) + png_byte mmx_bitdepth_threshold; + png_uint_32 mmx_rowbytes_threshold; +# endif + png_uint_32 asm_flags; +# endif +#endif + +/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */ +#ifdef PNG_USER_MEM_SUPPORTED + png_voidp mem_ptr; /* user supplied struct for mem functions */ + png_malloc_ptr malloc_fn; /* function for allocating memory */ + png_free_ptr free_fn; /* function for freeing memory */ +#endif + +/* New member added in libpng-1.0.13 and 1.2.0 */ + png_bytep big_row_buf; /* buffer to save current (unfiltered) row */ + +#if defined(PNG_READ_DITHER_SUPPORTED) +/* The following three members were added at version 1.0.14 and 1.2.4 */ + png_bytep dither_sort; /* working sort array */ + png_bytep index_to_palette; /* where the original index currently is */ + /* in the palette */ + png_bytep palette_to_index; /* which original index points to this */ + /* palette color */ +#endif + +/* New members added in libpng-1.0.16 and 1.2.6 */ + png_byte compression_type; + +#ifdef PNG_SET_USER_LIMITS_SUPPORTED + png_uint_32 user_width_max; + png_uint_32 user_height_max; +#endif + +/* New member added in libpng-1.0.25 and 1.2.17 */ +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) + /* storage for unknown chunk that the library doesn't recognize. */ + png_unknown_chunk unknown_chunk; +#endif + +/* New members added in libpng-1.2.26 */ + png_uint_32 old_big_row_buf_size, old_prev_row_size; + +/* New member added in libpng-1.2.30 */ + png_charp chunkdata; /* buffer for reading chunk data */ + +}; + + +/* This triggers a compiler error in png.c, if png.c and png.h + * do not agree upon the version number. + */ +typedef png_structp version_1_2_35; + +typedef png_struct FAR * FAR * png_structpp; + +/* Here are the function definitions most commonly used. This is not + * the place to find out how to use libpng. See libpng.txt for the + * full explanation, see example.c for the summary. This just provides + * a simple one line description of the use of each function. + */ + +/* Returns the version number of the library */ +extern PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void)); + +/* Tell lib we have already handled the first magic bytes. + * Handling more than 8 bytes from the beginning of the file is an error. + */ +extern PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr, + int num_bytes)); + +/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a + * PNG file. Returns zero if the supplied bytes match the 8-byte PNG + * signature, and non-zero otherwise. Having num_to_check == 0 or + * start > 7 will always fail (ie return non-zero). + */ +extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start, + png_size_t num_to_check)); + +/* Simple signature checking function. This is the same as calling + * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). + */ +extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num)); + +/* Allocate and initialize png_ptr struct for reading, and any other memory. */ +extern PNG_EXPORT(png_structp,png_create_read_struct) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn)); + +/* Allocate and initialize png_ptr struct for writing, and any other memory */ +extern PNG_EXPORT(png_structp,png_create_write_struct) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn)); + +#ifdef PNG_WRITE_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size) + PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_WRITE_SUPPORTED +extern PNG_EXPORT(void,png_set_compression_buffer_size) + PNGARG((png_structp png_ptr, png_uint_32 size)); +#endif + +/* Reset the compression stream */ +extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr)); + +/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ +#ifdef PNG_USER_MEM_SUPPORTED +extern PNG_EXPORT(png_structp,png_create_read_struct_2) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +extern PNG_EXPORT(png_structp,png_create_write_struct_2) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +#endif + +/* Write a PNG chunk - size, type, (optional) data, CRC. */ +extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr, + png_bytep chunk_name, png_bytep data, png_size_t length)); + +/* Write the start of a PNG chunk - length and chunk name. */ +extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr, + png_bytep chunk_name, png_uint_32 length)); + +/* Write the data of a PNG chunk started with png_write_chunk_start(). */ +extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr, + png_bytep data, png_size_t length)); + +/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ +extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr)); + +/* Allocate and initialize the info structure */ +extern PNG_EXPORT(png_infop,png_create_info_struct) + PNGARG((png_structp png_ptr)); + +#if defined(PNG_1_0_X) || defined (PNG_1_2_X) +/* Initialize the info structure (old interface - DEPRECATED) */ +extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr)); +#undef png_info_init +#define png_info_init(info_ptr) png_info_init_3(&info_ptr,\ + png_sizeof(png_info)); +#endif + +extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr, + png_size_t png_info_struct_size)); + +/* Writes all the PNG information before the image. */ +extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* read the information before the actual image data. */ +extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif + +#if defined(PNG_TIME_RFC1123_SUPPORTED) +extern PNG_EXPORT(png_charp,png_convert_to_rfc1123) + PNGARG((png_structp png_ptr, png_timep ptime)); +#endif + +#if !defined(_WIN32_WCE) +/* "time.h" functions are not supported on WindowsCE */ +#if defined(PNG_WRITE_tIME_SUPPORTED) +/* convert from a struct tm to png_time */ +extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime, + struct tm FAR * ttime)); + +/* convert from time_t to png_time. Uses gmtime() */ +extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime, + time_t ttime)); +#endif /* PNG_WRITE_tIME_SUPPORTED */ +#endif /* _WIN32_WCE */ + +#if defined(PNG_READ_EXPAND_SUPPORTED) +/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ +extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr)); +#if !defined(PNG_1_0_X) +extern PNG_EXPORT(void,png_set_expand_gray_1_2_4_to_8) PNGARG((png_structp + png_ptr)); +#endif +extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr)); +extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr)); +#if defined(PNG_1_0_X) || defined (PNG_1_2_X) +/* Deprecated */ +extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr)); +#endif +#endif + +#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) +/* Use blue, green, red order for pixels. */ +extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) +/* Expand the grayscale to 24-bit RGB if necessary. */ +extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) +/* Reduce RGB to grayscale. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr, + int error_action, double red, double green )); +#endif +extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr, + int error_action, png_fixed_point red, png_fixed_point green )); +extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp + png_ptr)); +#endif + +extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth, + png_colorp palette)); + +#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) +extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) +extern PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) +extern PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) +/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */ +extern PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr, + png_uint_32 filler, int flags)); +/* The values of the PNG_FILLER_ defines should NOT be changed */ +#define PNG_FILLER_BEFORE 0 +#define PNG_FILLER_AFTER 1 +/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */ +#if !defined(PNG_1_0_X) +extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr, + png_uint_32 filler, int flags)); +#endif +#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */ + +#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) +/* Swap bytes in 16-bit depth files. */ +extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) +/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ +extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) +/* Swap packing order of pixels in bytes. */ +extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) +/* Converts files to legal bit depths. */ +extern PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr, + png_color_8p true_bits)); +#endif + +#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ + defined(PNG_WRITE_INTERLACING_SUPPORTED) +/* Have the code handle the interlacing. Returns the number of passes. */ +extern PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) +/* Invert monochrome files */ +extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_BACKGROUND_SUPPORTED) +/* Handle alpha and tRNS by replacing with a background color. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr, + png_color_16p background_color, int background_gamma_code, + int need_expand, double background_gamma)); +#endif +#define PNG_BACKGROUND_GAMMA_UNKNOWN 0 +#define PNG_BACKGROUND_GAMMA_SCREEN 1 +#define PNG_BACKGROUND_GAMMA_FILE 2 +#define PNG_BACKGROUND_GAMMA_UNIQUE 3 +#endif + +#if defined(PNG_READ_16_TO_8_SUPPORTED) +/* strip the second byte of information from a 16-bit depth file. */ +extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) +/* Turn on dithering, and reduce the palette to the number of colors available. */ +extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr, + png_colorp palette, int num_palette, int maximum_colors, + png_uint_16p histogram, int full_dither)); +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) +/* Handle gamma correction. Screen_gamma=(display_exponent) */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr, + double screen_gamma, double default_file_gamma)); +#endif +#endif + +#if defined(PNG_1_0_X) || defined (PNG_1_2_X) +#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ + defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) +/* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */ +/* Deprecated and will be removed. Use png_permit_mng_features() instead. */ +extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr, + int empty_plte_permitted)); +#endif +#endif + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) +/* Set how many lines between output flushes - 0 for no flushing */ +extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows)); +/* Flush the current PNG output buffer */ +extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr)); +#endif + +/* optional update palette with requested transformations */ +extern PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr)); + +/* optional call to update the users info structure */ +extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* read one or more rows of image data. */ +extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr, + png_bytepp row, png_bytepp display_row, png_uint_32 num_rows)); +#endif + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* read a row of data. */ +extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr, + png_bytep row, + png_bytep display_row)); +#endif + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* read the whole image into memory at once. */ +extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr, + png_bytepp image)); +#endif + +/* write a row of image data */ +extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr, + png_bytep row)); + +/* write a few rows of image data */ +extern PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr, + png_bytepp row, png_uint_32 num_rows)); + +/* write the image data */ +extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr, + png_bytepp image)); + +/* writes the end of the PNG file. */ +extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* read the end of the PNG file. */ +extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif + +/* free any memory associated with the png_info_struct */ +extern PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr, + png_infopp info_ptr_ptr)); + +/* free any memory associated with the png_struct and the png_info_structs */ +extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp + png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); + +/* free all memory used by the read (old method - NOT DLL EXPORTED) */ +extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr, + png_infop end_info_ptr)); + +/* free any memory associated with the png_struct and the png_info_structs */ +extern PNG_EXPORT(void,png_destroy_write_struct) + PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)); + +/* free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */ +extern void png_write_destroy PNGARG((png_structp png_ptr)); + +/* set the libpng method of handling chunk CRC errors */ +extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr, + int crit_action, int ancil_action)); + +/* Values for png_set_crc_action() to say how to handle CRC errors in + * ancillary and critical chunks, and whether to use the data contained + * therein. Note that it is impossible to "discard" data in a critical + * chunk. For versions prior to 0.90, the action was always error/quit, + * whereas in version 0.90 and later, the action for CRC errors in ancillary + * chunks is warn/discard. These values should NOT be changed. + * + * value action:critical action:ancillary + */ +#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ +#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ +#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ +#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ +#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ +#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ + +/* These functions give the user control over the scan-line filtering in + * libpng and the compression methods used by zlib. These functions are + * mainly useful for testing, as the defaults should work with most users. + * Those users who are tight on memory or want faster performance at the + * expense of compression can modify them. See the compression library + * header file (zlib.h) for an explination of the compression functions. + */ + +/* set the filtering method(s) used by libpng. Currently, the only valid + * value for "method" is 0. + */ +extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method, + int filters)); + +/* Flags for png_set_filter() to say which filters to use. The flags + * are chosen so that they don't conflict with real filter types + * below, in case they are supplied instead of the #defined constants. + * These values should NOT be changed. + */ +#define PNG_NO_FILTERS 0x00 +#define PNG_FILTER_NONE 0x08 +#define PNG_FILTER_SUB 0x10 +#define PNG_FILTER_UP 0x20 +#define PNG_FILTER_AVG 0x40 +#define PNG_FILTER_PAETH 0x80 +#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ + PNG_FILTER_AVG | PNG_FILTER_PAETH) + +/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. + * These defines should NOT be changed. + */ +#define PNG_FILTER_VALUE_NONE 0 +#define PNG_FILTER_VALUE_SUB 1 +#define PNG_FILTER_VALUE_UP 2 +#define PNG_FILTER_VALUE_AVG 3 +#define PNG_FILTER_VALUE_PAETH 4 +#define PNG_FILTER_VALUE_LAST 5 + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */ +/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_ + * defines, either the default (minimum-sum-of-absolute-differences), or + * the experimental method (weighted-minimum-sum-of-absolute-differences). + * + * Weights are factors >= 1.0, indicating how important it is to keep the + * filter type consistent between rows. Larger numbers mean the current + * filter is that many times as likely to be the same as the "num_weights" + * previous filters. This is cumulative for each previous row with a weight. + * There needs to be "num_weights" values in "filter_weights", or it can be + * NULL if the weights aren't being specified. Weights have no influence on + * the selection of the first row filter. Well chosen weights can (in theory) + * improve the compression for a given image. + * + * Costs are factors >= 1.0 indicating the relative decoding costs of a + * filter type. Higher costs indicate more decoding expense, and are + * therefore less likely to be selected over a filter with lower computational + * costs. There needs to be a value in "filter_costs" for each valid filter + * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't + * setting the costs. Costs try to improve the speed of decompression without + * unduly increasing the compressed image size. + * + * A negative weight or cost indicates the default value is to be used, and + * values in the range [0.0, 1.0) indicate the value is to remain unchanged. + * The default values for both weights and costs are currently 1.0, but may + * change if good general weighting/cost heuristics can be found. If both + * the weights and costs are set to 1.0, this degenerates the WEIGHTED method + * to the UNWEIGHTED method, but with added encoding time/computation. + */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, + int heuristic_method, int num_weights, png_doublep filter_weights, + png_doublep filter_costs)); +#endif +#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ + +/* Heuristic used for row filter selection. These defines should NOT be + * changed. + */ +#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ +#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ +#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ +#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ + +/* Set the library compression level. Currently, valid values range from + * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 + * (0 - no compression, 9 - "maximal" compression). Note that tests have + * shown that zlib compression levels 3-6 usually perform as well as level 9 + * for PNG images, and do considerably fewer caclulations. In the future, + * these values may not correspond directly to the zlib compression levels. + */ +extern PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr, + int level)); + +extern PNG_EXPORT(void,png_set_compression_mem_level) + PNGARG((png_structp png_ptr, int mem_level)); + +extern PNG_EXPORT(void,png_set_compression_strategy) + PNGARG((png_structp png_ptr, int strategy)); + +extern PNG_EXPORT(void,png_set_compression_window_bits) + PNGARG((png_structp png_ptr, int window_bits)); + +extern PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr, + int method)); + +/* These next functions are called for input/output, memory, and error + * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, + * and call standard C I/O routines such as fread(), fwrite(), and + * fprintf(). These functions can be made to use other I/O routines + * at run time for those applications that need to handle I/O in a + * different manner by calling png_set_???_fn(). See libpng.txt for + * more information. + */ + +#if !defined(PNG_NO_STDIO) +/* Initialize the input/output for the PNG file to the default functions. */ +extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp)); +#endif + +/* Replace the (error and abort), and warning functions with user + * supplied functions. If no messages are to be printed you must still + * write and use replacement functions. The replacement error_fn should + * still do a longjmp to the last setjmp location if you are using this + * method of error handling. If error_fn or warning_fn is NULL, the + * default function will be used. + */ + +extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr, + png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); + +/* Return the user pointer associated with the error functions */ +extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr)); + +/* Replace the default data output functions with a user supplied one(s). + * If buffered output is not used, then output_flush_fn can be set to NULL. + * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time + * output_flush_fn will be ignored (and thus can be NULL). + */ +extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr, + png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); + +/* Replace the default data input function with a user supplied one. */ +extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr, + png_voidp io_ptr, png_rw_ptr read_data_fn)); + +/* Return the user pointer associated with the I/O functions */ +extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr)); + +extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr, + png_read_status_ptr read_row_fn)); + +extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr, + png_write_status_ptr write_row_fn)); + +#ifdef PNG_USER_MEM_SUPPORTED +/* Replace the default memory allocation functions with user supplied one(s). */ +extern PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr, + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +/* Return the user pointer associated with the memory functions */ +extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_LEGACY_SUPPORTED) +extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp + png_ptr, png_user_transform_ptr read_user_transform_fn)); +#endif + +#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_LEGACY_SUPPORTED) +extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp + png_ptr, png_user_transform_ptr write_user_transform_fn)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_LEGACY_SUPPORTED) +extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp + png_ptr, png_voidp user_transform_ptr, int user_transform_depth, + int user_transform_channels)); +/* Return the user pointer associated with the user transform functions */ +extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr) + PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_USER_CHUNKS_SUPPORTED +extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr, + png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); +extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp + png_ptr)); +#endif + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +/* Sets the function callbacks for the push reader, and a pointer to a + * user-defined structure available to the callback functions. + */ +extern PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr, + png_voidp progressive_ptr, + png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, + png_progressive_end_ptr end_fn)); + +/* returns the user pointer associated with the push read functions */ +extern PNG_EXPORT(png_voidp,png_get_progressive_ptr) + PNGARG((png_structp png_ptr)); + +/* function to be called when data becomes available */ +extern PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep buffer, png_size_t buffer_size)); + +/* function that combines rows. Not very much different than the + * png_combine_row() call. Is this even used????? + */ +extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr, + png_bytep old_row, png_bytep new_row)); +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + +extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr, + png_uint_32 size)); + +#if defined(PNG_1_0_X) +# define png_malloc_warn png_malloc +#else +/* Added at libpng version 1.2.4 */ +extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr, + png_uint_32 size)); +#endif + +/* frees a pointer allocated by png_malloc() */ +extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr)); + +#if defined(PNG_1_0_X) +/* Function to allocate memory for zlib. */ +extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items, + uInt size)); + +/* Function to free memory for zlib */ +extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr)); +#endif + +/* Free data that was allocated internally */ +extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 free_me, int num)); +#ifdef PNG_FREE_ME_SUPPORTED +/* Reassign responsibility for freeing existing data, whether allocated + * by libpng or by the application */ +extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr, + png_infop info_ptr, int freer, png_uint_32 mask)); +#endif +/* assignments for png_data_freer */ +#define PNG_DESTROY_WILL_FREE_DATA 1 +#define PNG_SET_WILL_FREE_DATA 1 +#define PNG_USER_WILL_FREE_DATA 2 +/* Flags for png_ptr->free_me and info_ptr->free_me */ +#define PNG_FREE_HIST 0x0008 +#define PNG_FREE_ICCP 0x0010 +#define PNG_FREE_SPLT 0x0020 +#define PNG_FREE_ROWS 0x0040 +#define PNG_FREE_PCAL 0x0080 +#define PNG_FREE_SCAL 0x0100 +#define PNG_FREE_UNKN 0x0200 +#define PNG_FREE_LIST 0x0400 +#define PNG_FREE_PLTE 0x1000 +#define PNG_FREE_TRNS 0x2000 +#define PNG_FREE_TEXT 0x4000 +#define PNG_FREE_ALL 0x7fff +#define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ + +#ifdef PNG_USER_MEM_SUPPORTED +extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr, + png_uint_32 size)); +extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr, + png_voidp ptr)); +#endif + +extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr, + png_voidp s1, png_voidp s2, png_uint_32 size)); + +extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr, + png_voidp s1, int value, png_uint_32 size)); + +#if defined(USE_FAR_KEYWORD) /* memory model conversion function */ +extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr, + int check)); +#endif /* USE_FAR_KEYWORD */ + +#ifndef PNG_NO_ERROR_TEXT +/* Fatal error in PNG image of libpng - can't continue */ +extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr, + png_const_charp error_message)); + +/* The same, but the chunk name is prepended to the error string. */ +extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr, + png_const_charp error_message)); +#else +/* Fatal error in PNG image of libpng - can't continue */ +extern PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr)); +#endif + +#ifndef PNG_NO_WARNINGS +/* Non-fatal error in libpng. Can continue, but may have a problem. */ +extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +#ifdef PNG_READ_SUPPORTED +/* Non-fatal error in libpng, chunk name is prepended to message. */ +extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); +#endif /* PNG_READ_SUPPORTED */ +#endif /* PNG_NO_WARNINGS */ + +/* The png_set_ functions are for storing values in the png_info_struct. + * Similarly, the png_get_ calls are used to read values from the + * png_info_struct, either storing the parameters in the passed variables, or + * setting pointers into the png_info_struct where the data is stored. The + * png_get_ functions return a non-zero value if the data was available + * in info_ptr, or return zero and do not change any of the parameters if the + * data was not available. + * + * These functions should be used instead of directly accessing png_info + * to avoid problems with future changes in the size and internal layout of + * png_info_struct. + */ +/* Returns "flag" if chunk data is valid in info_ptr. */ +extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr, +png_infop info_ptr, png_uint_32 flag)); + +/* Returns number of bytes needed to hold a transformed row. */ +extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#if defined(PNG_INFO_IMAGE_SUPPORTED) +/* Returns row_pointers, which is an array of pointers to scanlines that was +returned from png_read_png(). */ +extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr, +png_infop info_ptr)); +/* Set row_pointers, which is an array of pointers to scanlines for use +by png_write_png(). */ +extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytepp row_pointers)); +#endif + +/* Returns number of color channels in image. */ +extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#ifdef PNG_EASY_ACCESS_SUPPORTED +/* Returns image width in pixels. */ +extern PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image height in pixels. */ +extern PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image bit_depth. */ +extern PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image color_type. */ +extern PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image filter_type. */ +extern PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image interlace_type. */ +extern PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image compression_type. */ +extern PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image resolution in pixels per meter, from pHYs chunk data. */ +extern PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +extern PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +extern PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns pixel aspect ratio, computed from pHYs chunk data. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +#endif + +/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ +extern PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +extern PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +extern PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +extern PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +#endif /* PNG_EASY_ACCESS_SUPPORTED */ + +/* Returns pointer to signature string read from PNG header */ +extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#if defined(PNG_bKGD_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_16p *background)); +#endif + +#if defined(PNG_bKGD_SUPPORTED) +extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_16p background)); +#endif + +#if defined(PNG_cHRM_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, double *white_x, double *white_y, double *red_x, + double *red_y, double *green_x, double *green_y, double *blue_x, + double *blue_y)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point + *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, + png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point + *int_blue_x, png_fixed_point *int_blue_y)); +#endif +#endif + +#if defined(PNG_cHRM_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, double white_x, double white_y, double red_x, + double red_y, double green_x, double green_y, double blue_x, double blue_y)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, + png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point + int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)); +#endif +#endif + +#if defined(PNG_gAMA_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr, + png_infop info_ptr, double *file_gamma)); +#endif +extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point *int_file_gamma)); +#endif + +#if defined(PNG_gAMA_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr, + png_infop info_ptr, double file_gamma)); +#endif +extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_file_gamma)); +#endif + +#if defined(PNG_hIST_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_16p *hist)); +#endif + +#if defined(PNG_hIST_SUPPORTED) +extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_16p hist)); +#endif + +extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, + int *bit_depth, int *color_type, int *interlace_method, + int *compression_method, int *filter_method)); + +extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, + int color_type, int interlace_method, int compression_method, + int filter_method)); + +#if defined(PNG_oFFs_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, + int *unit_type)); +#endif + +#if defined(PNG_oFFs_SUPPORTED) +extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y, + int unit_type)); +#endif + +#if defined(PNG_pCAL_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, + int *type, int *nparams, png_charp *units, png_charpp *params)); +#endif + +#if defined(PNG_pCAL_SUPPORTED) +extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, + int type, int nparams, png_charp units, png_charpp params)); +#endif + +#if defined(PNG_pHYs_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); +#endif + +#if defined(PNG_pHYs_SUPPORTED) +extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); +#endif + +extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_colorp *palette, int *num_palette)); + +extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_colorp palette, int num_palette)); + +#if defined(PNG_sBIT_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_8p *sig_bit)); +#endif + +#if defined(PNG_sBIT_SUPPORTED) +extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_8p sig_bit)); +#endif + +#if defined(PNG_sRGB_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *intent)); +#endif + +#if defined(PNG_sRGB_SUPPORTED) +extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr, + png_infop info_ptr, int intent)); +extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, int intent)); +#endif + +#if defined(PNG_iCCP_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charpp name, int *compression_type, + png_charpp profile, png_uint_32 *proflen)); + /* Note to maintainer: profile should be png_bytepp */ +#endif + +#if defined(PNG_iCCP_SUPPORTED) +extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp name, int compression_type, + png_charp profile, png_uint_32 proflen)); + /* Note to maintainer: profile should be png_bytep */ +#endif + +#if defined(PNG_sPLT_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_sPLT_tpp entries)); +#endif + +#if defined(PNG_sPLT_SUPPORTED) +extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_sPLT_tp entries, int nentries)); +#endif + +#if defined(PNG_TEXT_SUPPORTED) +/* png_get_text also returns the number of text chunks in *num_text */ +extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_textp *text_ptr, int *num_text)); +#endif + +/* + * Note while png_set_text() will accept a structure whose text, + * language, and translated keywords are NULL pointers, the structure + * returned by png_get_text will always contain regular + * zero-terminated C strings. They might be empty strings but + * they will never be NULL pointers. + */ + +#if defined(PNG_TEXT_SUPPORTED) +extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_textp text_ptr, int num_text)); +#endif + +#if defined(PNG_tIME_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_timep *mod_time)); +#endif + +#if defined(PNG_tIME_SUPPORTED) +extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_timep mod_time)); +#endif + +#if defined(PNG_tRNS_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep *trans, int *num_trans, + png_color_16p *trans_values)); +#endif + +#if defined(PNG_tRNS_SUPPORTED) +extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep trans, int num_trans, + png_color_16p trans_values)); +#endif + +#if defined(PNG_tRNS_SUPPORTED) +#endif + +#if defined(PNG_sCAL_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *unit, double *width, double *height)); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight)); +#endif +#endif +#endif /* PNG_sCAL_SUPPORTED */ + +#if defined(PNG_sCAL_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, int unit, double width, double height)); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr, + png_infop info_ptr, int unit, png_charp swidth, png_charp sheight)); +#endif +#endif +#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) +/* provide a list of chunks and how they are to be handled, if the built-in + handling or default unknown chunk handling is not desired. Any chunks not + listed will be handled in the default manner. The IHDR and IEND chunks + must not be listed. + keep = 0: follow default behaviour + = 1: do not keep + = 2: keep only if safe-to-copy + = 3: keep even if unsafe-to-copy +*/ +extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp + png_ptr, int keep, png_bytep chunk_list, int num_chunks)); +extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)); +extern PNG_EXPORT(void, png_set_unknown_chunk_location) + PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location)); +extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp + png_ptr, png_infop info_ptr, png_unknown_chunkpp entries)); +#endif +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep + chunk_name)); +#endif + +/* Png_free_data() will turn off the "valid" flag for anything it frees. + If you need to turn it off for a chunk that your application has freed, + you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); */ +extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr, + png_infop info_ptr, int mask)); + +#if defined(PNG_INFO_IMAGE_SUPPORTED) +/* The "params" pointer is currently not used and is for future expansion. */ +extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr, + png_infop info_ptr, + int transforms, + png_voidp params)); +extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr, + png_infop info_ptr, + int transforms, + png_voidp params)); +#endif + +/* Define PNG_DEBUG at compile time for debugging information. Higher + * numbers for PNG_DEBUG mean more debugging information. This has + * only been added since version 0.95 so it is not implemented throughout + * libpng yet, but more support will be added as needed. + */ +#ifdef PNG_DEBUG +#if (PNG_DEBUG > 0) +#if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER) +#include +#if (PNG_DEBUG > 1) +#ifndef _DEBUG +# define _DEBUG +#endif +#ifndef png_debug +#define png_debug(l,m) _RPT0(_CRT_WARN,m PNG_STRING_NEWLINE) +#endif +#ifndef png_debug1 +#define png_debug1(l,m,p1) _RPT1(_CRT_WARN,m PNG_STRING_NEWLINE,p1) +#endif +#ifndef png_debug2 +#define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m PNG_STRING_NEWLINE,p1,p2) +#endif +#endif +#else /* PNG_DEBUG_FILE || !_MSC_VER */ +#ifndef PNG_DEBUG_FILE +#define PNG_DEBUG_FILE stderr +#endif /* PNG_DEBUG_FILE */ +#if (PNG_DEBUG > 1) +#ifndef png_debug +/* Note: ["%s"m PNG_STRING_NEWLINE] probably does not work on + * non-ISO compilers */ +#ifdef __STDC__ +#define png_debug(l,m) \ +{ \ + int num_tabs=l; \ + fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \ + (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \ +} +#endif +#ifndef png_debug1 +#define png_debug1(l,m,p1) \ +{ \ + int num_tabs=l; \ + fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \ + (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \ +} +#endif +#ifndef png_debug2 +#define png_debug2(l,m,p1,p2) \ +{ \ + int num_tabs=l; \ + fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \ + (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \ +} +#endif +#else /* __STDC __ */ +#ifndef png_debug +#define png_debug(l,m) \ + int num_tabs=l; \ + char format[256]; \ + snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \ + (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \ + m,PNG_STRING_NEWLINE); \ + fprintf(PNG_DEBUG_FILE,format); +#endif +#ifndef png_debug1 +#define png_debug1(l,m,p1) \ + int num_tabs=l; \ + char format[256]; \ + snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \ + (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \ + m,PNG_STRING_NEWLINE); \ + fprintf(PNG_DEBUG_FILE,format,p1); +#endif +#ifndef png_debug2 +#define png_debug2(l,m,p1,p2) \ + int num_tabs=l; \ + char format[256]; \ + snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \ + (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \ + m,PNG_STRING_NEWLINE); \ + fprintf(PNG_DEBUG_FILE,format,p1,p2); +#endif +#endif /* __STDC __ */ +#endif /* (PNG_DEBUG > 1) */ +#endif /* _MSC_VER */ +#endif /* (PNG_DEBUG > 0) */ +#endif /* PNG_DEBUG */ +#ifndef png_debug +#define png_debug(l, m) +#endif +#ifndef png_debug1 +#define png_debug1(l, m, p1) +#endif +#ifndef png_debug2 +#define png_debug2(l, m, p1, p2) +#endif + +extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr)); +extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr)); +extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr)); +extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr)); + +#ifdef PNG_MNG_FEATURES_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp + png_ptr, png_uint_32 mng_features_permitted)); +#endif + +/* For use in png_set_keep_unknown, added to version 1.2.6 */ +#define PNG_HANDLE_CHUNK_AS_DEFAULT 0 +#define PNG_HANDLE_CHUNK_NEVER 1 +#define PNG_HANDLE_CHUNK_IF_SAFE 2 +#define PNG_HANDLE_CHUNK_ALWAYS 3 + +/* Added to version 1.2.0 */ +#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) +#if defined(PNG_MMX_CODE_SUPPORTED) +#define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED 0x01 /* not user-settable */ +#define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU 0x02 /* not user-settable */ +#define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW 0x04 +#define PNG_ASM_FLAG_MMX_READ_INTERLACE 0x08 +#define PNG_ASM_FLAG_MMX_READ_FILTER_SUB 0x10 +#define PNG_ASM_FLAG_MMX_READ_FILTER_UP 0x20 +#define PNG_ASM_FLAG_MMX_READ_FILTER_AVG 0x40 +#define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80 +#define PNG_ASM_FLAGS_INITIALIZED 0x80000000 /* not user-settable */ + +#define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ + | PNG_ASM_FLAG_MMX_READ_INTERLACE \ + | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ + | PNG_ASM_FLAG_MMX_READ_FILTER_UP \ + | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ + | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ) +#define PNG_MMX_WRITE_FLAGS ( 0 ) + +#define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \ + | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU \ + | PNG_MMX_READ_FLAGS \ + | PNG_MMX_WRITE_FLAGS ) + +#define PNG_SELECT_READ 1 +#define PNG_SELECT_WRITE 2 +#endif /* PNG_MMX_CODE_SUPPORTED */ + +#if !defined(PNG_1_0_X) +/* pngget.c */ +extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask) + PNGARG((int flag_select, int *compilerID)); + +/* pngget.c */ +extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask) + PNGARG((int flag_select)); + +/* pngget.c */ +extern PNG_EXPORT(png_uint_32,png_get_asm_flags) + PNGARG((png_structp png_ptr)); + +/* pngget.c */ +extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold) + PNGARG((png_structp png_ptr)); + +/* pngget.c */ +extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold) + PNGARG((png_structp png_ptr)); + +/* pngset.c */ +extern PNG_EXPORT(void,png_set_asm_flags) + PNGARG((png_structp png_ptr, png_uint_32 asm_flags)); + +/* pngset.c */ +extern PNG_EXPORT(void,png_set_mmx_thresholds) + PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold, + png_uint_32 mmx_rowbytes_threshold)); + +#endif /* PNG_1_0_X */ + +#if !defined(PNG_1_0_X) +/* png.c, pnggccrd.c, or pngvcrd.c */ +extern PNG_EXPORT(int,png_mmx_support) PNGARG((void)); +#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ + +/* Strip the prepended error numbers ("#nnn ") from error and warning + * messages before passing them to the error or warning handler. */ +#ifdef PNG_ERROR_NUMBERS_SUPPORTED +extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp + png_ptr, png_uint_32 strip_mode)); +#endif + +#endif /* PNG_1_0_X */ + +/* Added at libpng-1.2.6 */ +#ifdef PNG_SET_USER_LIMITS_SUPPORTED +extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp + png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max)); +extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp + png_ptr)); +extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp + png_ptr)); +#endif + + +/* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */ + +#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED +/* With these routines we avoid an integer divide, which will be slower on + * most machines. However, it does take more operations than the corresponding + * divide method, so it may be slower on a few RISC systems. There are two + * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. + * + * Note that the rounding factors are NOT supposed to be the same! 128 and + * 32768 are correct for the NODIV code; 127 and 32767 are correct for the + * standard method. + * + * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] + */ + + /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ + +# define png_composite(composite, fg, alpha, bg) \ + { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) * (png_uint_16)(alpha) \ + + (png_uint_16)(bg)*(png_uint_16)(255 - \ + (png_uint_16)(alpha)) + (png_uint_16)128); \ + (composite) = (png_byte)((temp + (temp >> 8)) >> 8); } + +# define png_composite_16(composite, fg, alpha, bg) \ + { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) * (png_uint_32)(alpha) \ + + (png_uint_32)(bg)*(png_uint_32)(65535L - \ + (png_uint_32)(alpha)) + (png_uint_32)32768L); \ + (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); } + +#else /* standard method using integer division */ + +# define png_composite(composite, fg, alpha, bg) \ + (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \ + (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ + (png_uint_16)127) / 255) + +# define png_composite_16(composite, fg, alpha, bg) \ + (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \ + (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) + \ + (png_uint_32)32767) / (png_uint_32)65535L) + +#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ + +/* Inline macros to do direct reads of bytes from the input buffer. These + * require that you are using an architecture that uses PNG byte ordering + * (MSB first) and supports unaligned data storage. I think that PowerPC + * in big-endian mode and 680x0 are the only ones that will support this. + * The x86 line of processors definitely do not. The png_get_int_32() + * routine also assumes we are using two's complement format for negative + * values, which is almost certainly true. + */ +#if defined(PNG_READ_BIG_ENDIAN_SUPPORTED) +# define png_get_uint_32(buf) ( *((png_uint_32p) (buf))) +# define png_get_uint_16(buf) ( *((png_uint_16p) (buf))) +# define png_get_int_32(buf) ( *((png_int_32p) (buf))) +#else +extern PNG_EXPORT(png_uint_32,png_get_uint_32) PNGARG((png_bytep buf)); +extern PNG_EXPORT(png_uint_16,png_get_uint_16) PNGARG((png_bytep buf)); +extern PNG_EXPORT(png_int_32,png_get_int_32) PNGARG((png_bytep buf)); +#endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */ +extern PNG_EXPORT(png_uint_32,png_get_uint_31) + PNGARG((png_structp png_ptr, png_bytep buf)); +/* No png_get_int_16 -- may be added if there's a real need for it. */ + +/* Place a 32-bit number into a buffer in PNG byte order (big-endian). + */ +extern PNG_EXPORT(void,png_save_uint_32) + PNGARG((png_bytep buf, png_uint_32 i)); +extern PNG_EXPORT(void,png_save_int_32) + PNGARG((png_bytep buf, png_int_32 i)); + +/* Place a 16-bit number into a buffer in PNG byte order. + * The parameter is declared unsigned int, not png_uint_16, + * just to avoid potential problems on pre-ANSI C compilers. + */ +extern PNG_EXPORT(void,png_save_uint_16) + PNGARG((png_bytep buf, unsigned int i)); +/* No png_save_int_16 -- may be added if there's a real need for it. */ + +/* ************************************************************************* */ + +/* These next functions are used internally in the code. They generally + * shouldn't be used unless you are writing code to add or replace some + * functionality in libpng. More information about most functions can + * be found in the files where the functions are located. + */ + + +/* Various modes of operation, that are visible to applications because + * they are used for unknown chunk location. + */ +#define PNG_HAVE_IHDR 0x01 +#define PNG_HAVE_PLTE 0x02 +#define PNG_HAVE_IDAT 0x04 +#define PNG_AFTER_IDAT 0x08 /* Have complete zlib datastream */ +#define PNG_HAVE_IEND 0x10 + +#if defined(PNG_INTERNAL) + +/* More modes of operation. Note that after an init, mode is set to + * zero automatically when the structure is created. + */ +#define PNG_HAVE_gAMA 0x20 +#define PNG_HAVE_cHRM 0x40 +#define PNG_HAVE_sRGB 0x80 +#define PNG_HAVE_CHUNK_HEADER 0x100 +#define PNG_WROTE_tIME 0x200 +#define PNG_WROTE_INFO_BEFORE_PLTE 0x400 +#define PNG_BACKGROUND_IS_GRAY 0x800 +#define PNG_HAVE_PNG_SIGNATURE 0x1000 +#define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */ + +/* flags for the transformations the PNG library does on the image data */ +#define PNG_BGR 0x0001 +#define PNG_INTERLACE 0x0002 +#define PNG_PACK 0x0004 +#define PNG_SHIFT 0x0008 +#define PNG_SWAP_BYTES 0x0010 +#define PNG_INVERT_MONO 0x0020 +#define PNG_DITHER 0x0040 +#define PNG_BACKGROUND 0x0080 +#define PNG_BACKGROUND_EXPAND 0x0100 + /* 0x0200 unused */ +#define PNG_16_TO_8 0x0400 +#define PNG_RGBA 0x0800 +#define PNG_EXPAND 0x1000 +#define PNG_GAMMA 0x2000 +#define PNG_GRAY_TO_RGB 0x4000 +#define PNG_FILLER 0x8000L +#define PNG_PACKSWAP 0x10000L +#define PNG_SWAP_ALPHA 0x20000L +#define PNG_STRIP_ALPHA 0x40000L +#define PNG_INVERT_ALPHA 0x80000L +#define PNG_USER_TRANSFORM 0x100000L +#define PNG_RGB_TO_GRAY_ERR 0x200000L +#define PNG_RGB_TO_GRAY_WARN 0x400000L +#define PNG_RGB_TO_GRAY 0x600000L /* two bits, RGB_TO_GRAY_ERR|WARN */ + /* 0x800000L Unused */ +#define PNG_ADD_ALPHA 0x1000000L /* Added to libpng-1.2.7 */ +#define PNG_EXPAND_tRNS 0x2000000L /* Added to libpng-1.2.9 */ + /* 0x4000000L unused */ + /* 0x8000000L unused */ + /* 0x10000000L unused */ + /* 0x20000000L unused */ + /* 0x40000000L unused */ + +/* flags for png_create_struct */ +#define PNG_STRUCT_PNG 0x0001 +#define PNG_STRUCT_INFO 0x0002 + +/* Scaling factor for filter heuristic weighting calculations */ +#define PNG_WEIGHT_SHIFT 8 +#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT)) +#define PNG_COST_SHIFT 3 +#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT)) + +/* flags for the png_ptr->flags rather than declaring a byte for each one */ +#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001 +#define PNG_FLAG_ZLIB_CUSTOM_LEVEL 0x0002 +#define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL 0x0004 +#define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS 0x0008 +#define PNG_FLAG_ZLIB_CUSTOM_METHOD 0x0010 +#define PNG_FLAG_ZLIB_FINISHED 0x0020 +#define PNG_FLAG_ROW_INIT 0x0040 +#define PNG_FLAG_FILLER_AFTER 0x0080 +#define PNG_FLAG_CRC_ANCILLARY_USE 0x0100 +#define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200 +#define PNG_FLAG_CRC_CRITICAL_USE 0x0400 +#define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800 +#define PNG_FLAG_FREE_PLTE 0x1000 +#define PNG_FLAG_FREE_TRNS 0x2000 +#define PNG_FLAG_FREE_HIST 0x4000 +#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x8000L +#define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x10000L +#define PNG_FLAG_LIBRARY_MISMATCH 0x20000L +#define PNG_FLAG_STRIP_ERROR_NUMBERS 0x40000L +#define PNG_FLAG_STRIP_ERROR_TEXT 0x80000L +#define PNG_FLAG_MALLOC_NULL_MEM_OK 0x100000L +#define PNG_FLAG_ADD_ALPHA 0x200000L /* Added to libpng-1.2.8 */ +#define PNG_FLAG_STRIP_ALPHA 0x400000L /* Added to libpng-1.2.8 */ + /* 0x800000L unused */ + /* 0x1000000L unused */ + /* 0x2000000L unused */ + /* 0x4000000L unused */ + /* 0x8000000L unused */ + /* 0x10000000L unused */ + /* 0x20000000L unused */ + /* 0x40000000L unused */ + +#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \ + PNG_FLAG_CRC_ANCILLARY_NOWARN) + +#define PNG_FLAG_CRC_CRITICAL_MASK (PNG_FLAG_CRC_CRITICAL_USE | \ + PNG_FLAG_CRC_CRITICAL_IGNORE) + +#define PNG_FLAG_CRC_MASK (PNG_FLAG_CRC_ANCILLARY_MASK | \ + PNG_FLAG_CRC_CRITICAL_MASK) + +/* save typing and make code easier to understand */ + +#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \ + abs((int)((c1).green) - (int)((c2).green)) + \ + abs((int)((c1).blue) - (int)((c2).blue))) + +/* Added to libpng-1.2.6 JB */ +#define PNG_ROWBYTES(pixel_bits, width) \ + ((pixel_bits) >= 8 ? \ + ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \ + (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) ) + +/* PNG_OUT_OF_RANGE returns true if value is outside the range + ideal-delta..ideal+delta. Each argument is evaluated twice. + "ideal" and "delta" should be constants, normally simple + integers, "value" a variable. Added to libpng-1.2.6 JB */ +#define PNG_OUT_OF_RANGE(value, ideal, delta) \ + ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) ) + +/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */ +#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) +/* place to hold the signature string for a PNG file. */ +#ifdef PNG_USE_GLOBAL_ARRAYS + PNG_EXPORT_VAR (PNG_CONST png_byte FARDATA) png_sig[8]; +#else +#endif +#endif /* PNG_NO_EXTERN */ + +/* Constant strings for known chunk types. If you need to add a chunk, + * define the name here, and add an invocation of the macro in png.c and + * wherever it's needed. + */ +#define PNG_IHDR png_byte png_IHDR[5] = { 73, 72, 68, 82, '\0'} +#define PNG_IDAT png_byte png_IDAT[5] = { 73, 68, 65, 84, '\0'} +#define PNG_IEND png_byte png_IEND[5] = { 73, 69, 78, 68, '\0'} +#define PNG_PLTE png_byte png_PLTE[5] = { 80, 76, 84, 69, '\0'} +#define PNG_bKGD png_byte png_bKGD[5] = { 98, 75, 71, 68, '\0'} +#define PNG_cHRM png_byte png_cHRM[5] = { 99, 72, 82, 77, '\0'} +#define PNG_gAMA png_byte png_gAMA[5] = {103, 65, 77, 65, '\0'} +#define PNG_hIST png_byte png_hIST[5] = {104, 73, 83, 84, '\0'} +#define PNG_iCCP png_byte png_iCCP[5] = {105, 67, 67, 80, '\0'} +#define PNG_iTXt png_byte png_iTXt[5] = {105, 84, 88, 116, '\0'} +#define PNG_oFFs png_byte png_oFFs[5] = {111, 70, 70, 115, '\0'} +#define PNG_pCAL png_byte png_pCAL[5] = {112, 67, 65, 76, '\0'} +#define PNG_sCAL png_byte png_sCAL[5] = {115, 67, 65, 76, '\0'} +#define PNG_pHYs png_byte png_pHYs[5] = {112, 72, 89, 115, '\0'} +#define PNG_sBIT png_byte png_sBIT[5] = {115, 66, 73, 84, '\0'} +#define PNG_sPLT png_byte png_sPLT[5] = {115, 80, 76, 84, '\0'} +#define PNG_sRGB png_byte png_sRGB[5] = {115, 82, 71, 66, '\0'} +#define PNG_tEXt png_byte png_tEXt[5] = {116, 69, 88, 116, '\0'} +#define PNG_tIME png_byte png_tIME[5] = {116, 73, 77, 69, '\0'} +#define PNG_tRNS png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'} +#define PNG_zTXt png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'} + +#ifdef PNG_USE_GLOBAL_ARRAYS +PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_IDAT[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_IEND[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_PLTE[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_bKGD[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_cHRM[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_gAMA[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_hIST[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_iCCP[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_iTXt[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_oFFs[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_pCAL[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_sCAL[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_pHYs[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_sBIT[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_sPLT[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_sRGB[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_tEXt[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5]; +PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5]; +#endif /* PNG_USE_GLOBAL_ARRAYS */ + +#if defined(PNG_1_0_X) || defined (PNG_1_2_X) +/* Initialize png_ptr struct for reading, and allocate any other memory. + * (old interface - DEPRECATED - use png_create_read_struct instead). + */ +extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr)); +#undef png_read_init +#define png_read_init(png_ptr) png_read_init_3(&png_ptr, \ + PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); +#endif + +extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr, + png_const_charp user_png_ver, png_size_t png_struct_size)); +#if defined(PNG_1_0_X) || defined (PNG_1_2_X) +extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr, + png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t + png_info_size)); +#endif + +#if defined(PNG_1_0_X) || defined (PNG_1_2_X) +/* Initialize png_ptr struct for writing, and allocate any other memory. + * (old interface - DEPRECATED - use png_create_write_struct instead). + */ +extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr)); +#undef png_write_init +#define png_write_init(png_ptr) png_write_init_3(&png_ptr, \ + PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); +#endif + +extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr, + png_const_charp user_png_ver, png_size_t png_struct_size)); +extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr, + png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t + png_info_size)); + +/* Allocate memory for an internal libpng struct */ +PNG_EXTERN png_voidp png_create_struct PNGARG((int type)); + +/* Free memory from internal libpng struct */ +PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr)); + +PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr + malloc_fn, png_voidp mem_ptr)); +PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr, + png_free_ptr free_fn, png_voidp mem_ptr)); + +/* Free any memory that info_ptr points to and reset struct. */ +PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifndef PNG_1_0_X +/* Function to allocate memory for zlib. */ +PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size)); + +/* Function to free memory for zlib */ +PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr)); + +#ifdef PNG_SIZE_T +/* Function to convert a sizeof an item to png_sizeof item */ + PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size)); +#endif + +/* Next four functions are used internally as callbacks. PNGAPI is required + * but not PNG_EXPORT. PNGAPI added at libpng version 1.2.3. */ + +PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr, + png_bytep data, png_size_t length)); + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr, + png_bytep buffer, png_size_t length)); +#endif + +PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr, + png_bytep data, png_size_t length)); + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) +#if !defined(PNG_NO_STDIO) +PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr)); +#endif +#endif +#else /* PNG_1_0_X */ +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr, + png_bytep buffer, png_size_t length)); +#endif +#endif /* PNG_1_0_X */ + +/* Reset the CRC variable */ +PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr)); + +/* Write the "data" buffer to whatever output you are using. */ +PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data, + png_size_t length)); + +/* Read data from whatever input you are using into the "data" buffer */ +PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data, + png_size_t length)); + +/* Read bytes into buf, and update png_ptr->crc */ +PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf, + png_size_t length)); + +/* Decompress data in a chunk that uses compression */ +#if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \ + defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) +PNG_EXTERN void png_decompress_chunk PNGARG((png_structp png_ptr, + int comp_type, png_size_t chunklength, + png_size_t prefix_length, png_size_t *data_length)); +#endif + +/* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */ +PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip)); + +/* Read the CRC from the file and compare it to the libpng calculated CRC */ +PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr)); + +/* Calculate the CRC over a section of data. Note that we are only + * passing a maximum of 64K on systems that have this as a memory limit, + * since this is the maximum buffer size we can specify. + */ +PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr, + png_size_t length)); + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) +PNG_EXTERN void png_flush PNGARG((png_structp png_ptr)); +#endif + +/* simple function to write the signature */ +PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr)); + +/* write various chunks */ + +/* Write the IHDR chunk, and update the png_struct with the necessary + * information. + */ +PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width, + png_uint_32 height, + int bit_depth, int color_type, int compression_method, int filter_method, + int interlace_method)); + +PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette, + png_uint_32 num_pal)); + +PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data, + png_size_t length)); + +PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)); + +#if defined(PNG_WRITE_gAMA_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point + file_gamma)); +#endif +#endif + +#if defined(PNG_WRITE_sBIT_SUPPORTED) +PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit, + int color_type)); +#endif + +#if defined(PNG_WRITE_cHRM_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr, + double white_x, double white_y, + double red_x, double red_y, double green_x, double green_y, + double blue_x, double blue_y)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr, + png_fixed_point int_white_x, png_fixed_point int_white_y, + png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point + int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)); +#endif +#endif + +#if defined(PNG_WRITE_sRGB_SUPPORTED) +PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr, + int intent)); +#endif + +#if defined(PNG_WRITE_iCCP_SUPPORTED) +PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr, + png_charp name, int compression_type, + png_charp profile, int proflen)); + /* Note to maintainer: profile should be png_bytep */ +#endif + +#if defined(PNG_WRITE_sPLT_SUPPORTED) +PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr, + png_sPLT_tp palette)); +#endif + +#if defined(PNG_WRITE_tRNS_SUPPORTED) +PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans, + png_color_16p values, int number, int color_type)); +#endif + +#if defined(PNG_WRITE_bKGD_SUPPORTED) +PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr, + png_color_16p values, int color_type)); +#endif + +#if defined(PNG_WRITE_hIST_SUPPORTED) +PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist, + int num_hist)); +#endif + +#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \ + defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) +PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr, + png_charp key, png_charpp new_key)); +#endif + +#if defined(PNG_WRITE_tEXt_SUPPORTED) +PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key, + png_charp text, png_size_t text_len)); +#endif + +#if defined(PNG_WRITE_zTXt_SUPPORTED) +PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key, + png_charp text, png_size_t text_len, int compression)); +#endif + +#if defined(PNG_WRITE_iTXt_SUPPORTED) +PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr, + int compression, png_charp key, png_charp lang, png_charp lang_key, + png_charp text)); +#endif + +#if defined(PNG_TEXT_SUPPORTED) /* Added at version 1.0.14 and 1.2.4 */ +PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr, + png_infop info_ptr, png_textp text_ptr, int num_text)); +#endif + +#if defined(PNG_WRITE_oFFs_SUPPORTED) +PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr, + png_int_32 x_offset, png_int_32 y_offset, int unit_type)); +#endif + +#if defined(PNG_WRITE_pCAL_SUPPORTED) +PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose, + png_int_32 X0, png_int_32 X1, int type, int nparams, + png_charp units, png_charpp params)); +#endif + +#if defined(PNG_WRITE_pHYs_SUPPORTED) +PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr, + png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit, + int unit_type)); +#endif + +#if defined(PNG_WRITE_tIME_SUPPORTED) +PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr, + png_timep mod_time)); +#endif + +#if defined(PNG_WRITE_sCAL_SUPPORTED) +#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO) +PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr, + int unit, double width, double height)); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr, + int unit, png_charp width, png_charp height)); +#endif +#endif +#endif + +/* Called when finished processing a row of data */ +PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)); + +/* Internal use only. Called before first row of data */ +PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr)); + +#if defined(PNG_READ_GAMMA_SUPPORTED) +PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr)); +#endif + +/* combine a row of data, dealing with alpha, etc. if requested */ +PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row, + int mask)); + +#if defined(PNG_READ_INTERLACING_SUPPORTED) +/* expand an interlaced row */ +/* OLD pre-1.0.9 interface: +PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info, + png_bytep row, int pass, png_uint_32 transformations)); + */ +PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr)); +#endif + +/* GRR TO DO (2.0 or whenever): simplify other internal calling interfaces */ + +#if defined(PNG_WRITE_INTERLACING_SUPPORTED) +/* grab pixels out of a row for an interlaced pass */ +PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info, + png_bytep row, int pass)); +#endif + +/* unfilter a row */ +PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr, + png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter)); + +/* Choose the best filter to use and filter the row data */ +PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr, + png_row_infop row_info)); + +/* Write out the filtered row. */ +PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr, + png_bytep filtered_row)); +/* finish a row while reading, dealing with interlacing passes, etc. */ +PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr)); + +/* initialize the row buffers, etc. */ +PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr)); +/* optional call to update the users info structure */ +PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +/* these are the functions that do the transformations */ +#if defined(PNG_READ_FILLER_SUPPORTED) +PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info, + png_bytep row, png_uint_32 filler, png_uint_32 flags)); +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) +PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) +PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) +PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) +PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_WRITE_FILLER_SUPPORTED) || \ + defined(PNG_READ_STRIP_ALPHA_SUPPORTED) +PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info, + png_bytep row, png_uint_32 flags)); +#endif + +#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) +PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) +PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) +PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop + row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) +PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) +PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) +PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row, + png_color_8p sig_bits)); +#endif + +#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) +PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_16_TO_8_SUPPORTED) +PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) +PNG_EXTERN void png_do_dither PNGARG((png_row_infop row_info, + png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup)); + +# if defined(PNG_CORRECT_PALETTE_SUPPORTED) +PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr, + png_colorp palette, int num_palette)); +# endif +#endif + +#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) +PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_WRITE_PACK_SUPPORTED) +PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info, + png_bytep row, png_uint_32 bit_depth)); +#endif + +#if defined(PNG_WRITE_SHIFT_SUPPORTED) +PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row, + png_color_8p bit_depth)); +#endif + +#if defined(PNG_READ_BACKGROUND_SUPPORTED) +#if defined(PNG_READ_GAMMA_SUPPORTED) +PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, + png_color_16p trans_values, png_color_16p background, + png_color_16p background_1, + png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, + png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, + png_uint_16pp gamma_16_to_1, int gamma_shift)); +#else +PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, + png_color_16p trans_values, png_color_16p background)); +#endif +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) +PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row, + png_bytep gamma_table, png_uint_16pp gamma_16_table, + int gamma_shift)); +#endif + +#if defined(PNG_READ_EXPAND_SUPPORTED) +PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info, + png_bytep row, png_colorp palette, png_bytep trans, int num_trans)); +PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info, + png_bytep row, png_color_16p trans_value)); +#endif + +/* The following decodes the appropriate chunks, and does error correction, + * then calls the appropriate callback for the chunk if it is valid. + */ + +/* decode the IHDR chunk */ +PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); + +#if defined(PNG_READ_bKGD_SUPPORTED) +PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_cHRM_SUPPORTED) +PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_gAMA_SUPPORTED) +PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_hIST_SUPPORTED) +PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_iCCP_SUPPORTED) +extern void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif /* PNG_READ_iCCP_SUPPORTED */ + +#if defined(PNG_READ_iTXt_SUPPORTED) +PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_oFFs_SUPPORTED) +PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_pCAL_SUPPORTED) +PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_pHYs_SUPPORTED) +PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_sBIT_SUPPORTED) +PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_sCAL_SUPPORTED) +PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_sPLT_SUPPORTED) +extern void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif /* PNG_READ_sPLT_SUPPORTED */ + +#if defined(PNG_READ_sRGB_SUPPORTED) +PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_tEXt_SUPPORTED) +PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_tIME_SUPPORTED) +PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_tRNS_SUPPORTED) +PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_zTXt_SUPPORTED) +PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 length)); + +PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr, + png_bytep chunk_name)); + +/* handle the transformations for reading and writing */ +PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr)); + +PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr)); + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr, + png_uint_32 length)); +PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr, + png_bytep buffer, png_size_t buffer_length)); +PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr, + png_bytep buffer, png_size_t buffer_length)); +PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 length)); +PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row)); +PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr)); +#if defined(PNG_READ_tEXt_SUPPORTED) +PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 length)); +PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif +#if defined(PNG_READ_zTXt_SUPPORTED) +PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 length)); +PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif +#if defined(PNG_READ_iTXt_SUPPORTED) +PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 length)); +PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif + +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + +#ifdef PNG_MNG_FEATURES_SUPPORTED +PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info, + png_bytep row)); +PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) +#if defined(PNG_MMX_CODE_SUPPORTED) +/* png.c */ /* PRIVATE */ +PNG_EXTERN void png_init_mmx_flags PNGARG((png_structp png_ptr)); +#endif +#endif + +#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED) +PNG_EXTERN png_uint_32 png_get_pixels_per_inch PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXTERN png_uint_32 png_get_x_pixels_per_inch PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXTERN png_uint_32 png_get_y_pixels_per_inch PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXTERN float png_get_x_offset_inches PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXTERN float png_get_y_offset_inches PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#if defined(PNG_pHYs_SUPPORTED) +PNG_EXTERN png_uint_32 png_get_pHYs_dpi PNGARG((png_structp png_ptr, +png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); +#endif /* PNG_pHYs_SUPPORTED */ +#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */ + +/* Read the chunk header (length + type name) */ +PNG_EXTERN png_uint_32 png_read_chunk_header PNGARG((png_structp png_ptr)); + +/* Added at libpng version 1.2.34 */ +#if defined(PNG_cHRM_SUPPORTED) +PNG_EXTERN int png_check_cHRM_fixed PNGARG((png_structp png_ptr, + png_fixed_point int_white_x, png_fixed_point int_white_y, + png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point + int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)); +#endif + +/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */ + +#endif /* PNG_INTERNAL */ + +#ifdef __cplusplus +} +#endif + +#endif /* PNG_VERSION_INFO_ONLY */ +/* do not put anything past this line */ +#endif /* PNG_H */ diff --git a/engine/libs/vc6-libs/pngconf.h b/engine/libs/vc6-libs/pngconf.h new file mode 100644 index 000000000..834f7e704 --- /dev/null +++ b/engine/libs/vc6-libs/pngconf.h @@ -0,0 +1,1489 @@ + +/* pngconf.h - machine configurable file for libpng + * + * libpng version 1.2.35 - February 14, 2009 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2009 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + */ + +/* Any machine specific code is near the front of this file, so if you + * are configuring libpng for a machine, you may want to read the section + * starting here down to where it starts to typedef png_color, png_text, + * and png_info. + */ + +#ifndef PNGCONF_H +#define PNGCONF_H + +#define PNG_1_2_X + +/* + * PNG_USER_CONFIG has to be defined on the compiler command line. This + * includes the resource compiler for Windows DLL configurations. + */ +#ifdef PNG_USER_CONFIG +# ifndef PNG_USER_PRIVATEBUILD +# define PNG_USER_PRIVATEBUILD +# endif +#include "pngusr.h" +#endif + +/* PNG_CONFIGURE_LIBPNG is set by the "configure" script. */ +#ifdef PNG_CONFIGURE_LIBPNG +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#endif + +/* + * Added at libpng-1.2.8 + * + * If you create a private DLL you need to define in "pngusr.h" the followings: + * #define PNG_USER_PRIVATEBUILD + * e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons." + * #define PNG_USER_DLLFNAME_POSTFIX + * e.g. // private DLL "libpng13gx.dll" + * #define PNG_USER_DLLFNAME_POSTFIX "gx" + * + * The following macros are also at your disposal if you want to complete the + * DLL VERSIONINFO structure. + * - PNG_USER_VERSIONINFO_COMMENTS + * - PNG_USER_VERSIONINFO_COMPANYNAME + * - PNG_USER_VERSIONINFO_LEGALTRADEMARKS + */ + +#ifdef __STDC__ +#ifdef SPECIALBUILD +# pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD)\ + are now LIBPNG reserved macros. Use PNG_USER_PRIVATEBUILD instead.") +#endif + +#ifdef PRIVATEBUILD +# pragma message("PRIVATEBUILD is deprecated.\ + Use PNG_USER_PRIVATEBUILD instead.") +# define PNG_USER_PRIVATEBUILD PRIVATEBUILD +#endif +#endif /* __STDC__ */ + +#ifndef PNG_VERSION_INFO_ONLY + +/* End of material added to libpng-1.2.8 */ + +/* Added at libpng-1.2.19, removed at libpng-1.2.20 because it caused trouble + Restored at libpng-1.2.21 */ +#if !defined(PNG_NO_WARN_UNINITIALIZED_ROW) && \ + !defined(PNG_WARN_UNINITIALIZED_ROW) +# define PNG_WARN_UNINITIALIZED_ROW 1 +#endif +/* End of material added at libpng-1.2.19/1.2.21 */ + +/* This is the size of the compression buffer, and thus the size of + * an IDAT chunk. Make this whatever size you feel is best for your + * machine. One of these will be allocated per png_struct. When this + * is full, it writes the data to the disk, and does some other + * calculations. Making this an extremely small size will slow + * the library down, but you may want to experiment to determine + * where it becomes significant, if you are concerned with memory + * usage. Note that zlib allocates at least 32Kb also. For readers, + * this describes the size of the buffer available to read the data in. + * Unless this gets smaller than the size of a row (compressed), + * it should not make much difference how big this is. + */ + +#ifndef PNG_ZBUF_SIZE +# define PNG_ZBUF_SIZE 8192 +#endif + +/* Enable if you want a write-only libpng */ + +#ifndef PNG_NO_READ_SUPPORTED +# define PNG_READ_SUPPORTED +#endif + +/* Enable if you want a read-only libpng */ + +#ifndef PNG_NO_WRITE_SUPPORTED +# define PNG_WRITE_SUPPORTED +#endif + +/* Enabled by default in 1.2.0. You can disable this if you don't need to + support PNGs that are embedded in MNG datastreams */ +#if !defined(PNG_1_0_X) && !defined(PNG_NO_MNG_FEATURES) +# ifndef PNG_MNG_FEATURES_SUPPORTED +# define PNG_MNG_FEATURES_SUPPORTED +# endif +#endif + +#ifndef PNG_NO_FLOATING_POINT_SUPPORTED +# ifndef PNG_FLOATING_POINT_SUPPORTED +# define PNG_FLOATING_POINT_SUPPORTED +# endif +#endif + +/* If you are running on a machine where you cannot allocate more + * than 64K of memory at once, uncomment this. While libpng will not + * normally need that much memory in a chunk (unless you load up a very + * large file), zlib needs to know how big of a chunk it can use, and + * libpng thus makes sure to check any memory allocation to verify it + * will fit into memory. +#define PNG_MAX_MALLOC_64K + */ +#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K) +# define PNG_MAX_MALLOC_64K +#endif + +/* Special munging to support doing things the 'cygwin' way: + * 'Normal' png-on-win32 defines/defaults: + * PNG_BUILD_DLL -- building dll + * PNG_USE_DLL -- building an application, linking to dll + * (no define) -- building static library, or building an + * application and linking to the static lib + * 'Cygwin' defines/defaults: + * PNG_BUILD_DLL -- (ignored) building the dll + * (no define) -- (ignored) building an application, linking to the dll + * PNG_STATIC -- (ignored) building the static lib, or building an + * application that links to the static lib. + * ALL_STATIC -- (ignored) building various static libs, or building an + * application that links to the static libs. + * Thus, + * a cygwin user should define either PNG_BUILD_DLL or PNG_STATIC, and + * this bit of #ifdefs will define the 'correct' config variables based on + * that. If a cygwin user *wants* to define 'PNG_USE_DLL' that's okay, but + * unnecessary. + * + * Also, the precedence order is: + * ALL_STATIC (since we can't #undef something outside our namespace) + * PNG_BUILD_DLL + * PNG_STATIC + * (nothing) == PNG_USE_DLL + * + * CYGWIN (2002-01-20): The preceding is now obsolete. With the advent + * of auto-import in binutils, we no longer need to worry about + * __declspec(dllexport) / __declspec(dllimport) and friends. Therefore, + * we don't need to worry about PNG_STATIC or ALL_STATIC when it comes + * to __declspec() stuff. However, we DO need to worry about + * PNG_BUILD_DLL and PNG_STATIC because those change some defaults + * such as CONSOLE_IO and whether GLOBAL_ARRAYS are allowed. + */ +#if defined(__CYGWIN__) +# if defined(ALL_STATIC) +# if defined(PNG_BUILD_DLL) +# undef PNG_BUILD_DLL +# endif +# if defined(PNG_USE_DLL) +# undef PNG_USE_DLL +# endif +# if defined(PNG_DLL) +# undef PNG_DLL +# endif +# if !defined(PNG_STATIC) +# define PNG_STATIC +# endif +# else +# if defined (PNG_BUILD_DLL) +# if defined(PNG_STATIC) +# undef PNG_STATIC +# endif +# if defined(PNG_USE_DLL) +# undef PNG_USE_DLL +# endif +# if !defined(PNG_DLL) +# define PNG_DLL +# endif +# else +# if defined(PNG_STATIC) +# if defined(PNG_USE_DLL) +# undef PNG_USE_DLL +# endif +# if defined(PNG_DLL) +# undef PNG_DLL +# endif +# else +# if !defined(PNG_USE_DLL) +# define PNG_USE_DLL +# endif +# if !defined(PNG_DLL) +# define PNG_DLL +# endif +# endif +# endif +# endif +#endif + +/* This protects us against compilers that run on a windowing system + * and thus don't have or would rather us not use the stdio types: + * stdin, stdout, and stderr. The only one currently used is stderr + * in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will + * prevent these from being compiled and used. #defining PNG_NO_STDIO + * will also prevent these, plus will prevent the entire set of stdio + * macros and functions (FILE *, printf, etc.) from being compiled and used, + * unless (PNG_DEBUG > 0) has been #defined. + * + * #define PNG_NO_CONSOLE_IO + * #define PNG_NO_STDIO + */ + +#if defined(_WIN32_WCE) +# include + /* Console I/O functions are not supported on WindowsCE */ +# define PNG_NO_CONSOLE_IO + /* abort() may not be supported on some/all Windows CE platforms */ +# define PNG_ABORT() exit(-1) +# ifdef PNG_DEBUG +# undef PNG_DEBUG +# endif +#endif + +#ifdef PNG_BUILD_DLL +# ifndef PNG_CONSOLE_IO_SUPPORTED +# ifndef PNG_NO_CONSOLE_IO +# define PNG_NO_CONSOLE_IO +# endif +# endif +#endif + +# ifdef PNG_NO_STDIO +# ifndef PNG_NO_CONSOLE_IO +# define PNG_NO_CONSOLE_IO +# endif +# ifdef PNG_DEBUG +# if (PNG_DEBUG > 0) +# include +# endif +# endif +# else +# if !defined(_WIN32_WCE) +/* "stdio.h" functions are not supported on WindowsCE */ +# include +# endif +# endif + +/* This macro protects us against machines that don't have function + * prototypes (ie K&R style headers). If your compiler does not handle + * function prototypes, define this macro and use the included ansi2knr. + * I've always been able to use _NO_PROTO as the indicator, but you may + * need to drag the empty declaration out in front of here, or change the + * ifdef to suit your own needs. + */ +#ifndef PNGARG + +#ifdef OF /* zlib prototype munger */ +# define PNGARG(arglist) OF(arglist) +#else + +#ifdef _NO_PROTO +# define PNGARG(arglist) () +# ifndef PNG_TYPECAST_NULL +# define PNG_TYPECAST_NULL +# endif +#else +# define PNGARG(arglist) arglist +#endif /* _NO_PROTO */ + + +#endif /* OF */ + +#endif /* PNGARG */ + +/* Try to determine if we are compiling on a Mac. Note that testing for + * just __MWERKS__ is not good enough, because the Codewarrior is now used + * on non-Mac platforms. + */ +#ifndef MACOS +# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \ + defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC) +# define MACOS +# endif +#endif + +/* enough people need this for various reasons to include it here */ +#if !defined(MACOS) && !defined(RISCOS) && !defined(_WIN32_WCE) +# include +#endif + +#if !defined(PNG_SETJMP_NOT_SUPPORTED) && !defined(PNG_NO_SETJMP_SUPPORTED) +# define PNG_SETJMP_SUPPORTED +#endif + +#ifdef PNG_SETJMP_SUPPORTED +/* This is an attempt to force a single setjmp behaviour on Linux. If + * the X config stuff didn't define _BSD_SOURCE we wouldn't need this. + */ + +# ifdef __linux__ +# ifdef _BSD_SOURCE +# define PNG_SAVE_BSD_SOURCE +# undef _BSD_SOURCE +# endif +# ifdef _SETJMP_H + /* If you encounter a compiler error here, see the explanation + * near the end of INSTALL. + */ + __pngconf.h__ already includes setjmp.h; + __dont__ include it again.; +# endif +# endif /* __linux__ */ + + /* include setjmp.h for error handling */ +# include + +# ifdef __linux__ +# ifdef PNG_SAVE_BSD_SOURCE +# ifndef _BSD_SOURCE +# define _BSD_SOURCE +# endif +# undef PNG_SAVE_BSD_SOURCE +# endif +# endif /* __linux__ */ +#endif /* PNG_SETJMP_SUPPORTED */ + +#ifdef BSD +# include +#else +# include +#endif + +/* Other defines for things like memory and the like can go here. */ +#ifdef PNG_INTERNAL + +#include + +/* The functions exported by PNG_EXTERN are PNG_INTERNAL functions, which + * aren't usually used outside the library (as far as I know), so it is + * debatable if they should be exported at all. In the future, when it is + * possible to have run-time registry of chunk-handling functions, some of + * these will be made available again. +#define PNG_EXTERN extern + */ +#define PNG_EXTERN + +/* Other defines specific to compilers can go here. Try to keep + * them inside an appropriate ifdef/endif pair for portability. + */ + +#if defined(PNG_FLOATING_POINT_SUPPORTED) +# if defined(MACOS) + /* We need to check that hasn't already been included earlier + * as it seems it doesn't agree with , yet we should really use + * if possible. + */ +# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__) +# include +# endif +# else +# include +# endif +# if defined(_AMIGA) && defined(__SASC) && defined(_M68881) + /* Amiga SAS/C: We must include builtin FPU functions when compiling using + * MATH=68881 + */ +# include +# endif +#endif + +/* Codewarrior on NT has linking problems without this. */ +#if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__) +# define PNG_ALWAYS_EXTERN +#endif + +/* This provides the non-ANSI (far) memory allocation routines. */ +#if defined(__TURBOC__) && defined(__MSDOS__) +# include +# include +#endif + +/* I have no idea why is this necessary... */ +#if defined(_MSC_VER) && (defined(WIN32) || defined(_Windows) || \ + defined(_WINDOWS) || defined(_WIN32) || defined(__WIN32__)) +# include +#endif + +/* This controls how fine the dithering gets. As this allocates + * a largish chunk of memory (32K), those who are not as concerned + * with dithering quality can decrease some or all of these. + */ +#ifndef PNG_DITHER_RED_BITS +# define PNG_DITHER_RED_BITS 5 +#endif +#ifndef PNG_DITHER_GREEN_BITS +# define PNG_DITHER_GREEN_BITS 5 +#endif +#ifndef PNG_DITHER_BLUE_BITS +# define PNG_DITHER_BLUE_BITS 5 +#endif + +/* This controls how fine the gamma correction becomes when you + * are only interested in 8 bits anyway. Increasing this value + * results in more memory being used, and more pow() functions + * being called to fill in the gamma tables. Don't set this value + * less then 8, and even that may not work (I haven't tested it). + */ + +#ifndef PNG_MAX_GAMMA_8 +# define PNG_MAX_GAMMA_8 11 +#endif + +/* This controls how much a difference in gamma we can tolerate before + * we actually start doing gamma conversion. + */ +#ifndef PNG_GAMMA_THRESHOLD +# define PNG_GAMMA_THRESHOLD 0.05 +#endif + +#endif /* PNG_INTERNAL */ + +/* The following uses const char * instead of char * for error + * and warning message functions, so some compilers won't complain. + * If you do not want to use const, define PNG_NO_CONST here. + */ + +#ifndef PNG_NO_CONST +# define PNG_CONST const +#else +# define PNG_CONST +#endif + +/* The following defines give you the ability to remove code from the + * library that you will not be using. I wish I could figure out how to + * automate this, but I can't do that without making it seriously hard + * on the users. So if you are not using an ability, change the #define + * to and #undef, and that part of the library will not be compiled. If + * your linker can't find a function, you may want to make sure the + * ability is defined here. Some of these depend upon some others being + * defined. I haven't figured out all the interactions here, so you may + * have to experiment awhile to get everything to compile. If you are + * creating or using a shared library, you probably shouldn't touch this, + * as it will affect the size of the structures, and this will cause bad + * things to happen if the library and/or application ever change. + */ + +/* Any features you will not be using can be undef'ed here */ + +/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user + * to turn it off with "*TRANSFORMS_NOT_SUPPORTED" or *PNG_NO_*_TRANSFORMS + * on the compile line, then pick and choose which ones to define without + * having to edit this file. It is safe to use the *TRANSFORMS_NOT_SUPPORTED + * if you only want to have a png-compliant reader/writer but don't need + * any of the extra transformations. This saves about 80 kbytes in a + * typical installation of the library. (PNG_NO_* form added in version + * 1.0.1c, for consistency) + */ + +/* The size of the png_text structure changed in libpng-1.0.6 when + * iTXt support was added. iTXt support was turned off by default through + * libpng-1.2.x, to support old apps that malloc the png_text structure + * instead of calling png_set_text() and letting libpng malloc it. It + * was turned on by default in libpng-1.3.0. + */ + +#if defined(PNG_1_0_X) || defined (PNG_1_2_X) +# ifndef PNG_NO_iTXt_SUPPORTED +# define PNG_NO_iTXt_SUPPORTED +# endif +# ifndef PNG_NO_READ_iTXt +# define PNG_NO_READ_iTXt +# endif +# ifndef PNG_NO_WRITE_iTXt +# define PNG_NO_WRITE_iTXt +# endif +#endif + +#if !defined(PNG_NO_iTXt_SUPPORTED) +# if !defined(PNG_READ_iTXt_SUPPORTED) && !defined(PNG_NO_READ_iTXt) +# define PNG_READ_iTXt +# endif +# if !defined(PNG_WRITE_iTXt_SUPPORTED) && !defined(PNG_NO_WRITE_iTXt) +# define PNG_WRITE_iTXt +# endif +#endif + +/* The following support, added after version 1.0.0, can be turned off here en + * masse by defining PNG_LEGACY_SUPPORTED in case you need binary compatibility + * with old applications that require the length of png_struct and png_info + * to remain unchanged. + */ + +#ifdef PNG_LEGACY_SUPPORTED +# define PNG_NO_FREE_ME +# define PNG_NO_READ_UNKNOWN_CHUNKS +# define PNG_NO_WRITE_UNKNOWN_CHUNKS +# define PNG_NO_READ_USER_CHUNKS +# define PNG_NO_READ_iCCP +# define PNG_NO_WRITE_iCCP +# define PNG_NO_READ_iTXt +# define PNG_NO_WRITE_iTXt +# define PNG_NO_READ_sCAL +# define PNG_NO_WRITE_sCAL +# define PNG_NO_READ_sPLT +# define PNG_NO_WRITE_sPLT +# define PNG_NO_INFO_IMAGE +# define PNG_NO_READ_RGB_TO_GRAY +# define PNG_NO_READ_USER_TRANSFORM +# define PNG_NO_WRITE_USER_TRANSFORM +# define PNG_NO_USER_MEM +# define PNG_NO_READ_EMPTY_PLTE +# define PNG_NO_MNG_FEATURES +# define PNG_NO_FIXED_POINT_SUPPORTED +#endif + +/* Ignore attempt to turn off both floating and fixed point support */ +#if !defined(PNG_FLOATING_POINT_SUPPORTED) || \ + !defined(PNG_NO_FIXED_POINT_SUPPORTED) +# define PNG_FIXED_POINT_SUPPORTED +#endif + +#ifndef PNG_NO_FREE_ME +# define PNG_FREE_ME_SUPPORTED +#endif + +#if defined(PNG_READ_SUPPORTED) + +#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \ + !defined(PNG_NO_READ_TRANSFORMS) +# define PNG_READ_TRANSFORMS_SUPPORTED +#endif + +#ifdef PNG_READ_TRANSFORMS_SUPPORTED +# ifndef PNG_NO_READ_EXPAND +# define PNG_READ_EXPAND_SUPPORTED +# endif +# ifndef PNG_NO_READ_SHIFT +# define PNG_READ_SHIFT_SUPPORTED +# endif +# ifndef PNG_NO_READ_PACK +# define PNG_READ_PACK_SUPPORTED +# endif +# ifndef PNG_NO_READ_BGR +# define PNG_READ_BGR_SUPPORTED +# endif +# ifndef PNG_NO_READ_SWAP +# define PNG_READ_SWAP_SUPPORTED +# endif +# ifndef PNG_NO_READ_PACKSWAP +# define PNG_READ_PACKSWAP_SUPPORTED +# endif +# ifndef PNG_NO_READ_INVERT +# define PNG_READ_INVERT_SUPPORTED +# endif +# ifndef PNG_NO_READ_DITHER +# define PNG_READ_DITHER_SUPPORTED +# endif +# ifndef PNG_NO_READ_BACKGROUND +# define PNG_READ_BACKGROUND_SUPPORTED +# endif +# ifndef PNG_NO_READ_16_TO_8 +# define PNG_READ_16_TO_8_SUPPORTED +# endif +# ifndef PNG_NO_READ_FILLER +# define PNG_READ_FILLER_SUPPORTED +# endif +# ifndef PNG_NO_READ_GAMMA +# define PNG_READ_GAMMA_SUPPORTED +# endif +# ifndef PNG_NO_READ_GRAY_TO_RGB +# define PNG_READ_GRAY_TO_RGB_SUPPORTED +# endif +# ifndef PNG_NO_READ_SWAP_ALPHA +# define PNG_READ_SWAP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_INVERT_ALPHA +# define PNG_READ_INVERT_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_STRIP_ALPHA +# define PNG_READ_STRIP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_USER_TRANSFORM +# define PNG_READ_USER_TRANSFORM_SUPPORTED +# endif +# ifndef PNG_NO_READ_RGB_TO_GRAY +# define PNG_READ_RGB_TO_GRAY_SUPPORTED +# endif +#endif /* PNG_READ_TRANSFORMS_SUPPORTED */ + +#if !defined(PNG_NO_PROGRESSIVE_READ) && \ + !defined(PNG_PROGRESSIVE_READ_SUPPORTED) /* if you don't do progressive */ +# define PNG_PROGRESSIVE_READ_SUPPORTED /* reading. This is not talking */ +#endif /* about interlacing capability! You'll */ + /* still have interlacing unless you change the following line: */ + +#define PNG_READ_INTERLACING_SUPPORTED /* required in PNG-compliant decoders */ + +#ifndef PNG_NO_READ_COMPOSITE_NODIV +# ifndef PNG_NO_READ_COMPOSITED_NODIV /* libpng-1.0.x misspelling */ +# define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel, SGI */ +# endif +#endif + +#if defined(PNG_1_0_X) || defined (PNG_1_2_X) +/* Deprecated, will be removed from version 2.0.0. + Use PNG_MNG_FEATURES_SUPPORTED instead. */ +#ifndef PNG_NO_READ_EMPTY_PLTE +# define PNG_READ_EMPTY_PLTE_SUPPORTED +#endif +#endif + +#endif /* PNG_READ_SUPPORTED */ + +#if defined(PNG_WRITE_SUPPORTED) + +# if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \ + !defined(PNG_NO_WRITE_TRANSFORMS) +# define PNG_WRITE_TRANSFORMS_SUPPORTED +#endif + +#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED +# ifndef PNG_NO_WRITE_SHIFT +# define PNG_WRITE_SHIFT_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_PACK +# define PNG_WRITE_PACK_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_BGR +# define PNG_WRITE_BGR_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_SWAP +# define PNG_WRITE_SWAP_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_PACKSWAP +# define PNG_WRITE_PACKSWAP_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_INVERT +# define PNG_WRITE_INVERT_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_FILLER +# define PNG_WRITE_FILLER_SUPPORTED /* same as WRITE_STRIP_ALPHA */ +# endif +# ifndef PNG_NO_WRITE_SWAP_ALPHA +# define PNG_WRITE_SWAP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_INVERT_ALPHA +# define PNG_WRITE_INVERT_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_USER_TRANSFORM +# define PNG_WRITE_USER_TRANSFORM_SUPPORTED +# endif +#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */ + +#if !defined(PNG_NO_WRITE_INTERLACING_SUPPORTED) && \ + !defined(PNG_WRITE_INTERLACING_SUPPORTED) +#define PNG_WRITE_INTERLACING_SUPPORTED /* not required for PNG-compliant + encoders, but can cause trouble + if left undefined */ +#endif + +#if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \ + !defined(PNG_WRITE_WEIGHTED_FILTER) && \ + defined(PNG_FLOATING_POINT_SUPPORTED) +# define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED +#endif + +#ifndef PNG_NO_WRITE_FLUSH +# define PNG_WRITE_FLUSH_SUPPORTED +#endif + +#if defined(PNG_1_0_X) || defined (PNG_1_2_X) +/* Deprecated, see PNG_MNG_FEATURES_SUPPORTED, above */ +#ifndef PNG_NO_WRITE_EMPTY_PLTE +# define PNG_WRITE_EMPTY_PLTE_SUPPORTED +#endif +#endif + +#endif /* PNG_WRITE_SUPPORTED */ + +#ifndef PNG_1_0_X +# ifndef PNG_NO_ERROR_NUMBERS +# define PNG_ERROR_NUMBERS_SUPPORTED +# endif +#endif /* PNG_1_0_X */ + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +# ifndef PNG_NO_USER_TRANSFORM_PTR +# define PNG_USER_TRANSFORM_PTR_SUPPORTED +# endif +#endif + +#ifndef PNG_NO_STDIO +# define PNG_TIME_RFC1123_SUPPORTED +#endif + +/* This adds extra functions in pngget.c for accessing data from the + * info pointer (added in version 0.99) + * png_get_image_width() + * png_get_image_height() + * png_get_bit_depth() + * png_get_color_type() + * png_get_compression_type() + * png_get_filter_type() + * png_get_interlace_type() + * png_get_pixel_aspect_ratio() + * png_get_pixels_per_meter() + * png_get_x_offset_pixels() + * png_get_y_offset_pixels() + * png_get_x_offset_microns() + * png_get_y_offset_microns() + */ +#if !defined(PNG_NO_EASY_ACCESS) && !defined(PNG_EASY_ACCESS_SUPPORTED) +# define PNG_EASY_ACCESS_SUPPORTED +#endif + +/* PNG_ASSEMBLER_CODE was enabled by default in version 1.2.0 + * and removed from version 1.2.20. The following will be removed + * from libpng-1.4.0 +*/ + +#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_OPTIMIZED_CODE) +# ifndef PNG_OPTIMIZED_CODE_SUPPORTED +# define PNG_OPTIMIZED_CODE_SUPPORTED +# endif +#endif + +#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_ASSEMBLER_CODE) +# ifndef PNG_ASSEMBLER_CODE_SUPPORTED +# define PNG_ASSEMBLER_CODE_SUPPORTED +# endif + +# if defined(__GNUC__) && defined(__x86_64__) && (__GNUC__ < 4) + /* work around 64-bit gcc compiler bugs in gcc-3.x */ +# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) +# define PNG_NO_MMX_CODE +# endif +# endif + +# if defined(__APPLE__) +# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) +# define PNG_NO_MMX_CODE +# endif +# endif + +# if (defined(__MWERKS__) && ((__MWERKS__ < 0x0900) || macintosh)) +# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) +# define PNG_NO_MMX_CODE +# endif +# endif + +# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) +# define PNG_MMX_CODE_SUPPORTED +# endif + +#endif +/* end of obsolete code to be removed from libpng-1.4.0 */ + +#if !defined(PNG_1_0_X) +#if !defined(PNG_NO_USER_MEM) && !defined(PNG_USER_MEM_SUPPORTED) +# define PNG_USER_MEM_SUPPORTED +#endif +#endif /* PNG_1_0_X */ + +/* Added at libpng-1.2.6 */ +#if !defined(PNG_1_0_X) +#ifndef PNG_SET_USER_LIMITS_SUPPORTED +#if !defined(PNG_NO_SET_USER_LIMITS) && !defined(PNG_SET_USER_LIMITS_SUPPORTED) +# define PNG_SET_USER_LIMITS_SUPPORTED +#endif +#endif +#endif /* PNG_1_0_X */ + +/* Added at libpng-1.0.16 and 1.2.6. To accept all valid PNGS no matter + * how large, set these limits to 0x7fffffffL + */ +#ifndef PNG_USER_WIDTH_MAX +# define PNG_USER_WIDTH_MAX 1000000L +#endif +#ifndef PNG_USER_HEIGHT_MAX +# define PNG_USER_HEIGHT_MAX 1000000L +#endif + + +/* Added at libpng-1.2.34 and 1.4.0 */ +#ifndef PNG_STRING_NEWLINE +#define PNG_STRING_NEWLINE "\n" +#endif + +/* These are currently experimental features, define them if you want */ + +/* very little testing */ +/* +#ifdef PNG_READ_SUPPORTED +# ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED +# define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED +# endif +#endif +*/ + +/* This is only for PowerPC big-endian and 680x0 systems */ +/* some testing */ +/* +#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED +# define PNG_READ_BIG_ENDIAN_SUPPORTED +#endif +*/ + +/* Buggy compilers (e.g., gcc 2.7.2.2) need this */ +/* +#define PNG_NO_POINTER_INDEXING +*/ + +/* These functions are turned off by default, as they will be phased out. */ +/* +#define PNG_USELESS_TESTS_SUPPORTED +#define PNG_CORRECT_PALETTE_SUPPORTED +*/ + +/* Any chunks you are not interested in, you can undef here. The + * ones that allocate memory may be expecially important (hIST, + * tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info + * a bit smaller. + */ + +#if defined(PNG_READ_SUPPORTED) && \ + !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ + !defined(PNG_NO_READ_ANCILLARY_CHUNKS) +# define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED +#endif + +#if defined(PNG_WRITE_SUPPORTED) && \ + !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ + !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS) +# define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED +#endif + +#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED + +#ifdef PNG_NO_READ_TEXT +# define PNG_NO_READ_iTXt +# define PNG_NO_READ_tEXt +# define PNG_NO_READ_zTXt +#endif +#ifndef PNG_NO_READ_bKGD +# define PNG_READ_bKGD_SUPPORTED +# define PNG_bKGD_SUPPORTED +#endif +#ifndef PNG_NO_READ_cHRM +# define PNG_READ_cHRM_SUPPORTED +# define PNG_cHRM_SUPPORTED +#endif +#ifndef PNG_NO_READ_gAMA +# define PNG_READ_gAMA_SUPPORTED +# define PNG_gAMA_SUPPORTED +#endif +#ifndef PNG_NO_READ_hIST +# define PNG_READ_hIST_SUPPORTED +# define PNG_hIST_SUPPORTED +#endif +#ifndef PNG_NO_READ_iCCP +# define PNG_READ_iCCP_SUPPORTED +# define PNG_iCCP_SUPPORTED +#endif +#ifndef PNG_NO_READ_iTXt +# ifndef PNG_READ_iTXt_SUPPORTED +# define PNG_READ_iTXt_SUPPORTED +# endif +# ifndef PNG_iTXt_SUPPORTED +# define PNG_iTXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_READ_oFFs +# define PNG_READ_oFFs_SUPPORTED +# define PNG_oFFs_SUPPORTED +#endif +#ifndef PNG_NO_READ_pCAL +# define PNG_READ_pCAL_SUPPORTED +# define PNG_pCAL_SUPPORTED +#endif +#ifndef PNG_NO_READ_sCAL +# define PNG_READ_sCAL_SUPPORTED +# define PNG_sCAL_SUPPORTED +#endif +#ifndef PNG_NO_READ_pHYs +# define PNG_READ_pHYs_SUPPORTED +# define PNG_pHYs_SUPPORTED +#endif +#ifndef PNG_NO_READ_sBIT +# define PNG_READ_sBIT_SUPPORTED +# define PNG_sBIT_SUPPORTED +#endif +#ifndef PNG_NO_READ_sPLT +# define PNG_READ_sPLT_SUPPORTED +# define PNG_sPLT_SUPPORTED +#endif +#ifndef PNG_NO_READ_sRGB +# define PNG_READ_sRGB_SUPPORTED +# define PNG_sRGB_SUPPORTED +#endif +#ifndef PNG_NO_READ_tEXt +# define PNG_READ_tEXt_SUPPORTED +# define PNG_tEXt_SUPPORTED +#endif +#ifndef PNG_NO_READ_tIME +# define PNG_READ_tIME_SUPPORTED +# define PNG_tIME_SUPPORTED +#endif +#ifndef PNG_NO_READ_tRNS +# define PNG_READ_tRNS_SUPPORTED +# define PNG_tRNS_SUPPORTED +#endif +#ifndef PNG_NO_READ_zTXt +# define PNG_READ_zTXt_SUPPORTED +# define PNG_zTXt_SUPPORTED +#endif +#ifndef PNG_NO_READ_UNKNOWN_CHUNKS +# define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED +# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_UNKNOWN_CHUNKS_SUPPORTED +# endif +# ifndef PNG_NO_HANDLE_AS_UNKNOWN +# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# endif +#endif +#if !defined(PNG_NO_READ_USER_CHUNKS) && \ + defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) +# define PNG_READ_USER_CHUNKS_SUPPORTED +# define PNG_USER_CHUNKS_SUPPORTED +# ifdef PNG_NO_READ_UNKNOWN_CHUNKS +# undef PNG_NO_READ_UNKNOWN_CHUNKS +# endif +# ifdef PNG_NO_HANDLE_AS_UNKNOWN +# undef PNG_NO_HANDLE_AS_UNKNOWN +# endif +#endif +#ifndef PNG_NO_READ_OPT_PLTE +# define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the */ +#endif /* optional PLTE chunk in RGB and RGBA images */ +#if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \ + defined(PNG_READ_zTXt_SUPPORTED) +# define PNG_READ_TEXT_SUPPORTED +# define PNG_TEXT_SUPPORTED +#endif + +#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */ + +#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED + +#ifdef PNG_NO_WRITE_TEXT +# define PNG_NO_WRITE_iTXt +# define PNG_NO_WRITE_tEXt +# define PNG_NO_WRITE_zTXt +#endif +#ifndef PNG_NO_WRITE_bKGD +# define PNG_WRITE_bKGD_SUPPORTED +# ifndef PNG_bKGD_SUPPORTED +# define PNG_bKGD_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_cHRM +# define PNG_WRITE_cHRM_SUPPORTED +# ifndef PNG_cHRM_SUPPORTED +# define PNG_cHRM_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_gAMA +# define PNG_WRITE_gAMA_SUPPORTED +# ifndef PNG_gAMA_SUPPORTED +# define PNG_gAMA_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_hIST +# define PNG_WRITE_hIST_SUPPORTED +# ifndef PNG_hIST_SUPPORTED +# define PNG_hIST_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_iCCP +# define PNG_WRITE_iCCP_SUPPORTED +# ifndef PNG_iCCP_SUPPORTED +# define PNG_iCCP_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_iTXt +# ifndef PNG_WRITE_iTXt_SUPPORTED +# define PNG_WRITE_iTXt_SUPPORTED +# endif +# ifndef PNG_iTXt_SUPPORTED +# define PNG_iTXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_oFFs +# define PNG_WRITE_oFFs_SUPPORTED +# ifndef PNG_oFFs_SUPPORTED +# define PNG_oFFs_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_pCAL +# define PNG_WRITE_pCAL_SUPPORTED +# ifndef PNG_pCAL_SUPPORTED +# define PNG_pCAL_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sCAL +# define PNG_WRITE_sCAL_SUPPORTED +# ifndef PNG_sCAL_SUPPORTED +# define PNG_sCAL_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_pHYs +# define PNG_WRITE_pHYs_SUPPORTED +# ifndef PNG_pHYs_SUPPORTED +# define PNG_pHYs_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sBIT +# define PNG_WRITE_sBIT_SUPPORTED +# ifndef PNG_sBIT_SUPPORTED +# define PNG_sBIT_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sPLT +# define PNG_WRITE_sPLT_SUPPORTED +# ifndef PNG_sPLT_SUPPORTED +# define PNG_sPLT_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sRGB +# define PNG_WRITE_sRGB_SUPPORTED +# ifndef PNG_sRGB_SUPPORTED +# define PNG_sRGB_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tEXt +# define PNG_WRITE_tEXt_SUPPORTED +# ifndef PNG_tEXt_SUPPORTED +# define PNG_tEXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tIME +# define PNG_WRITE_tIME_SUPPORTED +# ifndef PNG_tIME_SUPPORTED +# define PNG_tIME_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tRNS +# define PNG_WRITE_tRNS_SUPPORTED +# ifndef PNG_tRNS_SUPPORTED +# define PNG_tRNS_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_zTXt +# define PNG_WRITE_zTXt_SUPPORTED +# ifndef PNG_zTXt_SUPPORTED +# define PNG_zTXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS +# define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED +# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_UNKNOWN_CHUNKS_SUPPORTED +# endif +# ifndef PNG_NO_HANDLE_AS_UNKNOWN +# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# endif +# endif +#endif +#if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \ + defined(PNG_WRITE_zTXt_SUPPORTED) +# define PNG_WRITE_TEXT_SUPPORTED +# ifndef PNG_TEXT_SUPPORTED +# define PNG_TEXT_SUPPORTED +# endif +#endif + +#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */ + +/* Turn this off to disable png_read_png() and + * png_write_png() and leave the row_pointers member + * out of the info structure. + */ +#ifndef PNG_NO_INFO_IMAGE +# define PNG_INFO_IMAGE_SUPPORTED +#endif + +/* need the time information for reading tIME chunks */ +#if defined(PNG_tIME_SUPPORTED) +# if !defined(_WIN32_WCE) + /* "time.h" functions are not supported on WindowsCE */ +# include +# endif +#endif + +/* Some typedefs to get us started. These should be safe on most of the + * common platforms. The typedefs should be at least as large as the + * numbers suggest (a png_uint_32 must be at least 32 bits long), but they + * don't have to be exactly that size. Some compilers dislike passing + * unsigned shorts as function parameters, so you may be better off using + * unsigned int for png_uint_16. Likewise, for 64-bit systems, you may + * want to have unsigned int for png_uint_32 instead of unsigned long. + */ + +typedef unsigned long png_uint_32; +typedef long png_int_32; +typedef unsigned short png_uint_16; +typedef short png_int_16; +typedef unsigned char png_byte; + +/* This is usually size_t. It is typedef'ed just in case you need it to + change (I'm not sure if you will or not, so I thought I'd be safe) */ +#ifdef PNG_SIZE_T + typedef PNG_SIZE_T png_size_t; +# define png_sizeof(x) png_convert_size(sizeof(x)) +#else + typedef size_t png_size_t; +# define png_sizeof(x) sizeof(x) +#endif + +/* The following is needed for medium model support. It cannot be in the + * PNG_INTERNAL section. Needs modification for other compilers besides + * MSC. Model independent support declares all arrays and pointers to be + * large using the far keyword. The zlib version used must also support + * model independent data. As of version zlib 1.0.4, the necessary changes + * have been made in zlib. The USE_FAR_KEYWORD define triggers other + * changes that are needed. (Tim Wegner) + */ + +/* Separate compiler dependencies (problem here is that zlib.h always + defines FAR. (SJT) */ +#ifdef __BORLANDC__ +# if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__) +# define LDATA 1 +# else +# define LDATA 0 +# endif + /* GRR: why is Cygwin in here? Cygwin is not Borland C... */ +# if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__) +# define PNG_MAX_MALLOC_64K +# if (LDATA != 1) +# ifndef FAR +# define FAR __far +# endif +# define USE_FAR_KEYWORD +# endif /* LDATA != 1 */ + /* Possibly useful for moving data out of default segment. + * Uncomment it if you want. Could also define FARDATA as + * const if your compiler supports it. (SJT) +# define FARDATA FAR + */ +# endif /* __WIN32__, __FLAT__, __CYGWIN__ */ +#endif /* __BORLANDC__ */ + + +/* Suggest testing for specific compiler first before testing for + * FAR. The Watcom compiler defines both __MEDIUM__ and M_I86MM, + * making reliance oncertain keywords suspect. (SJT) + */ + +/* MSC Medium model */ +#if defined(FAR) +# if defined(M_I86MM) +# define USE_FAR_KEYWORD +# define FARDATA FAR +# include +# endif +#endif + +/* SJT: default case */ +#ifndef FAR +# define FAR +#endif + +/* At this point FAR is always defined */ +#ifndef FARDATA +# define FARDATA +#endif + +/* Typedef for floating-point numbers that are converted + to fixed-point with a multiple of 100,000, e.g., int_gamma */ +typedef png_int_32 png_fixed_point; + +/* Add typedefs for pointers */ +typedef void FAR * png_voidp; +typedef png_byte FAR * png_bytep; +typedef png_uint_32 FAR * png_uint_32p; +typedef png_int_32 FAR * png_int_32p; +typedef png_uint_16 FAR * png_uint_16p; +typedef png_int_16 FAR * png_int_16p; +typedef PNG_CONST char FAR * png_const_charp; +typedef char FAR * png_charp; +typedef png_fixed_point FAR * png_fixed_point_p; + +#ifndef PNG_NO_STDIO +#if defined(_WIN32_WCE) +typedef HANDLE png_FILE_p; +#else +typedef FILE * png_FILE_p; +#endif +#endif + +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double FAR * png_doublep; +#endif + +/* Pointers to pointers; i.e. arrays */ +typedef png_byte FAR * FAR * png_bytepp; +typedef png_uint_32 FAR * FAR * png_uint_32pp; +typedef png_int_32 FAR * FAR * png_int_32pp; +typedef png_uint_16 FAR * FAR * png_uint_16pp; +typedef png_int_16 FAR * FAR * png_int_16pp; +typedef PNG_CONST char FAR * FAR * png_const_charpp; +typedef char FAR * FAR * png_charpp; +typedef png_fixed_point FAR * FAR * png_fixed_point_pp; +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double FAR * FAR * png_doublepp; +#endif + +/* Pointers to pointers to pointers; i.e., pointer to array */ +typedef char FAR * FAR * FAR * png_charppp; + +#if defined(PNG_1_0_X) || defined(PNG_1_2_X) +/* SPC - Is this stuff deprecated? */ +/* It'll be removed as of libpng-1.3.0 - GR-P */ +/* libpng typedefs for types in zlib. If zlib changes + * or another compression library is used, then change these. + * Eliminates need to change all the source files. + */ +typedef charf * png_zcharp; +typedef charf * FAR * png_zcharpp; +typedef z_stream FAR * png_zstreamp; +#endif /* (PNG_1_0_X) || defined(PNG_1_2_X) */ + +/* + * Define PNG_BUILD_DLL if the module being built is a Windows + * LIBPNG DLL. + * + * Define PNG_USE_DLL if you want to *link* to the Windows LIBPNG DLL. + * It is equivalent to Microsoft predefined macro _DLL that is + * automatically defined when you compile using the share + * version of the CRT (C Run-Time library) + * + * The cygwin mods make this behavior a little different: + * Define PNG_BUILD_DLL if you are building a dll for use with cygwin + * Define PNG_STATIC if you are building a static library for use with cygwin, + * -or- if you are building an application that you want to link to the + * static library. + * PNG_USE_DLL is defined by default (no user action needed) unless one of + * the other flags is defined. + */ + +#if !defined(PNG_DLL) && (defined(PNG_BUILD_DLL) || defined(PNG_USE_DLL)) +# define PNG_DLL +#endif +/* If CYGWIN, then disallow GLOBAL ARRAYS unless building a static lib. + * When building a static lib, default to no GLOBAL ARRAYS, but allow + * command-line override + */ +#if defined(__CYGWIN__) +# if !defined(PNG_STATIC) +# if defined(PNG_USE_GLOBAL_ARRAYS) +# undef PNG_USE_GLOBAL_ARRAYS +# endif +# if !defined(PNG_USE_LOCAL_ARRAYS) +# define PNG_USE_LOCAL_ARRAYS +# endif +# else +# if defined(PNG_USE_LOCAL_ARRAYS) || defined(PNG_NO_GLOBAL_ARRAYS) +# if defined(PNG_USE_GLOBAL_ARRAYS) +# undef PNG_USE_GLOBAL_ARRAYS +# endif +# endif +# endif +# if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) +# define PNG_USE_LOCAL_ARRAYS +# endif +#endif + +/* Do not use global arrays (helps with building DLL's) + * They are no longer used in libpng itself, since version 1.0.5c, + * but might be required for some pre-1.0.5c applications. + */ +#if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) +# if defined(PNG_NO_GLOBAL_ARRAYS) || \ + (defined(__GNUC__) && defined(PNG_DLL)) || defined(_MSC_VER) +# define PNG_USE_LOCAL_ARRAYS +# else +# define PNG_USE_GLOBAL_ARRAYS +# endif +#endif + +#if defined(__CYGWIN__) +# undef PNGAPI +# define PNGAPI __cdecl +# undef PNG_IMPEXP +# define PNG_IMPEXP +#endif + +/* If you define PNGAPI, e.g., with compiler option "-DPNGAPI=__stdcall", + * you may get warnings regarding the linkage of png_zalloc and png_zfree. + * Don't ignore those warnings; you must also reset the default calling + * convention in your compiler to match your PNGAPI, and you must build + * zlib and your applications the same way you build libpng. + */ + +#if defined(__MINGW32__) && !defined(PNG_MODULEDEF) +# ifndef PNG_NO_MODULEDEF +# define PNG_NO_MODULEDEF +# endif +#endif + +#if !defined(PNG_IMPEXP) && defined(PNG_BUILD_DLL) && !defined(PNG_NO_MODULEDEF) +# define PNG_IMPEXP +#endif + +#if defined(PNG_DLL) || defined(_DLL) || defined(__DLL__ ) || \ + (( defined(_Windows) || defined(_WINDOWS) || \ + defined(WIN32) || defined(_WIN32) || defined(__WIN32__) )) + +# ifndef PNGAPI +# if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) +# define PNGAPI __cdecl +# else +# define PNGAPI _cdecl +# endif +# endif + +# if !defined(PNG_IMPEXP) && (!defined(PNG_DLL) || \ + 0 /* WINCOMPILER_WITH_NO_SUPPORT_FOR_DECLIMPEXP */) +# define PNG_IMPEXP +# endif + +# if !defined(PNG_IMPEXP) + +# define PNG_EXPORT_TYPE1(type,symbol) PNG_IMPEXP type PNGAPI symbol +# define PNG_EXPORT_TYPE2(type,symbol) type PNG_IMPEXP PNGAPI symbol + + /* Borland/Microsoft */ +# if defined(_MSC_VER) || defined(__BORLANDC__) +# if (_MSC_VER >= 800) || (__BORLANDC__ >= 0x500) +# define PNG_EXPORT PNG_EXPORT_TYPE1 +# else +# define PNG_EXPORT PNG_EXPORT_TYPE2 +# if defined(PNG_BUILD_DLL) +# define PNG_IMPEXP __export +# else +# define PNG_IMPEXP /*__import */ /* doesn't exist AFAIK in + VC++ */ +# endif /* Exists in Borland C++ for + C++ classes (== huge) */ +# endif +# endif + +# if !defined(PNG_IMPEXP) +# if defined(PNG_BUILD_DLL) +# define PNG_IMPEXP __declspec(dllexport) +# else +# define PNG_IMPEXP __declspec(dllimport) +# endif +# endif +# endif /* PNG_IMPEXP */ +#else /* !(DLL || non-cygwin WINDOWS) */ +# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) +# ifndef PNGAPI +# define PNGAPI _System +# endif +# else +# if 0 /* ... other platforms, with other meanings */ +# endif +# endif +#endif + +#ifndef PNGAPI +# define PNGAPI +#endif +#ifndef PNG_IMPEXP +# define PNG_IMPEXP +#endif + +#ifdef PNG_BUILDSYMS +# ifndef PNG_EXPORT +# define PNG_EXPORT(type,symbol) PNG_FUNCTION_EXPORT symbol END +# endif +# ifdef PNG_USE_GLOBAL_ARRAYS +# ifndef PNG_EXPORT_VAR +# define PNG_EXPORT_VAR(type) PNG_DATA_EXPORT +# endif +# endif +#endif + +#ifndef PNG_EXPORT +# define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol +#endif + +#ifdef PNG_USE_GLOBAL_ARRAYS +# ifndef PNG_EXPORT_VAR +# define PNG_EXPORT_VAR(type) extern PNG_IMPEXP type +# endif +#endif + +/* User may want to use these so they are not in PNG_INTERNAL. Any library + * functions that are passed far data must be model independent. + */ + +#ifndef PNG_ABORT +# define PNG_ABORT() abort() +#endif + +#ifdef PNG_SETJMP_SUPPORTED +# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) +#else +# define png_jmpbuf(png_ptr) \ + (LIBPNG_WAS_COMPILED_WITH__PNG_SETJMP_NOT_SUPPORTED) +#endif + +#if defined(USE_FAR_KEYWORD) /* memory model independent fns */ +/* use this to make far-to-near assignments */ +# define CHECK 1 +# define NOCHECK 0 +# define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK)) +# define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK)) +# define png_snprintf _fsnprintf /* Added to v 1.2.19 */ +# define png_strlen _fstrlen +# define png_memcmp _fmemcmp /* SJT: added */ +# define png_memcpy _fmemcpy +# define png_memset _fmemset +#else /* use the usual functions */ +# define CVT_PTR(ptr) (ptr) +# define CVT_PTR_NOCHECK(ptr) (ptr) +# ifndef PNG_NO_SNPRINTF +# ifdef _MSC_VER +# define png_snprintf _snprintf /* Added to v 1.2.19 */ +# define png_snprintf2 _snprintf +# define png_snprintf6 _snprintf +# else +# define png_snprintf snprintf /* Added to v 1.2.19 */ +# define png_snprintf2 snprintf +# define png_snprintf6 snprintf +# endif +# else + /* You don't have or don't want to use snprintf(). Caution: Using + * sprintf instead of snprintf exposes your application to accidental + * or malevolent buffer overflows. If you don't have snprintf() + * as a general rule you should provide one (you can get one from + * Portable OpenSSH). */ +# define png_snprintf(s1,n,fmt,x1) sprintf(s1,fmt,x1) +# define png_snprintf2(s1,n,fmt,x1,x2) sprintf(s1,fmt,x1,x2) +# define png_snprintf6(s1,n,fmt,x1,x2,x3,x4,x5,x6) \ + sprintf(s1,fmt,x1,x2,x3,x4,x5,x6) +# endif +# define png_strlen strlen +# define png_memcmp memcmp /* SJT: added */ +# define png_memcpy memcpy +# define png_memset memset +#endif +/* End of memory model independent support */ + +/* Just a little check that someone hasn't tried to define something + * contradictory. + */ +#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K) +# undef PNG_ZBUF_SIZE +# define PNG_ZBUF_SIZE 65536L +#endif + +/* Added at libpng-1.2.8 */ +#endif /* PNG_VERSION_INFO_ONLY */ + +#endif /* PNGCONF_H */ diff --git a/engine/libs/vc6-libs/zconf.h b/engine/libs/vc6-libs/zconf.h new file mode 100644 index 000000000..03a9431c8 --- /dev/null +++ b/engine/libs/vc6-libs/zconf.h @@ -0,0 +1,332 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflateParams z_deflateParams +# define deflateBound z_deflateBound +# define deflatePrime z_deflatePrime +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateCopy z_inflateCopy +# define inflateReset z_inflateReset +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table +# define zError z_zError + +# define alloc_func z_alloc_func +# define free_func z_free_func +# define in_func z_in_func +# define out_func z_out_func +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(__OS400__) +# define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +# ifdef FAR +# undef FAR +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(deflateBound,"DEBND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(compressBound,"CMBND") +# pragma map(inflate_table,"INTABL") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/engine/libs/vc6-libs/zlib.h b/engine/libs/vc6-libs/zlib.h new file mode 100644 index 000000000..022817927 --- /dev/null +++ b/engine/libs/vc6-libs/zlib.h @@ -0,0 +1,1357 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.3, July 18th, 2005 + + Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + 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 software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.3" +#define ZLIB_VERNUM 0x1230 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip streams in memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumualte before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + the value returned by deflateBound (see below). If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, + Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() stop + if and when it gets to the next deflate block boundary. When decoding the + zlib or gzip format, this will cause inflate() to return immediately after + the header and before the first block. When doing a raw inflate, inflate() + will go ahead and process the first block, and will return when it gets to + the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 + if inflate() is currently decoding the last block in the deflate stream, + plus 128 if inflate() returned immediately after decoding an end-of-block + code or decoding the complete header up to just before the first byte of the + deflate stream. The end-of-block will not be indicated until all of the + uncompressed data from that block has been written to strm->next_out. The + number of unused bits may in general be greater than seven, except when + bit 7 of data_type is set, in which case the number of unused bits will be + less than eight. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster approach + may be used for the single inflate() call. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the only effect of the flush parameter in this implementation + is on the return value of inflate(), as noted below, or when it returns early + because Z_BLOCK is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the adler32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the adler32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() will decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically. Any information + contained in the gzip header is not retained, so applications that need that + information should instead use raw inflate, see inflateInit2() below, or + inflateBack() and perform their own processing of the gzip header and + trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may then + call inflateSync() to look for a good compression block if a partial recovery + of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), + no header crc, and the operating system will be set to 255 (unknown). If a + gzip stream is being written, strm->adler is a crc32 instead of an adler32. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as + Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy + parameter only affects the compression ratio but not the correctness of the + compressed output even if it is not set appropriately. Z_FIXED prevents the + use of dynamic Huffman codes, allowing for a simpler decoder for special + applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. In addition, the + current implementation of deflate will use at most the window size minus + 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() + or deflateInit2(). This would be used to allocate an output buffer + for deflation in a single pass, and so would be called before deflate(). +*/ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the + bits leftover from a previous deflate stream when appending to it. As such, + this function can only be used for raw deflate, and must be used before the + first deflate() call after a deflateInit2() or deflateReset(). bits must be + less than or equal to 16, and that many of the least significant bits of + value will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is + a crc32 instead of an adler32. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg + is set to null if there is no error message. inflateInit2 does not perform + any decompression apart from reading the zlib header if present: this will + be done by inflate(). (So next_in and avail_in may be modified, but next_out + and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called + immediately after inflateInit2() or inflateReset() and before any call of + inflate() to set the dictionary. The application must insure that the + dictionary that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK can be used to + force inflate() to return immediately after header processing is complete + and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When + any of extra, name, or comment are not Z_NULL and the respective field is + not present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the paramaters are invalid, Z_MEM_ERROR if the internal state could not + be allocated, or Z_VERSION_ERROR if the version of the library does not + match the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free + the allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects + only the raw deflate stream to decompress. This is different from the + normal behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format + error in the deflate stream (in which case strm->msg is set to indicate the + nature of the error), or Z_STREAM_ERROR if the stream was not properly + initialized. In the case of Z_BUF_ERROR, an input or output error can be + distinguished using strm->next_in which will be Z_NULL only if in() returned + an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to + out() returning non-zero. (in() will always be called before out(), so + strm->next_in is assured to be defined if out() returns non-zero.) Note + that inflateBack() cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least the value returned + by compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before + a compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h", or 'R' for run-length encoding + as in "wb1R". (See the description of deflateInit2 for more information + about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). The number of + uncompressed bytes written is limited to 4095. The caller should assure that + this limit is not exceeded. If it is exceeded, then gzprintf() will return + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read again later. + Only one character of push-back is allowed. gzungetc() returns the + character pushed, or -1 on failure. gzungetc() will fail if a + character has been pushed but not read yet, or if c is -1. The pushed + character will be discarded if the stream is repositioned with gzseek() + or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Returns 1 if file is being read directly without decompression, otherwise + zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); +/* + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. If buf is NULL, this function returns the required initial + value for the for the crc. Pre- and post-conditioning (one's complement) is + performed within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + +/* + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/engine/libs/vc6-libs/zlib.lib b/engine/libs/vc6-libs/zlib.lib new file mode 100644 index 0000000000000000000000000000000000000000..e732c71a4c234e13c2a4f6f30310df656f2cb5c2 GIT binary patch literal 90344 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 literal 0 HcmV?d00001