⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libmng_chunk_prc.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 5 页
字号:
/* ************************************************************************** *//* *             For conditions of distribution and use,                    * *//* *                see copyright notice in libmng.h                        * *//* ************************************************************************** *//* *                                                                        * *//* * project   : libmng                                                     * *//* * file      : libmng_chunk_prc.c        copyright (c) 2000-2004 G.Juyn   * *//* * version   : 1.0.9                                                      * *//* *                                                                        * *//* * purpose   : Chunk initialization & cleanup (implementation)            * *//* *                                                                        * *//* * author    : G.Juyn                                                     * *//* *                                                                        * *//* * comment   : implementation of the chunk initialization & cleanup       * *//* *             routines                                                   * *//* *                                                                        * *//* * changes   : 0.5.1 - 05/08/2000 - G.Juyn                                * *//* *             - changed strict-ANSI stuff                                * *//* *             0.5.1 - 05/12/2000 - G.Juyn                                * *//* *             - changed trace to macro for callback error-reporting      * *//* *                                                                        * *//* *             0.9.1 - 07/19/2000 - G.Juyn                                * *//* *             - fixed creation-code                                      * *//* *                                                                        * *//* *             0.9.2 - 07/31/2000 - G.Juyn                                * *//* *             - put add_chunk() inside MNG_INCLUDE_WRITE_PROCS wrapper   * *//* *             0.9.2 - 08/01/2000 - G.Juyn                                * *//* *             - wrapper for add_chunk() changed                          * *//* *             0.9.2 - 08/05/2000 - G.Juyn                                * *//* *             - changed file-prefixes                                    * *//* *                                                                        * *//* *             0.9.3 - 08/26/2000 - G.Juyn                                * *//* *             - added MAGN chunk                                         * *//* *             0.9.3 - 10/16/2000 - G.Juyn                                * *//* *             - added support for JDAA                                   * *//* *                                                                        * *//* *             1.0.5 - 08/19/2002 - G.Juyn                                * *//* *             - B597134 - libmng pollutes the linker namespace           * *//* *             - added HLAPI function to copy chunks                      * *//* *             1.0.5 - 09/14/2002 - G.Juyn                                * *//* *             - added event handling for dynamic MNG                     * *//* *             1.0.5 - 10/04/2002 - G.Juyn                                * *//* *             - fixed chunk-storage for evNT chunk                       * *//* *             1.0.5 - 10/17/2002 - G.Juyn                                * *//* *             - fixed issue in freeing evNT chunk                        * *//* *                                                                        * *//* *             1.0.6 - 07/07/2003 - G.R-P                                 * *//* *             - added MNG_SKIPCHUNK_cHNK footprint optimizations         * *//* *             - added MNG_NO_DELTA_PNG reduction feature                 * *//* *             1.0.6 - 07/14/2003 - G.R-P                                 * *//* *             - added MNG_NO_LOOP_SIGNALS_SUPPORTED conditional          * *//* *             1.0.6 - 07/29/2003 - G.R-P                                 * *//* *             - added conditionals around PAST chunk support             * *//* *             1.0.6 - 08/17/2003 - G.R-P                                 * *//* *             - added conditionals around non-VLC chunk support          * *//* *                                                                        * *//* *             1.0.7 - 03/24/2004 - G.R-P                                 * *//* *             - fixed SKIPCHUNK_eXPI -> fPRI typo                        * *//* *                                                                        * *//* *             1.0.9 - 09/25/2004 - G.Juyn                                * *//* *             - replaced MNG_TWEAK_LARGE_FILES with permanent solution   * *//* *             1.0.9 - 12/05/2004 - G.Juyn                                * *//* *             - added conditional MNG_OPTIMIZE_CHUNKINITFREE             * *//* *             1.0.9 - 12/06/2004 - G.Juyn                                * *//* *             - added conditional MNG_OPTIMIZE_CHUNKASSIGN               * *//* *             1.0.9 - 12/20/2004 - G.Juyn                                * *//* *             - cleaned up macro-invocations (thanks to D. Airlie)       * *//* *                                                                        * *//* ************************************************************************** */#include "libmng.h"#include "libmng_data.h"#include "libmng_error.h"#include "libmng_trace.h"#ifdef __BORLANDC__#pragma hdrstop#endif#include "libmng_memory.h"#include "libmng_chunks.h"#include "libmng_chunk_prc.h"#if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI)#pragma option -A                      /* force ANSI-C */#endif/* ************************************************************************** *//* *                                                                        * *//* * General chunk routines                                                 * *//* *                                                                        * *//* ************************************************************************** */void mng_add_chunk (mng_datap  pData,                    mng_chunkp pChunk){  if (!pData->pFirstchunk)             /* list is still empty ? */  {    pData->pFirstchunk      = pChunk;  /* then this becomes the first */    #ifdef MNG_SUPPORT_WRITE    if (!pData->iFirstchunkadded)    {      pData->iFirstchunkadded = ((mng_chunk_headerp)pChunk)->iChunkname;#endif      if (((mng_chunk_headerp)pChunk)->iChunkname == MNG_UINT_IHDR)        pData->eImagetype     = mng_it_png;      else#ifdef MNG_INCLUDE_JNG      if (((mng_chunk_headerp)pChunk)->iChunkname == MNG_UINT_JHDR)        pData->eImagetype     = mng_it_jng;      else#endif        pData->eImagetype     = mng_it_mng;      pData->eSigtype         = pData->eImagetype;#ifdef MNG_SUPPORT_WRITE    }#endif  }  else  {                                    /* else we make appropriate links */    ((mng_chunk_headerp)pChunk)->pPrev = pData->pLastchunk;    ((mng_chunk_headerp)pData->pLastchunk)->pNext = pChunk;  }  pData->pLastchunk = pChunk;          /* and it's always the last */  return;}/* ************************************************************************** *//* *                                                                        * *//* * Chunk specific initialization routines                                 * *//* *                                                                        * *//* ************************************************************************** */#ifdef MNG_OPTIMIZE_CHUNKINITFREEINIT_CHUNK_HDR (mng_init_general){  MNG_ALLOC (pData, *ppChunk, ((mng_chunk_headerp)pHeader)->iChunksize);  MNG_COPY (*ppChunk, pHeader, sizeof (mng_chunk_header));  return MNG_NOERROR;}#else /* MNG_OPTIMIZE_CHUNKINITFREE *//* ************************************************************************** */INIT_CHUNK_HDR (mng_init_ihdr){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_IHDR, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_ihdr));  ((mng_ihdrp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_IHDR, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */INIT_CHUNK_HDR (mng_init_plte){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_PLTE, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_plte));  ((mng_pltep)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_PLTE, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */INIT_CHUNK_HDR (mng_init_idat){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_IDAT, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_idat));  ((mng_idatp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_IDAT, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */INIT_CHUNK_HDR (mng_init_iend){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_IEND, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_iend));  ((mng_iendp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_IEND, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */INIT_CHUNK_HDR (mng_init_trns){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_TRNS, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_trns));  ((mng_trnsp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_TRNS, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_gAMAINIT_CHUNK_HDR (mng_init_gama){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_GAMA, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_gama));  ((mng_gamap)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_GAMA, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_cHRMINIT_CHUNK_HDR (mng_init_chrm){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_CHRM, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_chrm));  ((mng_chrmp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_CHRM, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_sRGBINIT_CHUNK_HDR (mng_init_srgb){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_SRGB, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_srgb));  ((mng_srgbp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_SRGB, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_iCCPINIT_CHUNK_HDR (mng_init_iccp){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_ICCP, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_iccp));  ((mng_iccpp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_ICCP, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_tEXtINIT_CHUNK_HDR (mng_init_text){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_TEXT, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_text));  ((mng_textp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_TEXT, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_zTXtINIT_CHUNK_HDR (mng_init_ztxt){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_ZTXT, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_ztxt));  ((mng_ztxtp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_ZTXT, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_iTXtINIT_CHUNK_HDR (mng_init_itxt){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_ITXT, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_itxt));  ((mng_itxtp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_ITXT, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_bKGDINIT_CHUNK_HDR (mng_init_bkgd){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_BKGD, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_bkgd));  ((mng_bkgdp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_BKGD, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_pHYsINIT_CHUNK_HDR (mng_init_phys){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_PHYS, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_phys));  ((mng_physp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_PHYS, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_sBITINIT_CHUNK_HDR (mng_init_sbit){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_SBIT, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_sbit));  ((mng_sbitp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_SBIT, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_sPLTINIT_CHUNK_HDR (mng_init_splt){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_SPLT, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_splt));  ((mng_spltp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_SPLT, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_hISTINIT_CHUNK_HDR (mng_init_hist){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_HIST, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_hist));  ((mng_histp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_HIST, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */#ifndef MNG_SKIPCHUNK_tIMEINIT_CHUNK_HDR (mng_init_time){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_TIME, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_time));  ((mng_timep)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_TIME, MNG_LC_END);#endif  return MNG_NOERROR;}#endif/* ************************************************************************** */INIT_CHUNK_HDR (mng_init_mhdr){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_MHDR, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_mhdr));  ((mng_mhdrp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_MHDR, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */INIT_CHUNK_HDR (mng_init_mend){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INIT_MEND, MNG_LC_START);#endif  MNG_ALLOC (pData, *ppChunk, sizeof (mng_mend));  ((mng_mendp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -