1 /* ************************************************************************** */ 2 /* * For conditions of distribution and use, * */ 3 /* * see copyright notice in libmng.h * */ 4 /* ************************************************************************** */ 5 /* * * */ 6 /* * project : libmng * */ 7 /* * file : libmng_chunk_io.h copyright (c) 2000-2007 G.Juyn * */ 8 /* * version : 1.0.109 * */ 9 /* * * */ 10 /* * purpose : Chunk I/O routines (definition) * */ 11 /* * * */ 12 /* * author : G.Juyn * */ 13 /* * * */ 14 /* * comment : Definition of the chunk input/output routines * */ 15 /* * * */ 16 /* * changes : 0.5.1 - 05/04/2000 - G.Juyn * */ 17 /* * - changed CRC initialization to use dynamic structure * */ 18 /* * (wasn't thread-safe the old way !) * */ 19 /* * 0.5.1 - 05/08/2000 - G.Juyn * */ 20 /* * - changed write routines definition * */ 21 /* * - changed strict-ANSI stuff * */ 22 /* * * */ 23 /* * 0.9.2 - 08/05/2000 - G.Juyn * */ 24 /* * - changed file-prefixes * */ 25 /* * * */ 26 /* * 0.9.3 - 08/26/2000 - G.Juyn * */ 27 /* * - added MAGN chunk * */ 28 /* * 0.9.3 - 10/16/2000 - G.Juyn * */ 29 /* * - added support for JDAA * */ 30 /* * * */ 31 /* * 1.0.5 - 08/19/2002 - G.Juyn * */ 32 /* * - B597134 - libmng pollutes the linker namespace * */ 33 /* * 1.0.5 - 09/14/2002 - G.Juyn * */ 34 /* * - added event handling for dynamic MNG * */ 35 /* * * */ 36 /* * 1.0.6 - 07/07/2003 - G.R-P * */ 37 /* * - added SKIP_CHUNK and NO_DELTA_PNG support * */ 38 /* * 1.0.6 - 07/29/2003 - G.R-P * */ 39 /* * - added conditionals around PAST chunk support * */ 40 /* * * */ 41 /* * 1.0.7 - 03/24/2004 - G.R-P * */ 42 /* * - fixed SKIPCHUNK_itXT and SKIPCHUNK_ztXT typos * */ 43 /* * * */ 44 /* * 1.0.9 - 12/07/2004 - G.Juyn * */ 45 /* * - added conditional MNG_OPTIMIZE_CHUNKREADER * */ 46 /* * * */ 47 /* * 1.0.10 - 04/08/2007 - G.Juyn * */ 48 /* * - added support for mPNG proposal * */ 49 /* * 1.0.10 - 04/12/2007 - G.Juyn * */ 50 /* * - added support for ANG proposal * */ 51 /* * * */ 52 /* ************************************************************************** */ 53 54 #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI) 55 #pragma option -A /* force ANSI-C */ 56 #endif 57 58 #ifndef _libmng_chunk_io_h_ 59 #define _libmng_chunk_io_h_ 60 61 /* ************************************************************************** */ 62 63 mng_uint32 mng_crc (mng_datap pData, 64 mng_uint8p buf, 65 mng_int32 len); 66 67 /* ************************************************************************** */ 68 69 #ifdef MNG_INCLUDE_READ_PROCS 70 71 /* ************************************************************************** */ 72 73 mng_retcode mng_inflate_buffer (mng_datap pData, 74 mng_uint8p pInbuf, 75 mng_uint32 iInsize, 76 mng_uint8p *pOutbuf, 77 mng_uint32 *iOutsize, 78 mng_uint32 *iRealsize); 79 80 /* ************************************************************************** */ 81 82 #define READ_CHUNK(n) mng_retcode n (mng_datap pData, \ 83 mng_chunkp pHeader, \ 84 mng_uint32 iRawlen, \ 85 mng_uint8p pRawdata, \ 86 mng_chunkp* ppChunk) 87 88 #ifdef MNG_OPTIMIZE_CHUNKREADER 89 READ_CHUNK (mng_read_general) ; 90 #endif 91 92 READ_CHUNK (mng_read_ihdr) ; 93 READ_CHUNK (mng_read_plte) ; 94 READ_CHUNK (mng_read_idat) ; 95 READ_CHUNK (mng_read_iend) ; 96 READ_CHUNK (mng_read_trns) ; 97 READ_CHUNK (mng_read_gama) ; 98 READ_CHUNK (mng_read_chrm) ; 99 READ_CHUNK (mng_read_srgb) ; 100 #ifndef MNG_SKIPCHUNK_iCCP 101 READ_CHUNK (mng_read_iccp) ; 102 #endif 103 #ifndef MNG_SKIPCHUNK_tEXt 104 READ_CHUNK (mng_read_text) ; 105 #endif 106 #ifndef MNG_SKIPCHUNK_zTXt 107 READ_CHUNK (mng_read_ztxt) ; 108 #endif 109 #ifndef MNG_SKIPCHUNK_iTXt 110 READ_CHUNK (mng_read_itxt) ; 111 #endif 112 #ifndef MNG_SKIPCHUNK_bKGD 113 READ_CHUNK (mng_read_bkgd) ; 114 #endif 115 #ifndef MNG_SKIPCHUNK_pHYs 116 READ_CHUNK (mng_read_phys) ; 117 #endif 118 #ifndef MNG_SKIPCHUNK_sBIT 119 READ_CHUNK (mng_read_sbit) ; 120 #endif 121 #ifndef MNG_SKIPCHUNK_sPLT 122 READ_CHUNK (mng_read_splt) ; 123 #endif 124 #ifndef MNG_SKIPCHUNK_hIST 125 READ_CHUNK (mng_read_hist) ; 126 #endif 127 #ifndef MNG_SKIPCHUNK_tIME 128 READ_CHUNK (mng_read_time) ; 129 #endif 130 READ_CHUNK (mng_read_mhdr) ; 131 READ_CHUNK (mng_read_mend) ; 132 READ_CHUNK (mng_read_loop) ; 133 READ_CHUNK (mng_read_endl) ; 134 READ_CHUNK (mng_read_defi) ; 135 READ_CHUNK (mng_read_basi) ; 136 READ_CHUNK (mng_read_clon) ; 137 #ifndef MNG_SKIPCHUNK_PAST 138 READ_CHUNK (mng_read_past) ; 139 #endif 140 READ_CHUNK (mng_read_disc) ; 141 READ_CHUNK (mng_read_back) ; 142 READ_CHUNK (mng_read_fram) ; 143 READ_CHUNK (mng_read_move) ; 144 READ_CHUNK (mng_read_clip) ; 145 READ_CHUNK (mng_read_show) ; 146 READ_CHUNK (mng_read_term) ; 147 READ_CHUNK (mng_read_save) ; 148 READ_CHUNK (mng_read_seek) ; 149 #ifndef MNG_SKIPCHUNK_eXPI 150 READ_CHUNK (mng_read_expi) ; 151 #endif 152 #ifndef MNG_SKIPCHUNK_fPRI 153 READ_CHUNK (mng_read_fpri) ; 154 #endif 155 #ifndef MNG_SKIPCHUNK_pHYg 156 READ_CHUNK (mng_read_phyg) ; 157 #endif 158 #ifdef MNG_INCLUDE_JNG 159 READ_CHUNK (mng_read_jhdr) ; 160 READ_CHUNK (mng_read_jdaa) ; 161 READ_CHUNK (mng_read_jdat) ; 162 READ_CHUNK (mng_read_jsep) ; 163 #endif 164 #ifndef MNG_NO_DELTA_PNG 165 READ_CHUNK (mng_read_dhdr) ; 166 READ_CHUNK (mng_read_prom) ; 167 READ_CHUNK (mng_read_ipng) ; 168 READ_CHUNK (mng_read_pplt) ; 169 #ifdef MNG_INCLUDE_JNG 170 READ_CHUNK (mng_read_ijng) ; 171 #endif 172 READ_CHUNK (mng_read_drop) ; 173 READ_CHUNK (mng_read_dbyk) ; 174 READ_CHUNK (mng_read_ordr) ; 175 #endif 176 READ_CHUNK (mng_read_magn) ; 177 #ifndef MNG_SKIPCHUNK_nEED 178 READ_CHUNK (mng_read_need) ; 179 #endif 180 #ifdef MNG_INCLUDE_MPNG_PROPOSAL 181 READ_CHUNK (mng_read_mpng) ; 182 #endif 183 #ifndef MNG_SKIPCHUNK_evNT 184 READ_CHUNK (mng_read_evnt) ; 185 #endif 186 READ_CHUNK (mng_read_unknown) ; 187 188 /* ************************************************************************** */ 189 190 #else /* MNG_INCLUDE_READ_PROCS */ 191 #define mng_read_ihdr 0 192 #define mng_read_plte 0 193 #define mng_read_idat 0 194 #define mng_read_iend 0 195 #define mng_read_trns 0 196 #define mng_read_gama 0 197 #define mng_read_chrm 0 198 #define mng_read_srgb 0 199 #define mng_read_iccp 0 200 #define mng_read_text 0 201 #define mng_read_ztxt 0 202 #define mng_read_itxt 0 203 #define mng_read_bkgd 0 204 #define mng_read_phys 0 205 #define mng_read_sbit 0 206 #define mng_read_splt 0 207 #define mng_read_hist 0 208 #define mng_read_time 0 209 #define mng_read_mhdr 0 210 #define mng_read_mend 0 211 #define mng_read_loop 0 212 #define mng_read_endl 0 213 #define mng_read_defi 0 214 #define mng_read_basi 0 215 #define mng_read_clon 0 216 #ifndef MNG_SKIPCHUNK_PAST 217 #define mng_read_past 0 218 #endif 219 #define mng_read_disc 0 220 #define mng_read_back 0 221 #define mng_read_fram 0 222 #define mng_read_move 0 223 #define mng_read_clip 0 224 #define mng_read_show 0 225 #define mng_read_term 0 226 #define mng_read_save 0 227 #define mng_read_seek 0 228 #define mng_read_expi 0 229 #define mng_read_fpri 0 230 #define mng_read_phyg 0 231 #ifdef MNG_INCLUDE_JNG 232 #define mng_read_jhdr 0 233 #define mng_read_jdaa 0 234 #define mng_read_jdat 0 235 #define mng_read_jsep 0 236 #endif 237 #ifndef MNG_NO_DELTA_PNG 238 #define mng_read_dhdr 0 239 #define mng_read_prom 0 240 #define mng_read_ipng 0 241 #define mng_read_pplt 0 242 #ifdef MNG_INCLUDE_JNG 243 #define mng_read_ijng 0 244 #endif 245 #define mng_read_drop 0 246 #define mng_read_dbyk 0 247 #define mng_read_ordr 0 248 #endif 249 #define mng_read_magn 0 250 #define mng_read_need 0 251 #ifdef MNG_INCLUDE_MPNG_PROPOSAL 252 #define mng_read_mpng 0 253 #endif 254 #define mng_read_evnt 0 255 #define mng_read_unknown 0 256 #endif /* MNG_INCLUDE_READ_PROCS */ 257 258 /* ************************************************************************** */ 259 260 #ifdef MNG_INCLUDE_WRITE_PROCS 261 262 #define WRITE_CHUNK(n) mng_retcode n (mng_datap pData, \ 263 mng_chunkp pChunk) 264 265 WRITE_CHUNK (mng_write_ihdr) ; 266 WRITE_CHUNK (mng_write_plte) ; 267 WRITE_CHUNK (mng_write_idat) ; 268 WRITE_CHUNK (mng_write_iend) ; 269 WRITE_CHUNK (mng_write_trns) ; 270 WRITE_CHUNK (mng_write_gama) ; 271 WRITE_CHUNK (mng_write_chrm) ; 272 WRITE_CHUNK (mng_write_srgb) ; 273 WRITE_CHUNK (mng_write_iccp) ; 274 WRITE_CHUNK (mng_write_text) ; 275 WRITE_CHUNK (mng_write_ztxt) ; 276 WRITE_CHUNK (mng_write_itxt) ; 277 WRITE_CHUNK (mng_write_bkgd) ; 278 WRITE_CHUNK (mng_write_phys) ; 279 WRITE_CHUNK (mng_write_sbit) ; 280 WRITE_CHUNK (mng_write_splt) ; 281 WRITE_CHUNK (mng_write_hist) ; 282 WRITE_CHUNK (mng_write_time) ; 283 WRITE_CHUNK (mng_write_mhdr) ; 284 WRITE_CHUNK (mng_write_mend) ; 285 WRITE_CHUNK (mng_write_loop) ; 286 WRITE_CHUNK (mng_write_endl) ; 287 WRITE_CHUNK (mng_write_defi) ; 288 WRITE_CHUNK (mng_write_basi) ; 289 WRITE_CHUNK (mng_write_clon) ; 290 #ifndef MNG_SKIPCHUNK_PAST 291 WRITE_CHUNK (mng_write_past) ; 292 #endif 293 WRITE_CHUNK (mng_write_disc) ; 294 WRITE_CHUNK (mng_write_back) ; 295 WRITE_CHUNK (mng_write_fram) ; 296 WRITE_CHUNK (mng_write_move) ; 297 WRITE_CHUNK (mng_write_clip) ; 298 WRITE_CHUNK (mng_write_show) ; 299 WRITE_CHUNK (mng_write_term) ; 300 WRITE_CHUNK (mng_write_save) ; 301 WRITE_CHUNK (mng_write_seek) ; 302 WRITE_CHUNK (mng_write_expi) ; 303 WRITE_CHUNK (mng_write_fpri) ; 304 WRITE_CHUNK (mng_write_phyg) ; 305 #ifdef MNG_INCLUDE_JNG 306 WRITE_CHUNK (mng_write_jhdr) ; 307 WRITE_CHUNK (mng_write_jdaa) ; 308 WRITE_CHUNK (mng_write_jdat) ; 309 WRITE_CHUNK (mng_write_jsep) ; 310 #endif 311 #ifndef MNG_NO_DELTA_PNG 312 WRITE_CHUNK (mng_write_dhdr) ; 313 WRITE_CHUNK (mng_write_prom) ; 314 WRITE_CHUNK (mng_write_ipng) ; 315 WRITE_CHUNK (mng_write_pplt) ; 316 #ifdef MNG_INCLUDE_JNG 317 WRITE_CHUNK (mng_write_ijng) ; 318 #endif 319 WRITE_CHUNK (mng_write_drop) ; 320 WRITE_CHUNK (mng_write_dbyk) ; 321 WRITE_CHUNK (mng_write_ordr) ; 322 #endif 323 WRITE_CHUNK (mng_write_magn) ; 324 WRITE_CHUNK (mng_write_need) ; 325 #ifdef MNG_INCLUDE_MPNG_PROPOSAL 326 WRITE_CHUNK (mng_write_mpng) ; 327 #endif 328 #ifdef MNG_INCLUDE_ANG_PROPOSAL 329 WRITE_CHUNK (mng_write_ahdr) ; 330 WRITE_CHUNK (mng_write_adat) ; 331 #endif 332 WRITE_CHUNK (mng_write_evnt) ; 333 WRITE_CHUNK (mng_write_unknown) ; 334 335 /* ************************************************************************** */ 336 337 #else /* MNG_INCLUDE_WRITE_PROCS */ 338 #define mng_write_ihdr 0 339 #define mng_write_plte 0 340 #define mng_write_idat 0 341 #define mng_write_iend 0 342 #define mng_write_trns 0 343 #define mng_write_gama 0 344 #define mng_write_chrm 0 345 #define mng_write_srgb 0 346 #define mng_write_iccp 0 347 #define mng_write_text 0 348 #define mng_write_ztxt 0 349 #define mng_write_itxt 0 350 #define mng_write_bkgd 0 351 #define mng_write_phys 0 352 #define mng_write_sbit 0 353 #define mng_write_splt 0 354 #define mng_write_hist 0 355 #define mng_write_time 0 356 #define mng_write_mhdr 0 357 #define mng_write_mend 0 358 #define mng_write_loop 0 359 #define mng_write_endl 0 360 #define mng_write_defi 0 361 #define mng_write_basi 0 362 #define mng_write_clon 0 363 #ifndef MNG_SKIPCHUNK_PAST 364 #define mng_write_past 0 365 #endif 366 #define mng_write_disc 0 367 #define mng_write_back 0 368 #define mng_write_fram 0 369 #define mng_write_move 0 370 #define mng_write_clip 0 371 #define mng_write_show 0 372 #define mng_write_term 0 373 #define mng_write_save 0 374 #define mng_write_seek 0 375 #define mng_write_expi 0 376 #define mng_write_fpri 0 377 #define mng_write_phyg 0 378 #ifdef MNG_INCLUDE_JNG 379 #define mng_write_jhdr 0 380 #define mng_write_jdaa 0 381 #define mng_write_jdat 0 382 #define mng_write_jsep 0 383 #endif 384 #ifndef MNG_NO_DELTA_PNG 385 #define mng_write_dhdr 0 386 #define mng_write_prom 0 387 #define mng_write_ipng 0 388 #define mng_write_pplt 0 389 #ifdef MNG_INCLUDE_JNG 390 #define mng_write_ijng 0 391 #endif 392 #define mng_write_drop 0 393 #define mng_write_dbyk 0 394 #define mng_write_ordr 0 395 #endif 396 #define mng_write_magn 0 397 #define mng_write_need 0 398 #ifdef MNG_INCLUDE_MPNG_PROPOSAL 399 #define mng_write_mpng 0 400 #endif 401 #ifdef MNG_INCLUDE_ANG_PROPOSAL 402 #define mng_write_adat 0 403 #define mng_write_ahdr 0 404 #endif 405 #define mng_write_evnt 0 406 #define mng_write_unknown 0 407 #endif /* MNG_INCLUDE_WRITE_PROCS */ 408 409 /* ************************************************************************** */ 410 411 #endif /* _libmng_chunk_io_h_ */ 412 413 /* ************************************************************************** */ 414 /* * end of file * */ 415 /* ************************************************************************** */ 416