
#include	"stdafx.h"
#include	"../SearchBase.h"
#include	"PngSearch.h"

//////////////////////////////////////////////////////////////////////////////////////////
//	コンストラクタ

CPngSearch::CPngSearch()
{
	InitHed( "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", 8 );
	InitFot( "\x49\x45\x4E\x44\xAE\x42\x60\x82", 8 );
}

//////////////////////////////////////////////////////////////////////////////////////////
//	マウント

void	CPngSearch::Mount(
	CArcFile*			pclArc							// アーカイブ
	)
{
	SFileInfo			stFileInfo;

	// 開始アドレス取得

	stFileInfo.start = pclArc->GetArcPointer();

	pclArc->SeekCur( GetHedSize() );

	// ファイル末端を検索

	BYTE				abtChunkName[4];

	do
	{
		// チャンクの長さ取得

		DWORD				dwLength;

		if( pclArc->Read( &dwLength, 4 ) == 0 )
		{
			return;
		}

		pclArc->ConvEndian( &dwLength );

		// チャンクの名称取得

		if( pclArc->Read( abtChunkName, 4 ) == 0 )
		{
			return;
		}

		// チャンクの長さ + CRC分ファイルポインタを進める

//		if( (dwLength + 4) > pclArc->GetArcSize() )
//		{
//			return;
//		}

		pclArc->SeekCur( dwLength + 4 );
	}
	while( memcmp( abtChunkName, "IEND", 4 ) != 0 );	// IENDまで到達したら終了

	// 終了アドレス取得

	stFileInfo.end = pclArc->GetArcPointer();

	// ファイルサイズ取得

	stFileInfo.sizeOrg = stFileInfo.end - stFileInfo.start;
	stFileInfo.sizeCmp = stFileInfo.sizeOrg;

	// プログレスバーを進める

	pclArc->GetProg()->UpdatePercent( stFileInfo.sizeOrg );

	pclArc->AddFileInfo( stFileInfo, GetCtFile(), _T(".png") );
}
