creator/src/creator_scriptentry.cpp
branchRCL_3
changeset 20 fad26422216a
parent 0 d6fe6244b863
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/src/creator_scriptentry.cpp	Wed Sep 01 12:30:35 2010 +0100
@@ -0,0 +1,728 @@
+/*
+* Copyright (c) 2008 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:  
+*
+*/
+
+
+#include "creator_model.h"
+#include "creator_traces.h"
+#include "creator_factory.h"
+
+#include <aknlists.h> 
+#include <AknsSkinInstance.h>
+
+
+#include <data_caging_path_literals.hrh>
+
+
+const TInt KReadBufSize = 8192;
+
+// Creator random data file filter
+_LIT(KRandomDataFileFilter, "*.creatordataxml");
+
+// ---------------------------------------------------------------------------
+
+
+CCommandParser* CCommandParser::NewL(CCreatorEngine* aEngine)
+    {
+    CCommandParser* self = CCommandParser::NewLC(aEngine);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CCommandParser* CCommandParser::NewLC(CCreatorEngine* aEngine)
+    {
+    CCommandParser* self = new (ELeave) CCommandParser;
+    CleanupStack::PushL(self);
+    self->ConstructL(aEngine);
+    return self;
+    }
+
+CCommandParser::CCommandParser()
+	{
+	}
+
+void CCommandParser::ConstructL(CCreatorEngine* aEngine)
+	{
+    LOGSTRING("Creator: CCommandParser::ConstructL");
+
+    iEngine = aEngine;
+
+    iReadBuf = HBufC8::NewL(KReadBufSize);
+	}
+
+CCommandParser::~CCommandParser()
+	{
+    LOGSTRING("Creator: CCommandParser::~CCommandParser");
+
+    if (iSearchArray)
+        delete iSearchArray;
+
+    if (iReadBuf)
+        delete iReadBuf;
+	}
+
+
+// ---------------------------------------------------------------------------
+//#if(!defined __SERIES60_30__ && !defined __SERIES60_31__)
+void CCommandParser::OpenScriptL() {}
+TBool CCommandParser::OpenScriptL(RFile& aScriptFile)
+    {    
+    LOGSTRING("Creator: CCommandParser::OpenScriptL");
+    TBool ret = EFalse;
+
+    // init the search array
+    iSearchArray = new(ELeave) CDesCArrayFlat(500);
+
+    // wait dialog
+    CAknGlobalNote* waitDialog = CAknGlobalNote::NewLC();
+    waitDialog->SetSoftkeys(R_AVKON_SOFTKEYS_CANCEL);
+    TInt dialogId = waitDialog->ShowNoteL(EAknGlobalWaitNote, _L("Searching"));
+
+
+    // search all the .creator files from the phone
+    TInt err;
+    TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\")));
+
+    TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\system\\apps\\Creator\\")));
+
+    TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\data\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\data\\")));
+    
+    TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\documents\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\documents\\")));
+
+    TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\creator\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\creator\\")));
+    
+    TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\scripts\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\scripts\\")));
+    
+    TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\temp\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\temp\\")));
+    
+    TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\system\\temp\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\system\\temp\\")));
+
+    TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\private\\20011383\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\private\\20011383\\")));
+
+    TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\private\\1000484b\\")));
+
+
+    // remove the wait dialog
+    waitDialog->CancelNoteL(dialogId);
+    CleanupStack::PopAndDestroy(); //waitDialog;
+
+
+    if ( iSearchArray->MdcaCount() > 0)
+        {
+        // create a file name array based on the iSearchArray
+        CDesCArray* fileNameArray = new(ELeave) CDesCArrayFlat(iSearchArray->MdcaCount());
+        CleanupStack::PushL(fileNameArray);
+        
+        for (TInt i=0; i<iSearchArray->MdcaCount(); i++)
+            {
+            
+            TParse filename; // file name parser
+            filename.Set(iSearchArray->MdcaPoint(i), NULL, NULL);
+
+            if ( filename.Drive()[0] == 'e' || filename.Drive()[0] == 'E')  // MMC
+                {
+                TFileName nameMMC;
+                nameMMC.Append(filename.Name());
+                nameMMC.Append(_L("\t0"));        // MMC icon
+                fileNameArray->AppendL(nameMMC);
+                }
+            else
+                {
+                fileNameArray->AppendL(filename.Name());
+                }
+            }
+        CleanupStack::Pop(fileNameArray);
+
+
+        // create a popup list
+        CAknSinglePopupMenuStyleListBox* listBox = new(ELeave) CAknSinglePopupMenuStyleListBox;
+        CleanupStack::PushL(listBox);
+        CAknPopupList* popupList = CAknPopupList::NewL( listBox, R_AVKON_SOFTKEYS_SELECT_CANCEL, AknPopupLayouts::EMenuWindow );
+        CleanupStack::PushL(popupList);
+        popupList->SetTitleL(_L("Select script"));
+        listBox->ConstructL( popupList, EAknListBoxSelectionList|EAknListBoxLoopScrolling );
+        listBox->CreateScrollBarFrameL( ETrue );
+        listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+        listBox->Model()->SetItemTextArray( fileNameArray );
+        listBox->Model()->SetOwnershipType( ELbmOwnsItemArray );  // !!!
+        listBox->HandleItemAdditionL();
+
+
+        // define MMC icon 
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+        _LIT( KFLDMemoryCardUiBitmapFile, "z:aknmemorycardui.mbm" );
+        CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 );
+        listBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray );
+
+        TParse* fp = new(ELeave) TParse();
+        fp->Set(KFLDMemoryCardUiBitmapFile, &KDC_APP_BITMAP_DIR, NULL);
+        TFileName resourceFileName( fp->FullName() );
+        delete fp;
+
+        CGulIcon* icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnIndiMmcAdd,
+            resourceFileName,
+            EMbmAknmemorycarduiQgn_indi_mmc_add,
+            EMbmAknmemorycarduiQgn_indi_mmc_add_mask );
+        CleanupStack::PushL( icon );
+        iconArray->AppendL( icon );
+        CleanupStack::Pop( icon );
+
+
+        // execute dialog
+        TBool result = popupList->ExecuteLD();
+        CleanupStack::Pop();  // popupList
+
+        if ( result ) 
+            {
+            // open the file for reading
+            //RFile file;
+            TRAPD(err, aScriptFile.Open(CEikonEnv::Static()->FsSession(), iSearchArray->MdcaPoint(listBox->CurrentItemIndex()), EFileRead));
+            if( err != KErrNone)
+                {
+                aScriptFile.Close();
+                User::Leave(err);
+                }
+            ret = ETrue;
+            }
+        CleanupStack::PopAndDestroy();  //listBox
+        }
+    else  // no scripts found from the search paths
+        {
+        CAknInformationNote* note = new (ELeave) CAknInformationNote;
+        note->ExecuteLD(_L("No scripts found"));
+        }
+
+    delete iSearchArray;
+    iSearchArray = NULL;
+    return ret;
+    }
+/*
+#else
+// ---------------------------------------------------------------------------
+void CCommandParser::OpenScriptL()
+    {
+    LOGSTRING("Creator: CCommandParser::OpenScriptL");
+
+    // init the search array
+    iSearchArray = new(ELeave) CDesCArrayFlat(500);
+
+    // wait dialog
+    CAknGlobalNote* waitDialog = CAknGlobalNote::NewLC();
+    waitDialog->SetSoftkeys(R_AVKON_SOFTKEYS_CANCEL);
+    TInt dialogId = waitDialog->ShowNoteL(EAknGlobalWaitNote, _L("Searching"));
+
+
+    // search all the .creator files from the phone
+    TInt err;
+    TRAP(err, FindFiles(_L("*.creator"), _L("\\")));
+
+    TRAP(err, FindFiles(_L("*.creator"), _L("\\system\\apps\\Creator\\")));
+
+    TRAP(err, FindFiles(_L("*.creator"), _L("\\data\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\data\\")));
+    
+    TRAP(err, FindFiles(_L("*.creator"), _L("\\documents\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\documents\\")));
+
+    TRAP(err, FindFiles(_L("*.creator"), _L("\\creator\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\creator\\")));
+    
+    TRAP(err, FindFiles(_L("*.creator"), _L("\\scripts\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\scripts\\")));
+    
+    TRAP(err, FindFiles(_L("*.creator"), _L("\\temp\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\temp\\")));
+    
+    TRAP(err, FindFiles(_L("*.creator"), _L("\\system\\temp\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\system\\temp\\")));
+
+    TRAP(err, FindFiles(_L("*.creator"), _L("\\private\\101FA751\\")));
+    TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\private\\101FA751\\")));
+
+    TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\private\\1000484b\\")));
+
+
+    // remove the wait dialog
+    waitDialog->CancelNoteL(dialogId);
+    CleanupStack::PopAndDestroy(); //waitDialog;
+
+
+    if ( iSearchArray->MdcaCount() > 0)
+        {
+        // create a file name array based on the iSearchArray
+        CDesCArray* fileNameArray = new(ELeave) CDesCArrayFlat(iSearchArray->MdcaCount());
+        CleanupStack::PushL(fileNameArray);
+        
+        for (TInt i=0; i<iSearchArray->MdcaCount(); i++)
+            {
+            
+            TParse filename; // file name parser
+            filename.Set(iSearchArray->MdcaPoint(i), NULL, NULL);
+
+            if ( filename.Drive()[0] == 'e' || filename.Drive()[0] == 'E')  // MMC
+                {
+                TFileName nameMMC;
+                nameMMC.Append(filename.Name());
+                nameMMC.Append(_L("\t0"));        // MMC icon
+                fileNameArray->AppendL(nameMMC);
+                }
+            else
+                {
+                fileNameArray->AppendL(filename.Name());
+                }
+            }
+        CleanupStack::Pop(fileNameArray);
+
+
+        // create a popup list
+        CAknSinglePopupMenuStyleListBox* listBox = new(ELeave) CAknSinglePopupMenuStyleListBox;
+        CleanupStack::PushL(listBox);
+        CAknPopupList* popupList = CAknPopupList::NewL( listBox, R_AVKON_SOFTKEYS_SELECT_CANCEL, AknPopupLayouts::EMenuWindow );
+        CleanupStack::PushL(popupList);
+        popupList->SetTitleL(_L("Select script"));
+        listBox->ConstructL( popupList, EAknListBoxSelectionList|EAknListBoxLoopScrolling );
+        listBox->CreateScrollBarFrameL( ETrue );
+        listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+        listBox->Model()->SetItemTextArray( fileNameArray );
+        listBox->Model()->SetOwnershipType( ELbmOwnsItemArray );  // !!!
+        listBox->HandleItemAdditionL();
+
+
+        // define MMC icon 
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+        _LIT( KFLDMemoryCardUiBitmapFile, "z:aknmemorycardui.mbm" );
+        CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 );
+        listBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray );
+
+        TParse* fp = new(ELeave) TParse();
+        fp->Set(KFLDMemoryCardUiBitmapFile, &KDC_APP_BITMAP_DIR, NULL);
+        TFileName resourceFileName( fp->FullName() );
+        delete fp;
+
+        CGulIcon* icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnIndiMmcAdd,
+            resourceFileName,
+            EMbmAknmemorycarduiQgn_indi_mmc_add,
+            EMbmAknmemorycarduiQgn_indi_mmc_add_mask );
+        CleanupStack::PushL( icon );
+        iconArray->AppendL( icon );
+        CleanupStack::Pop( icon );
+
+
+        // execute dialog
+        TBool result = popupList->ExecuteLD();
+        CleanupStack::Pop();  // popupList
+
+        if ( result ) 
+            {
+            // open the file for reading
+            RFile file;
+            User::LeaveIfError(file.Open(CEikonEnv::Static()->FsSession(), iSearchArray->MdcaPoint(listBox->CurrentItemIndex()), EFileRead));
+            while (ReadLineFromFileL(file) == KErrNone)
+                {
+                iReadBuf->Des().Trim();  // delete leading and trailing white space
+
+                if (iReadBuf->Length() < 5)  // command too short, ignoring...
+                    {
+                    //CEikonEnv::Static()->InfoMsg(_L("Corrupted line"));
+                    }
+        
+                // check it's a valid line: first char is A-Z and the line ends to ';'
+                else if (iReadBuf->Des()[0] >= 'A' && iReadBuf->Des()[0] <= 'Z' && iReadBuf->Des()[iReadBuf->Length()-1] == ';')
+                    {
+                    // this line is valid -> parse the command
+                    ParseCommandFromDescriptorL();
+                    }
+                else
+                    {
+                    //CEikonEnv::Static()->InfoMsg(_L("Not a valid line"));
+                    }
+
+                }
+
+            file.Close();
+
+            // show a note if there were no valid commands in the script
+            if (iEngine->CommandArrayCount() == 0)
+                {
+                CAknInformationNote* note = new(ELeave) CAknInformationNote;
+                note->ExecuteLD(_L("No valid commands in this script"));
+                }
+
+            }
+
+        CleanupStack::PopAndDestroy();  //listBox
+        }
+    
+    else  // no scripts found from the search paths
+        {
+        CAknInformationNote* note = new (ELeave) CAknInformationNote;
+        note->ExecuteLD(_L("No scripts found"));
+        }
+
+
+    delete iSearchArray;
+    iSearchArray = NULL;
+
+    }
+#endif
+*/
+
+TBool CCommandParser::GetRandomDataFilenameL(TDes& aFilename)
+    {    
+    LOGSTRING("Creator: CCommandParser::GetRandomDataFilenameL");
+    TBool ret = EFalse;
+
+    // init the search array
+    if (iSearchArray)
+    	{
+    	delete iSearchArray;
+    	iSearchArray = NULL;
+    	}
+    iSearchArray = new(ELeave) CDesCArrayFlat(500);
+
+    // wait dialog
+    CAknGlobalNote* waitDialog = CAknGlobalNote::NewLC();
+    waitDialog->SetSoftkeys(R_AVKON_SOFTKEYS_CANCEL);
+    TInt dialogId = waitDialog->ShowNoteL(EAknGlobalWaitNote, _L("Searching"));
+
+
+    // search all the creator random data files from the phone
+    TInt err;
+    TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\")));
+
+    TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\system\\apps\\Creator\\")));
+
+    TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\data\\")));
+    TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\data\\")));
+    
+    TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\documents\\")));
+    TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\documents\\")));
+
+    TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\creator\\")));
+    TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\creator\\")));
+    
+    TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\scripts\\")));
+    TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\scripts\\")));
+    
+    TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\temp\\")));
+    TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\temp\\")));
+    
+    TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\system\\temp\\")));
+    TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\system\\temp\\")));
+
+    TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\private\\20011383\\")));
+    TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\private\\20011383\\")));
+
+    TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\private\\1000484b\\")));
+
+
+    // remove the wait dialog
+    waitDialog->CancelNoteL(dialogId);
+    CleanupStack::PopAndDestroy(); //waitDialog;
+
+
+    if (iSearchArray->MdcaCount() > 0)
+        {
+        // create a file name array based on the iSearchArray
+        CDesCArray* fileNameArray = new(ELeave) CDesCArrayFlat(iSearchArray->MdcaCount() + 1);
+        CleanupStack::PushL(fileNameArray);
+
+        for (TInt i=0; i<iSearchArray->MdcaCount(); i++)
+            {
+            
+            TParse filename; // file name parser
+            filename.Set(iSearchArray->MdcaPoint(i), NULL, NULL);
+
+            if ( filename.Drive()[0] == 'e' || filename.Drive()[0] == 'E')  // MMC
+                {
+                TFileName nameMMC;
+                nameMMC.Append(filename.Name());
+                nameMMC.Append(_L("\t0"));        // MMC icon
+                fileNameArray->AppendL(nameMMC);
+                }
+            else
+                {
+                fileNameArray->AppendL(filename.Name());
+                }
+            }
+
+        // add "default" (resource file) to list
+        fileNameArray->AppendL(_L("Default"));
+
+        CleanupStack::Pop(fileNameArray);
+
+
+        // create a popup list
+        CAknSinglePopupMenuStyleListBox* listBox = new(ELeave) CAknSinglePopupMenuStyleListBox;
+        CleanupStack::PushL(listBox);
+        CAknPopupList* popupList = CAknPopupList::NewL( listBox, R_AVKON_SOFTKEYS_SELECT_CANCEL, AknPopupLayouts::EMenuWindow );
+        CleanupStack::PushL(popupList);
+        popupList->SetTitleL(_L("Select random data file"));
+        listBox->ConstructL( popupList, EAknListBoxSelectionList|EAknListBoxLoopScrolling );
+        listBox->CreateScrollBarFrameL( ETrue );
+        listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+        listBox->Model()->SetItemTextArray( fileNameArray );
+        listBox->Model()->SetOwnershipType( ELbmOwnsItemArray );  // !!!
+        listBox->HandleItemAdditionL();
+
+
+        // define MMC icon 
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+        _LIT( KFLDMemoryCardUiBitmapFile, "z:aknmemorycardui.mbm" );
+        CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 );
+        listBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray );
+
+        TParse* fp = new(ELeave) TParse();
+        fp->Set(KFLDMemoryCardUiBitmapFile, &KDC_APP_BITMAP_DIR, NULL);
+        TFileName resourceFileName( fp->FullName() );
+        delete fp;
+
+        CGulIcon* icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnIndiMmcAdd,
+            resourceFileName,
+            EMbmAknmemorycarduiQgn_indi_mmc_add,
+            EMbmAknmemorycarduiQgn_indi_mmc_add_mask );
+        CleanupStack::PushL( icon );
+        iconArray->AppendL( icon );
+        CleanupStack::Pop( icon );
+
+
+        // execute dialog
+        TBool result = popupList->ExecuteLD();
+        CleanupStack::Pop();  // popupList
+
+        if ( result ) 
+            {
+            if (listBox->CurrentItemIndex() == (fileNameArray->Count() - 1))
+            	{
+            	// "default" (resource file) selected
+            	aFilename.Copy(KNullDesC);
+            	}
+            else
+            	{
+            	// xml file selected
+            	aFilename.Copy(iSearchArray->MdcaPoint(listBox->CurrentItemIndex()));
+            	}
+            ret = ETrue;
+            }
+        CleanupStack::PopAndDestroy();  //listBox
+        }
+    else  // no random data files found from the search paths
+        {
+        CAknInformationNote* note = new (ELeave) CAknInformationNote;
+        note->ExecuteLD(_L("No random data files found"));
+        }
+
+    delete iSearchArray;
+    iSearchArray = NULL;
+    return ret;
+    }
+
+TInt CCommandParser::FindFilesRecursiveL(const TDesC& aFileName, const TDesC& aPath)
+    {
+    return CreatorFileUtils::FindFilesRecursiveL(iSearchArray, aFileName, aPath);
+    }
+TInt CreatorFileUtils::FindFilesRecursiveL(CDesCArrayFlat* aFileArray, const TDesC& aFileName, const TDesC& aPath)
+	{
+    TInt err = KErrNone;
+    CDirScan* scan = CDirScan::NewLC(CEikonEnv::Static()->FsSession());
+    scan->SetScanDataL(aPath, KEntryAttDir, ESortNone);
+    CDir* dirEntries = NULL;
+
+    for(;;)
+        {
+        TRAP(err, scan->NextL(dirEntries));
+        if (!dirEntries  || (err!=KErrNone))
+            break;
+
+        for (TInt i=0; i<dirEntries->Count(); i++) 
+            {
+            TFileName path(scan->FullPath());
+            path.Append((*dirEntries)[i].iName);
+            path.Append(_L("\\"));
+            FindFiles(aFileArray, aFileName, path);
+            }
+        delete(dirEntries);
+        }
+
+    CleanupStack::PopAndDestroy(scan);
+    return err;
+    }
+
+TInt CreatorFileUtils::FindFiles(CDesCArrayFlat* aFileArray, const TDesC& aFileName, const TDesC& aPath)
+    {
+    TFindFile fileFinder(CEikonEnv::Static()->FsSession());
+    CDir* fileList; 
+    TInt err = fileFinder.FindWildByDir(aFileName, aPath, fileList);
+
+    while (err == KErrNone)
+        {
+        for (TInt i=0; i<fileList->Count(); i++)
+            {
+            TParse fullentry;
+            fullentry.Set((*fileList)[i].iName, &fileFinder.File(), NULL);
+            
+            TRAP(err, aFileArray->AppendL(fullentry.FullName())); 
+            }
+
+        delete fileList;
+        err = fileFinder.FindWild(fileList);
+        }
+    return err;
+    }
+// ---------------------------------------------------------------------------
+
+TInt CCommandParser::FindFiles(const TDesC& aFileName, const TDesC& aPath)
+    {
+    return CreatorFileUtils::FindFiles(iSearchArray, aFileName, aPath);
+    }
+
+// ---------------------------------------------------------------------------
+
+TInt CCommandParser::ReadLineFromFileL(RFile& aInputFile)
+    {
+    LOGSTRING("Creator: CCommandParser::ReadLineFromFile");
+
+	_LIT8(KImcvCRLF, "\r\n");
+
+    TInt err = KErrNone;
+
+    //  Read into the buffer
+    HBufC8* tempLine = HBufC8::NewLC(KReadBufSize);
+    TPtr8 buffer = tempLine->Des();
+
+    // clear the targer
+    iReadBuf->Des().Copy(_L(""));
+
+    //  Get the current file position
+    TInt filePos = 0;
+    aInputFile.Seek(ESeekCurrent, filePos);
+
+    //  Read the buffer
+    err = aInputFile.Read(buffer);
+
+    //end of file?
+    TInt s = buffer.Length();
+    if  ( s == 0)
+        err = KErrEof;
+
+    if  (err == KErrNone)
+        {
+        //  Copy to the lfcr and then set the file pointer to the point after that
+        TInt pos = buffer.Find(KImcvCRLF);
+        if      ( pos != -1)
+            {
+            iReadBuf->Des().Justify(buffer, pos, ELeft, ' ');
+            filePos += (pos+2);
+
+            //  Set the file pointer back to after the lfcr
+            aInputFile.Seek(ESeekStart, filePos);
+            }
+        //  Else fill the whole buffer
+        else
+            {
+            iReadBuf->Des().Copy(buffer);
+            }
+        }
+
+    CleanupStack::PopAndDestroy(); // tempLine
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+
+void CCommandParser::StrParserL(HBufC*& aDestinationBuf, TUint aToken)
+    {
+    // store old position
+	iParserOldPosition = iParserPosition;
+
+    // make sure we are not reading outside of buffer
+    if (iParserPosition >= iReadBuf->Length() - 1)
+        return;
+    
+    // read until asked token
+	do
+	    {
+	    iParserPosition++;
+	    }
+	while (iReadBuf->Des()[iParserPosition] != aToken && iParserPosition < iReadBuf->Des().Length()-1);
+	
+	// calculate length of the destination buffer
+	TInt bufferLength = iParserPosition-iParserOldPosition-1;
+	
+	// reset the destination buffer
+	if (aDestinationBuf)
+	    {
+        delete aDestinationBuf;
+        aDestinationBuf = NULL;
+	    }
+
+    // allocate memory for the destination buffer
+	aDestinationBuf = HBufC::NewL(bufferLength);
+
+	// copy data from the read buffer to the destination buffer
+    aDestinationBuf->Des().Copy(iReadBuf->Des().Mid(iParserOldPosition+1, bufferLength));
+    }
+
+// ---------------------------------------------------------------------------
+
+void CCommandParser::StrParserL(HBufC8*& aDestinationBuf, TUint aToken)
+    {
+    // store old position
+	iParserOldPosition = iParserPosition;
+
+    // make sure we are not reading outside of buffer
+    if (iParserPosition >= iReadBuf->Length() - 1)
+        return;
+    
+    // read until asked token
+	do
+	    {
+	    iParserPosition++;
+	    }
+	while (iReadBuf->Des()[iParserPosition] != aToken && iParserPosition < iReadBuf->Des().Length()-1);
+	
+	// calculate length of the destination buffer
+	TInt bufferLength = iParserPosition-iParserOldPosition-1;
+	
+	// reset the destination buffer
+	if (aDestinationBuf)
+	    {
+        delete aDestinationBuf;
+        aDestinationBuf = NULL;
+	    }
+
+    // allocate memory for the destination buffer
+	aDestinationBuf = HBufC8::NewL(bufferLength);
+
+	// copy data from the read buffer to the destination buffer
+    aDestinationBuf->Des().Copy(iReadBuf->Des().Mid(iParserOldPosition+1, bufferLength));
+    }
+
+//----------------------------------------------------------------------------
+
+void CCommandParser::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) // from MMsvSessionObserver
+    {
+    }
+
+//----------------------------------------------------------------------------
+