#!/usr/bin/env python3 import argparse import os import shutil import struct from pathlib import Path from tempfile import TemporaryDirectory from typing import List class ROMParser: def find_roms(self, romdefs: dict, folder: str, extension: str) -> dict: extension = extension.lower() ext = extension if not extension.startswith("."): extension = "." + extension script_path = Path(__file__).parent roms_folder = script_path / "roms" / folder # find all files that end with extension (case-insensitive) romdefs.setdefault("_cover_width", 128) romdefs.setdefault("_cover_height", 96) w = romdefs["_cover_width"] h = romdefs["_cover_height"] print(f"{folder}: Cover image size is defined :{[w]} x {[h]}") rom_files = list(roms_folder.iterdir()) rom_files = [r for r in rom_files if r.name.lower().endswith(extension)] rom_files.sort() for rom_file in rom_files : file_name = rom_file.stem romdefs.setdefault(file_name, {}) romdef = romdefs[file_name] romdef.setdefault("name", file_name) romdef.setdefault("publish", "1") romdef.setdefault("enable_save", "0") print(folder + ":" + file_name + " >> " + romdef["name"] + ",P: " + romdef["publish"]) return romdefs def generate_system(self, romdef: dict, folder: str,extensions: List[str]) -> dict: roms_raw = [] for e in extensions: roms_raw += self.find_roms(romdef, folder, e) return romdef def parse_one(self, filename: str, folder: str,extensions: List[str]): import json; if Path(filename).exists(): with open(filename,'r') as load_f: try: romdef = json.load(load_f) #print("Rom define file loaded") load_f.close() except: print("Rom define file load failed") romdef = {} load_f.close() else : romdef = {}; romdef = self.generate_system(romdef, folder, extensions); with open(filename,'w', encoding ='utf-8') as dump_f: json.dump(romdef, dump_f, ensure_ascii=False, indent=4, sort_keys=True) #print("Rom Define file saved ok!") dump_f.close() def parse(self): script_path = Path(__file__).parent json_file = script_path / "roms" / "gb.json" self.parse_one(json_file,"gb",["gb", "gbc"]) json_file = script_path / "roms" / "nes.json" self.parse_one(json_file, "nes",["nes", "fds", "nsf"]) json_file = script_path / "roms" / "sms.json" self.parse_one(json_file, "sms",["sms"]) json_file = script_path / "roms" / "gg.json" self.parse_one(json_file, "gg",["gg"]) json_file = script_path / "roms" / "col.json" self.parse_one(json_file, "col",["col"]) json_file = script_path / "roms" / "sg.json" self.parse_one(json_file, "sg",["sg"]) json_file = script_path / "roms" / "pce.json" self.parse_one(json_file, "pce",["pce"]) json_file = script_path / "roms" / "gw.json" self.parse_one(json_file, "gw",["gw"]) json_file = script_path / "roms" / "msx.json" self.parse_one(json_file, "msx",["rom","mx1","mx2","cdk"]) json_file = script_path / "roms" / "wsv.json" self.parse_one(json_file, "wsv",["bin","sv"]) json_file = script_path / "roms" / "md.json" self.parse_one(json_file, "md",["md","bin","gen"]) json_file = script_path / "roms" / "a7800.json" self.parse_one(json_file, "a7800",["a78","bin"]) json_file = script_path / "roms" / "amstrad.json" self.parse_one(json_file, "amstrad",["dsk"]) json_file = script_path / "roms" / "tama.json" self.parse_one(json_file, "tama",["b"]) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Define ROMs name & pulish to the build environment") try: ROMParser().parse() except ImportError as e: print(e) print("Missing dependencies. Run:") print(" python -m pip install -r requirements.txt") exit(-1)