import argparse import os import csv parser = argparse.ArgumentParser(description="Convert CSV to .h defines") parser.add_argument("--csv", required=True, help="Path to CSV file") parser.add_argument("--output", required=True, help="Path to output .h file") parser.add_argument("--prefix", default="", help="Prefix for each define") parser.add_argument("--typedef", required=True, help="Typedef name for the enum") parser.add_argument("--take-column", required=True, help="Column name to take the values for the enum for") parser.add_argument("--null-entry", default=None, help="Optional name for a NULL/INVALID entry") parser.add_argument("--count-entry", default=None, help="Optional name for a COUNT entry") args = parser.parse_args() outHeader = "" outHeader += "#include \"dusk.h\"\n\n" with open(args.csv, newline='') as csvfile: reader = csv.reader(csvfile) headers = next(reader) if args.take_column not in headers: raise ValueError(f"Column '{args.take_column}' not found in CSV headers") take_column_index = headers.index(args.take_column) # Extract entries entries = [] for row in reader: value = row[take_column_index] clean_define_name = value.replace(" ", "_").upper() if clean_define_name in entries: continue # Avoid duplicates entries.append(clean_define_name) # Gen enum. outHeader += f"typedef enum {{\n" if args.null_entry == "TRUE": outHeader += f" {args.prefix}_NULL = 0,\n\n" for entry in entries: outHeader += f" {args.prefix}_{entry},\n" if args.count_entry == "TRUE": outHeader += f"\n {args.prefix}_COUNT,\n" outHeader += f"}} {args.typedef};\n\n" # Write to output file (mkdirp if needed) os.makedirs(os.path.dirname(args.output), exist_ok=True) with open(args.output, 'w') as outFile: outFile.write(outHeader)