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