scripts/python/sis2rom/sis/sisreader.py
author victorp@symbian.org
Wed, 03 Feb 2010 17:13:43 +0000
changeset 30 9372f863bb3a
parent 28 ab800b3e45ab
permissions -rw-r--r--
new integration plan update for week05
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
     1
"""
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
     2
Copyright (c) 2006, Jari Sukanen
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
     3
All rights reserved.
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
     4
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
     5
Redistribution and use in source and binary forms, with or 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
     6
without modification, are permitted provided that the following 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
     7
conditions are met:
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
     8
	* Redistributions of source code must retain the above copyright 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
     9
	  notice, this list of conditions and the following disclaimer.
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    10
    * Redistributions in binary form must reproduce the above copyright 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    11
	  notice, this list of conditions and the following disclaimer in 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    12
	  the documentation and/or other materials provided with the 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    13
	  distribution.
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    14
    * Names of the contributors may not be used to endorse or promote 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    15
	  products derived from this software without specific prior written 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    16
	  permission.
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    17
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    18
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    19
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    20
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    21
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    22
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    23
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    24
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    25
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    26
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    27
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    28
THE POSSIBILITY OF SUCH DAMAGE.
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    29
"""
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    30
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    31
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    32
import struct
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    33
import sisfields
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    34
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    35
class SISReader :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    36
	def __init__(self) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    37
		pass
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    38
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    39
	def readUnsignedBytes(self, numBytes) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    40
		buf = self.readPlainBytes(numBytes)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    41
		if len(buf) < numBytes :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    42
			return []
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    43
			
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    44
		format = ""
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    45
		for i in range(numBytes) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    46
			format += "B"
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    47
		return struct.unpack(format, buf)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    48
	
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    49
	def readSignedBytes(self, numBytes) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    50
		buf = self.readPlainBytes(numBytes)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    51
		if len(buf) < numBytes :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    52
			return []
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    53
			
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    54
		format = ""
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    55
		for i in range(numBytes) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    56
			format += "b"
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    57
		return struct.unpack(format, buf)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    58
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    59
	def readBytesAsUint(self, numBytes) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    60
		result = 0
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    61
		bytes = self.readUnsignedBytes(numBytes)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    62
		if len(bytes) == numBytes :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    63
			for i in range(numBytes) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    64
				result |= bytes[i] << (i*8)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    65
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    66
		return result
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    67
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    68
	def readBytesAsInt(self, numBytes) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    69
		result = 0
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    70
		bytes = self.readSignedBytes(numBytes)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    71
		if len(bytes) == numBytes :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    72
			for i in range(numBytes) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    73
				result |= bytes[i] << (i*8)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    74
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    75
		return result
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    76
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    77
	def skipPadding(self) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    78
		result = 0
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    79
		if self.bytesRead % 4 != 0 :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    80
			paddingLength = 4 - self.bytesRead % 4
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    81
			self.readPlainBytes(paddingLength)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    82
			result = paddingLength
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    83
			
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    84
		return result
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    85
	
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    86
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    87
class SISFileReader(SISReader) : 
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    88
	def __init__(self, inStream) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    89
		self.inStream = inStream
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    90
		self.eof = False
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    91
		self.bytesRead = 0
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    92
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    93
	def readPlainBytes(self, numBytes) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    94
		if self.eof :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    95
			return ""
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    96
			
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    97
		if numBytes == 0 :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    98
			return ""
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
    99
			
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   100
		buf = ""
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   101
		buf = self.inStream.read(numBytes)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   102
		if len(buf) < numBytes :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   103
			self.eof = True
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   104
			return ""
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   105
			
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   106
		self.bytesRead += numBytes
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   107
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   108
		return buf
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   109
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   110
	def isEof(self) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   111
		return self.eof
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   112
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   113
class SISBufferReader(SISReader) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   114
	def __init__(self, buffer) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   115
		self.buffer = buffer
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   116
		self.bytesRead = 0
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   117
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   118
	def readPlainBytes(self, numBytes) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   119
		if self.isEof() :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   120
			return ""
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   121
			
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   122
		if numBytes == 0 :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   123
			return ""
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   124
			
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   125
		result = self.buffer[self.bytesRead:self.bytesRead+numBytes]
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   126
			
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   127
		self.bytesRead += numBytes
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   128
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   129
		return result
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   130
			
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   131
	def isEof(self) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   132
		return self.bytesRead >= len(self.buffer)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   133
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   134
class SISFieldParser :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   135
	def __init__(self) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   136
		self.lastReadBytes = 0
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   137
		
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   138
	def parseField(self, fileReader) :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   139
		"""Reads the next field from the fileReader stream and returns it"""
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   140
		field = None
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   141
		self.lastReadBytes = 0
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   142
		type = fileReader.readBytesAsUint(4)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   143
		self.lastReadBytes += 4
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   144
		if type != 0 :
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   145
			field = sisfields.SISFieldTypes[type]()
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   146
			field.type = type
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   147
			field.initFromFile(fileReader)
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   148
			self.lastReadBytes += field.length + 4 # Field length + length field
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   149
			self.lastReadBytes += fileReader.skipPadding()
ab800b3e45ab Added sis2rom for Wild Ducks
Sebastian Brannstrom <sebastianb@symbian.org>
parents:
diff changeset
   150
		return field