--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/rofsbuild/r_obey.h Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,284 @@
+/*
+* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* @internalComponent * @released
+* OBY file reader and processing class Definition.
+*
+*/
+
+
+#ifndef __R_OBEY_H__
+#define __R_OBEY_H__
+
+#define __REFERENCE_CAPABILITY_NAMES__
+
+#ifdef _MSC_VER
+#pragma warning(disable:4503)
+#endif
+
+#if defined(__MSVCDOTNET__) || defined(__TOOLS2__)
+#include <fstream>
+#else
+#include <fstream.h>
+#endif
+
+#include <stdio.h>
+#include <e32capability.h>
+
+#ifdef _L
+#undef _L
+#endif
+
+#include <vector>
+#include <map>
+#include <kernel/kernboot.h>
+
+//
+const TUint32 KNumWords=16;
+//
+const TInt KDefaultRomSize=0x400000;
+const TInt KDefaultRomAlign=0x10;
+//
+
+typedef std::string String;
+typedef std::vector<String> StringVector;
+typedef std::map<String, StringVector> KeywordMap;
+
+enum EKeyword
+{
+ EKeywordNone=0, // backwards compatibility, but now ignored
+ EKeywordFile,
+ EKeywordData,
+ EKeywordRofsName,
+ EKeywordExtensionRofs,
+ EKeywordCoreRofsName,
+ EKeywordRomSize,
+ EKeywordAlias,
+ EKeywordHide,
+ EKeywordRename,
+ EKeywordRofsSize,
+ EKeywordRofsChecksum,
+ EKeywordVersion,
+ EKeywordTime,
+ EKeywordRomChecksum,
+ EKeywordTrace,
+ EKeywordCoreImage,
+ EKeywordRofsAutoSize,
+ EKeywordFileCompress,
+ EKeywordFileUncompress,
+ EKeywordHideV2,
+ EKeywordPatchDllData,
+ EKeywordPagingOverride,
+ EKeywordCodePagingOverride,
+ EKeywordDataPagingOverride,
+ // Added to support data drive images.
+ EKeywordDataImageName,
+ EKeywordDataImageFileSystem,
+ EKeywordDataImageSize,
+ EKeywordDataImageVolume,
+ EKeywordDataImageSectorSize,
+ EKeywordDataImageNoOfFats,
+ EKeywordSmrImageName,
+ EKeywordSmrFileData,
+ EKeywordSmrFormatVersion,
+ EKeywordSmrFlags,
+ EKeywordSmrUID
+
+};
+
+enum EFileAttribute {
+ EAttributeAtt,
+ EAttributeAttExtra,
+// EAttributeCompress,
+ EAttributeStack,
+ EAttributeFixed,
+ EAttributePriority,
+ EAttributeUid1,
+ EAttributeUid2,
+ EAttributeUid3,
+ EAttributeHeapMin,
+ EAttributeHeapMax,
+ EAttributeCapability,
+ EAttributeUnpaged,
+ EAttributePaged,
+ EAttributeUnpagedCode,
+ EAttributePagedCode,
+ EAttributeUnpagedData,
+ EAttributePagedData,
+ };
+
+#include "r_romnode.h"
+#include "r_rofs.h"
+
+class MRofsImage;
+
+struct ObeyFileKeyword
+ {
+ const char* iKeyword;
+ size_t iKeywordLength;
+ TInt iPass;
+ TInt iNumArgs; // -ve means >= number
+ enum EKeyword iKeywordEnum;
+ const char* iHelpText;
+ };
+
+struct FileAttributeKeyword
+ {
+ const char* iKeyword;
+ size_t iKeywordLength;
+ TInt iIsFileAttribute;
+ TInt iNumArgs;
+ enum EFileAttribute iAttributeEnum;
+ const char* iHelpText;
+ };
+
+class ObeyFileReader
+ {
+public:
+ ObeyFileReader(TText *aFileName);
+ ~ObeyFileReader();
+
+ static void KeywordHelp();
+
+ TBool Open();
+ void Mark();
+ void MarkNext();
+ void Rewind();
+
+ TInt NextLine(TInt aPass, enum EKeyword& aKeyword);
+ TInt NextAttribute(TInt& aIndex, TInt aHasFile, enum EFileAttribute& aKeyword, TText*& aArg);
+
+ void CopyWord(TInt aIndex, TText*& aString); // allocate copy of nth word
+ TInt Count() { return iNumWords;} // number of words on current line
+ char* Word(TInt aIndex) { return (char*)iWord[aIndex]; } // return nth word as char*
+ TText* Text(TInt aIndex) { return iWord[aIndex]; } // return nth word as TText*
+ char* Suffix() { return (char*)iSuffix; } // return unmatched suffix of word[0]
+ TInt CurrentLine() { return iCurrentLine;} // number of words on current line
+ TText* GetCurrentObeyStatement() const; // return current obey statement
+
+ void ProcessTime(TInt64& aTime);
+
+ static void TimeNow(TInt64& aTime);
+private:
+ TInt ReadAndParseLine();
+ TInt SetLineLengthBuffer();
+ TInt Parse();
+ inline TBool IsGap(char ch);
+
+ static const ObeyFileKeyword iKeywords[];
+ static const FileAttributeKeyword iAttributeKeywords[];
+ static TInt64 iTimeNow;
+
+private:
+ FILE* iObeyFile;
+ long iMark;
+ TInt iMarkLine;
+ long iCurrentMark;
+ TInt iCurrentLine;
+ TInt imaxLength;
+ TText* iFileName;
+ TInt iNumWords;
+ TText* iWord[KNumWords];
+ TText* iSuffix;
+ TText* iLine;
+ TText* iCurrentObeyStatement;
+ };
+
+class CPatchDataProcessor;
+struct ConfigurableFatAttributes;
+
+class CObeyFile
+ {
+public:
+ TText *iRomFileName;
+ TText *iExtensionRofsName;
+ TText *iKernelRofsName;
+ TInt iRomSize;
+ TVersion iVersion;
+ TUint32 iCheckSum;
+ TInt iNumberOfFiles;
+ TInt64 iTime;
+ TRomNode* iRootDirectory;
+ TInt iNumberOfDataFiles;
+ // Added to support Data Drive Images.
+ TText* iDriveFileName;
+ TInt64 iDataSize;
+ TText* iDriveFileFormat;
+ ConfigurableFatAttributes* iConfigurableFatAttributes;
+
+private:
+ ObeyFileReader& iReader;
+ TInt iMissingFiles;
+ TRomNode* iLastExecutable;
+
+ TRomBuilderEntry* iFirstFile;
+ TRomBuilderEntry** iNextFilePtrPtr;
+ TRomBuilderEntry* iCurrentFile;
+ KeywordMap iKeyValues;
+
+public:
+ CObeyFile(ObeyFileReader& aReader);
+ ~CObeyFile();
+ void Release();
+ TInt ProcessRofs();
+ TInt ProcessExtensionRofs(MRofsImage* info);
+ TInt ProcessDataDrive(); // Process the data drive obey file.
+ TRomBuilderEntry *FirstFile();
+ TRomBuilderEntry *NextFile();
+ TText* ProcessCoreImage();
+ void SkipToExtension();
+ TBool AutoSize();
+ TUint32 AutoPageSize();
+ TBool Process();
+ StringVector getValues(const String& aKey);
+
+private:
+ TBool ProcessFile(TInt aAlign, enum EKeyword aKeyword);
+ TBool ProcessDriveFile(enum EKeyword aKeyword);
+ TBool ProcessRenaming(enum EKeyword aKeyword);
+ TBool ProcessKeyword(enum EKeyword aKeyword);
+ TBool ProcessDriveKeyword(enum EKeyword aKeyword);
+ void ProcessExtensionKeyword(enum EKeyword aKeyword);
+ TInt ParseFileAttributes(TRomNode* aNode, TRomBuilderEntry* aFile, enum EKeyword aKeyword);
+ TInt ParseSection();
+ TBool ParsePatchDllData();
+ TBool GotKeyVariables();
+ TBool GotKeyDriveVariables(); // To check the data drive mandatory variables.
+ TBool GotExtensionVariables(MRofsImage* aRom);
+ TBool GetNextBitOfFileName(TText **epocEndPtr);
+ TText *IsValidFilePath(TText *aPath);
+ void AddFile(TRomBuilderEntry* aFile);
+
+ TInt SetStackSize(TRomNode* aNode, TText *aStr);
+ TInt SetHeapSizeMin(TRomNode* aNode, TText *aStr);
+ TInt SetHeapSizeMax(TRomNode* aNode, TText *aStr);
+ TInt SetCapability(TRomNode* aNode, TText *aStr);
+ TInt SetUid1(TRomNode* aNode, TText *aStr);
+ TInt SetUid2(TRomNode* aNode, TText *aStr);
+ TInt SetUid3(TRomNode* aNode, TText *aStr);
+ TInt SetPriority(TRomNode* aNode, TText *aStr);
+
+ TBool iAutoSize;
+ TUint32 iAutoPageSize;
+ TBool iPagingOverrideParsed;
+ TBool iCodePagingOverrideParsed;
+ TBool iDataPagingOverrideParsed;
+
+public:
+ CPatchDataProcessor* iPatchData;
+ void SplitPatchDataStatement(StringVector& aPatchDataTokens);
+ };
+
+
+#endif