1#!/usr/bin/python 2## 3## license:BSD-3-Clause 4## copyright-holders:Couriersud 5 6import os 7import os.path 8import re 9import sys 10import xml.sax 11import xml.sax.saxutils 12import zlib 13 14 15# workaround for version incompatibility 16if sys.version_info > (3, ): 17 long = int 18 19# globals 20 21last_src = "" 22 23def process_entry(srcfile, name, params): 24 global last_src 25 if (last_src != srcfile): 26 last_src = srcfile 27 print("// ---------------------------------------------------------------------") 28 print("// Source: {}".format(srcfile)) 29 print("// ---------------------------------------------------------------------") 30 print("") 31 p = re.sub("\+","",params) 32 ps = p.split(",") 33 pusage = "" 34 pauto = "" 35 for x in ps: 36 if x[0:1] == "@": 37 pauto = pauto + ", " + x[1:] 38 else: 39 pusage = pusage + ", " + x 40 print("// usage : {}(name{})".format(name, pusage)) 41 if len(pauto) > 0: 42 print("// auto connect: {}".format(pauto[2:])) 43 print("#define {}(...) \\".format(name)) 44 print("\tNET_REGISTER_DEVEXT({}, __VA_ARGS__)".format(name)) 45 print("") 46 47 48def process_file(srcfile): 49 src = open(srcfile,'r') 50 lines = src.readlines() 51 for line in lines: 52 ls = re.sub("\s+","",line.strip()) 53 ls = re.sub("^\s*//.*","",ls) 54 ls = re.sub("\"","",ls) 55 m = re.match(r"NETLIB_DEVICE_IMPL\((\w+),(\w+),([a-zA-Z0-9_+@,]*)", ls) 56 #print("Line{}: {}".format(count, line.strip())) 57 if m != None: 58 process_entry(srcfile, m.group(2), m.group(3)) 59 else: 60 m = re.match(r"NETLIB_DEVICE_IMPL_ALIAS\((\w+),(\w+),(\w+),([a-zA-Z0-9_+@,]*)", ls) 61 if m != None: 62 process_entry(srcfile, m.group(3), m.group(4)) 63 else: 64 m = re.match(r"NETLIB_DEVICE_IMPL_NS\((\w+),(\w+),(\w+),([a-zA-Z0-9_+@,]*)", ls) 65 if m != None: 66 process_entry(srcfile, m.group(3), m.group(4)) 67 else: 68 m = re.match(r"LOCAL_LIB_ENTRY\((\w+)\)", ls) 69 if m != None: 70 process_entry(srcfile, m.group(1), "") 71 else: 72 m = re.match(r"(static)*TRUTHTABLE_START\((\w+),(\w+),(\w+),([a-zA-Z0-9_+@,]*)", ls) 73 if m != None: 74 process_entry(srcfile, m.group(2), m.group(5)) 75 76 src.close() 77 78if __name__ == '__main__': 79 if (len(sys.argv) == 0): 80 print('Usage:') 81 print(' create_devinc files ...') 82 sys.exit(0) 83 files_sorted = []; 84 for argno in range(1, len(sys.argv)): 85 files_sorted.append(sys.argv[argno]) 86 files_sorted.sort(); 87 for entry in files_sorted: 88 process_file(entry) 89 90