1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 from struct import unpack, pack
20
21 SHOW = 0
22
23
25 print "Error : ", msg
26 raise("ooops")
27
28
30 buff = name + " "
31
32 if type(arg).__name__ == 'int' :
33 buff += "0x%x" % arg
34 elif type(arg).__name__ == 'long' :
35 buff += "0x%x" % arg
36 elif type(arg).__name__ == 'str' :
37 buff += "%s" % arg
38 elif isinstance(arg, SV) :
39 buff += "0x%x" % arg.get_value()
40 elif isinstance(arg, SVs) :
41 buff += arg.get_value().__str__()
42
43 print buff
44
46 """SV is used to handle more easily a value"""
48 self.__size = size
49 self.__value = unpack(self.__size, buff)[0]
50
52 return pack(self.__size, self.__value)
53
55 return "0x%x" % self.__value
56
59
62
65
68
70 """SVs is used to handle more easily a structure of different values"""
71 - def __init__(self, size, ntuple, buff) :
72 self.__size = size
73
74 self.__value = ntuple._make( unpack( self.__size, buff ) )
75
77 l = []
78 for i in self.__value._fields :
79 l.append( getattr( self.__value, i ) )
80
81 return pack( self.__size, *l)
82
84 return [ x for x in self.__value._fields ]
85
88
91
93 self.__value = self.__value._replace( **attr )
94
97
99 - def show(self, value) :
100 getattr(self, "show_" + value)()
101
104 self.__buff = buff
105 self.__idx = 0
106
108 return self.__buff[ self.__idx : self.__idx + size ]
109
110 - def read(self, size) :
111 if isinstance(size, SV) :
112 size = size.value
113
114 buff = self.__buff[ self.__idx : self.__idx + size ]
115 self.__idx += size
116
117 return buff
118
121 self.offset = offset
122 self.buff = buff
123
124 self.size = len(buff)
125
128 self.__buff = buff
129
130 self.__registers = { SHOW : [] }
131 self.__idx = 0
132
133 - def read(self, size) :
134 if isinstance(size, SV) :
135 size = size.value
136
137 buff = self.__buff[ self.__idx : self.__idx + size ]
138 self.__idx += size
139
140 return buff
141
143 if isinstance(off, SV) :
144 off = off.value
145
146 return self.__buff[ off : ]
147
149 return self.__buff[ self.__idx : self.__idx + size ]
150
152 if isinstance(idx, SV) :
153 self.__idx = idx.value
154 else :
155 self.__idx = idx
156
159
162
163 - def register(self, type_register, fct) :
164 self.__registers[ type_register ].append( fct )
165
168
170 return len( self.__buff )
171
172
174 print self
175 for i in self.__registers[ SHOW ] :
176 i()
177
178 - def save(self, filename) :
179 fd = open(filename, "w")
180 buff = self._save()
181 fd.write( buff )
182 fd.close()
183