Add MMP files to build libOpenVG_sw.lib which uses LINKAS to redirect to libOpenVG.dll (and
the same for libEGL_sw.lib and libOpenVGU_sw.lib).
Only the libEGL_sw.lib redirection isn't activated - this can't happen until there is a merged
libEGL.dll which supports the OpenWF synchronisation and also implements the graphical support functions.
The overall aim is to eliminate the *_sw.dll implementations, at least as a compile-time way of choosing
a software-only implementation.The correct way to choose is to put the right set of libraries into a ROM
with suitable renaming, and in the emulator to use the "switching DLL" technique to pick the right set.
As the Symbian Foundation doesn't have any alternative implementations, we don't need the switching DLLs
and we can build directly to the correct name.
/*
* Copyright (c) 2005-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:
*
*/
#include "DataWrapperBase.h"
/*@{*/
/// Constant Literals used.
_LIT(KIncludeSection, "include");
_LIT(KFile, "file%d");
_LIT(KMatch, "*{*,*}*");
_LIT(KStart, "{");
_LIT(KSeparator, ",");
_LIT(KEnd, "}");
_LIT(KDataRead, "INI READ : %S %S %S");
_LIT(KFormatEntryField, "%S_%S");
_LIT(KTagFontSpecName, "name");
_LIT(KTagFontSpecHeight, "height");
_LIT(KTagPointX, "x");
_LIT(KTagPointY, "y");
_LIT(KTagRectTop, "top");
_LIT(KTagRectLeft, "left");
_LIT(KTagRectBottom, "bottom");
_LIT(KTagRectRight, "right");
_LIT(KTagRgbRed, "red");
_LIT(KTagRgbGreen, "green");
_LIT(KTagRgbBlue, "blue");
_LIT(KTagRgbAlpha, "alpha");
_LIT(KTagSizeWidth, "width");
_LIT(KTagSizeHeight, "height");
_LIT(KTagWsGraphicIdUid, "uid");
_LIT(KTagWsGraphicIdId, "id");
_LIT(KTagWsGraphicIdName, "name");
_LIT(KFormatFieldNumber, "%S%d");
/// Logging
_LIT(KLogMissingParameter, "Missing parameter '%S'");
_LIT(KLogRegion, "Region '%S'");
_LIT(KLogEmpty, "Empty");
_LIT(KLogRegionsRect, "Rect[%d] tl=(%d,%d) br=(%d,%d)");
_LIT(KLogRect, "%S tl=(%d,%d) br=(%d,%d)");
/*@}*/
CDataWrapperBase::CDataWrapperBase()
: CDataWrapper()
, iHandle(0)
, iId(TWsGraphicId::EUninitialized)
{
}
CDataWrapperBase::~CDataWrapperBase()
/**
* Public destructor
*/
{
iInclude.ResetAndDestroy();
iBuffer.ResetAndDestroy();
iFs.Close();
}
void CDataWrapperBase::InitialiseL()
{
CDataWrapper::InitialiseL();
TBuf<KMaxTestExecuteCommandLength> tempStore;
TPtrC fileName;
TBool moreData=ETrue;
TBool index=0;
while ( moreData )
{
tempStore.Format(KFile(), ++index);
moreData=GetStringFromConfig(KIncludeSection, tempStore, fileName);
if (moreData)
{
CIniData* iniData=CIniData::NewL(fileName);
CleanupStack::PushL(iniData);
iInclude.Append(iniData);
CleanupStack::Pop(iniData);
}
}
User::LeaveIfError(iFs.Connect());
}
TBool CDataWrapperBase::GetBoolFromConfig(const TDesC& aSectName,const TDesC& aKeyName,TBool& aResult)
{
TBool ret=EFalse;
TPtrC result;
TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, result));
if ( err != KErrNone )
{
ret=EFalse;
}
if ( ret )
{
_LIT(KTrue,"true");
aResult=(result.FindF(KTrue) != KErrNotFound);
}
return ret;
}
TBool CDataWrapperBase::GetFontSpecFromConfig(const TDesC& aSectName,const TDesC& aKeyName,TFontSpec& aResult)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
TPtrC name;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagFontSpecName);
TBool ret=GetStringFromConfig(aSectName, tempStore, name);
TInt height;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagFontSpecHeight);
if ( !GetIntFromConfig(aSectName, tempStore, height) )
{
ret=EFalse;
}
if ( ret )
{
aResult=TFontSpec(name, height);
}
return ret;
}
TBool CDataWrapperBase::GetIntFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt& aResult)
{
TPtrC result;
TBool ret=EFalse;
TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, result));
if ( err != KErrNone )
{
ret=EFalse;
}
if ( ret )
{
TLex lex(result);
ret=(lex.Val(aResult)==KErrNone);
}
return ret;
}
TBool CDataWrapperBase::GetStringFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TPtrC& aResult)
{
TBool ret=EFalse;
TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, aResult));
if ( err != KErrNone )
{
ret=EFalse;
}
return ret;
}
TBool CDataWrapperBase::GetHexFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt& aResult)
{
TPtrC result;
TBool ret=EFalse;
TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, result));
if ( err != KErrNone )
{
ret=EFalse;
}
if ( ret )
{
TLex lex(result);
ret=(lex.Val((TUint &)aResult, EHex)==KErrNone);
}
return ret;
}
TBool CDataWrapperBase::GetPointFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TPoint& aResult)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
TInt x;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagPointX);
TBool ret=GetIntFromConfig(aSectName, tempStore, x);
TInt y;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagPointY);
if ( !GetIntFromConfig(aSectName, tempStore, y) )
{
ret=EFalse;
}
if ( ret )
{
aResult.SetXY(x, y);
}
return ret;
}
TBool CDataWrapperBase::GetRectFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TRect& aResult)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
TInt top;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagRectTop);
TBool ret=GetIntFromConfig(aSectName, tempStore, top);
TInt left;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagRectLeft);
if ( !GetIntFromConfig(aSectName, tempStore, left) )
{
ret=EFalse;
}
TInt bottom;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagRectBottom);
if ( !GetIntFromConfig(aSectName, tempStore, bottom) )
{
ret=EFalse;
}
TInt right;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagRectRight);
if ( !GetIntFromConfig(aSectName, tempStore, right) )
{
ret=EFalse;
}
if ( ret )
{
aResult.SetRect(left, top, right, bottom);
}
return ret;
}
TBool CDataWrapperBase::GetRegionFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TRegion& aResult)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
TRect rect;
aResult.Clear();
TBool moreData=ETrue;
for ( TInt index=0; moreData; )
{
tempStore.Format(KFormatFieldNumber, &aKeyName, ++index);
moreData=GetRectFromConfig(aSectName, tempStore, rect);
if ( moreData )
{
aResult.AddRect(rect);
}
}
return aResult.Count()>0;
}
TBool CDataWrapperBase::GetRgbFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TRgb& aResult)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
TInt red;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagRgbRed);
TBool ret=GetIntFromConfig(aSectName, tempStore, red);
TInt green;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagRgbGreen);
if ( !GetIntFromConfig(aSectName, tempStore, green) )
{
ret=EFalse;
}
TInt blue;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagRgbBlue);
if ( !GetIntFromConfig(aSectName, tempStore, blue) )
{
ret=EFalse;
}
if ( ret )
{
aResult.SetRed(red);
aResult.SetGreen(green);
aResult.SetBlue(blue);
TInt alpha;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagRgbAlpha);
if ( GetIntFromConfig(aSectName, tempStore, alpha) )
{
aResult.SetAlpha(alpha);
}
}
return ret;
}
TBool CDataWrapperBase::GetSizeFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TSize& aResult)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
TInt width;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagSizeWidth);
TBool ret=GetIntFromConfig(aSectName, tempStore, width);
TInt height;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagSizeHeight);
if ( !GetIntFromConfig(aSectName, tempStore, height) )
{
ret=EFalse;
}
if ( ret )
{
aResult.SetSize(width, height);
}
return ret;
}
TBool CDataWrapperBase::GetRgbListFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt aSize, TRgb*& aResult)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
TBool ok=ETrue;
for ( TInt index=0; (index<aSize) && (ok); )
{
tempStore.Format(KFormatFieldNumber, &aKeyName, ++index);
ok=GetRgbFromConfig(aSectName, tempStore, aResult[index-1]);
if ( !ok )
{
ERR_PRINTF2(KLogMissingParameter, &tempStore);
SetBlockResult(EFail);
}
}
return ok;
}
TBool CDataWrapperBase::GetPointListFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt aSize, TPoint*& aResult)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
TBool ok=ETrue;
for ( TInt index=0; (index<aSize) && (ok); )
{
tempStore.Format(KFormatFieldNumber, &aKeyName, ++index);
ok=GetPointFromConfig(aSectName, tempStore, aResult[index-1]);
if ( !ok )
{
ERR_PRINTF2(KLogMissingParameter, &tempStore);
SetBlockResult(EFail);
}
}
return ok;
}
TBool CDataWrapperBase::GetPointListFromConfigL(const TDesC& aSectName, const TDesC& aKeyName, CArrayFix<TPoint>& aResult)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
TPoint point;
aResult.Reset();
TBool ok=ETrue;
for ( TInt index=0; ok; )
{
tempStore.Format(KFormatFieldNumber, &aKeyName, ++index);
ok=GetPointFromConfig(aSectName, tempStore, point);
if ( ok )
{
aResult.AppendL(point);
}
}
return aResult.Count()>0;
}
TBool CDataWrapperBase::GetCommandStringParameterL(const TDesC& aSectName, const TDesC& aKeyName, TPtrC& aResult)
{
TBool ret=EFalse;
if ( aSectName.Length()!=0 )
{
ret=CDataWrapper::GetStringFromConfig(aSectName, aKeyName, aResult);
for ( TInt index=iInclude.Count(); (index>0) && (!ret); )
{
ret=iInclude[--index]->FindVar(aSectName, aKeyName, aResult);
}
}
if ( ret )
{
if ( aResult.Match(KMatch)!=KErrNotFound )
{
// We have an entry of the format
// entry =*{section,entry}*
// where * is one or more characters
// We need to construct this from other data in the ini file replacing {*,*}
// with the data from
// [section]
// entry =some_value
HBufC* buffer=HBufC::NewLC(aResult.Length());
buffer->Des().Copy(aResult);
TInt startLength=KStart().Length();
TInt sparatorLength=KSeparator().Length();
TInt endLength=KEnd().Length();
TInt bufferLength;
TInt start;
TInt sparator;
TInt end;
TPtrC remaining;
TLex lex;
do
{
bufferLength=buffer->Length();
start=buffer->Find(KStart);
remaining.Set(buffer->Des().Right(bufferLength-start-startLength));
sparator=remaining.Find(KSeparator);
remaining.Set(remaining.Right(remaining.Length()-sparator-sparatorLength));
sparator += (start + startLength);
end=remaining.Find(KEnd) + sparator + sparatorLength;
TPtrC sectionName(buffer->Ptr()+start+startLength, sparator-start-startLength);
TPtrC keyName(buffer->Ptr()+sparator+sparatorLength, end-sparator-sparatorLength);
sectionName.Set(TLex(sectionName).NextToken());
keyName.Set(TLex(keyName).NextToken());
TInt entrySize=0;
TPtrC entryData;
TBool found=CDataWrapper::GetStringFromConfig(sectionName, keyName, entryData);
for ( TInt index=iInclude.Count(); (index>0) && (!found); )
{
found=iInclude[--index]->FindVar(sectionName, keyName, entryData);
}
if ( found )
{
entrySize=entryData.Length();
}
TInt newLength=start + bufferLength - end - endLength + entrySize;
HBufC* bufferNew=HBufC::NewLC(newLength);
bufferNew->Des().Copy(buffer->Ptr(), start);
if ( entrySize>0 )
{
bufferNew->Des().Append(entryData);
}
bufferNew->Des().Append(buffer->Ptr() + end + endLength, bufferLength - end - endLength);
CleanupStack::Pop(bufferNew);
CleanupStack::PopAndDestroy(buffer);
buffer=bufferNew;
CleanupStack::PushL(buffer);
}
while ( buffer->Match(KMatch)!=KErrNotFound );
iBuffer.Append(buffer);
CleanupStack::Pop(buffer);
aResult.Set(*buffer);
INFO_PRINTF4(KDataRead, &aSectName, &aKeyName , &aResult);
}
}
return ret;
}
TBool CDataWrapperBase::GetWsGraphicIdFromConfigL(const TDesC& aSectName, const TDesC& aKeyName, TWsGraphicId& aResult)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
TInt id;
tempStore.Format(KFormatEntryField, &aKeyName, &KTagWsGraphicIdUid);
TBool ret=GetIntFromConfig(aSectName, tempStore, id);
if ( ret )
{
TUid uid=TUid::Uid(id);
aResult.Set(uid);
}
else
{
tempStore.Format(KFormatEntryField, &aKeyName, &KTagWsGraphicIdId);
ret=GetIntFromConfig(aSectName, tempStore, id);
if ( ret )
{
aResult.Set(id);
}
else
{
tempStore.Format(KFormatEntryField, &aKeyName, &KTagWsGraphicIdName);
TPtrC name;
ret=GetStringFromConfig(aSectName, tempStore, name);
if ( ret )
{
CDataWrapperBase* wrapper=static_cast<CDataWrapperBase*>(GetDataWrapperL(name));
aResult=wrapper->GetId();
}
}
}
return ret;
}
TBool CDataWrapperBase::GetDateTimeFromConfig(const TDesC& aSectName, TDateTime& aResult)
{
TInt year , month , day , hour , minute, second, microsecond ;
// Fields
_LIT(KYear, "year");
_LIT(KMonth, "month");
_LIT(KDay, "day");
_LIT(KHour, "hour");
_LIT(KMinute, "minute");
_LIT(KSecond, "second");
_LIT(KMicrosecond, "microsecond");
TBool ret = ETrue ;
if ( !GetIntFromConfig( aSectName, KYear , year))
{
ret=EFalse;
}
if ( !GetIntFromConfig( aSectName, KMonth , month))
{
ret=EFalse;
}
if ( !GetIntFromConfig( aSectName, KDay, day))
{
ret=EFalse;
}
if ( !GetIntFromConfig( aSectName, KHour, hour))
{
ret=EFalse;
}
if ( !GetIntFromConfig( aSectName, KMinute , minute))
{
ret=EFalse;
}
if ( !GetIntFromConfig( aSectName, KSecond , second))
{
ret=EFalse;
}
if ( !GetIntFromConfig( aSectName, KMicrosecond , microsecond))
{
ret=EFalse;
}
if ( ret )
{
TMonth amonth ;
switch (month)
{
case 1:
amonth = EJanuary ;
break ;
case 2:
amonth = EFebruary ;
break ;
case 3 :
amonth = EMarch ;
break ;
case 4:
amonth = EApril ;
break ;
case 5:
amonth = EMay ;
break ;
case 6 :
amonth = EJune ;
break ;
case 7 :
amonth = EJuly ;
break ;
case 8 :
amonth = EAugust ;
break ;
case 9 :
amonth = ESeptember ;
break ;
case 10 :
amonth = EOctober ;
break ;
case 11 :
amonth = ENovember ;
break ;
case 12:
amonth = EDecember ;
break ;
default :
return ret ;
}
aResult.Set(year,amonth ,day,hour,minute,second,microsecond);
}
return ret ;
}
void CDataWrapperBase::LogRegion(const TDesC& aMessage, const TRegion& aRegion)
{
INFO_PRINTF2(KLogRegion, &aMessage);
TInt indCount = aRegion.Count();
if ( indCount==0 )
{
INFO_PRINTF1(KLogEmpty);
}
else
{
const TRect* rect=aRegion.RectangleList();
for ( TInt index=0; index<indCount; ++index )
{
INFO_PRINTF6(KLogRegionsRect, index, rect[index].iTl.iX, rect[index].iTl.iY, rect[index].iBr.iX, rect[index].iBr.iY);
}
}
}
void CDataWrapperBase::LogRect(const TDesC& aMessage, const TRect& aRect)
{
INFO_PRINTF6(KLogRect, &aMessage, aRect.iTl.iX, aRect.iTl.iY, aRect.iBr.iX, aRect.iBr.iY);
}