1 /* ************************************************************************** */
2 /* *             For conditions of distribution and use,                    * */
3 /* *                see copyright notice in libmng.h                        * */
4 /* ************************************************************************** */
5 /* *                                                                        * */
6 /* * project   : libmng                                                     * */
7 /* * file      : libmng_chunks.h           copyright (c) 2000-2007 G.Juyn   * */
8 /* * version   : 1.0.10                                                     * */
9 /* *                                                                        * */
10 /* * purpose   : Chunk structures (definition)                              * */
11 /* *                                                                        * */
12 /* * author    : G.Juyn                                                     * */
13 /* *                                                                        * */
14 /* * comment   : Definition of known chunk structures                       * */
15 /* *                                                                        * */
16 /* * changes   : 0.5.1 - 05/04/2000 - G.Juyn                                * */
17 /* *             - put in some extra comments                               * */
18 /* *             0.5.1 - 05/06/2000 - G.Juyn                                * */
19 /* *             - fixed layout for sBIT, PPLT                              * */
20 /* *             0.5.1 - 05/08/2000 - G.Juyn                                * */
21 /* *             - changed write callback definition                        * */
22 /* *             - changed strict-ANSI stuff                                * */
23 /* *             0.5.1 - 05/11/2000 - G.Juyn                                * */
24 /* *             - fixed layout for PPLT again (missed deltatype ?!?)       * */
25 /* *                                                                        * */
26 /* *             0.5.2 - 05/31/2000 - G.Juyn                                * */
27 /* *             - removed useless definition (contributed by Tim Rowley)   * */
28 /* *             0.5.2 - 06/03/2000 - G.Juyn                                * */
29 /* *             - fixed makeup for Linux gcc compile                       * */
30 /* *                                                                        * */
31 /* *             0.9.2 - 08/05/2000 - G.Juyn                                * */
32 /* *             - changed file-prefixes                                    * */
33 /* *                                                                        * */
34 /* *             0.9.3 - 08/26/2000 - G.Juyn                                * */
35 /* *             - added MAGN chunk                                         * */
36 /* *             0.9.3 - 09/10/2000 - G.Juyn                                * */
37 /* *             - fixed DEFI behavior                                      * */
38 /* *             0.9.3 - 10/16/2000 - G.Juyn                                * */
39 /* *             - added JDAA chunk                                         * */
40 /* *                                                                        * */
41 /* *             1.0.5 - 08/19/2002 - G.Juyn                                * */
42 /* *             - added HLAPI function to copy chunks                      * */
43 /* *             1.0.5 - 09/14/2002 - G.Juyn                                * */
44 /* *             - added event handling for dynamic MNG                     * */
45 /* *             1.0.5 - 11/28/2002 - G.Juyn                                * */
46 /* *             - fixed definition of iMethodX/Y for MAGN chunk            * */
47 /* *                                                                        * */
48 /* *             1.0.6 - 05/25/2003 - G.R-P                                 * */
49 /* *               added MNG_SKIPCHUNK_cHNK footprint optimizations         * */
50 /* *             1.0.6 - 07/29/2003 - G.R-P                                 * */
51 /* *             - added conditionals around PAST chunk support             * */
52 /* *                                                                        * */
53 /* *             1.0.7 - 03/24/2004 - G.R-P                                 * */
54 /* *             - added conditional around MNG_NO_DELTA_PNG support        * */
55 /* *                                                                        * */
56 /* *             1.0.9 - 12/05/2004 - G.Juyn                                * */
57 /* *             - added conditional MNG_OPTIMIZE_CHUNKINITFREE             * */
58 /* *             1.0.9 - 12/06/2004 - G.Juyn                                * */
59 /* *             - added conditional MNG_OPTIMIZE_CHUNKREADER               * */
60 /* *                                                                        * */
61 /* *             1.0.10 - 04/08/2007 - G.Juyn                               * */
62 /* *             - added support for mPNG proposal                          * */
63 /* *             1.0.10 - 04/12/2007 - G.Juyn                               * */
64 /* *             - added support for ANG proposal                           * */
65 /* *                                                                        * */
66 /* ************************************************************************** */
67 
68 #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI)
69 #pragma option -A                      /* force ANSI-C */
70 #endif
71 
72 #ifndef _libmng_chunks_h_
73 #define _libmng_chunks_h_
74 
75 /* ************************************************************************** */
76 
77 #ifdef MNG_SWAP_ENDIAN
78 #define PNG_SIG 0x474e5089L
79 #define JNG_SIG 0x474e4a8bL
80 #define MNG_SIG 0x474e4d8aL
81 #define POST_SIG 0x0a1a0a0dL
82 #else
83 #define PNG_SIG 0x89504e47L
84 #define JNG_SIG 0x8b4a4e47L
85 #define MNG_SIG 0x8a4d4e47L
86 #define POST_SIG 0x0d0a1a0aL
87 #endif
88 
89 /* ************************************************************************** */
90 
91 #ifdef MNG_OPTIMIZE_CHUNKREADER
92 
93 typedef mng_retcode (*mng_f_specialfunc)  (mng_datap   pData,
94                                            mng_chunkp  pChunk,
95                                            mng_uint32* piRawlen,
96                                            mng_uint8p* ppRawdata);
97 
98 typedef mng_retcode (*mng_c_specialfunc)  (mng_datap  pData,
99                                            mng_chunkp pChunk);
100 
101 #define MNG_FIELD_OPTIONAL    0x0001
102 #define MNG_FIELD_TERMINATOR  0x0002
103 #define MNG_FIELD_REPETITIVE  0x0004
104 #define MNG_FIELD_DEFLATED    0x0008
105 #define MNG_FIELD_IFIMGTYPES  0x01F0   /* image-type mask */
106 #define MNG_FIELD_IFIMGTYPE0  0x0010
107 #define MNG_FIELD_IFIMGTYPE2  0x0020
108 #define MNG_FIELD_IFIMGTYPE3  0x0040
109 #define MNG_FIELD_IFIMGTYPE4  0x0080
110 #define MNG_FIELD_IFIMGTYPE6  0x0100
111 #define MNG_FIELD_PUTIMGTYPE  0x0200
112 #define MNG_FIELD_NOHIGHBIT   0x0400
113 #define MNG_FIELD_GROUPMASK   0x7000
114 #define MNG_FIELD_GROUP1      0x1000
115 #define MNG_FIELD_GROUP2      0x2000
116 #define MNG_FIELD_GROUP3      0x3000
117 #define MNG_FIELD_GROUP4      0x4000
118 #define MNG_FIELD_GROUP5      0x5000
119 #define MNG_FIELD_GROUP6      0x6000
120 #define MNG_FIELD_GROUP7      0x7000
121 #define MNG_FIELD_INT         0x8000
122 
123 typedef struct {                       /* chunk-field descriptor */
124            mng_f_specialfunc pSpecialfunc;
125            mng_uint16        iFlags;
126            mng_uint16        iMinvalue;
127            mng_uint16        iMaxvalue;
128            mng_uint16        iLengthmin;
129            mng_uint16        iLengthmax;
130            mng_uint16        iOffsetchunk;
131            mng_uint16        iOffsetchunkind;
132            mng_uint16        iOffsetchunklen;
133         } mng_field_descriptor;
134 typedef mng_field_descriptor * mng_field_descp;
135 
136 #define MNG_DESCR_GLOBAL      0x0001
137 #define MNG_DESCR_EMPTY       0x0002
138 #define MNG_DESCR_EMPTYEMBED  0x0006
139 #define MNG_DESCR_EMPTYGLOBAL 0x000A
140 
141 #define MNG_DESCR_GenHDR      0x0001   /* IHDR/JHDR/BASI/DHDR */
142 #define MNG_DESCR_JngHDR      0x0002   /* JHDR/DHDR */
143 #define MNG_DESCR_MHDR        0x0004
144 #define MNG_DESCR_IHDR        0x0008
145 #define MNG_DESCR_JHDR        0x0010
146 #define MNG_DESCR_DHDR        0x0020
147 #define MNG_DESCR_LOOP        0x0040
148 #define MNG_DESCR_PLTE        0x0080
149 #define MNG_DESCR_SAVE        0x0100
150 
151 #define MNG_DESCR_NOIHDR      0x0001
152 #define MNG_DESCR_NOJHDR      0x0002
153 #define MNG_DESCR_NOBASI      0x0004
154 #define MNG_DESCR_NODHDR      0x0008
155 #define MNG_DESCR_NOIDAT      0x0010
156 #define MNG_DESCR_NOJDAT      0x0020
157 #define MNG_DESCR_NOJDAA      0x0040
158 #define MNG_DESCR_NOPLTE      0x0080
159 #define MNG_DESCR_NOJSEP      0x0100
160 #define MNG_DESCR_NOMHDR      0x0200
161 #define MNG_DESCR_NOTERM      0x0400
162 #define MNG_DESCR_NOLOOP      0x0800
163 #define MNG_DESCR_NOSAVE      0x1000
164 
165 typedef struct {                       /* chunk descriptor */
166            mng_imgtype       eImgtype;
167            mng_createobjtype eCreateobject;
168            mng_uint16        iObjsize;
169            mng_uint16        iOffsetempty;
170            mng_ptr           pObjcleanup;
171            mng_ptr           pObjprocess;
172            mng_c_specialfunc pSpecialfunc;
173            mng_field_descp   pFielddesc;
174            mng_uint16        iFielddesc;
175            mng_uint16        iAllowed;
176            mng_uint16        iMusthaves;
177            mng_uint16        iMustNOThaves;
178         } mng_chunk_descriptor;
179 typedef mng_chunk_descriptor * mng_chunk_descp;
180 
181 #endif /* MNG_OPTIMIZE_CHUNKREADER */
182 
183 /* ************************************************************************** */
184 
185 typedef mng_retcode (*mng_createchunk)  (mng_datap   pData,
186                                          mng_chunkp  pHeader,
187                                          mng_chunkp* ppChunk);
188 
189 typedef mng_retcode (*mng_cleanupchunk) (mng_datap   pData,
190                                          mng_chunkp  pHeader);
191 
192 typedef mng_retcode (*mng_readchunk)    (mng_datap   pData,
193                                          mng_chunkp  pHeader,
194                                          mng_uint32  iRawlen,
195                                          mng_uint8p  pRawdata,
196                                          mng_chunkp* pChunk);
197 
198 typedef mng_retcode (*mng_writechunk)   (mng_datap   pData,
199                                          mng_chunkp  pChunk);
200 
201 typedef mng_retcode (*mng_assignchunk)  (mng_datap   pData,
202                                          mng_chunkp  pChunkto,
203                                          mng_chunkp  pChunkfrom);
204 
205 /* ************************************************************************** */
206 
207 typedef struct {                       /* generic header */
208            mng_chunkid       iChunkname;
209            mng_createchunk   fCreate;
210            mng_cleanupchunk  fCleanup;
211            mng_readchunk     fRead;
212            mng_writechunk    fWrite;
213            mng_assignchunk   fAssign;
214            mng_chunkp        pNext;    /* for double-linked list */
215            mng_chunkp        pPrev;
216 #ifdef MNG_OPTIMIZE_CHUNKINITFREE
217            mng_size_t        iChunksize;
218 #endif
219 #ifdef MNG_OPTIMIZE_CHUNKREADER
220            mng_chunk_descp   pChunkdescr;
221 #endif
222         } mng_chunk_header;
223 typedef mng_chunk_header * mng_chunk_headerp;
224 
225 /* ************************************************************************** */
226 
227 typedef struct {                       /* IHDR */
228            mng_chunk_header  sHeader;
229            mng_uint32        iWidth;
230            mng_uint32        iHeight;
231            mng_uint8         iBitdepth;
232            mng_uint8         iColortype;
233            mng_uint8         iCompression;
234            mng_uint8         iFilter;
235            mng_uint8         iInterlace;
236         } mng_ihdr;
237 typedef mng_ihdr * mng_ihdrp;
238 
239 /* ************************************************************************** */
240 
241 typedef struct {                       /* PLTE */
242            mng_chunk_header  sHeader;
243            mng_bool          bEmpty;
244            mng_uint32        iEntrycount;
245            mng_rgbpaltab     aEntries;
246         } mng_plte;
247 typedef mng_plte * mng_pltep;
248 
249 /* ************************************************************************** */
250 
251 typedef struct {                       /* IDAT */
252            mng_chunk_header  sHeader;
253            mng_bool          bEmpty;
254            mng_uint32        iDatasize;
255            mng_ptr           pData;
256         } mng_idat;
257 typedef mng_idat * mng_idatp;
258 
259 /* ************************************************************************** */
260 
261 typedef struct {                       /* IEND */
262            mng_chunk_header  sHeader;
263         } mng_iend;
264 typedef mng_iend * mng_iendp;
265 
266 /* ************************************************************************** */
267 
268 typedef struct {                       /* tRNS */
269            mng_chunk_header  sHeader;
270            mng_bool          bEmpty;
271            mng_bool          bGlobal;
272            mng_uint8         iType;    /* colortype (0,2,3) */
273            mng_uint32        iCount;
274            mng_uint8arr      aEntries;
275            mng_uint16        iGray;
276            mng_uint16        iRed;
277            mng_uint16        iGreen;
278            mng_uint16        iBlue;
279            mng_uint32        iRawlen;
280            mng_uint8arr      aRawdata;
281         } mng_trns;
282 typedef mng_trns * mng_trnsp;
283 
284 /* ************************************************************************** */
285 
286 typedef struct {                       /* gAMA */
287            mng_chunk_header  sHeader;
288            mng_bool          bEmpty;
289            mng_uint32        iGamma;
290         } mng_gama;
291 typedef mng_gama * mng_gamap;
292 
293 /* ************************************************************************** */
294 
295 #ifndef MNG_SKIPCHUNK_cHRM
296 typedef struct {                       /* cHRM */
297            mng_chunk_header  sHeader;
298            mng_bool          bEmpty;
299            mng_uint32        iWhitepointx;
300            mng_uint32        iWhitepointy;
301            mng_uint32        iRedx;
302            mng_uint32        iRedy;
303            mng_uint32        iGreenx;
304            mng_uint32        iGreeny;
305            mng_uint32        iBluex;
306            mng_uint32        iBluey;
307         } mng_chrm;
308 typedef mng_chrm * mng_chrmp;
309 #endif
310 
311 /* ************************************************************************** */
312 
313 typedef struct {                       /* sRGB */
314            mng_chunk_header  sHeader;
315            mng_bool          bEmpty;
316            mng_uint8         iRenderingintent;
317         } mng_srgb;
318 typedef mng_srgb * mng_srgbp;
319 
320 /* ************************************************************************** */
321 
322 #ifndef MNG_SKIPCHUNK_iCCP
323 typedef struct {                       /* iCCP */
324            mng_chunk_header  sHeader;
325            mng_bool          bEmpty;
326            mng_uint32        iNamesize;
327            mng_pchar         zName;
328            mng_uint8         iCompression;
329            mng_uint32        iProfilesize;
330            mng_ptr           pProfile;
331         } mng_iccp;
332 typedef mng_iccp * mng_iccpp;
333 #endif
334 
335 /* ************************************************************************** */
336 
337 #ifndef MNG_SKIPCHUNK_tEXt
338 typedef struct {                       /* tEXt */
339            mng_chunk_header  sHeader;
340            mng_uint32        iKeywordsize;
341            mng_pchar         zKeyword;
342            mng_uint32        iTextsize;
343            mng_pchar         zText;
344         } mng_text;
345 typedef mng_text * mng_textp;
346 #endif
347 
348 /* ************************************************************************** */
349 
350 #ifndef MNG_SKIPCHUNK_zTXt
351 typedef struct {                       /* zTXt */
352            mng_chunk_header  sHeader;
353            mng_uint32        iKeywordsize;
354            mng_pchar         zKeyword;
355            mng_uint8         iCompression;
356            mng_uint32        iTextsize;
357            mng_pchar         zText;
358         } mng_ztxt;
359 typedef mng_ztxt * mng_ztxtp;
360 #endif
361 
362 /* ************************************************************************** */
363 
364 #ifndef MNG_SKIPCHUNK_iTXt
365 typedef struct {                       /* iTXt */
366            mng_chunk_header  sHeader;
367            mng_uint32        iKeywordsize;
368            mng_pchar         zKeyword;
369            mng_uint8         iCompressionflag;
370            mng_uint8         iCompressionmethod;
371            mng_uint32        iLanguagesize;
372            mng_pchar         zLanguage;
373            mng_uint32        iTranslationsize;
374            mng_pchar         zTranslation;
375            mng_uint32        iTextsize;
376            mng_pchar         zText;
377         } mng_itxt;
378 typedef mng_itxt * mng_itxtp;
379 #endif
380 
381 /* ************************************************************************** */
382 
383 #ifndef MNG_SKIPCHUNK_bKGD
384 typedef struct {                       /* bKGD */
385            mng_chunk_header  sHeader;
386            mng_bool          bEmpty;
387            mng_uint8         iType;    /* 3=indexed, 0=gray, 2=rgb */
388            mng_uint8         iIndex;
389            mng_uint16        iGray;
390            mng_uint16        iRed;
391            mng_uint16        iGreen;
392            mng_uint16        iBlue;
393         } mng_bkgd;
394 typedef mng_bkgd * mng_bkgdp;
395 #endif
396 
397 /* ************************************************************************** */
398 
399 #ifndef MNG_SKIPCHUNK_pHYs
400 typedef struct {                       /* pHYs */
401            mng_chunk_header  sHeader;
402            mng_bool          bEmpty;
403            mng_uint32        iSizex;
404            mng_uint32        iSizey;
405            mng_uint8         iUnit;
406         } mng_phys;
407 typedef mng_phys * mng_physp;
408 #endif
409 
410 /* ************************************************************************** */
411 #ifndef MNG_SKIPCHUNK_sBIT
412 
413 typedef struct {                       /* sBIT */
414            mng_chunk_header  sHeader;
415            mng_bool          bEmpty;
416            mng_uint8         iType;    /* colortype (0,2,3,4,6,10,12,14,16) */
417            mng_uint8arr4     aBits;
418         } mng_sbit;
419 typedef mng_sbit * mng_sbitp;
420 #endif
421 
422 /* ************************************************************************** */
423 
424 #ifndef MNG_SKIPCHUNK_sPLT
425 typedef struct {                       /* sPLT */
426            mng_chunk_header  sHeader;
427            mng_bool          bEmpty;
428            mng_uint32        iNamesize;
429            mng_pchar         zName;
430            mng_uint8         iSampledepth;
431            mng_uint32        iEntrycount;
432            mng_ptr           pEntries;
433         } mng_splt;
434 typedef mng_splt * mng_spltp;
435 #endif
436 
437 /* ************************************************************************** */
438 
439 #ifndef MNG_SKIPCHUNK_hIST
440 typedef struct {                       /* hIST */
441            mng_chunk_header  sHeader;
442            mng_uint32        iEntrycount;
443            mng_uint16arr     aEntries;
444         } mng_hist;
445 typedef mng_hist * mng_histp;
446 #endif
447 
448 /* ************************************************************************** */
449 
450 #ifndef MNG_SKIPCHUNK_tIME
451 typedef struct {                       /* tIME */
452            mng_chunk_header  sHeader;
453            mng_uint16        iYear;
454            mng_uint8         iMonth;
455            mng_uint8         iDay;
456            mng_uint8         iHour;
457            mng_uint8         iMinute;
458            mng_uint8         iSecond;
459         } mng_time;
460 typedef mng_time * mng_timep;
461 #endif
462 
463 /* ************************************************************************** */
464 
465 typedef struct {                       /* MHDR */
466            mng_chunk_header  sHeader;
467            mng_uint32        iWidth;
468            mng_uint32        iHeight;
469            mng_uint32        iTicks;
470            mng_uint32        iLayercount;
471            mng_uint32        iFramecount;
472            mng_uint32        iPlaytime;
473            mng_uint32        iSimplicity;
474         } mng_mhdr;
475 typedef mng_mhdr * mng_mhdrp;
476 
477 /* ************************************************************************** */
478 
479 typedef struct {                       /* MEND */
480            mng_chunk_header  sHeader;
481         } mng_mend;
482 typedef mng_mend * mng_mendp;
483 
484 /* ************************************************************************** */
485 
486 typedef struct {                       /* LOOP */
487            mng_chunk_header  sHeader;
488            mng_uint8         iLevel;
489            mng_uint32        iRepeat;
490            mng_uint8         iTermination;
491            mng_uint32        iItermin;
492            mng_uint32        iItermax;
493            mng_uint32        iCount;
494            mng_uint32p       pSignals;
495         } mng_loop;
496 typedef mng_loop * mng_loopp;
497 
498 /* ************************************************************************** */
499 
500 typedef struct {                       /* ENDL */
501            mng_chunk_header  sHeader;
502            mng_uint8         iLevel;
503         } mng_endl;
504 typedef mng_endl * mng_endlp;
505 
506 /* ************************************************************************** */
507 
508 typedef struct {                       /* DEFI */
509            mng_chunk_header  sHeader;
510            mng_uint16        iObjectid;
511            mng_bool          bHasdonotshow;
512            mng_uint8         iDonotshow;
513            mng_bool          bHasconcrete;
514            mng_uint8         iConcrete;
515            mng_bool          bHasloca;
516            mng_int32         iXlocation;
517            mng_int32         iYlocation;
518            mng_bool          bHasclip;
519            mng_int32         iLeftcb;
520            mng_int32         iRightcb;
521            mng_int32         iTopcb;
522            mng_int32         iBottomcb;
523         } mng_defi;
524 typedef mng_defi * mng_defip;
525 
526 /* ************************************************************************** */
527 
528 typedef struct {                       /* BASI */
529            mng_chunk_header  sHeader;
530            mng_uint32        iWidth;
531            mng_uint32        iHeight;
532            mng_uint8         iBitdepth;
533            mng_uint8         iColortype;
534            mng_uint8         iCompression;
535            mng_uint8         iFilter;
536            mng_uint8         iInterlace;
537            mng_uint16        iRed;
538            mng_uint16        iGreen;
539            mng_uint16        iBlue;
540 #ifdef MNG_OPTIMIZE_CHUNKREADER
541            mng_bool          bHasalpha;
542 #endif
543            mng_uint16        iAlpha;
544            mng_uint8         iViewable;
545         } mng_basi;
546 typedef mng_basi * mng_basip;
547 
548 /* ************************************************************************** */
549 
550 typedef struct {                       /* CLON */
551            mng_chunk_header  sHeader;
552            mng_uint16        iSourceid;
553            mng_uint16        iCloneid;
554            mng_uint8         iClonetype;
555 #ifdef MNG_OPTIMIZE_CHUNKREADER
556            mng_bool          bHasdonotshow;
557 #endif
558            mng_uint8         iDonotshow;
559            mng_uint8         iConcrete;
560            mng_bool          bHasloca;
561            mng_uint8         iLocationtype;
562            mng_int32         iLocationx;
563            mng_int32         iLocationy;
564         } mng_clon;
565 typedef mng_clon * mng_clonp;
566 
567 /* ************************************************************************** */
568 
569 #ifndef MNG_SKIPCHUNK_PAST
570 typedef struct {                       /* PAST source */
571            mng_uint16        iSourceid;
572            mng_uint8         iComposition;
573            mng_uint8         iOrientation;
574            mng_uint8         iOffsettype;
575            mng_int32         iOffsetx;
576            mng_int32         iOffsety;
577            mng_uint8         iBoundarytype;
578            mng_int32         iBoundaryl;
579            mng_int32         iBoundaryr;
580            mng_int32         iBoundaryt;
581            mng_int32         iBoundaryb;
582         } mng_past_source;
583 typedef mng_past_source * mng_past_sourcep;
584 
585 typedef struct {                       /* PAST */
586            mng_chunk_header  sHeader;
587            mng_uint16        iDestid;
588            mng_uint8         iTargettype;
589            mng_int32         iTargetx;
590            mng_int32         iTargety;
591            mng_uint32        iCount;
592            mng_past_sourcep  pSources;
593         } mng_past;
594 typedef mng_past * mng_pastp;
595 #endif
596 
597 /* ************************************************************************** */
598 
599 typedef struct {                       /* DISC */
600            mng_chunk_header  sHeader;
601            mng_uint32        iCount;
602            mng_uint16p       pObjectids;
603         } mng_disc;
604 typedef mng_disc * mng_discp;
605 
606 /* ************************************************************************** */
607 
608 typedef struct {                       /* BACK */
609            mng_chunk_header  sHeader;
610            mng_uint16        iRed;
611            mng_uint16        iGreen;
612            mng_uint16        iBlue;
613            mng_uint8         iMandatory;
614            mng_uint16        iImageid;
615            mng_uint8         iTile;
616         } mng_back;
617 typedef mng_back * mng_backp;
618 
619 /* ************************************************************************** */
620 
621 typedef struct {                       /* FRAM */
622            mng_chunk_header  sHeader;
623            mng_bool          bEmpty;
624            mng_uint8         iMode;
625            mng_uint32        iNamesize;
626            mng_pchar         zName;
627            mng_uint8         iChangedelay;
628            mng_uint8         iChangetimeout;
629            mng_uint8         iChangeclipping;
630            mng_uint8         iChangesyncid;
631            mng_uint32        iDelay;
632            mng_uint32        iTimeout;
633            mng_uint8         iBoundarytype;
634            mng_int32         iBoundaryl;
635            mng_int32         iBoundaryr;
636            mng_int32         iBoundaryt;
637            mng_int32         iBoundaryb;
638            mng_uint32        iCount;
639            mng_uint32p       pSyncids;
640         } mng_fram;
641 typedef mng_fram * mng_framp;
642 
643 /* ************************************************************************** */
644 
645 typedef struct {                       /* MOVE */
646            mng_chunk_header  sHeader;
647            mng_uint16        iFirstid;
648            mng_uint16        iLastid;
649            mng_uint8         iMovetype;
650            mng_int32         iMovex;
651            mng_int32         iMovey;
652         } mng_move;
653 typedef mng_move * mng_movep;
654 
655 /* ************************************************************************** */
656 
657 typedef struct {                       /* CLIP */
658            mng_chunk_header  sHeader;
659            mng_uint16        iFirstid;
660            mng_uint16        iLastid;
661            mng_uint8         iCliptype;
662            mng_int32         iClipl;
663            mng_int32         iClipr;
664            mng_int32         iClipt;
665            mng_int32         iClipb;
666         } mng_clip;
667 typedef mng_clip * mng_clipp;
668 
669 /* ************************************************************************** */
670 
671 typedef struct {                       /* SHOW */
672            mng_chunk_header  sHeader;
673            mng_bool          bEmpty;
674            mng_uint16        iFirstid;
675 #ifdef MNG_OPTIMIZE_CHUNKREADER
676            mng_bool          bHaslastid;
677 #endif
678            mng_uint16        iLastid;
679            mng_uint8         iMode;
680         } mng_show;
681 typedef mng_show * mng_showp;
682 
683 /* ************************************************************************** */
684 
685 typedef struct {                       /* TERM */
686            mng_chunk_header  sHeader;
687            mng_uint8         iTermaction;
688            mng_uint8         iIteraction;
689            mng_uint32        iDelay;
690            mng_uint32        iItermax;
691         } mng_term;
692 typedef mng_term * mng_termp;
693 
694 /* ************************************************************************** */
695 
696 #ifndef MNG_SKIPCHUNK_SAVE
697 typedef struct {                       /* SAVE entry */
698            mng_uint8         iEntrytype;
699            mng_uint32arr2    iOffset;            /* 0=MSI, 1=LSI */
700            mng_uint32arr2    iStarttime;         /* 0=MSI, 1=LSI */
701            mng_uint32        iLayernr;
702            mng_uint32        iFramenr;
703            mng_uint32        iNamesize;
704            mng_pchar         zName;
705         } mng_save_entry;
706 typedef mng_save_entry * mng_save_entryp;
707 
708 typedef struct {                       /* SAVE */
709            mng_chunk_header  sHeader;
710            mng_bool          bEmpty;
711            mng_uint8         iOffsettype;
712            mng_uint32        iCount;
713            mng_save_entryp   pEntries;
714         } mng_save;
715 typedef mng_save * mng_savep;
716 #endif
717 
718 /* ************************************************************************** */
719 
720 #ifndef MNG_SKIPCHUNK_SEEK
721 typedef struct {                       /* SEEK */
722            mng_chunk_header  sHeader;
723            mng_uint32        iNamesize;
724            mng_pchar         zName;
725         } mng_seek;
726 typedef mng_seek * mng_seekp;
727 #endif
728 
729 /* ************************************************************************** */
730 
731 #ifndef MNG_SKIPCHUNK_eXPI
732 typedef struct {                       /* eXPI */
733            mng_chunk_header  sHeader;
734            mng_uint16        iSnapshotid;
735            mng_uint32        iNamesize;
736            mng_pchar         zName;
737         } mng_expi;
738 typedef mng_expi * mng_expip;
739 #endif
740 
741 /* ************************************************************************** */
742 
743 #ifndef MNG_SKIPCHUNK_fPRI
744 typedef struct {                       /* fPRI */
745            mng_chunk_header  sHeader;
746            mng_uint8         iDeltatype;
747            mng_uint8         iPriority;
748         } mng_fpri;
749 typedef mng_fpri * mng_fprip;
750 #endif
751 
752 /* ************************************************************************** */
753 
754 #ifndef MNG_SKIPCHUNK_nEED
755 typedef struct {                       /* nEED */
756            mng_chunk_header  sHeader;
757            mng_uint32        iKeywordssize;
758            mng_pchar         zKeywords;
759         } mng_need;
760 typedef mng_need * mng_needp;
761 #endif
762 
763 /* ************************************************************************** */
764 
765 #ifndef MNG_SKIPCHUNK_pHYg
766 typedef mng_phys mng_phyg;             /* pHYg */
767 typedef mng_phyg * mng_phygp;
768 #endif
769 
770 /* ************************************************************************** */
771 
772 #ifdef MNG_INCLUDE_JNG
773 
774 typedef struct {                       /* JHDR */
775            mng_chunk_header  sHeader;
776            mng_uint32        iWidth;
777            mng_uint32        iHeight;
778            mng_uint8         iColortype;
779            mng_uint8         iImagesampledepth;
780            mng_uint8         iImagecompression;
781            mng_uint8         iImageinterlace;
782            mng_uint8         iAlphasampledepth;
783            mng_uint8         iAlphacompression;
784            mng_uint8         iAlphafilter;
785            mng_uint8         iAlphainterlace;
786         } mng_jhdr;
787 typedef mng_jhdr * mng_jhdrp;
788 
789 /* ************************************************************************** */
790 
791 typedef mng_idat mng_jdaa;             /* JDAA */
792 typedef mng_jdaa * mng_jdaap;
793 
794 /* ************************************************************************** */
795 
796 typedef mng_idat mng_jdat;             /* JDAT */
797 typedef mng_jdat * mng_jdatp;
798 
799 /* ************************************************************************** */
800 
801 typedef struct {                       /* JSEP */
802            mng_chunk_header  sHeader;
803         } mng_jsep;
804 typedef mng_jsep * mng_jsepp;
805 
806 #endif /* MNG_INCLUDE_JNG */
807 
808 /* ************************************************************************** */
809 
810 #ifndef MNG_NO_DELTA_PNG
811 
812 typedef struct {                       /* DHDR */
813            mng_chunk_header  sHeader;
814            mng_uint16        iObjectid;
815            mng_uint8         iImagetype;
816            mng_uint8         iDeltatype;
817 #ifdef MNG_OPTIMIZE_CHUNKREADER
818            mng_bool          bHasblocksize;
819 #endif
820            mng_uint32        iBlockwidth;
821            mng_uint32        iBlockheight;
822 #ifdef MNG_OPTIMIZE_CHUNKREADER
823            mng_bool          bHasblockloc;
824 #endif
825            mng_uint32        iBlockx;
826            mng_uint32        iBlocky;
827         } mng_dhdr;
828 typedef mng_dhdr * mng_dhdrp;
829 
830 /* ************************************************************************** */
831 
832 typedef struct {                       /* PROM */
833            mng_chunk_header  sHeader;
834            mng_uint8         iColortype;
835            mng_uint8         iSampledepth;
836            mng_uint8         iFilltype;
837         } mng_prom;
838 typedef mng_prom * mng_promp;
839 
840 /* ************************************************************************** */
841 
842 typedef struct {                       /* IPNG */
843            mng_chunk_header  sHeader;
844         } mng_ipng;
845 typedef mng_ipng *mng_ipngp;
846 
847 /* ************************************************************************** */
848 
849 typedef struct {                       /* PPLT entry */
850            mng_uint8         iRed;
851            mng_uint8         iGreen;
852            mng_uint8         iBlue;
853            mng_uint8         iAlpha;
854            mng_bool          bUsed;
855         } mng_pplt_entry;
856 typedef mng_pplt_entry * mng_pplt_entryp;
857 
858 typedef struct {                       /* PPLT */
859            mng_chunk_header  sHeader;
860            mng_uint8         iDeltatype;
861            mng_uint32        iCount;
862            mng_pplt_entry    aEntries [256];
863         } mng_pplt;
864 typedef mng_pplt * mng_ppltp;
865 
866 /* ************************************************************************** */
867 
868 typedef struct {                       /* IJNG */
869            mng_chunk_header  sHeader;
870         } mng_ijng;
871 typedef mng_ijng *mng_ijngp;
872 
873 /* ************************************************************************** */
874 
875 typedef struct {                       /* DROP */
876            mng_chunk_header  sHeader;
877            mng_uint32        iCount;
878            mng_chunkidp      pChunknames;
879         } mng_drop;
880 typedef mng_drop * mng_dropp;
881 
882 /* ************************************************************************** */
883 
884 #ifndef MNG_SKIPCHUNK_DBYK
885 typedef struct {                       /* DBYK */
886            mng_chunk_header  sHeader;
887            mng_chunkid       iChunkname;
888            mng_uint8         iPolarity;
889            mng_uint32        iKeywordssize;
890            mng_pchar         zKeywords;
891         } mng_dbyk;
892 typedef mng_dbyk * mng_dbykp;
893 #endif
894 
895 /* ************************************************************************** */
896 
897 #ifndef MNG_SKIPCHUNK_ORDR
898 typedef struct {                       /* ORDR entry */
899            mng_chunkid       iChunkname;
900            mng_uint8         iOrdertype;
901         } mng_ordr_entry;
902 typedef mng_ordr_entry * mng_ordr_entryp;
903 
904 typedef struct mng_ordr_struct {       /* ORDR */
905            mng_chunk_header  sHeader;
906            mng_uint32        iCount;
907            mng_ordr_entryp   pEntries;
908         } mng_ordr;
909 typedef mng_ordr * mng_ordrp;
910 #endif
911 #endif /* MNG_NO_DELTA_PNG */
912 
913 /* ************************************************************************** */
914 
915 typedef struct {                       /* MAGN */
916            mng_chunk_header  sHeader;
917            mng_uint16        iFirstid;
918            mng_uint16        iLastid;
919            mng_uint8         iMethodX;
920            mng_uint16        iMX;
921            mng_uint16        iMY;
922            mng_uint16        iML;
923            mng_uint16        iMR;
924            mng_uint16        iMT;
925            mng_uint16        iMB;
926            mng_uint8         iMethodY;
927         } mng_magn;
928 typedef mng_magn * mng_magnp;
929 
930 /* ************************************************************************** */
931 
932 typedef struct {                       /* evNT entry */
933            mng_uint8         iEventtype;
934            mng_uint8         iMasktype;
935            mng_int32         iLeft;
936            mng_int32         iRight;
937            mng_int32         iTop;
938            mng_int32         iBottom;
939            mng_uint16        iObjectid;
940            mng_uint8         iIndex;
941            mng_uint32        iSegmentnamesize;
942            mng_pchar         zSegmentname;
943         } mng_evnt_entry;
944 typedef mng_evnt_entry * mng_evnt_entryp;
945 
946 typedef struct {                       /* evNT */
947            mng_chunk_header  sHeader;
948            mng_uint32        iCount;
949            mng_evnt_entryp   pEntries;
950         } mng_evnt;
951 typedef mng_evnt * mng_evntp;
952 
953 /* ************************************************************************** */
954 
955 #ifdef MNG_INCLUDE_MPNG_PROPOSAL
956 typedef struct {                       /* mpNG frame */
957            mng_uint32        iX;
958            mng_uint32        iY;
959            mng_uint32        iWidth;
960            mng_uint32        iHeight;
961            mng_int32         iXoffset;
962            mng_int32         iYoffset;
963            mng_uint16        iTicks;
964         } mng_mpng_frame;
965 typedef mng_mpng_frame * mng_mpng_framep;
966 
967 typedef struct {                       /* mpNG */
968            mng_chunk_header  sHeader;
969            mng_uint32        iFramewidth;
970            mng_uint32        iFrameheight;
971            mng_uint16        iNumplays;
972            mng_uint16        iTickspersec;
973            mng_uint8         iCompressionmethod;
974            mng_uint32        iFramessize;
975            mng_mpng_framep   pFrames;
976         } mng_mpng;
977 typedef mng_mpng * mng_mpngp;
978 #endif
979 
980 /* ************************************************************************** */
981 
982 #ifdef MNG_INCLUDE_ANG_PROPOSAL
983 typedef struct {                       /* ahDR */
984            mng_chunk_header  sHeader;
985            mng_uint32        iNumframes;
986            mng_uint32        iTickspersec;
987            mng_uint32        iNumplays;
988            mng_uint32        iTilewidth;
989            mng_uint32        iTileheight;
990            mng_uint8         iInterlace;
991            mng_uint8         iStillused;
992         } mng_ahdr;
993 typedef mng_ahdr * mng_ahdrp;
994 
995 typedef struct {                       /* adAT tile */
996            mng_uint32        iTicks;
997            mng_int32         iXoffset;
998            mng_int32         iYoffset;
999            mng_uint8         iTilesource;
1000         } mng_adat_tile;
1001 typedef mng_adat_tile * mng_adat_tilep;
1002 
1003 typedef struct {                       /* adAT */
1004            mng_chunk_header  sHeader;
1005            mng_uint32        iTilessize;
1006            mng_adat_tilep    pTiles;
1007         } mng_adat;
1008 typedef mng_adat * mng_adatp;
1009 #endif
1010 
1011 /* ************************************************************************** */
1012 
1013 typedef struct {                       /* unknown chunk */
1014            mng_chunk_header  sHeader;
1015            mng_uint32        iDatasize;
1016            mng_ptr           pData;
1017         } mng_unknown_chunk;
1018 typedef mng_unknown_chunk * mng_unknown_chunkp;
1019 
1020 /* ************************************************************************** */
1021 
1022 #endif /* _libmng_chunks_h_ */
1023 
1024 /* ************************************************************************** */
1025 /* * end of file                                                            * */
1026 /* ************************************************************************** */
1027