diff --git a/common.mk b/common.mk index cad1261..098c356 100644 --- a/common.mk +++ b/common.mk @@ -130,8 +130,8 @@ audio.pcm: %.data.o: %.data $(BUILD_BINARY_O) -regs/%.csv: regs/%.ods - libreoffice --headless -convert-to csv:"Text - txt - csv (StarCalc)":44,34,76,,,,true --outdir regs/ $< +%.csv: %.ods + libreoffice --headless -convert-to csv:"Text - txt - csv (StarCalc)":44,34,76,,,,true --outdir $(dir $@) $< maple/maple_bus_commands.hpp: regs/maple_bus_commands.csv regs/gen/maple_bus_commands.py python regs/gen/maple_bus_commands.py $< > $@ diff --git a/regs/gen/core_bits.py b/regs/gen/core_bits.py index 2b66ddb..5fa2458 100644 --- a/regs/gen/core_bits.py +++ b/regs/gen/core_bits.py @@ -4,7 +4,7 @@ from pprint import pprint from dataclasses import dataclass from typing import Union -from sh7091 import read_input +from csv_input import read_input from generate import renderer def aggregate_registers(d): diff --git a/regs/gen/csv_input.py b/regs/gen/csv_input.py new file mode 100644 index 0000000..e694b84 --- /dev/null +++ b/regs/gen/csv_input.py @@ -0,0 +1,27 @@ +import csv + +def as_dict(header, row0): + row = [s.strip() for s in row0] + return dict(zip(header, row)) + +def read_input(filename): + with open(filename) as f: + reader = csv.reader(f, delimiter=",", quotechar='"') + header, *rows = reader + + rows = [ + as_dict(header, row) + for row in rows + if "".join(map(str, row)).strip() + ] + + return rows + +def read_input_headerless(filename): + with open(filename) as f: + reader = csv.reader(f, delimiter=",", quotechar='"') + rows = [ + [s.strip() for s in row] + for row in reader + ] + return rows diff --git a/regs/gen/gdrom.py b/regs/gen/gdrom.py index 74bca5c..b9cbca0 100644 --- a/regs/gen/gdrom.py +++ b/regs/gen/gdrom.py @@ -2,7 +2,9 @@ from collections import defaultdict from dataclasses import dataclass import sys -from sh7091 import read_input, size_to_type, headers +from csv_input import read_input +from sh7091 import size_to_type +from sh7091 import headers from generate import renderer @dataclass diff --git a/regs/gen/holly.py b/regs/gen/holly.py index 91cb896..f5d76cb 100644 --- a/regs/gen/holly.py +++ b/regs/gen/holly.py @@ -1,7 +1,7 @@ import sys from sh7091 import new_writer -from sh7091 import read_input +from csv_input import read_input from sh7091 import headers from generate import renderer diff --git a/regs/gen/maple_bus_commands.py b/regs/gen/maple_bus_commands.py index cd00841..405c1d3 100644 --- a/regs/gen/maple_bus_commands.py +++ b/regs/gen/maple_bus_commands.py @@ -2,7 +2,7 @@ from dataclasses import dataclass from typing import Union import sys -from sh7091 import read_input +from csv_input import read_input from generate import renderer @dataclass diff --git a/regs/gen/maple_data_format.py b/regs/gen/maple_data_format.py index 4ca5a52..4be5c48 100644 --- a/regs/gen/maple_data_format.py +++ b/regs/gen/maple_data_format.py @@ -1,8 +1,8 @@ -import csv import sys from dataclasses import dataclass from collections import defaultdict +from csv_input import read_input_headerless from generate import renderer @dataclass @@ -23,15 +23,6 @@ class Format: field_order: list[str] size: int -def read_input(filename): - with open(filename) as f: - reader = csv.reader(f, delimiter=",", quotechar='"') - rows = [ - [s.strip() for s in row] - for row in reader - ] - return rows - def parse_bits(bits: list[str]): bit_order = [7, 6, 5, 4, 3, 2, 1, 0] by_name = defaultdict(list) @@ -135,7 +126,7 @@ def render_formats(name, formats): yield "}" if __name__ == "__main__": - rows = read_input(sys.argv[1]) + rows = read_input_headerless(sys.argv[1]) name = sys.argv[1].split('.')[0].split('_')[-1] assert len(name) == 3 or len(name) == 4 formats = parse(rows) diff --git a/regs/gen/memorymap.py b/regs/gen/memorymap.py index ec88a6f..d4f2370 100644 --- a/regs/gen/memorymap.py +++ b/regs/gen/memorymap.py @@ -1,6 +1,6 @@ import sys -from sh7091 import read_input +from csv_input import read_input from generate import renderer diff --git a/regs/gen/systembus.py b/regs/gen/systembus.py index 2487077..0bbdfe2 100644 --- a/regs/gen/systembus.py +++ b/regs/gen/systembus.py @@ -1,7 +1,7 @@ import sys from sh7091 import new_writer -from sh7091 import read_input +from csv_input import read_input from sh7091 import headers from sh7091 import blocks from generate import renderer diff --git a/regs/gen/ta_parameter_format.py b/regs/gen/ta_parameter_format.py index 5daf245..5ea3ee5 100644 --- a/regs/gen/ta_parameter_format.py +++ b/regs/gen/ta_parameter_format.py @@ -1,8 +1,8 @@ from dataclasses import dataclass from pprint import pprint import sys -import csv +from csv_input import read_input_headerless from generate import renderer _field_types = { @@ -182,17 +182,8 @@ def headers(): yield "#include " yield "" -def read_input(filename): - with open(filename) as f: - reader = csv.reader(f, delimiter=",", quotechar='"') - rows = [ - [s.strip() for s in row] - for row in reader - ] - return rows - if __name__ == "__main__": - rows = read_input(sys.argv[1]) + rows = read_input_headerless(sys.argv[1]) namespace = sys.argv[2] declarations = parse(rows) render, out = renderer()