// MODULE: INIREAD.CPP
//
// PURPOSE: INI file reading classes
//
// COMPANY: Saltmine Creative, Inc. (206)-284-7511 support@saltmine.com
//
// AUTHOR: Oleg Kalosha
// 
// ORIGINAL DATE: 7-29-98
//
// NOTES: 
//	1. As of 1/99, needn't account for CHM file: 
//
// Version	Date		By		Comments
//--------------------------------------------------------------------
// V3.0		08-04-98	OK
//

#include "stdafx.h"
#include "iniread.h"
#include "event.h"
#include "CharConv.h"

////////////////////////////////////////////////////////////////////////////////////
// CINIReader
////////////////////////////////////////////////////////////////////////////////////
CINIReader::CINIReader(CPhysicalFileReader * pPhysicalFileReader, LPCTSTR section)
          : CTextFileReader(pPhysicalFileReader),
			m_strSection(section)
{
}

CINIReader::~CINIReader()
{
}

void CINIReader::Parse()
{
	CString str;
	long save_pos = 0;
	CString section_with_brackets = CString(_T("[")) + m_strSection + _T("]");
	
	save_pos = GetPos();
	if (Find(section_with_brackets))
	{	// we have found section
		m_arrLines.clear();

		NextLine();
		try
		{
			while (GetLine(str))
			{
				str.TrimLeft();
				str.TrimRight();
				if (str.GetLength() == 0) // empty string
					continue;
				if (str[0] == _T('[')) // another section
					break;
				if (str[0] == _T(';')) // entry is commented
					continue;
				m_arrLines.push_back(str);
			}
		}
		catch (exception& x)
		{
			CString str;
			// Note STL exception in event log.
			CBuildSrcFileLinenoStr SrcLoc( __FILE__, __LINE__ );
			CEvent::ReportWFEvent(	SrcLoc.GetSrcFileLineStr(), 
									SrcLoc.GetSrcFileLineStr(), 
									CCharConversion::ConvertACharToString(x.what(), str),
									_T(""), 
									EV_GTS_STL_EXCEPTION ); 
		}
	}
	SetPos(save_pos);
}