--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fax/faxclientandserver/FAXCLI/CFAXTSRC.CPP Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,262 @@
+// 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 "CFAX32.H"
+
+/********************************************************************/
+
+CFaxTransferSource *CFaxTransferSource::NewLC()
+ {
+ CFaxTransferSource *self = new(ELeave) CFaxTransferSource;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+/********************************************************************/
+
+CFaxTransferSource *CFaxTransferSource::NewL()
+ {
+ CFaxTransferSource *self = NewLC();
+ CleanupStack::Pop();
+ return self;
+ }
+/********************************************************************/
+
+void CFaxTransferSource::ConstructL ()
+ {
+ iSources = CBufSeg::NewL (256);
+ }
+/********************************************************************/
+
+CFaxTransferSource::~CFaxTransferSource ()
+ {
+ delete iSources;
+ iSources = NULL;
+ }
+/********************************************************************/
+
+// we come here with a document and a page or range of pages
+//EXPORT_C void CFaxTransferSource::AddSourceL (const TFileName & aFaxPageStore, const TFileName & aFaxPageStore2)
+// {
+// AddSourceL(aFaxPageStore,1);
+// AddSourceL(aFaxPageStore2,1);
+// iFaxPages=iFaxPages/2;
+// }
+
+EXPORT_C void CFaxTransferSource::AddSourceL (const TFileName & aFaxPageStore, TFaxPreferredCompression aPreferredCompression)
+/**
+@capability WriteUserData
+*/
+ {
+ AddSourceL (aFaxPageStore, 1, aPreferredCompression);
+ }
+
+EXPORT_C void CFaxTransferSource::AddSourceL (const TFileName & aFaxPageStore, TInt aStartPage, TFaxPreferredCompression aPreferredCompression)
+/**
+@capability WriteUserData
+*/
+ {
+ if (aStartPage < 1)
+ User::Leave (KErrUnderflow);
+ TInt lastPage = OpenFaxOutL (aFaxPageStore);
+ CloseFaxStore ();
+ AddSourceL (aFaxPageStore, aStartPage, lastPage, aPreferredCompression);
+ }
+
+EXPORT_C void CFaxTransferSource::AddSourceL (const TFileName & aFaxPageStore, TInt aStartPage, TInt aEndPage, TFaxPreferredCompression aPreferredCompression)
+/**
+@capability WriteUserData
+*/
+ {
+ iPage = 0;
+ if (aStartPage < 1)
+ User::Leave (KErrUnderflow);
+ else
+ {
+ if (aStartPage > aEndPage)
+ User::Leave (KErrOverflow);
+ else
+ {
+ iOurFaxEntry.iFaxPageStore = aFaxPageStore;
+ iOurFaxEntry.iStartPage = aStartPage;
+ iOurFaxEntry.iPageCount = (aEndPage - aStartPage + 1);
+
+ iOutstream.Append (*iSources);
+ iOutstream << iOurFaxEntry;
+ iOutstream.CommitL ();
+
+ iFaxListEntries++;
+ iFaxPages += iOurFaxEntry.iPageCount;
+ iOurPreferredCompression=aPreferredCompression;
+ }
+ }
+ }
+/********************************************************************/
+
+EXPORT_C void CFaxTransferSource::RemoveAllSources ()
+/**
+@capability WriteUserData
+*/
+ {
+ iFaxPages = 0;
+ iFaxListEntries = 0;
+ iSources->Reset ();
+ }
+/********************************************************************/
+
+// this gets the next page of the fax
+// and makes it all ready to be sent
+
+// the iInstream is opened already, and
+// we never call this if iFaxListEntries
+// and iOurFaxEntry.iPageCount are both zero
+
+void CFaxTransferSource::GetNextPageReadyL ()
+ {
+ // if no pages in a current open document we need to get the next doc
+
+ if (iOurFaxEntry.iPageCount == 0)
+ {
+
+ // if page count is 0 we haven't started yet
+ // otherwise close the finished document
+ // then read the next entry in
+ // mark one less entry to deal with
+ // and open the next document
+
+ if (iPage != 0)
+ CloseFaxStore ();
+
+ iInstream >> iOurFaxEntry;
+
+ --iFaxListEntries;
+ OpenFaxOutL (iOurFaxEntry.iFaxPageStore);
+
+ // skip pages if we don't send from page 1
+
+ for (--iOurFaxEntry.iStartPage; iOurFaxEntry.iStartPage; --iOurFaxEntry.iStartPage)
+ ReadPageParmsL ();
+ }
+ ReadPageParmsL ();
+ iPage++;
+ --iOurFaxEntry.iPageCount;
+ }
+/********************************************************************/
+
+void CFaxTransferSource::OpenFaxInL (const TDesC & aFileName)
+ {
+ if (iWriteFaxFile == NULL)
+ iWriteFaxFile = CWriteFaxFile::NewL ();
+ iWriteFaxFile->OpenL (aFileName, 0);
+ }
+
+void CFaxTransferSource::PagePrepare ()
+ {
+ iLines = 0;
+ ++iPage;
+ }
+
+void CFaxTransferSource::WriteFaxDataL (const TDesC8 & aBuffer)
+ {
+ iWriteFaxFile->iWriteFaxPages->AddEncodedScanLineL (aBuffer);
+ if (aBuffer.Length () != KMaxT4Des)
+ iLines++;
+ }
+
+void CFaxTransferSource::WritePageParmsL (TFaxBufSenderId & aSenderId)
+ {
+ iWriteFaxFile->iWriteFaxPages->EndPageL (TFaxResolution (iResolu), aSenderId, TFaxCompression (iCompression));
+ iWriteFaxFile->CommitL ();
+ }
+
+void CFaxTransferSource::CloseFaxInStore ()
+ {
+ iWriteFaxFile->Close (); // was CloseL till 6/3/97
+ delete iWriteFaxFile;
+ iWriteFaxFile = NULL;
+ }
+/*******************************************************************/
+
+TInt CFaxTransferSource::OpenFaxOutL (const TDesC & aFileName)
+ {
+ CReadFaxFile *fax = iReadFaxFile;
+ if (fax == NULL)
+ iReadFaxFile = fax = CReadFaxFile::NewL ();
+ fax->OpenL (aFileName);
+ iPageInCurrentFile = 0;
+ return (fax->iReadFaxPages->NumPages ());
+ }
+
+TInt CFaxTransferSource::NextPageFind ()
+ {
+ return (iReadFaxFile->iReadFaxPages->NumPages ()) - iPageInCurrentFile;
+ }
+
+void CFaxTransferSource::ReadPageParmsL ()
+ {
+ CReadFaxPages & pages = *iReadFaxFile->iReadFaxPages;
+ pages.SetPageL (iPageInCurrentFile++);
+ const TFaxPageInfo & info = pages.CurrentPageInfo ();
+ iLines = info.iNumScanLines;
+ iResolu = info.iResolution;
+ iCompression = info.iCompression;
+ }
+
+void CFaxTransferSource::ReadFaxData(TDes8& aBuffer)
+ {
+ // Discard the following error
+ TRAP_IGNORE(iReadFaxFile->iReadFaxPages->GetEncodedScanLineL(aBuffer));
+ }
+
+void CFaxTransferSource::PreviousPageFindL()
+ {
+ --iPageInCurrentFile;
+ ReadPageParmsL();
+ }
+
+void CFaxTransferSource::CloseFaxStore ()
+ {
+ if (iReadFaxFile != NULL)
+ {
+ iReadFaxFile->Close ();
+ delete iReadFaxFile;
+ iReadFaxFile = NULL;
+ }
+ }
+
+
+/*******************************************************************/
+
+// we've also got a small subclass to handle the details of pages in the fax
+
+void TFaxEntry::ExternalizeL (RWriteStream & aStream) const
+ {
+ aStream << iFaxPageStore;
+ aStream.WriteUint8L (iStartPage);
+ aStream.WriteUint8L (iPageCount);
+ }
+
+void TFaxEntry::InternalizeL (RReadStream & aStream)
+ {
+ aStream >> iFaxPageStore;
+ iStartPage = aStream.ReadUint8L ();
+ iPageCount = aStream.ReadUint8L ();
+ }
+/********************************************************************/