author | victorp@symbian.org |
Wed, 03 Feb 2010 17:13:43 +0000 | |
changeset 30 | 9372f863bb3a |
parent 28 | ab800b3e45ab |
permissions | -rw-r--r-- |
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 |