scripts/python/sis2rom/sis/sisfields.py
changeset 28 ab800b3e45ab
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/python/sis2rom/sis/sisfields.py	Wed Jan 27 10:52:27 2010 +0000
@@ -0,0 +1,728 @@
+"""
+Copyright (c) 2006, Jari Sukanen
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or 
+without modification, are permitted provided that the following 
+conditions are met:
+	* Redistributions of source code must retain the above copyright 
+	  notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright 
+	  notice, this list of conditions and the following disclaimer in 
+	  the documentation and/or other materials provided with the 
+	  distribution.
+    * Names of the contributors may not be used to endorse or promote 
+	  products derived from this software without specific prior written 
+	  permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
+THE POSSIBILITY OF SUCH DAMAGE.
+"""
+
+import sisreader 
+import zlib
+import sys
+
+class SISFileHeader :
+	def __init__(self) :
+		self.uid1 = 0
+		self.uid2 = 0
+		self.uid3 = 0
+		self.uidChecksum = 0
+
+class SISField :
+	def __init__(self) :
+		self.type = 0
+		self.length = None
+		self.subFields = []
+		
+	def readFieldLength(self, fileReader) :
+		length = fileReader.readBytesAsUint(4)
+		if length & 0x80000000 > 0 :
+			length = length << 32
+			length |= fileReader.readBytesAsUint(4)
+		return length
+		
+	def findField(self, fieldType, startIndex = 0) :
+		result = None
+		index = startIndex
+		
+		for field in self.subFields[startIndex:] :
+			if field.type == fieldType :
+				result = field
+				break
+			++index
+		return (result, index)
+		
+	def readableStr(self) :
+		return ""
+	
+	def traverse(self, handler, depth = 0) :
+		handler.handleField(self, depth)
+		for field in self.subFields :
+			field.traverse(handler, depth + 1)
+		
+class SISUnsupportedField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fileReader.readPlainBytes(self.length)
+
+class SISStringField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.data = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		buf = fileReader.readPlainBytes(self.length)
+		self.data = u""
+		while len(buf) > 0 :
+			temp = buf[:2]
+			buf = buf[2:]
+			self.data += unichr(ord(temp[0]) | ord(temp[1]) << 8)
+		
+	def readableStr(self) :
+		return self.data
+		
+class SISArrayField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		type = fileReader.readBytesAsInt(4)
+		l = self.length - 4
+		while l > 0 :
+			field = SISFieldTypes[type]()
+			field.type = type
+			field.initFromFile(fileReader)
+			self.subFields.append(field)
+			
+			l -= field.length + 4 # field length + the length field
+			padding = fileReader.skipPadding()
+			l -= padding
+
+class SISCompressedField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.algorithm = None
+		self.uncompressedDataSize = None
+		self.data = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		self.algorithm = fileReader.readBytesAsUint(4)
+		self.uncompressedDataSize = fileReader.readBytesAsUint(8)
+		data = fileReader.readPlainBytes(self.length - 4 - 8)
+		if self.algorithm == 0 :
+			self.data = data
+		elif self.algorithm == 1 :
+			self.data = zlib.decompress(data)
+			
+class SISVersionField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.version = (-1, -1, -1)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		major = fileReader.readBytesAsInt(4)
+		minor = fileReader.readBytesAsInt(4)
+		build = fileReader.readBytesAsInt(4)
+		self.version = (major, minor, build)
+		
+	def readableStr(self) :
+		return str(self.version)
+	
+class SISVersionRangeField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.fromVersion = None
+		self.toVersion = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.fromVersion = fieldParser.parseField(fileReader)
+		if self.length - fieldParser.lastReadBytes > 0  :
+			self.toVersion = fieldParser.parseField(fileReader)
+	
+class SISDateField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.year = None
+		self.month = None
+		self.day = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		self.year = fileReader.readBytesAsUint(2)
+		self.month = fileReader.readBytesAsUint(1)
+		self.day = fileReader.readBytesAsUint(1)
+	
+	def readableStr(self) :
+		return str(self.year) + "." + str(self.month) + "." + str(self.day)
+	
+class SISTimeField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.hours = None
+		self.minutes = None
+		self.seconds = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		self.hours = fileReader.readBytesAsUint(1)
+		self.minutes = fileReader.readBytesAsUint(1)
+		self.seconds = fileReader.readBytesAsUint(1)
+	
+	def readableStr(self) :
+		return str(self.hours) + ":" + str(self.minutes) + ":" + str(self.seconds)
+	
+class SISDateTimeField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.date = None
+		self.time = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.date = fieldParser.parseField(fileReader)
+		self.time = fieldParser.parseField(fileReader)
+	
+class SISUidField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.uid = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		self.uid = fileReader.readBytesAsUint(4)
+		
+	def readableStr(self) :
+		return hex(self.uid)
+	
+class SISLanguageField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.language = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		self.language = fileReader.readBytesAsUint(4)
+		
+	def readableStr(self) :
+		return str(self.language)
+	
+class SISContentsField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		field = fieldParser.parseField(fileReader)
+		while field :
+			if field.type == 3 : # compressed<conroller>
+				bufferReader = sisreader.SISBufferReader(field.data)
+				field = fieldParser.parseField(bufferReader)
+			self.subFields.append(field)
+			field = fieldParser.parseField(fileReader)
+
+class SISControllerField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		bufferReader = sisreader.SISBufferReader(fileReader.readPlainBytes(self.length))
+		field = fieldParser.parseField(bufferReader)
+		while field :
+			self.subFields.append(field)
+			field = fieldParser.parseField(bufferReader)
+
+class SISInfoField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.installType = None
+		self.installFlags = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # UID
+		self.subFields.append(fieldParser.parseField(fileReader)) # Vendor name unique
+		self.subFields.append(fieldParser.parseField(fileReader)) # names
+		self.subFields.append(fieldParser.parseField(fileReader)) # vendor names
+		self.subFields.append(fieldParser.parseField(fileReader)) # version
+		self.subFields.append(fieldParser.parseField(fileReader)) # creation time
+		self.installType = fileReader.readBytesAsUint(1)
+		self.installFlags = fileReader.readBytesAsUint(1) 
+			
+class SISSupportedLanguagesField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # languages
+		
+class SISSupportedOptionsField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # options
+			
+class SISPrerequisitiesField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # target devices
+		self.subFields.append(fieldParser.parseField(fileReader)) # dependencies
+		
+import pdb
+        
+class SISDependencyField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # UID
+		field = fieldParser.parseField(fileReader)
+		# Version range field is optional
+		if field.type == VersionRangeField :
+			self.subFields.append(field) # version range
+			self.subFields.append(fieldParser.parseField(fileReader)) # dependency names
+		else :
+			self.subFields.append(field) # dependency names
+	
+class SISPropertiesField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # properties
+	
+class SISPropertyField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.key = None
+		self.value = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		self.key = fileReader.readBytesAsInt(4)
+		self.value = fileReader.readBytesAsInt(4)
+	
+# There is a type for this field, but there is no definition of the field contents
+class SISSignaturesField(SISUnsupportedField) :
+	pass
+	
+class SISCertificateChainField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # certificate data
+	
+class SISLogoField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # logo file
+	
+class SISFileDescriptionField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.operation = None
+		self.operationOptions = None
+		self.compressedLength = None
+		self.uncompressedLength = None
+		self.fileIndex = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		
+		self.subFields.append(fieldParser.parseField(fileReader))
+		self.subFields.append(fieldParser.parseField(fileReader))
+		field = fieldParser.parseField(fileReader)
+		self.subFields.append(field)
+		if field.type == 41 : # read field was capabilities ==> there is one more field left
+			self.subFields.append(fieldParser.parseField(fileReader))
+		
+		self.operation = fileReader.readBytesAsUint(4)
+		self.operationOptions = fileReader.readBytesAsUint(4)
+		self.compressedLength = fileReader.readBytesAsUint(8)
+		self.uncompressedLength = fileReader.readBytesAsUint(8)
+		self.fileIndex = fileReader.readBytesAsUint(4)
+		
+	def readableStr(self) :
+		return "index: " + str(self.fileIndex)
+	
+class SISHashField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.algorithm = None
+
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.algorithm = fileReader.readBytesAsUint(4)
+		self.subFields.append(fieldParser.parseField(fileReader)) # logo file
+	
+class SISIfField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # expression
+		self.subFields.append(fieldParser.parseField(fileReader)) # install block
+		self.subFields.append(fieldParser.parseField(fileReader)) # else ifs
+
+class SISElseIfField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # expression
+		self.subFields.append(fieldParser.parseField(fileReader)) # install block
+	
+class SISInstallBlockField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.files = None
+		self.embeddedSISFiles = None
+		self.ifBlocks = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader))
+		self.subFields.append(fieldParser.parseField(fileReader))
+		self.subFields.append(fieldParser.parseField(fileReader))
+
+class SISExpressionField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.operator = None
+		self.integerValue = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.operator = fileReader.readBytesAsUint(4)
+		self.integerValue = fileReader.readBytesAsInt(4)
+		
+		if self.operator == 10 or self.operator == 13 :
+			self.subFields.append(fieldParser.parseField(fileReader))
+		if self.operator == 1 or self.operator == 2 or self.operator == 3 or self.operator == 4 or self.operator == 5 or self.operator == 6 or self.operator == 7 or self.operator == 8 or self.operator == 11 or self.operator == 12 :
+			self.subFields.append(fieldParser.parseField(fileReader))
+		if not (self.operator == 13 or self.operator == 14 or self.operator == 15 or self.operator == 16 or self.operator == 10) :
+			self.subFields.append(fieldParser.parseField(fileReader))
+		
+class SISDataField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # data units
+	
+class SISDataUnitField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # file data
+	
+class SISFileDataField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # raw file data
+	
+class SISSupportedOptionField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # names
+	
+class SISControllerChecksumField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.checksum = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		self.checksum = fileReader.readBytesAsUint(2)
+	
+class SISDataChecksumField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.checksum = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		self.checksum = fileReader.readBytesAsUint(2)
+	
+class SISSignatureField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # signature algorithm
+		self.subFields.append(fieldParser.parseField(fileReader)) # signature data
+	
+class SISBlobField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.data = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		self.data = fileReader.readPlainBytes(self.length)
+	
+class SISSignatureAlgorithmField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # algorithm identifier
+	
+class SISSignatureCertificateChainField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		fieldParser = sisreader.SISFieldParser()
+		self.subFields.append(fieldParser.parseField(fileReader)) # signatures
+		self.subFields.append(fieldParser.parseField(fileReader)) # certificate chain
+	
+class SISDataIndexField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.dataIndex = None
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		self.dataIndex = fileReader.readBytesAsUint(4)
+
+class SISCapabilitiesField(SISField) :
+	def __init__(self) :
+		SISField.__init__(self)
+		self.capabilities = 0
+		self.readableCaps = []
+		
+	def initFromFile(self, fileReader) :
+		self.length = self.readFieldLength(fileReader)
+		self.capabilities = fileReader.readBytesAsUint(self.length)
+		
+		for i in range(20) :
+			if (self.capabilities >> i) & 0x01 :
+				self.readableCaps.append(CapabilityNames[i])
+				
+	def readableStr(self) :
+		return " ".join(self.readableCaps)
+	
+SISFieldTypes = { 
+	1 : SISStringField,
+	2 : SISArrayField,
+	3 : SISCompressedField,
+	4 : SISVersionField,
+	5 : SISVersionRangeField,
+	6 : SISDateField,
+	7 : SISTimeField,
+	8 : SISDateTimeField,
+	9 : SISUidField,
+	10 : SISUnsupportedField,
+	11 : SISLanguageField,
+	12 : SISContentsField,
+	13 : SISControllerField,
+	14 : SISInfoField,
+	15 : SISSupportedLanguagesField,
+	16 : SISSupportedOptionsField,
+	17 : SISPrerequisitiesField,
+	18 : SISDependencyField,
+	19 : SISPropertiesField,
+	20 : SISPropertyField,
+	21 : SISSignaturesField,
+	22 : SISCertificateChainField,
+	23 : SISLogoField,
+	24 : SISFileDescriptionField,
+	25 : SISHashField,
+	26 : SISIfField,
+	27 : SISElseIfField,
+	28 : SISInstallBlockField,
+	29 : SISExpressionField,
+	30 : SISDataField,
+	31 : SISDataUnitField,
+	32 : SISFileDataField,
+	33 : SISSupportedOptionField,
+	34 : SISControllerChecksumField,
+	35 : SISDataChecksumField,
+	36 : SISSignatureField,
+	37 : SISBlobField,
+	38 : SISSignatureAlgorithmField,
+	39 : SISSignatureCertificateChainField,
+	40 : SISDataIndexField,
+	41 : SISCapabilitiesField
+	}
+
+[StringField, 
+ ArrayField, 
+ CompressedField,
+ VersionField,
+ VersionRangeField,
+ DateField,
+ TimeField,
+ DateTimeField,
+ UidField,
+ UnusedField,
+ LanguageField,
+ ContentsField,
+ ControllerField,
+ InfoField,
+ SupportedLanguagesField,
+ SupportedOptionsField,
+ PrerequisitiesField,
+ DependencyField,
+ PropertiesField,
+ PropertyField,
+ SignaturesField,
+ CertificateChainField,
+ LogoField,
+ FileDescriptionField,
+ HashField,
+ IfField,
+ ElseIfField,
+ InstallBlockField,
+ ExpressionField,
+ DataField,
+ DataUnitField,
+ FileDataField,
+ SupportedOptionField,
+ ControllerChecksumField,
+ DataChecksumField,
+ SignatureField,
+ BlobField,
+ SignatureAlgorithmField,
+ SignatureCertificateChainField,
+ DataIndexField,
+ CapabilitiesField] = range(1, 42)
+	 
+FieldNames = {
+ 0 : "ROOT",
+ StringField : "StringField", 
+ ArrayField : "ArrayField", 
+ CompressedField : "CompressedField",
+ VersionField : "VersionField",
+ VersionRangeField : "VersionRangeField",
+ DateField : "DateField",
+ TimeField : "TimeField",
+ DateTimeField : "DateTimeField",
+ UidField : "UidField",
+ UnusedField : "UnusedField",
+ LanguageField : "LanguageField",
+ ContentsField : "ContentsField",
+ ControllerField : "ControllerField",
+ InfoField : "InfoField",
+ SupportedLanguagesField : "SupportedLanguagesField",
+ SupportedOptionsField : "SupportedOptionsField",
+ PrerequisitiesField : "PrerequisitiesField",
+ DependencyField : "DependencyField",
+ PropertiesField : "PropertiesField",
+ PropertyField : "PropertyField",
+ SignaturesField : "SignaturesField",
+ CertificateChainField : "CertificateChainField",
+ LogoField : "LogoField",
+ FileDescriptionField : "FileDescriptionField",
+ HashField : "HashField",
+ IfField : "IfField",
+ ElseIfField : "ElseIfField",
+ InstallBlockField : "InstallBlockField",
+ ExpressionField : "ExpressionField",
+ DataField : "DataField",
+ DataUnitField : "DataUnitField",
+ FileDataField : "FileDataField",
+ SupportedOptionField : "SupportedOptionField",
+ ControllerChecksumField : "ControllerChecksumField",
+ DataChecksumField : "DataChecksumField",
+ SignatureField : "SignatureField",
+ BlobField : "BlobField",
+ SignatureAlgorithmField : "SignatureAlgorithmField",
+ SignatureCertificateChainField : "SignatureCertificateChainField",
+ DataIndexField : "DataIndexField",
+ CapabilitiesField : "CapabilitiesField"
+}
+	 
+CapabilityNames = {
+	0 : "TCB",
+	1 : "CommDD",
+	2 : "PowerMgmt",
+	3 : "MultimediaDD",
+	4 : "ReadDeviceData",
+	5 : "WriteDeviceData",
+	6 : "DRM",
+	7 : "TrustedUI",
+	8 : "ProtServ",
+	9 : "DiskAdmin",
+	10 : "NetworkControl",
+	11 : "AllFiles",
+	12 : "SwEvent",
+	13 : "NetworkServices",
+	14 : "LocalServices",
+	15 : "ReadUserData",
+    16 : "WriteUserData",
+	17 : "Location",
+	18 : "SurroundingsDD",
+	19 : "UserEnvironment"
+	}
\ No newline at end of file