#!/usr/bin/env python3 import sys import os import math import argparse sGBDK = """//AUTOGENERATED FILE FROM {:s} #include #include #include "{:s}.h" BANKREF({:s}) const {:s} {:s}[{:s}_SIZE] = {{ {:s}}}; """ hGBDK = """//AUTOGENERATED FILE FROM {:s} #ifndef GEN_CONST_ANGLES_{:s}_H #define GEN_CONST_ANGLES_{:s}_H #include #include #define {:s}_WIDTH {:d} #define {:s}_SIZE {:d} extern const {:s} {:s}[{:s}_SIZE]; BANKREF_EXTERN({:s}) #endif """ def calc(args): s = "" for i in range(0, args.steps): angle = 360 / args.steps * i sin_a = math.sin(math.radians(angle)) * args.max cos_a = math.cos(math.radians(angle)) * args.max for n in range(0, args.shift): sin_a *= 2 cos_a *= 2 if args.width > 0: s += f" {round(sin_a)}," if args.width > 1: s += f" {round(cos_a)}," s += f" // {angle}\n" return (s, args.steps * args.width) def main(args): outheader = os.path.join(args.dir, f"{args.name}.h") outsource = os.path.join(args.dir, f"{args.name}.c") data, length = calc(args) source = sGBDK.format(sys.argv[0], args.name, args.name, args.type, args.name, args.name, data) if args.verbose: print(f"Source: {outsource}") print(source) if not args.dry_run: with open(outsource, "w") as o: o.write(source) header = hGBDK.format(sys.argv[0], args.name, args.name, args.name, args.width, args.name, length, args.type, args.name, args.name, args.name) if args.verbose: print(f"Header: {outheader}") print(header) if not args.dry_run: with open(outheader, "w") as o: o.write(header) if __name__=='__main__': parser = argparse.ArgumentParser() parser.add_argument("-d", "--dir", default=os.path.realpath(".")) parser.add_argument("-n", "--name", required=True) #default="angles") parser.add_argument("-s", "--steps", default=16, type=int) parser.add_argument("-w", "--width", default=2, type=int) parser.add_argument("-f", "--shift", default=0, type=int) parser.add_argument("-m", "--max", default=42, type=int) parser.add_argument("-t", "--type", default="int8_t") parser.add_argument("-v", "--verbose", action="store_true") parser.add_argument("-y", "--dry-run", action="store_true") args = parser.parse_args() #print(args) main(args)