/////////////////////////////////////////////////////////////////////
// This open-source software sample is offered free of charge and without guarantee.
// Polhemus accepts no responsibility or liability for any use of this code.
/////////////////////////////////////////////////////////////////////
// Adapted from "A Simple LogFile" original version, written by Neil Yao, 19 Mar 2003
// http://www.codeproject.com/Articles/2486/A-Simple-LogFile
/////////////////////////////////////////////////////////////////////
//  VSS $Header: /Viper/VPCmdIF/VPCmdIF/LogFile.cpp 2     5/09/18 3:05p Suzanne $  

#include "PDebug.h"
#include "Logfile.h"
#include <time.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#ifdef DEBUG_NEW
#define new DEBUG_NEW
#endif
#endif


//void CLogFile::Write0(LPCSTR pszFormat, ...)
//{
//	//if (!m_pLogFile)
//	//	return;
//
//	////write the formated log string to szLog
//	//char	szLog[SZLOGLINE_LEN];
//	//
//	//va_list argList;
//	//va_start( argList, pszFormat );
//
//	//int retval = vsnprintf_s( szLog, _countof(szLog), _TRUNCATE, pszFormat, argList );
//	//va_end( argList );
//
//
//	//char	szLine[SZLOGLINE_LEN + SZLOGTIME_LEN];
//	//if (m_bTS)
//	//{
//	//	//Get current time
//	//	time_t now = time(0);
//	//	struct tm raw_time;
//	//	localtime_s(&raw_time, &now);
//	//	char szTime[100];
//	//	size_t bytes = strftime(szTime, sizeof(szTime), "%Y-%m-%d.%X", &raw_time);
//	//	
//	//	retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s\t%s\n", 
//	//		szTime, szLog);
//
//	//}
//	//else
//	//{
//	//	retval =_snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s", szLog);
//	//}
//	//
//	//fputs(szLine, m_pLogFile);
//
//	//if ((m_nFlushCount != 0) && (++m_nWriteCount == m_nFlushCount))
//	//{
//	//	fflush(m_pLogFile);
//	//	m_nWriteCount = 0;
//	//}
//
//
//}
void CLogFile::Write(LPCSTR pszFormat, ...)
{
	if (!m_pLogFile)
		return;

	//write the formated log string to szLog
	char	szLog[SZLOGLINE_LEN];

	va_list argList;
	va_start(argList, pszFormat);

	int retval = vsnprintf_s(szLog, _countof(szLog), _TRUNCATE, pszFormat, argList);
	va_end(argList);


	char	szLine[SZLOGLINE_LEN + SZLOGTIME_LEN];
	if (m_bTS)
	{
		//Get current time
		time_t now = time(0);
		struct tm raw_time;
		localtime_s(&raw_time, &now);
		char szTime[100];
		size_t bytes = strftime(szTime, sizeof(szTime), "%Y-%m-%d.%X", &raw_time);

		retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s\t%s\n",
			szTime, szLog);

	}
	else
	{
		retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s", szLog);
	}

	fputs(szLine, m_pLogFile);

	if ((m_nFlushCount != 0) && (++m_nWriteCount == m_nFlushCount))
	{
		fflush(m_pLogFile);
		m_nWriteCount = 0;
	}


}


//void CLogFile::VWrite0(LPCSTR pszFormat, va_list argptr)
//{
//	//if (!m_pLogFile)
//	//	return;
//
//	////write the formated log string to szLog
//	//char	szLog[SZLOGLINE_LEN];
//
//	//int retval = vsnprintf_s(szLog, _countof(szLog), _TRUNCATE, pszFormat, argptr);
//
//	//char	szLine[SZLOGLINE_LEN + SZLOGTIME_LEN];
//	//if (m_bTS)
//	//{
//	//	//Get current time
//	//	time_t now = time(0);
//	//	struct tm raw_time;
//	//	localtime_s(&raw_time, &now);
//
//	//	char szTime[100];
//	//	size_t bytes = strftime(szTime, sizeof(szTime), "%Y-%m-%d.%X", &raw_time);
//
//	//	retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s\t%s\n",
//	//		szTime, szLog);
//
//	//}
//	//else
//	//{
//	//	retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s", szLog);
//	//}
//
//	//fputs(szLine, m_pLogFile);
//
//	//if ((m_nFlushCount != 0) && (++m_nWriteCount == m_nFlushCount))
//	//{
//	//	fflush(m_pLogFile);
//	//	m_nWriteCount = 0;
//	//}
//}

