diff options
| author | comex <comexk@gmail.com> | 2009-03-01 15:57:14 -0500 |
|---|---|---|
| committer | comex <comexk@gmail.com> | 2009-03-01 15:57:14 -0500 |
| commit | 0c44369b84b29a8b11121c718660d9a8ad4085ec (patch) | |
| tree | 9a0a92f7a79cf0b8f609f193c1fa4ec9ce32807b /ethyl.py | |
| parent | 86cc61b37614443d1af703030fc12f771fddc179 (diff) | |
| parent | 9b7a102e4b8747c3c8d7f68848785425a45c27b4 (diff) | |
Merge branch 'master' of git://github.com/SquidMan/benzin
Diffstat (limited to 'ethyl.py')
| -rw-r--r-- | ethyl.py | 23 |
1 files changed, 19 insertions, 4 deletions
@@ -142,9 +142,10 @@ for (dname, definition) in formats.items(): else: df.append((typ, name, default)) formats[dname] = df, etc, etcn - + # Dumb pretty printer def my_repr(b, start=''): + '''scrap this shit and implement new one eventually''' special = lambda x: type(x) not in (int, str, unicode) if type(b) == dict: if len(filter(special, b.values())) == 0: @@ -155,16 +156,16 @@ def my_repr(b, start=''): rep += ', ' else: f = True - rep += '%s: %s' % (str(a), my_repr(b[a])) + rep += '"%s": %s' % (str(a), my_repr(b[a])) rep += ' }' else: rep = '{\n' for a in sorted(b.keys()): c = b[a] if type(c) in (dict, list): - rep += '%s:\n%s\n' % (str(a), my_repr(c, ' ')) + rep += '"%s":\n%s,\n' % (str(a), my_repr(c, ' ')) else: - rep += '%s: %s\n' % ( str(a), my_repr(c)) + rep += '"%s": %s,\n' % ( str(a), my_repr(c)) rep += '}' elif type(b) in (int, long): rep = hex(b) @@ -178,8 +179,10 @@ def my_repr(b, start=''): else: rep = repr(b) return re.sub(re.compile('^', re.M), start, rep) + def pr_dict(*args): print my_repr(*args) + types = { 'u8': 'B', 'u16': 'H', @@ -196,6 +199,7 @@ types = { 'bool': 'c', 'char': 'c', } + def parse_var(pos, typ, chunk): if not types.has_key(typ): raise Exception('What\'s a %s?' % typ) @@ -209,15 +213,18 @@ def nullterm(str_plus): return str_plus[:z] else: return str_plus + def unnullterm(var, size): if len(var) > size: raise Exception('unnullterm: "%s" too long' % var) return var.ljust(size, '\0') + def untv(name): #assert '\0' not in name lex = len(name) + 16 lex -= lex % 16 return name.ljust(lex, '\0') + def parse_data(chunk, definition, prefix=None, start=0): df, etc, etcn = formats[definition] #print df, repr(definition) @@ -264,10 +271,12 @@ def parse_data(chunk, definition, prefix=None, start=0): ret = ret['_'] return (ret, pos) if etcn else ret + def unparse_var(typ, var): if not types.has_key(typ): raise Exception('What\'s a %s?' % typ) return struct.pack('>' + types[typ], var) + def unparse_data(vars, definition, prefix=None): df, etc, etcn = formats[definition] ret = '' @@ -308,6 +317,7 @@ def unparse_data(vars, definition, prefix=None): for v in var: ret += unparse_var(typ, v) return ret + def iff_to_chunks(z): pos = 0 chunks = [] @@ -320,6 +330,7 @@ def iff_to_chunks(z): pos += length chunks.append((cc, data)) return chunks + def bit_extract(num, start, end=None): if end is None: end = start @@ -327,12 +338,14 @@ def bit_extract(num, start, end=None): ret = (num & mask) >> (31 - end) return ret + def bit_place(num, start, end=None): # Just for sanity if end is None: end = start assert num <= 2**(end - start) return num << (31 - end) + def get_array(chunk, startpos, array_size, item_size, item_type=None): ar = [] pos = startpos @@ -341,6 +354,7 @@ def get_array(chunk, startpos, array_size, item_size, item_type=None): ar.append(get_opt(chunk, pos, True, item_size, item_type)[0]) pos += item_size return ar, pos + def get_opt(chunk, startpos, enabled, size, item_type=None): if not enabled: return None, startpos @@ -376,5 +390,6 @@ def put_opt(var, flags, bit, size, item_type=None): else: raise Exception('unhandled') return ret, flags + def i2f(int): return struct.unpack('>f', struct.pack('>I', int))[0]
\ No newline at end of file |
