/*===========================================================================

FILE: locallog.c
===========================================================================*/


/*===============================================================================
INCLUDES AND VARIABLE DEFINITIONS
=============================================================================== */
#include "iautolog.h"
#include "errorlib.c"



//---------------------------------------------------------------------------
//	IAutoLog_FileCheck::ログファイルの管理(5つ以上作成させない)
//---------------------------------------------------------------------------
boolean  IAutoLog_FileCheck( AutoLog  *pAutoLog )
{
	char			szBuf[SHORT_BUFFER] = "";
	int				ii;
	uint32			filedata[FILE_BOX + 2];
	FileInfo 		pInfo[5];


	if( pAutoLog == NULL )	{	DBGPRINTF("IAutoLog NULL");		return FALSE;	}


	MEMSET( filedata, 0x00, (FILE_BOX + 2));
	for( ii = 0; ii < 5; ii++ )
	{
		MEMSET( &pInfo[ii], 0x00, sizeof(FileInfo));
	}
	if( SUCCESS != IFILEMGR_EnumInit( pAutoLog->m_pFileMgr, LOGDIRECTRY, FALSE))
	{		
		return FALSE;
	}
	for( ii = 0; TRUE == IFILEMGR_EnumNext( pAutoLog->m_pFileMgr, &pInfo[ii] ); ii++ );
	if( *pInfo[4].szName != NULL )
	{
		for( ii = 0; ii < FILE_BOX; ii++ )
		{
			filedata[ii + 1] = pInfo[ii].dwCreationDate;
		}
		//	1番最古のファイルを検索する
		for( ii = 2; ; ii++ )
		{
			if( filedata[1] > filedata[ii] )
			{
				filedata[0]  = filedata[ii];
				filedata[ii] = filedata[1];
				filedata[1]  = filedata[0];
			}
			else
			{
				break;
			}
		}

		//	1番最古のファイルデータを見つける
// chg sta  05.06.30 N.Kanagawa #001
//		for( ii = 0; filedata[1] != pInfo[ii].dwCreationDate; ii++ );
		for( ii = 0; (filedata[1] != pInfo[ii].dwCreationDate)&&(ii < FILE_BOX); ii++ );
// chg end  05.06.30 N.Kanagawa #001
		//	1番最古のファイルを削除する
		if( SUCCESS != IFILEMGR_Remove( pAutoLog->m_pFileMgr, pInfo[ii].szName ))
		{
			IAutoLog_FILEErrorCheck( (IAutoLog*)pAutoLog, pAutoLog->m_pFileMgr, szBuf, SHORT_BUFFER );
			DBGPRINTF( "Remove_ERROR::%s", szBuf );
			return FALSE;
		}		
	}

	return TRUE;
}


//------------------------------------------------------------------------------------------
//		IAutoLog_DBGTimer :: ISHELL_SetTimer()を用いたDBGPRINTF()の連続処理
//------------------------------------------------------------------------------------------
void	IAutoLog_DBGTimer( AutoLog  *pAutoLog )
{
	char			*pszEnterPoint = NULL;
	char			*pszTubPoint = NULL;
	char			*pszLineBuf = NULL;
	char			szOverBuf[SHORT_BUFFER] = "";
	char			szDBGHtml[MIDDLE_BUFFER] = "";
	uint16			ii = 0;
	uint16			jj = 0;
	int				nSeek = 0;


	if( pAutoLog == NULL )	{	DBGPRINTF("IAutoLog NULL");		return;	}
	pszLineBuf = (char*)MALLOC( 1024 );

	for(;;)
	{
		// 改行コードの検索
		pszEnterPoint = STRCHR( pAutoLog->pszReadBuf, (int)'\n' );
		// タブコードの検索
		pszTubPoint = STRCHR( pAutoLog->pszReadBuf, (int)'\t' );
		// 検索結果よりカレントから一番近い場所を取得
		if( pszEnterPoint < pszTubPoint || pszTubPoint == NULL )
		{		
			if( ( pAutoLog->pszReadBuf - pszEnterPoint) == 0 )
			{	
				pAutoLog->pszReadBuf ++;
				pAutoLog->unReadSize --;
				continue;
			}
			if( pszEnterPoint == 0 )	break;
			ii = pszEnterPoint - pAutoLog->pszReadBuf;
			break;
		}
		else if	( pszTubPoint < pszEnterPoint || pszEnterPoint == NULL )
		{
			if( (pAutoLog->pszReadBuf - pszTubPoint) == 0 )
			{	
				pAutoLog->pszReadBuf ++;
				pAutoLog->unReadSize --;
				continue;
			}
			ii = pszTubPoint - pAutoLog->pszReadBuf;
			break;
		}
		else
		{
			DBGPRINTF( "**** LOG END ****" );
			FREEIF( pAutoLog->pszReadPoint );
			SPRINTF( szDBGHtml, "ログの出力が完了しました<br>" );
			IHTMLVIEWER_ParseBuffer( pAutoLog->pIHtmlViewer, szDBGHtml ) ;
			FREEIF( pszLineBuf );
			if( pAutoLog->m_pFile != NULL )
			{
				IFILE_Release( pAutoLog->m_pFile );	
				pAutoLog->m_pFile = NULL;
			}

			return;
		}
	}
	if( ii != 0 )
	{
		// カレントから指定トークンまでの文字列をコピー
		MEMCPY( pszLineBuf, pAutoLog->pszReadBuf, ii );
	}
	// コピーした文字列が 36Byte 以上の場合
	if( SEEK_POINT < ii )
	{
		for( jj = ii; SEEK_POINT < jj; )
		{
			MEMSET( szOverBuf, 0x00, SHORT_BUFFER );
			MEMCPY( szOverBuf, (pszLineBuf + nSeek), SEEK_POINT );
			DBGPRINTF( "%s", szOverBuf );
			nSeek +=SEEK_POINT;
			jj -= SEEK_POINT;
		}

		DBGPRINTF( "%s", (pszLineBuf + nSeek));
	}
	else
	{
		DBGPRINTF( "%s", pszLineBuf );
	}
	
	ii ++;
	pAutoLog->unReadSize -= ii;
	pAutoLog->pszReadBuf += ii;
	MEMSET( pszLineBuf, 0x00, 1024 );

	// ファイルを読み終わった場合
	if( pAutoLog->unReadSize <= 0 )
	{
		DBGPRINTF( "**** LOG END ****" );
		DBGPRINTF( "" );
		FREEIF( pAutoLog->pszReadPoint );
		if( pAutoLog->m_pFile != NULL )
		{
			IFILE_Release( pAutoLog->m_pFile );	
			pAutoLog->m_pFile = NULL;
		}
		SPRINTF( szDBGHtml, "ログの出力が完了しました<br>" );
		IHTMLVIEWER_ParseBuffer( pAutoLog->pIHtmlViewer, szDBGHtml ) ;
		FREEIF( pszLineBuf );
		return;
	}
	
	
	FREEIF( pszLineBuf );
	ISHELL_SetTimer( pAutoLog->aApplet.m_pIShell, 100, (PFNNOTIFY)IAutoLog_DBGTimer, (void*)pAutoLog ); 

	return;
}


