forked from cnvogelg/amitools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfdtool
executable file
·83 lines (73 loc) · 2.4 KB
/
fdtool
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/env python2.7
#
# fdtool <file.fd> ...
#
import sys
import argparse
import amitools.fd.FDFormat as FDFormat
# ----- dump -----
def dump(fd, add_private):
print(fname)
print(" base: %s" % fd.get_base_name())
funcs = fd.get_funcs()
num = 1
for f in funcs:
if add_private or not f.is_private():
bias = f.get_bias()
print(" #%04d %5d 0x%04x %30s %s" % (num,bias,bias,f.get_name(),f.get_arg_str()))
num += 1
# ----- generate -----
def generate_python_code(fd, add_private):
funcs = fd.get_funcs()
for f in funcs:
if add_private or not f.is_private():
args = f.get_args()
if len(args)>0:
args = tuple(args)
else:
args = None
print " (%d, '%s', %s)," % (f.get_bias(),f.get_name(),args)
def generate_sasc_code(fname, fd, add_private, prefix=""):
funcs = fd.get_funcs()
fo = open(fname, "w")
for f in funcs:
if add_private or not f.is_private():
line = "__asm __saveds int %s%s(" % (prefix, f.get_name())
args = f.get_args()
if args != None:
for a in args:
line += "register __%s int %s" % (a[1],a[0])
if a != args[-1]:
line += ", "
else:
line += " void "
line += " )"
fo.write(line)
fo.write("{\n return 0;\n}\n\n")
fo.close()
# ----- main -----
# parse args
parser = argparse.ArgumentParser()
parser.add_argument('files', nargs='+')
parser.add_argument('-P', '--add-private', action='store_true', default=False, help="add private functions")
parser.add_argument('-p', '--gen-python', action='store_true', default=False, help="generate python code for vamos")
parser.add_argument('-f', '--gen-fd', action='store', default=None, help="generate a new fd file")
parser.add_argument('-c', '--gen-sasc', action='store', default=None, help="generate SAS C code file")
parser.add_argument('-E', '--prefix', action='store', default='', help="add prefix to functions in C")
args = parser.parse_args()
# main loop
files = args.files
for fname in files:
fd = FDFormat.read_fd(fname)
code_gen = False
if args.gen_python:
generate_python_code(fd, args.add_private)
code_gen = True
if args.gen_sasc:
generate_sasc_code(args.gen_sasc, fd, args.add_private, args.prefix)
code_gen = True
if args.gen_fd != None:
FDFormat.write_fd(args.gen_fd, fd, args.add_private)
code_gen = True
if not code_gen:
dump(fd, args.add_private)