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