--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyprotocols/csdagt/script/SSCRREAD.CPP Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,268 @@
+// Copyright (c) 2003-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:
+// NetDial Script reader
+//
+//
+
+/**
+ @file Scrread.cpp
+*/
+
+#include "SSCRREAD.H"
+#include "ND_STD.H"
+#include "SLOGGER.H"
+
+// TLinePosition definitions
+
+TLinePosition::TLinePosition(TInt aLineCount,TInt aLineStart,TInt aLineLength,TInt aOffset)
+ : iLineCount(aLineCount), iLineStart(aLineStart), iLineLength(aLineLength), iOffset(aOffset)
+/**
+Constructor for TLinePosition.
+
+@param aLineCount is line count.
+@param aLineStart is line start.
+@param aLineLength is line length.
+@param aOffset is line offset.
+*/
+ {}
+
+TLinePosition& TLinePosition::operator=(const TLinePosition& aLinePosition)
+/**
+TLinePosition =-operator.
+
+@param aLinePosition a reference to line position for comparison.
+*/
+ {
+ iLineCount=aLinePosition.iLineCount;
+ iLineStart=aLinePosition.iLineStart;
+ iLineLength=aLinePosition.iLineLength;
+ iOffset=aLinePosition.iOffset;
+ return (*this);
+ }
+
+void TLinePosition::Reset()
+/**
+Reset.
+*/
+ {
+ iLineCount=0;
+ iLineStart=0;
+ iLineLength=0;
+ iOffset=0;
+ }
+
+// TScriptStatus definitions
+
+TScriptStatus::TScriptStatus(TInt& aOffset,TPtrC& aLine,TBool& aSkip,TBool& aSkipModeToggleReq)
+ : iOffset(aOffset), iLine(aLine), iSkip(aSkip), iSkipModeToggleReq(aSkipModeToggleReq)
+/**
+Constructor for TScriptStatus.
+
+@param aOffset a reference to script offset.
+@param aLine a reference to script line.
+@param aSkip a reference to skip
+@param aSkipModeToggleReq a reference to skip mode toggle.
+*/
+ {}
+
+TScriptStatus::TScriptStatus(const TScriptStatus& aStatus)
+ : iOffset(aStatus.iOffset), iLine(aStatus.iLine), iSkip(aStatus.iSkip), iSkipModeToggleReq(aStatus.iSkipModeToggleReq)
+/**
+Constructor for TScriptStatus.
+
+@param aStatus a reference to script status.
+*/
+ {}
+
+// CScriptReader (NetDial Script Reader) definitions
+
+CScriptReader* CScriptReader::NewL(TInt aBufferSize)
+/**
+2 phased constructor for CScriptReader, first phase.
+
+@param aBufferSize is buffer size for script reader.
+@exception Leaves if ConstructL() leaves, or not enough memory is available.
+@return a new CScriptReader object.
+*/
+ {
+ CScriptReader* p=new(ELeave) CScriptReader();
+ CleanupStack::PushL(p);
+ p->ConstructL(aBufferSize);
+ CleanupStack::Pop();
+ return p;
+ }
+
+CScriptReader::CScriptReader()
+ : iScript(NULL,0), iCurrentPosition()
+/**
+Constructor for CScriptReader, used in the first phase of construction.
+*/
+ {}
+
+void CScriptReader::ConstructL(TInt aBufferSize)
+/**
+Instantiate member variables.
+
+@param aBufferSize is buffer size for script reader.
+*/
+ {
+ __FLOG_STMT(_LIT8(logString,"Script:\tCreating Buffer Of Size %d");)
+ __FLOG_STATIC1(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue<const TDesC8>(logString()),aBufferSize);
+ iScriptBuffer=HBufC::NewL(aBufferSize);
+ TPtr temp=iScriptBuffer->Des();
+ iScript.Set(temp);
+ iLoggingOn=ETrue;
+ }
+
+CScriptReader::~CScriptReader()
+/**
+Destructor.
+Delete members.
+*/
+ {
+ delete iScriptBuffer;
+ }
+
+void CScriptReader::SetScript(const TDesC& aScript)
+/**
+Set script and reset buffers.
+@param aScript a reference to used script.
+*/
+ {
+ iScript.Copy(aScript);
+ iCurrentPosition.Reset();
+ iScriptSet=ETrue;
+ iSkip=EFalse;
+ }
+
+TBool CScriptReader::IsScriptSet() const
+/**
+Set script and reset buffers.
+
+@return iScriptSet flag.
+*/
+ {
+ return iScriptSet;
+ }
+
+TScriptStatus CScriptReader::ScriptStatus()
+/**
+Set script and reset buffers.
+
+@return TScriptStatus.
+*/
+ {
+ return TScriptStatus(iCurrentPosition.iOffset,iCurrentLine,iSkip,iSkipModeToggleReq);
+ }
+
+TInt CScriptReader::GetNextLine()
+/**
+Get next line.
+
+@return current line from GetCurrentLine().
+*/
+ {
+ iCurrentPosition.iLineStart+=iCurrentPosition.iLineLength; // adjust to the start of the next line
+ return GetCurrentLine();
+ }
+
+TInt CScriptReader::GetCurrentLine()
+/**
+Get current line.
+
+@return current line.
+*/
+ {
+ TInt activeLen=iScript.Length()-iCurrentPosition.iLineStart; // length of the script which is still unread
+ if (activeLen==0)
+ return KErrScriptCompleted;
+
+ TPtrC activeDes;
+ activeDes.Set(iScript.Right(activeLen));
+
+ TBool isLastLineWithoutReturn=EFalse;
+ TInt posCR=activeDes.Locate(KCarriageReturn);
+ TInt posLF=activeDes.Locate(KLineFeed);
+ if(posCR==KErrNotFound && posLF==KErrNotFound)
+ isLastLineWithoutReturn=ETrue;
+
+ if (isLastLineWithoutReturn)
+ iCurrentPosition.iLineLength=activeDes.Length();
+ else
+ {
+ if (posCR==KErrNotFound)
+ posCR = KMaxTInt;
+ if (posLF==KErrNotFound)
+ posLF = KMaxTInt;
+ TInt pos = Min(posCR,posLF);
+ iCurrentPosition.iLineLength=pos+1;
+ }
+
+ iCurrentLine.Set(activeDes.Left(iCurrentPosition.iLineLength)); // for script status
+ iCurrentPosition.iOffset=0;
+ iCurrentPosition.iLineCount++;
+ if (iLoggingOn)
+ {
+ TBuf<KLogBufferSize> line;
+ line.Copy(activeDes.Left(Min(KLogBufferSize,iCurrentPosition.iLineLength)));
+ if (iSkip)
+ {
+ __FLOG_STMT(_LIT(logString1,"Script Line #%d:\t[Skip] : %S");)
+ __FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue<const TDesC>(logString1()),iCurrentPosition.iLineCount,&line);
+ }
+ else
+ {
+ __FLOG_STMT(_LIT(logString2,"Script Line #%d:\t%S");)
+ __FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue<const TDesC>(logString2()),iCurrentPosition.iLineCount,&line);
+ }
+ }
+ return KErrNone;
+ }
+
+void CScriptReader::CurrentPos(TLinePosition& aPosition,TInt aOffset)
+/**
+Get the current position and change the offset to aOffset.
+
+@param aPosition a reference to line position.
+@param aOffset is offset.
+*/
+ {
+ aPosition=iCurrentPosition;
+ aPosition.iOffset=aOffset;
+ }
+
+void CScriptReader::SetCurrentPos(TLinePosition aPosition)
+/**
+Set current position to aPos and aLine
+
+@param aPosition is line position.
+*/
+ {
+ iCurrentPosition=aPosition;
+ }
+
+TInt CScriptReader::Reset()
+/**
+Reset counters and flags
+*/
+ {
+ iLoggingOn=ETrue;
+ iCurrentPosition.Reset();
+ TInt ret=GetCurrentLine();
+ __ASSERT_DEBUG(!iScriptSet || ret==KErrNone, User::Invariant());
+ GetCurrentLine();
+ iSkip=EFalse;
+ iSkipModeToggleReq=EFalse;
+ return ret;
+ }