regs/gen: factor out read_input to a new module, csv_input

This commit is contained in:
Zack Buhman 2024-02-26 14:19:05 +08:00
parent 7e27e40b4e
commit d622ee04a7
10 changed files with 41 additions and 30 deletions

View File

@ -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 $< > $@

View File

@ -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):

27
regs/gen/csv_input.py Normal file
View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -1,6 +1,6 @@
import sys
from sh7091 import read_input
from csv_input import read_input
from generate import renderer

View File

@ -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

View File

@ -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 <cstdint>"
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()