pta/makeinc.py
Jeff Epler be4de7021d output now matches all values in sslbp.inc, 8i20inc.inc
.. though for the latter, you have to specify --8i20
2014-08-20 11:00:21 -05:00

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
}