CNumber CCalculator::Eval(char* szText)
{
	CCalcExpression*	pcExpression;
	CNumber				cAnswer;
	BOOL				bResult;
	CChars				sz;

	mcParser.Init(szText);
	bResult = Expression(&pcExpression);
	mcParser.Kill();

	if (bResult)
	{
		cAnswer = pcExpression->Evaluate();
		SafeKill(pcExpression);
	}
	else
	{
		sz.Init("Cannot evaluate expression [");
		sz.Append(szText);
		sz.Append("]\n");
		gcUserError.Set(sz.Text());
		sz.Kill();
		cAnswer.Zero();
	}

	return cAnswer;
}
BOOL CCalculator::Identifier(CCalcConstExpression** ppcConst)
{
	TRISTATE				tResult;
	CNumber					cNumber;
	int						iLength;
	char*					sz;

	tResult = mcParser.GetIdentifier(NULL, &iLength);
	if (tResult == TRITRUE)
	{
		sz = (char*)malloc(iLength+1);
		mcParser.GetIdentifier(sz);
		free(sz);
		*ppcConst = NewMalloc<CCalcConstExpression>();
		(*ppcConst)->SetValue(cNumber.Zero());
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}