static mng_bool myiterchunk (mng_handle hMNG, mng_handle hChunk, mng_chunkid iChunktype, mng_uint32 iChunkseq) { static int databytes = 0; int length = 0; GtkMngView *mng_view = GTK_MNG_VIEW (mng_get_userdata (hMNG)); printf("FRAME DELAY %d\n", mng_get_currframdelay(hMNG)); switch(iChunktype) { case MNG_UINT_HUH : printf("Type is MNG_UINT_HUH \n"); break; case MNG_UINT_BACK: printf("Type is MNG_UINT_BACK\n"); break; case MNG_UINT_BASI: printf("Type is MNG_UINT_BASI\n"); break; case MNG_UINT_CLIP: printf("Type is MNG_UINT_CLIP\n"); break; case MNG_UINT_CLON: printf("Type is MNG_UINT_CLON\n"); break; case MNG_UINT_DBYK: printf("Type is MNG_UINT_DBYK\n"); break; case MNG_UINT_DEFI: printf("Type is MNG_UINT_DEFI\n"); break; case MNG_UINT_DHDR: printf("Type is MNG_UINT_DHDR\n"); break; case MNG_UINT_DISC: printf("Type is MNG_UINT_DISC\n"); break; case MNG_UINT_DROP: printf("Type is MNG_UINT_DROP\n"); break; case MNG_UINT_ENDL: printf("Type is MNG_UINT_ENDL\n"); break; case MNG_UINT_FRAM: printf("Type is MNG_UINT_FRAM\n"); break; case MNG_UINT_IDAT: mng_getchunk_idat(hMNG, hChunk, &length, mng_view->MNG_drawing_buffer + databytes); databytes += length; if (databytes >= 3*g_width*g_height) { printf("DATABYTES %d WIDTH %d HEIGHT %d 3 TIMES %d\n", databytes, g_width, g_height, 3*g_width*g_height); databytes = 0; } int i = 0; for ( i = 0; i < length; i++) printf("%x ", mng_view->MNG_drawing_buffer[i]); printf("Type is MNG_UINT_IDAT\n"); printf("LENGTH is %d\n", length); break; case MNG_UINT_IEND: printf("Type is MNG_UINT_IEND\n"); break; case MNG_UINT_IHDR: printf("Type is MNG_UINT_IHDR\n"); break; case MNG_UINT_IJNG: printf("Type is MNG_UINT_IJNG\n"); break; case MNG_UINT_IPNG: printf("Type is MNG_UINT_IPNG\n"); break; case MNG_UINT_JDAA: printf("Type is MNG_UINT_JDAA\n"); break; case MNG_UINT_JDAT: printf("Type is MNG_UINT_JDAT\n"); break; case MNG_UINT_JHDR: printf("Type is MNG_UINT_JHDR\n"); break; case MNG_UINT_JSEP: printf("Type is MNG_UINT_JSEP\n"); break; case MNG_UINT_JdAA: printf("Type is MNG_UINT_JdAA\n"); break; case MNG_UINT_LOOP: printf("Type is MNG_UINT_LOOP\n"); break; case MNG_UINT_MAGN: printf("Type is MNG_UINT_MAGN\n"); break; case MNG_UINT_MEND: printf("Type is MNG_UINT_MEND\n"); break; case MNG_UINT_MHDR: printf("Type is MNG_UINT_MHDR\n"); break; case MNG_UINT_MOVE: printf("Type is MNG_UINT_MOVE\n"); break; case MNG_UINT_ORDR: printf("Type is MNG_UINT_ORDR\n"); break; case MNG_UINT_PAST: printf("Type is MNG_UINT_PAST\n"); break; case MNG_UINT_PLTE: printf("Type is MNG_UINT_PLTE\n"); break; case MNG_UINT_PPLT: printf("Type is MNG_UINT_PPLT\n"); break; case MNG_UINT_PROM: printf("Type is MNG_UINT_PROM\n"); break; case MNG_UINT_SAVE: printf("Type is MNG_UINT_SAVE\n"); break; case MNG_UINT_SEEK: printf("Type is MNG_UINT_SEEK\n"); break; case MNG_UINT_SHOW: printf("Type is MNG_UINT_SHOW\n"); break; case MNG_UINT_TERM: printf("Type is MNG_UINT_TERM\n"); break; case MNG_UINT_adAT: printf("Type is MNG_UINT_adAT\n"); break; case MNG_UINT_ahDR: printf("Type is MNG_UINT_ahDR\n"); break; case MNG_UINT_bKGD: printf("Type is MNG_UINT_bKGD\n"); break; case MNG_UINT_cHRM: printf("Type is MNG_UINT_cHRM\n"); break; case MNG_UINT_eXPI: printf("Type is MNG_UINT_eXPI\n"); break; case MNG_UINT_evNT: printf("Type is MNG_UINT_evNT\n"); break; case MNG_UINT_fPRI: printf("Type is MNG_UINT_fPRI\n"); break; case MNG_UINT_gAMA: printf("Type is MNG_UINT_gAMA\n"); break; case MNG_UINT_hIST: printf("Type is MNG_UINT_hIST\n"); break; case MNG_UINT_iCCP: printf("Type is MNG_UINT_iCCP\n"); break; case MNG_UINT_iTXt: printf("Type is MNG_UINT_iTXt\n"); break; case MNG_UINT_mpNG: printf("Type is MNG_UINT_mpNG\n"); break; case MNG_UINT_nEED: printf("Type is MNG_UINT_nEED\n"); break; case MNG_UINT_oFFs: printf("Type is MNG_UINT_oFFs\n"); break; case MNG_UINT_pCAL: printf("Type is MNG_UINT_pCAL\n"); break; case MNG_UINT_pHYg: printf("Type is MNG_UINT_pHYg\n"); break; case MNG_UINT_pHYs: printf("Type is MNG_UINT_pHYs\n"); break; case MNG_UINT_sBIT: printf("Type is MNG_UINT_sBIT\n"); break; case MNG_UINT_sCAL: printf("Type is MNG_UINT_sCAL\n"); break; case MNG_UINT_sPLT: printf("Type is MNG_UINT_sPLT\n"); break; case MNG_UINT_sRGB: printf("Type is MNG_UINT_sRGB\n"); break; case MNG_UINT_tEXt: printf("Type is MNG_UINT_tEXt\n"); break; case MNG_UINT_tIME: printf("Type is MNG_UINT_tIME\n"); break; case MNG_UINT_tRNS: printf("Type is MNG_UINT_tRNS\n"); break; case MNG_UINT_zTXt: printf("Type is MNG_UINT_zTXt\n"); break; } int iWidth, iHeight, iTicks, iLayercount, iFramecount, iPlaytime, iSimplicity; mng_bool bEmpty; mng_uint8 iMode; mng_uint32 iNamesize; mng_pchar zName; mng_uint8 iChangedelay; mng_uint8 iChangetimeout; mng_uint8 iChangeclipping; mng_uint8 iChangesyncid; mng_uint32 iDelay; mng_uint32 iTimeout; mng_uint8 iBoundarytype; mng_int32 iBoundaryl; mng_int32 iBoundaryr; mng_int32 iBoundaryt; mng_int32 iBoundaryb; mng_uint32 iCount; mng_uint32p pSyncids; if(iChunktype == MNG_UINT_MHDR) { mng_getchunk_mhdr (hMNG, hChunk, &iWidth, &iHeight, &iTicks, &iLayercount, &iFramecount, &iPlaytime, &iSimplicity); //printf("iWidth, %d\n", iWidth); //printf("iHeight, %d\n", iHeight); //printf("iTicks, %d\n", iTicks); //printf("iLayercount %d\n", iLayercount); //printf("iFramecount %d\n", iFramecount); //printf("iPlaytime, %d\n", iPlaytime); //printf("iSimplicity %d\n", iSimplicity); } if(iChunktype == MNG_UINT_FRAM) { mng_getchunk_fram (hMNG, hChunk, &bEmpty, &iMode, &iNamesize, &zName, &iChangedelay, &iChangetimeout, &iChangeclipping, &iChangesyncid, &iDelay, &iTimeout, &iBoundarytype, &iBoundaryl, &iBoundaryr, &iBoundaryt, &iBoundaryb, &iCount, &pSyncids); printf("Framing iMode %d\n", iMode); switch(iMode) { case MNG_FRAMINGMODE_NOCHANGE: printf("Mode No change\n"); break; case MNG_FRAMINGMODE_1 : printf("Mode 1\n"); break; case MNG_FRAMINGMODE_2 : printf("Mode 2\n"); break; case MNG_FRAMINGMODE_3 : printf("Mode 3\n"); break; case MNG_FRAMINGMODE_4 : printf("Mode 4\n"); break; } } //printf("iChunktype %d\n", iChunktype); }
mng_bool MY_DECL myiterchunk (mng_handle hMNG, mng_handle hChunk, mng_chunkid iChunktype, mng_uint32 iChunkseq) { mng_uint32 iWidth; /* temps for IHDR processing */ mng_uint32 iHeight; mng_uint8 iBitdepth; mng_uint8 iColortype; mng_uint8 iCompression; mng_uint8 iFilter; mng_uint8 iInterlace; mng_bool bEmpty; /* temps for FRAM processing */ mng_uint8 iMode; mng_uint32 iNamesize; mng_pchar zName; mng_uint8 iChangedelay; mng_uint8 iChangetimeout; mng_uint8 iChangeclipping; mng_uint8 iChangesyncid; mng_uint32 iDelay; mng_uint32 iTimeout; mng_uint8 iBoundarytype; mng_int32 iBoundaryl; mng_int32 iBoundaryr; mng_int32 iBoundaryt; mng_int32 iBoundaryb; mng_uint32 iCount; mng_uint32p pSyncids; /* get to my userdata */ userdatap pMydata = (userdatap)mng_get_userdata (hMNG); if (pMydata->hFileO) /* are we writing this time ? */ { /* do we need to 'forget' the TERM ? */ if ((iChunktype == MNG_UINT_TERM) && (pMydata->bHasTERM)) ; else { /* fix JASC AS frame_type ? */ if ((iChunktype == MNG_UINT_FRAM) && (pMydata->bIsJASC)) { if ((pMydata->iError = mng_getchunk_fram (hMNG, hChunk, &bEmpty, &iMode, &iNamesize, &zName, &iChangedelay, &iChangetimeout, &iChangeclipping, &iChangesyncid, &iDelay, &iTimeout, &iBoundarytype, &iBoundaryl, &iBoundaryr, &iBoundaryt, &iBoundaryb, &iCount, &pSyncids)) != 0) { fprintf (stderr, "Cannot get FRAM fields.\n"); return MNG_FALSE; /* stop the process ! */ } if (iMode == 1) /* really ? */ iMode = 3; if ((pMydata->iError = mng_putchunk_fram (pMydata->hHandleO, bEmpty, iMode, iNamesize, zName, iChangedelay, iChangetimeout, iChangeclipping, iChangesyncid, iDelay, iTimeout, iBoundarytype, iBoundaryl, iBoundaryr, iBoundaryt, iBoundaryb, iCount, pSyncids)) != 0) { fprintf (stderr, "Cannot write FRAM chunk.\n"); return MNG_FALSE; /* stop the process ! */ } } else { if ((pMydata->iError = mng_copy_chunk (hMNG, hChunk, pMydata->hHandleO)) != 0) { fprintf (stderr, "Cannot copy the chunk.\n"); return MNG_FALSE; /* stop the process ! */ } } } /* need to insert TERM in the proper place ? */ if ((iChunktype == MNG_UINT_MHDR) && (pMydata->bHasTERM)) { if ((pMydata->iError = mng_putchunk_term (pMydata->hHandleO, pMydata->iTermaction, pMydata->iIteraction, pMydata->iDelay, pMydata->iItermax)) != 0) { fprintf (stderr, "Cannot write TERM chunk.\n"); return MNG_FALSE; /* stop the process ! */ } } } else /* first iteration; just checking stuff */ { if (iChunktype == MNG_UINT_SAVE) /* SAVE ? */ { pMydata->bHasSAVE = MNG_TRUE; /* we got a SAVE ! */ pMydata->bIsJASC = MNG_FALSE; /* so it's definitely not an invalid AS file */ } else { /* TERM ? */ if (iChunktype == MNG_UINT_TERM) { /* is it in the wrong place ? */ if ((pMydata->iLastchunk != MNG_UINT_MHDR) || (pMydata->iLastchunk != MNG_UINT_SAVE) ) { pMydata->bHasTERM = MNG_TRUE; if ((pMydata->iError = mng_getchunk_term (hMNG, hChunk, &pMydata->iTermaction, &pMydata->iIteraction, &pMydata->iDelay, &pMydata->iItermax)) != 0) { fprintf (stderr, "Cannot get TERM fields.\n"); return MNG_FALSE; /* stop the process ! */ } } } else { /* IHDR ? */ if (iChunktype == MNG_UINT_IHDR) { if ((pMydata->iError = mng_getchunk_ihdr (hMNG, hChunk, &iWidth, &iHeight, &iBitdepth, &iColortype, &iCompression, &iFilter, &iInterlace)) != 0) { fprintf (stderr, "Cannot get IHDR fields.\n"); return MNG_FALSE; /* stop the process ! */ } /* is it not a typical JASC AS file */ if ((iBitdepth != 8) || (iColortype != 6)) pMydata->bIsJASC = MNG_FALSE; } } } pMydata->iLastchunk = iChunktype; } return MNG_TRUE; /* keep'm coming... */ }