diff options
author | mid-kid <esteve.varela@gmail.com> | 2020-09-12 23:58:44 +0200 |
---|---|---|
committer | mid-kid <esteve.varela@gmail.com> | 2020-09-12 23:58:44 +0200 |
commit | c8d5687ac4fa64396104da4f3f04f0594c38dc6c (patch) | |
tree | 7df330f23a1f8a7225e2820dccec24239ce23c40 /tools/messages.py | |
parent | 247b904a6bb10c7fdd5689c8380a4a0bdb30385c (diff) |
Dump strings, write tooling around them
Diffstat (limited to 'tools/messages.py')
-rwxr-xr-x | tools/messages.py | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/tools/messages.py b/tools/messages.py new file mode 100755 index 0000000..a8a1431 --- /dev/null +++ b/tools/messages.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 + +from sys import argv, stderr, exit +from charmap import parse_charmap + +def err(s): + print("ERROR:", s.rstrip(), file=stderr) + exit(1) + +charmap, constants = parse_charmap(argv[1]) + +filename = argv[2] + +def convert_message(message): + while True: + if message.endswith("\r\n"): + message = message[:-2] + continue + if message.endswith("\n"): + message = message[:-1] + continue + break + + values = [] + in_braces = False + constant = "" + for char in message: + if char == "{" and not in_braces: + in_braces = True + constant = "" + continue + if char == "}" and in_braces: + in_braces = False + if constant in constants: + values.append(constants[constant]) + elif constant in charmap: + values.append(charmap[constant]) + else: + err("%s: Unrecognized constant %s" % (filename, constant)) + continue + + if in_braces: + constant += char + continue + + if char == "\r": + continue + if char == "\n": + values.append(0xfffe) + continue + + if char in charmap: + values.append(charmap[char]) + else: + err("%s: Unrecognized character '%s'" % (filename, char)) + + values.append(0xffff) + return " dw" + ", ".join(["$%04x" % val for val in values]) + +name = None +message = None +for i, line in enumerate(open(filename)): + if i == 0 and not line.startswith(".org"): + print("SECTION \"%s\", ROMX" % filename) + + if line.startswith("#"): + continue + + if line.startswith("[") and line.endswith("]\n"): + if name is not None or message is not None: + print("\n%s::" % name) + print(convert_message(message)) + message = "" + name = line[1:-2] + continue + + if line.startswith(".org "): + split = line.split(" ", 1) + if len(split) < 2: + continue + split = split[1].strip().split(":") + if len(split) != 2: + continue + bank = split[0] + addr = split[1] + if i != 0: + print() + print("SECTION \"%s %s:%s\", ROMX[$%s], BANK[$%s]" % + (filename, bank, addr, addr, bank)) + continue + + if message is not None: + message += line + +if name is not None and message is not None: + print("\n%s::" % name) + print(convert_message(message)) |