123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #!/usr/bin/env python3
-
- import sys
- import os
- import math
- import argparse
-
- sGBDK = """//AUTOGENERATED FILE FROM {:s}
- #include <stdint.h>
- #include <gbdk/platform.h>
- #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 <stdint.h>
- #include <gbdk/platform.h>
-
- #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)
|