/* ************************************************************************** */ /* * For conditions of distribution and use, * */ /* * see copyright notice in libmng.h * */ /* ************************************************************************** */ /* * * */ /* * project : libmng * */ /* * file : libmng_types.h copyright (c) 2000 G.Juyn * */ /* * version : 1.0.3 * */ /* * * */ /* * purpose : type specifications * */ /* * * */ /* * author : G.Juyn * */ /* * web : http://www.3-t.com * */ /* * email : mailto:info@3-t.com * */ /* * * */ /* * comment : Specification of the types used by the library * */ /* * Creates platform-independant structure * */ /* * * */ /* * changes : 0.5.1 - 05/06/2000 - G.Juyn * */ /* * - added iteratechunk callback definition * */ /* * 0.5.1 - 05/08/2000 - G.Juyn * */ /* * - improved definitions for DLL support * */ /* * - added 8-bit palette definition * */ /* * - added general array definitions * */ /* * - added MNG_NULL definition * */ /* * - changed strict-ANSI stuff * */ /* * 0.5.1 - 05/11/2000 - G.Juyn * */ /* * - changed most callback prototypes to allow the app * */ /* * to report errors during callback processing * */ /* * 0.5.1 - 05/16/2000 - G.Juyn * */ /* * - moved standard header includes into this file * */ /* * (stdlib/mem for mem-mngmt & math for fp gamma-calc) * */ /* * * */ /* * 0.5.2 - 05/18/2000 - G.Juyn * */ /* * - B003 - fixed problem with being proprietary * */ /* * to Borland platform * */ /* * - added helper definitions for JNG (IJG-based) * */ /* * - fixed support for IJGSRC6B * */ /* * 0.5.2 - 05/24/2000 - G.Juyn * */ /* * - added default IJG compression parameters and such * */ /* * 0.5.2 - 05/31/2000 - G.Juyn * */ /* * - fixed inclusion for memcpy (contributed by Tim Rowley) * */ /* * - added mng_int32p (contributed by Tim Rowley) * */ /* * 0.5.2 - 06/02/2000 - G.Juyn * */ /* * - removed SWAP_ENDIAN reference (contributed by Tim Rowley)* */ /* * - added getalphaline callback for RGB8_A8 canvasstyle * */ /* * * */ /* * 0.5.3 - 06/21/2000 - G.Juyn * */ /* * - added speedtype to facilitate testing * */ /* * 0.5.3 - 06/27/2000 - G.Juyn * */ /* * - added typedef for mng_size_t * */ /* * - changed size parameter for memory callbacks to * */ /* * mng_size_t * */ /* * 0.5.3 - 06/28/2000 - G.Juyn * */ /* * - changed definition of 32-bit ints (64-bit platforms) * */ /* * - changed definition of mng_handle (64-bit platforms) * */ /* * 0.5.3 - 06/29/2000 - G.Juyn * */ /* * - changed definition of mng_handle (again) * */ /* * - swapped refresh parameters * */ /* * - added inclusion of stdlib.h for abs() * */ /* * * */ /* * 0.9.0 - 06/30/2000 - G.Juyn * */ /* * - changed refresh parameters to 'x,y,width,height' * */ /* * 0.9.1 - 07/10/2000 - G.Juyn * */ /* * - added suspendbuffer constants * */ /* * 0.9.1 - 07/15/2000 - G.Juyn * */ /* * - added callbacks for SAVE/SEEK processing * */ /* * * */ /* * 0.9.2 - 08/05/2000 - G.Juyn * */ /* * - changed file-prefixes * */ /* * * */ /* * 0.9.3 - 08/07/2000 - G.Juyn * */ /* * - B111300 - fixup for improved portability * */ /* * 0.9.3 - 08/12/2000 - G.Juyn * */ /* * - added workaround for faulty PhotoShop iCCP chunk * */ /* * 0.9.3 - 09/11/2000 - G.Juyn * */ /* * - added export of zlib functions from windows dll * */ /* * - fixed inclusion parameters once again to make those * */ /* * external libs work together * */ /* * - re-fixed fixed inclusion parameters * */ /* * (these freeking libraries make me mad) * */ /* * 0.9.3 - 10/11/2000 - G.Juyn * */ /* * - added support for nEED * */ /* * 0.9.3 - 10/17/2000 - G.Juyn * */ /* * - added callback to process non-critical unknown chunks * */ /* * * */ /* * 0.9.4 - 11/20/2000 - R.Giles * */ /* * - fixed inclusion of lcms header for non-windows platforms * */ /* * 0.9.4 - 12/12/2000 - G.Juyn * */ /* * - changed callback convention for MSVC (Thanks Chad) * */ /* * 0.9.4 - 12/16/2000 - G.Juyn * */ /* * - fixed mixup of data- & function-pointers (thanks Dimitri)* */ /* * * */ /* * 1.0.1 - 02/08/2001 - G.Juyn * */ /* * - added MEND processing callback * */ /* * * */ /* * 1.0.2 - 06/23/2001 - G.Juyn * */ /* * - added processterm callback * */ /* * * */ /* * 1.0.3 - 08/06/2001 - G.Juyn * */ /* * - changed inclusion of lcms.h for Linux platforms * */ /* * * */ /* ************************************************************************** */ #ifndef _libmng_types_h_ #define _libmng_types_h_ /* ************************************************************************** */ #ifdef __BORLANDC__ #pragma option -AT /* turn off strict ANSI-C for the moment */ #endif #ifndef WIN32 #if defined(_WIN32) || defined(__WIN32__) || defined(_Windows) || defined(_WINDOWS) #define WIN32 /* gather them into a single define */ #endif #endif /* ************************************************************************** */ /* * * */ /* * Here's where the external & standard libs are embedded * */ /* * * */ /* * (it can be a bit of a pain in the lower-back to get them to work * */ /* * together) * */ /* * * */ /* ************************************************************************** */ #ifdef WIN32 /* only include needed stuff */ #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #endif #ifdef MNG_USE_DLL #ifdef MNG_SKIP_ZLIB #undef MNG_INCLUDE_ZLIB #endif #ifdef MNG_SKIP_LCMS #undef MNG_INCLUDE_LCMS #endif #ifdef MNG_SKIP_IJG6B #undef MNG_INCLUDE_IJG6B #endif #endif #ifdef MNG_INCLUDE_ZLIB /* zlib by Mark Adler & Jean-loup Gailly */ #include "zlib.h" #endif #ifdef MNG_INCLUDE_LCMS /* little cms by Marti Maria Saguer */ #ifndef ZLIB_DLL #undef FAR #endif #if defined(WIN32) || defined(linux) /* different header locations */ #include "lcms.h" #else #include "lcms/lcms.h" #endif #endif /* MNG_INCLUDE_LCMS */ #ifdef MNG_INCLUDE_IJG6B /* IJG's jpgsrc6b */ #include #ifdef MNG_USE_SETJMP #include /* needed for error-recovery (blergh) */ #else #ifdef WIN32 #define USE_WINDOWS_MESSAGEBOX /* display a messagebox under Windoze */ #endif #endif /* MNG_USE_SETJMP */ #ifdef FAR #undef FAR /* possibly defined by zlib or lcms */ #endif #include "jpeglib.h" /* all that for JPEG support :-) */ #endif /* MNG_INCLUDE_IJG6B */ #if defined(MNG_INTERNAL_MEMMNGMT) || defined(MNG_INCLUDE_FILTERS) #include /* "calloc" & "free" & "abs" */ #endif #include /* get proper integer widths */ #ifdef WIN32 /* B003 */ #if defined __BORLANDC__ #include /* defines "memcpy" for BCB */ #else #include /* defines "memcpy" for other win32 platforms */ #endif /* B003 */ #ifdef MNG_CHECK_BAD_ICCP #include /* strncmp() */ #endif #else #ifdef BSD #include /* defines "memcpy" for BSD (?) */ #else #include /* defines "memcpy" for all others (???) */ #endif #endif #if defined(MNG_FULL_CMS) || defined(MNG_GAMMA_ONLY) #include /* fp gamma-calculation */ #endif /* ************************************************************************** */ /* * * */ /* * Platform-dependant stuff * */ /* * * */ /* ************************************************************************** */ /* TODO: this may require some elaboration for other platforms; only works with BCB for now */ #ifndef MNG_DLL #if defined(MNG_BUILD_DLL) || defined(MNG_USE_DLL) #define MNG_DLL #endif #endif #if defined(MNG_DLL) && defined(WIN32) /* setup DLL calling conventions */ #define MNG_DECL __stdcall #if defined(MNG_BUILD_DLL) #define MNG_EXT __declspec(dllexport) #elif defined(MNG_USE_DLL) #define MNG_EXT __declspec(dllimport) #else #define MNG_EXT #endif #ifdef MNG_STRICT_ANSI #undef MNG_STRICT_ANSI /* can't do strict-ANSI with this DLL-stuff */ #endif #else #define MNG_DECL /* dummies for non-DLL */ #define MNG_EXT #endif /* MNG_DLL && WIN32 */ #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) #pragma option -A /* now force ANSI-C from here on */ #endif /* ************************************************************************** */ #if USHRT_MAX == 0xffffffffU /* get the proper 32-bit width !!! */ typedef unsigned short mng_uint32; typedef signed short mng_int32; #elif UINT_MAX == 0xffffffffU typedef unsigned int mng_uint32; typedef signed int mng_int32; #elif ULONG_MAX == 0xffffffffU typedef unsigned long mng_uint32; typedef signed long mng_int32; #else #error "Sorry, I can't find any 32-bit integers on this platform." #endif typedef signed short mng_int16; /* other basic integers */ typedef unsigned short mng_uint16; typedef signed char mng_int8; typedef unsigned char mng_uint8; typedef double mng_float; /* basic float */ typedef size_t mng_size_t; /* size field for memory allocation */ typedef char * mng_pchar; /* string */ typedef void * mng_ptr; /* generic pointer */ typedef void (*mng_fptr) (void); /* generic function pointer */ /* ************************************************************************** */ /* * * */ /* * Platform-independant from here * */ /* * * */ /* ************************************************************************** */ typedef mng_uint32 * mng_uint32p; /* pointer to unsigned longs */ typedef mng_int32 * mng_int32p; /* pointer to longs */ typedef mng_uint16 * mng_uint16p; /* pointer to unsigned words */ typedef mng_uint8 * mng_uint8p; /* pointer to unsigned bytes */ typedef mng_int8 mng_bool; /* booleans */ struct mng_data_struct; typedef struct mng_data_struct * mng_handle; /* generic handle */ typedef mng_int32 mng_retcode; /* generic return code */ typedef mng_int32 mng_chunkid; /* 4-byte chunkname identifier */ typedef mng_ptr mng_chunkp; /* pointer to a chunk-structure */ typedef mng_ptr mng_objectp; /* pointer to an object-structure */ typedef mng_chunkid * mng_chunkidp; /* pointer to chunkid */ typedef struct { /* 8-bit palette element */ mng_uint8 iRed; mng_uint8 iGreen; mng_uint8 iBlue; } mng_palette8e; typedef mng_palette8e mng_palette8[256]; /* 8-bit palette */ typedef mng_palette8e * mng_palette8ep; typedef mng_uint8 mng_uint8arr[256]; /* generic arrays */ typedef mng_uint8 mng_uint8arr4[4]; typedef mng_uint16 mng_uint16arr[256]; typedef mng_uint32 mng_uint32arr2[2]; /* ************************************************************************** */ #define MNG_FALSE 0 #define MNG_TRUE 1 #define MNG_NULL 0 #define MNG_SUSPENDBUFFERSIZE 32768 #define MNG_SUSPENDREQUESTSIZE 1024 /* ************************************************************************** */ #ifdef MNG_INCLUDE_ZLIB /* size of temporary zlib buffer for deflate processing */ #define MNG_ZLIB_MAXBUF 8192 /* default zlib compression parameters for deflateinit2 */ #define MNG_ZLIB_LEVEL 9 /* level */ #define MNG_ZLIB_METHOD Z_DEFLATED /* method */ #define MNG_ZLIB_WINDOWBITS 15 /* window size */ #define MNG_ZLIB_MEMLEVEL 9 /* memory level */ #define MNG_ZLIB_STRATEGY Z_DEFAULT_STRATEGY /* strategy */ #define MNG_MAX_IDAT_SIZE 4096 /* maximum size of IDAT data */ #endif /* MNG_INCLUDE_ZLIB */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_JNG #ifdef MNG_INCLUDE_IJG6B /* IJG helper defs */ typedef struct jpeg_compress_struct mngjpeg_comp; typedef struct jpeg_decompress_struct mngjpeg_decomp; typedef struct jpeg_error_mgr mngjpeg_error; typedef struct jpeg_source_mgr mngjpeg_source; typedef mngjpeg_comp * mngjpeg_compp; typedef mngjpeg_decomp * mngjpeg_decompp; typedef mngjpeg_error * mngjpeg_errorp; typedef mngjpeg_source * mngjpeg_sourcep; typedef J_DCT_METHOD mngjpeg_dctmethod; /* default IJG parameters for compression */ #define MNG_JPEG_DCT JDCT_DEFAULT /* DCT algorithm (JDCT_ISLOW) */ #define MNG_JPEG_QUALITY 100 /* quality 0..100; 100=best */ #define MNG_JPEG_SMOOTHING 0 /* default no smoothing */ #define MNG_JPEG_PROGRESSIVE MNG_FALSE /* default is just baseline */ #define MNG_JPEG_OPTIMIZED MNG_FALSE /* default is not optimized */ #endif /* MNG_INCLUDE_IJG6B */ #define MNG_JPEG_MAXBUF 65500 /* max size of temp JPEG buffer */ #define MNG_MAX_JDAT_SIZE 4096 /* maximum size of JDAT data */ #endif /* MNG_INCLUDE_JNG */ /* ************************************************************************** */ #ifdef MNG_INCLUDE_LCMS typedef cmsHPROFILE mng_cmsprof; /* little CMS helper defs */ typedef cmsHTRANSFORM mng_cmstrans; typedef cmsCIExyY mng_CIExyY; typedef cmsCIExyYTRIPLE mng_CIExyYTRIPLE; typedef LPGAMMATABLE mng_gammatabp; #endif /* MNG_INCLUDE_LCMS */ /* ************************************************************************** */ /* enumeration of known graphics types */ enum mng_imgtypes {mng_it_unknown, mng_it_png, mng_it_mng, mng_it_jng}; typedef enum mng_imgtypes mng_imgtype; /* enumeration of animation speed-types */ enum mng_speedtypes {mng_st_normal, mng_st_fast, mng_st_slow, mng_st_slowest}; typedef enum mng_speedtypes mng_speedtype; /* ************************************************************************** */ /* memory management callbacks */ typedef mng_ptr (MNG_DECL *mng_memalloc) (mng_size_t iLen); typedef void (MNG_DECL *mng_memfree) (mng_ptr iPtr, mng_size_t iLen); /* I/O management callbacks */ typedef mng_bool (MNG_DECL *mng_openstream) (mng_handle hHandle); typedef mng_bool (MNG_DECL *mng_closestream) (mng_handle hHandle); typedef mng_bool (MNG_DECL *mng_readdata) (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pRead); typedef mng_bool (MNG_DECL *mng_writedata) (mng_handle hHandle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pWritten); /* error & trace processing callbacks */ typedef mng_bool (MNG_DECL *mng_errorproc) (mng_handle hHandle, mng_int32 iErrorcode, mng_int8 iSeverity, mng_chunkid iChunkname, mng_uint32 iChunkseq, mng_int32 iExtra1, mng_int32 iExtra2, mng_pchar zErrortext); typedef mng_bool (MNG_DECL *mng_traceproc) (mng_handle hHandle, mng_int32 iFuncnr, mng_int32 iFuncseq, mng_pchar zFuncname); /* read processing callbacks */ typedef mng_bool (MNG_DECL *mng_processheader) (mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight); typedef mng_bool (MNG_DECL *mng_processtext) (mng_handle hHandle, mng_uint8 iType, mng_pchar zKeyword, mng_pchar zText, mng_pchar zLanguage, mng_pchar zTranslation); typedef mng_bool (MNG_DECL *mng_processsave) (mng_handle hHandle); typedef mng_bool (MNG_DECL *mng_processseek) (mng_handle hHandle, mng_pchar zName); typedef mng_bool (MNG_DECL *mng_processneed) (mng_handle hHandle, mng_pchar zKeyword); typedef mng_bool (MNG_DECL *mng_processmend) (mng_handle hHandle, mng_uint32 iIterationsdone, mng_uint32 iIterationsleft); typedef mng_bool (MNG_DECL *mng_processunknown) (mng_handle hHandle, mng_chunkid iChunkid, mng_uint32 iRawlen, mng_ptr pRawdata); typedef mng_bool (MNG_DECL *mng_processterm) (mng_handle hHandle, mng_uint8 iTermaction, mng_uint8 iIteraction, mng_uint32 iDelay, mng_uint32 iItermax); /* display processing callbacks */ typedef mng_ptr (MNG_DECL *mng_getcanvasline) (mng_handle hHandle, mng_uint32 iLinenr); typedef mng_ptr (MNG_DECL *mng_getbkgdline) (mng_handle hHandle, mng_uint32 iLinenr); typedef mng_ptr (MNG_DECL *mng_getalphaline) (mng_handle hHandle, mng_uint32 iLinenr); typedef mng_bool (MNG_DECL *mng_refresh) (mng_handle hHandle, mng_uint32 iX, mng_uint32 iY, mng_uint32 iWidth, mng_uint32 iHeight); /* timer management callbacks */ typedef mng_uint32 (MNG_DECL *mng_gettickcount) (mng_handle hHandle); typedef mng_bool (MNG_DECL *mng_settimer) (mng_handle hHandle, mng_uint32 iMsecs); /* color management callbacks */ typedef mng_bool (MNG_DECL *mng_processgamma) (mng_handle hHandle, mng_uint32 iGamma); typedef mng_bool (MNG_DECL *mng_processchroma) (mng_handle hHandle, mng_uint32 iWhitepointx, mng_uint32 iWhitepointy, mng_uint32 iRedx, mng_uint32 iRedy, mng_uint32 iGreenx, mng_uint32 iGreeny, mng_uint32 iBluex, mng_uint32 iBluey); typedef mng_bool (MNG_DECL *mng_processsrgb) (mng_handle hHandle, mng_uint8 iRenderingintent); typedef mng_bool (MNG_DECL *mng_processiccp) (mng_handle hHandle, mng_uint32 iProfilesize, mng_ptr pProfile); typedef mng_bool (MNG_DECL *mng_processarow) (mng_handle hHandle, mng_uint32 iRowsamples, mng_bool bIsRGBA16, mng_ptr pRow); /* chunk access callback(s) */ typedef mng_bool (MNG_DECL *mng_iteratechunk) (mng_handle hHandle, mng_handle hChunk, mng_chunkid iChunkid, mng_uint32 iChunkseq); /* ************************************************************************** */ #endif /* _libmng_types_h_ */ /* ************************************************************************** */ /* * end of file * */ /* ************************************************************************** */