void CLogFile::VWrite(LPCSTR pszFormat, va_list argptr)
{
	if (!m_pLogFile)
		return;

	//write the formated log string to szLog
	char	szLog[SZLOGLINE_LEN];

	int retval = vsnprintf_s(szLog, _countof(szLog), _TRUNCATE, pszFormat, argptr);

	char	szLine[SZLOGLINE_LEN + SZLOGTIME_LEN];
	if (m_bTS)
	{
		//Get current time
		time_t now = time(0);
		struct tm raw_time;
		localtime_s(&raw_time, &now);

		char szTime[100];
		size_t bytes = strftime(szTime, sizeof(szTime), "%Y-%m-%d.%X", &raw_time);

		retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s\t%s\n",
			szTime, szLog);

	}
	else
	{
		retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s", szLog);
	}

	fputs(szLine, m_pLogFile);

	if ((m_nFlushCount != 0) && (++m_nWriteCount == m_nFlushCount))
	{
		fflush(m_pLogFile);
		m_nWriteCount = 0;
	}
}

//void CLogFile::WriteNoFlush0(LPCSTR pszFormat, ...)
//{
//	//if (!m_pLogFile)
//	//	return;
//
//	////write the formated log string to szLog
//	//char	szLog[SZLOGLINE_LEN];
//	//va_list argList;
//	//va_start(argList, pszFormat);
//
//	////int retval = _vstprintf_s( szLog, _countof(szLog), pszFormat, argList );
//	//int retval = vsnprintf_s(szLog, _countof(szLog), _TRUNCATE, pszFormat, argList);
//	//va_end(argList);
//
//	//char	szLine[SZLOGLINE_LEN + SZLOGTIME_LEN];
//	//if (m_bTS)
//	//{
//	//	//Get current time
//	//	time_t now = time(0);
//	//	struct tm raw_time;
//	//	localtime_s(&raw_time, &now);
//
//	//	char szTime[100];
//	//	size_t bytes = strftime(szTime, sizeof(szTime), "%Y-%m-%d.%X", &raw_time);
//
//	//	retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s\t%s\n",
//	//		szTime, szLog);
//	//}
//	//else
//	//{
//	//	retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s", szLog);
//	//}
//
//	//fputs(szLine, m_pLogFile);
//
//}

void CLogFile::WriteNoFlush(LPCSTR pszFormat, ...)
{
	if (!m_pLogFile)
		return;

	//write the formated log string to szLog
	char	szLog[SZLOGLINE_LEN];
	va_list argList;
	va_start(argList, pszFormat);

	//int retval = _vstprintf_s( szLog, _countof(szLog), pszFormat, argList );
	int retval = vsnprintf_s(szLog, _countof(szLog), _TRUNCATE, pszFormat, argList);
	va_end(argList);

	char	szLine[SZLOGLINE_LEN + SZLOGTIME_LEN];
	if (m_bTS)
	{
		//Get current time
		time_t now = time(0);
		struct tm raw_time;
		localtime_s(&raw_time, &now);

		char szTime[100];
		size_t bytes = strftime(szTime, sizeof(szTime), "%Y-%m-%d.%X", &raw_time);

		retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s\t%s\n",
			szTime, szLog);
	}
	else
	{
		retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s", szLog);
	}

	fputs(szLine, m_pLogFile);

}

//void CLogFile::VWriteNoFlush0(LPCSTR pszFormat, va_list argptr)
//{
//	//if (!m_pLogFile)
//	//	return;
//
//	////write the formated log string to szLog
//	//char	szLog[SZLOGLINE_LEN];
//
//	//int retval = vsnprintf_s(szLog, _countof(szLog), _TRUNCATE, pszFormat, argptr);
//
//	//char	szLine[SZLOGLINE_LEN + SZLOGTIME_LEN];
//	//if (m_bTS)
//	//{
//	//	//Get current time
//	//	time_t now = time(0);
//	//	struct tm raw_time;
//	//	localtime_s(&raw_time, &now);
//	//	char szTime[100];
//	//	size_t bytes = strftime(szTime, sizeof(szTime), "%Y-%m-%d.%X", &raw_time);
//
//	//	retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s\t%s\n",
//	//		szTime, szLog);
//
//	//}
//	//else
//	//{
//	//	retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s", szLog);
//
//	//}
//
//	//fputs(szLine, m_pLogFile);
//
//}

void CLogFile::VWriteNoFlush(LPCSTR pszFormat, va_list argptr)
{
	if (!m_pLogFile)
		return;

	//write the formated log string to szLog
	char	szLog[SZLOGLINE_LEN];

	int retval = vsnprintf_s(szLog, _countof(szLog), _TRUNCATE, pszFormat, argptr);

	char	szLine[SZLOGLINE_LEN + SZLOGTIME_LEN];
	if (m_bTS)
	{
		//Get current time
		time_t now = time(0);
		struct tm raw_time;
		localtime_s(&raw_time, &now);
		char szTime[100];
		size_t bytes = strftime(szTime, sizeof(szTime), "%Y-%m-%d.%X", &raw_time);

		retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s\t%s\n",
			szTime, szLog);

	}
	else
	{
		retval = _snprintf_s(szLine, _countof(szLine), _TRUNCATE, "%s", szLog);

	}

	fputs(szLine, m_pLogFile);

}

///@endcond
