📄 libmng_chunk_prc.c
字号:
/* ************************************************************************** *//* * For conditions of distribution and use, * *//* * see copyright notice in libmng.h * *//* ************************************************************************** *//* * * *//* * project : libmng * *//* * file : libmng_chunk_prc.c copyright (c) 2000 G.Juyn * *//* * version : 1.0.0 * *//* * * *//* * purpose : Chunk initialization & cleanup (implementation) * *//* * * *//* * author : G.Juyn * *//* * web : http://www.3-t.com * *//* * email : mailto:info@3-t.com * *//* * * *//* * 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 * *//* * * *//* ************************************************************************** */#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 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 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; } 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 * *//* * * *//* ************************************************************************** */INIT_CHUNK_HDR (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 (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 (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 (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 (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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;}/* ************************************************************************** */INIT_CHUNK_HDR (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 (init_mend){#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_MEND, MNG_LC_START)#endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_mend)) ((mng_mendp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_MEND, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */INIT_CHUNK_HDR (init_loop){#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_LOOP, MNG_LC_START)#endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_loop)) ((mng_loopp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_LOOP, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */INIT_CHUNK_HDR (init_endl){#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ENDL, MNG_LC_START)#endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_endl)) ((mng_endlp)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_ENDL, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */INIT_CHUNK_HDR (init_defi){#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DEFI, MNG_LC_START)#endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_defi)) ((mng_defip)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_DEFI, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */INIT_CHUNK_HDR (init_basi){#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_BASI, MNG_LC_START)#endif MNG_ALLOC (pData, *ppChunk, sizeof (mng_basi)) ((mng_basip)*ppChunk)->sHeader = *((mng_chunk_headerp)pHeader);#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INIT_BASI, MNG_LC_END)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -