diff options
Diffstat (limited to 'main.py')
-rwxr-xr-x | main.py | 42 |
1 files changed, 39 insertions, 3 deletions
@@ -9,25 +9,31 @@ import readline from shutil import copy import signal import sys +from text import text +import datetime def SigHandler_SIGINT(signum, frame): print() sys.exit(0) +def get_full_path(path, name): + if path[-1] == "/": return path + name + else: return path + "/" + name + class Argparser(object): def __init__(self): parser = argparse.ArgumentParser() parser.add_argument("--targetname", type=str, help="main target name") parser.add_argument("--outdir", type=str, help="path to output dir") parser.add_argument("--structs", type=str, help="the structs json file") + parser.add_argument("--structsinclude", type=str, help="the path to the header that's going to be included by structs.h before structure declarations.") parser.add_argument("--dbg", action="store_true", help="debug", default=False) + parser.add_argument("--datetime", action="store_true", help="print date and time in autogen files", default=False) self.args = parser.parse_args() def dupemake(path, main_name): copy("./resources/makefile", path) - makefile_path = str() - if path[-1] == "/": makefile_path = path + "makefile" - else: makefile_path = path + "/makefile" + makefile_path = get_full_path(path, "makefile") for line in fileinput.input(makefile_path, inplace=True): if "XXX" in line: line = line.replace("XXX", main_name) @@ -37,6 +43,7 @@ class CodeGen(object): def __init__(self, argparser): self.argparser = argparser self.struct_json = json.load(open(self.argparser.args.structs)) + self.dnt = datetime.datetime.now().isoformat() def init_hook(self): pass @@ -44,9 +51,38 @@ class CodeGen(object): def init(self): dupemake(self.argparser.args.outdir, self.argparser.args.targetname) + def gen_reader_funcs(self): + pass + + def gen_struct_header(self): + struct_source = open(get_full_path(self.argparser.args.outdir, "structs.h"), "w") + struct_source_c = open(get_full_path(self.argparser.args.outdir, "structs.c"), "w") + struct_source_c.write('#include "structs.h"') + struct_source.write(text.pre_header_guard) + struct_source.write(text.autogen_warning) + if self.argparser.args.datetime: struct_source.write("// " + self.dnt + "\n") + struct_source.write(text.header_guard_begin.replace("XXX", "structs".upper())) + struct_source.write(text.header_inttype) + if self.argparser.args.structsinclude: + copy(self.argparser.args.structsinclude, self.argparser.args.outdir) + pos = self.argparser.args.structsinclude.rfind("/") + sub = self.argparser.args.structsinclude[pos+1:] + struct_source.write('#include "' + sub + '"\n') + for k,v in self.struct_json.items(): + struct_name = k + field_names = v["field_name"] + field_typess = v["field_type"] + struct_source.write("typedef struct {\n") + for i, j in zip(field_names, field_typess): + struct_source.write("\t" + j + " " + i + ";\n") + struct_source.write("}" + struct_name + ";\n\n") + struct_source.write(text.pragma_endif) + struct_source.write(text.last_comment) + def run(self): self.init() self.init_hook() + self.gen_struct_header() # write code here def premain(argparser): |