loggingservices/filelogger/SCLI/FLOGFMT.CPP
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loggingservices/filelogger/SCLI/FLOGFMT.CPP	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,298 @@
+// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file
+*/
+
+#include <utf.h>
+#include <flogger.h>
+#include "FLOGSTD.H"
+
+/**
+16-bit tab char width for symbian OS build.
+*/
+const TText KTabChar='\t';
+
+/**
+8-bit FullStop char for non-unicode
+*/
+const TText8 KFullStopChar8='.';
+
+/**
+8-bit tab char for unicode
+*/
+const TText8 KTabChar8='\t';
+
+/**
+Max length for a TBuf date or time variable.
+*/
+const TInt KDateOrTimeMaxLength=30;
+
+/**
+Constructs a 8 bit constant literal descriptor for
+end of line.
+*/
+_LIT8(KEndOfLineCharacters8,"\r\n");
+
+/**
+Constructs a 16 bit constant literal descriptor for
+end of line.
+*/
+_LIT(KEndOfLineCharacters,"\r\n");
+
+/**
+Date format for European style
+*/
+_LIT(KDateFormat,"%1%/1%2%/2%3\t");
+
+/**
+24 hour time format
+*/
+_LIT(KTimeFormat,"%J%:1%T%:2%S\t");
+
+
+/**
+TLogFile class definition
+*/
+
+TLogFile::TLogFile()
+/**
+Sets initial values for iValid and iMode.
+*/
+	{
+
+	iValid=EFalse;
+	iMode=EFileLoggingModeUnknown;
+	}
+
+TLogFile::TLogFile(const TDesC& aDir, const TDesC& aName, TFileLoggingMode aMode)
+/**
+Sets initial values for iValid,iDirectory,iName and iMode.
+
+@param aDir Full Path of the log file.
+@param aName Name of the log file.
+@param aMode Specifies whether data is appended or file is truncated.
+*/
+	{
+
+	iValid=EFalse;
+	iDirectory=aDir;
+	iName=aName;
+	iMode=aMode;
+	}
+
+TBool TLogFile::operator==(const TLogFile& aLogFile) const
+/**
+iValid members need not be equal
+
+@param aLogFile log file.
+*/
+	{
+
+	if (iDirectory!=aLogFile.iDirectory)
+		return EFalse;
+	if (iName!=aLogFile.iName)
+		return EFalse;
+	if (iMode!=aLogFile.iMode)
+		return EFalse;
+	return ETrue;
+	}
+
+void TLogFile::Set(const TDesC& aDir, const TDesC& aName, TFileLoggingMode aMode)
+/**
+Sets values for iValid,iDirectory,iName and iMode.
+
+@param aDir Full Path of the log file.
+@param aName Name of the log file.
+@param aMode Specifies whether data is appended or file is truncated.
+*/
+	{
+
+	iValid=EFalse;
+	iDirectory=aDir;
+	iName=aName;
+	iMode=aMode;
+	}
+
+/**
+TLogFormatterOverflow class definition
+*/
+
+void TLogFormatter16Overflow::Overflow(TDes16& /*aDes*/)
+/** 
+TDes16Overflow pure virtual 
+This member is internal and not intended for use.
+*/	
+	{
+	}
+
+void TLogFormatter8Overflow::Overflow(TDes8& /*aDes*/)
+/** 
+TDes16Overflow pure virtual 
+This member is internal and not intended for use.
+*/
+	{
+	}
+
+/**
+TLogFormat class definition
+*/
+
+TLogFormatter::TLogFormatter()
+	: iUseDate(ETrue), iUseTime(ETrue)
+/**
+Sets iUseDate and iUseTime to ETrue.
+*/
+	{}
+
+void TLogFormatter::SetDateAndTime(TBool aUseDate, TBool aUseTime)
+/**
+Sets whether to use date and/or time
+*/
+	{
+
+	iUseDate=aUseDate;
+	iUseTime=aUseTime;
+	}
+
+TInt TLogFormatter::FormatTextToWritableBuffer(TDes8& aBuf, const TDesC16& aText) const
+/**
+Returns result in aBuf
+*/
+	{
+
+	TRAPD(ret,WriteL(aBuf,aText));
+	return ret;
+	}
+
+TInt TLogFormatter::FormatTextToWritableBuffer(TDes8& aBuf, const TDesC8& aText) const
+/**
+Returns result in aBuf
+*/
+	{
+
+	TRAPD(ret,WriteL(aBuf,aText));
+	return ret;
+	}
+
+TInt TLogFormatter::ConvertToWritableBuffer(TDes8& aBuf, TRefByValue<const TDesC16> aFmt, VA_LIST& aList)
+/**
+Formats string to aBuf
+*/
+	{
+
+	TBuf16<KLogBufferSize> buf;
+	buf.AppendFormatList(aFmt,aList,&iOverflow16);
+	TRAPD(ret,WriteL(aBuf,buf));
+	return ret;
+	}
+
+TInt TLogFormatter::ConvertToWritableBuffer(TDes8& aBuf, TRefByValue<const TDesC8> aFmt, VA_LIST& aList)
+/**
+Formats string to aBuf
+*/
+	{
+
+	TBuf8<KLogBufferSize> buf;
+	buf.AppendFormatList(aFmt,aList,&iOverflow8);
+	TRAPD(ret,WriteL(aBuf,buf));
+	return ret;
+	}
+
+void TLogFormatter::GetDateAndTimeL(TDes& aDate, TDes& aTime) const
+/**
+Gets date and time according to flags to buffer aBuf
+*/
+	{
+
+	aDate.SetLength(0);
+	aTime.SetLength(0);
+		
+	if (!iUseTime && !iUseDate)
+		return;
+
+	TTime t;
+	t.HomeTime();
+	if (iUseDate)
+		t.FormatL(aDate,KDateFormat);
+	
+	if (iUseTime)
+		t.FormatL(aTime,KTimeFormat);
+	}
+
+void TLogFormatter::WriteL(TDes8& aTrg, const TDesC16& aSrc) const
+/**
+Appends date/time as specified and truncate aSrc and convert 
+unprintable characters to '.'.  Convert unicode to UTF8 and 
+return the result in aTrg
+*/
+	{	
+
+	aTrg.SetLength(0);
+	TBuf16<KDateOrTimeMaxLength> dateBuf;
+	TBuf16<KDateOrTimeMaxLength> timeBuf;
+	GetDateAndTimeL(dateBuf,timeBuf);
+	TBuf16<KLogBufferSize> buf;
+	__ASSERT_DEBUG(buf.MaxLength()>=dateBuf.Length(), User::Invariant());
+	buf.Append(dateBuf);
+	__ASSERT_DEBUG((buf.MaxLength()-buf.Length())>=timeBuf.Length(), User::Invariant());
+	buf.Append(timeBuf);
+	buf.Append(aSrc.Left(Min(aSrc.Length(),(KLogBufferSize-buf.Length()-2))));	// -2 to allow for CRLF
+	TChar ch;
+	for (TInt i=0; i<buf.Length(); i++)
+		{
+		ch=buf[i];
+		if(!((ch.IsPrint()) || (ch==KTabChar)))
+			buf[i]=KFullStopChar;
+		}
+	buf.Append(KEndOfLineCharacters);
+
+	TBuf8<KLogBufferSize> utfBuf;
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(utfBuf,buf);
+	aTrg.Copy(utfBuf.Left(Min(utfBuf.Length(),aTrg.MaxLength())));
+	}
+
+void TLogFormatter::WriteL(TDes8& aTrg, const TDesC8& aSrc) const
+/**
+Append date/time as specified and truncate aSrc and convert 
+unprintable characters to '.'.
+*/
+	{	
+
+	aTrg.SetLength(0);
+	TBuf16<KDateOrTimeMaxLength> dateBuf;
+	TBuf16<KDateOrTimeMaxLength> timeBuf;
+	GetDateAndTimeL(dateBuf,timeBuf);
+	TBuf8<KDateOrTimeMaxLength> eightBitDateBuf;
+	eightBitDateBuf.Copy(dateBuf);
+	TBuf8<KDateOrTimeMaxLength> eightBitTimeBuf;
+	eightBitTimeBuf.Copy(timeBuf);
+	TBuf8<KLogBufferSize> buf;
+	__ASSERT_DEBUG(buf.MaxLength()>=dateBuf.Length(), User::Invariant());
+	buf.Append(eightBitDateBuf);
+	__ASSERT_DEBUG((buf.MaxLength()-buf.Length())>=timeBuf.Length(), User::Invariant());
+	buf.Append(eightBitTimeBuf);
+	buf.Append(aSrc.Left(Min(aSrc.Length(),(KLogBufferSize-buf.Length()-2))));	// -2 to allow for CRLF
+	TChar ch;
+	for (TInt i=0; i<buf.Length(); i++)
+		{
+		ch=buf[i];
+		if(!((ch.IsPrint()) || (ch==KTabChar8)))
+			buf[i]=KFullStopChar8;
+		}
+	buf.Append(KEndOfLineCharacters8);
+	aTrg.Copy(buf.Left(Min(buf.Length(),aTrg.MaxLength())));
+	}