65 lines
1.6 KiB
Python
Executable file
65 lines
1.6 KiB
Python
Executable file
#!/usr/bin/python
|
|
import sys
|
|
|
|
address_spaces = {'eword': 'eeprom', 'ebyte': 'eeprom'}
|
|
hardoffsets = {None: 0, 'eeprom': 0}
|
|
offsets = {None: 0, 'eeprom': 0}
|
|
numformat = "0%Xh"
|
|
sizes = {
|
|
'byte': 1, 'bint': 1, 'ebyte': 1, 'enum': 1,
|
|
'ulong': 4, 'long':4,
|
|
'double': 8,
|
|
}
|
|
|
|
if len(sys.argv) > 1 and sys.argv[1] == "--8i20":
|
|
hardoffsets[None] = 2048
|
|
numformat = "%d"
|
|
|
|
def calc(value, kind):
|
|
address_space = address_spaces.get(kind)
|
|
size = sizes.get(kind, 2)
|
|
if value == "#":
|
|
result = offsets[address_space]
|
|
elif value == "$":
|
|
result = offsets[address_space]
|
|
offsets[address_space] += size
|
|
else:
|
|
value = value.lower()
|
|
if value.endswith("h"): value = int(value[:-1], 16)
|
|
else: value = int(value)
|
|
result = value
|
|
offsets[address_space] = result + size
|
|
return numformat % (
|
|
result + hardoffsets.get(address_space, hardoffsets[None]))
|
|
|
|
for line in sys.stdin:
|
|
line = line.strip("\032")
|
|
line = line.strip()
|
|
if not line:
|
|
print
|
|
continue
|
|
if line.startswith(";"):
|
|
print line
|
|
continue
|
|
|
|
if ';' in line:
|
|
line, comment = line.split(";", 1)
|
|
line = line.strip()
|
|
else:
|
|
comment = ""
|
|
|
|
parts = line.split(None, 3)
|
|
|
|
if len(parts) == 2:
|
|
print "%s equ 0%s" % (parts[0], parts[1])
|
|
continue
|
|
|
|
name, value, kind = parts[:3]
|
|
|
|
kind = kind.strip("%")
|
|
value = calc(value, kind)
|
|
|
|
name = name + "_" + kind
|
|
print "%(name)-20s equ %(value)-20s ; %(comment)s" % {
|
|
'name': name, 'value': value, 'comment': comment
|
|
}
|