//--------------------------------------------------------------------------- #include #pragma hdrstop # include #include "Main.h" //--------------------------------------------------------------------------- mng_ptr __stdcall TMainForm::Alloc( mng_size_t iSize ) { return (mng_ptr)calloc( 1, (size_t)iSize ); } //--------------------------------------------------------------------------- void __stdcall TMainForm::Free( mng_ptr pPtr, mng_size_t iSize ) { free( pPtr ); return; } //--------------------------------------------------------------------------- mng_bool __stdcall TMainForm::FileReadData( mng_handle hMNG, mng_ptr pBuf, mng_uint32 iSize, mng_uint32 *iRead ) { TMainForm *MainForm = (TMainForm *)mng_get_userdata( hMNG ); *iRead = fread( pBuf, 1, iSize, MainForm->GetFd() ); // iRead will indicate EOF MainForm->ProgressBar1->Position += (int)iRead; return MNG_TRUE; } //--------------------------------------------------------------------------- mng_bool __stdcall TMainForm::ProcessHeader( mng_handle hHandle, mng_uint32 iWidth, mng_uint32 iHeight ) { TMainForm *MainForm = (TMainForm *)mng_get_userdata( hHandle ); MainForm->Caption = ExtractFileName( MainForm->OpenDialog1->FileName ) + " [" + String( iWidth ) + "x" + String( iHeight ) + "]"; Application->Title = MainForm->asAppName + " " + MainForm->Caption; MainForm->ProgressBar1->Max = iWidth * iHeight; return MNG_TRUE; } //--------------------------------------------------------------------------- mng_bool __stdcall TMainForm::OpenStream( mng_handle hMNG ) { // nothing to do ! return MNG_TRUE; } //--------------------------------------------------------------------------- mng_bool __stdcall TMainForm::CloseStream( mng_handle hMNG ) { MainForm->ProgressBar1->Position = 0; return MNG_TRUE; } //--------------------------------------------------------------------------- mng_bool __stdcall TMainForm::IterateChunks( mng_handle hMNG, mng_handle hChunk, mng_chunkid iChunktype, mng_uint32 iChunkseq ) { TMainForm *MainForm = (TMainForm *)mng_get_userdata( hMNG ); char aCh[5]; // decode the chunkname aCh[0] = (char)((iChunktype >> 24) & 0xFF); aCh[1] = (char)((iChunktype >> 16) & 0xFF); aCh[2] = (char)((iChunktype >> 8) & 0xFF); aCh[3] = (char)((iChunktype ) & 0xFF); aCh[4] = (char)0; // zero terminate - used as a "C" string below MainForm->RichEditReport->Lines->Add( "" ); MainForm->RichEditReport->Lines->Add( "Chunk " + String( iChunkseq + 1 ) + " : " + String( aCh ) ); // Add Chunk text to listbox MainForm->ListBoxChunks->Items->Add( aCh ); // keep'm coming ... unless we encounter an error return MainForm->ShowChunk( hMNG, hChunk, iChunktype ); } //---------------------------------------------------------------------------