summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2015-02-13 13:47:32 +0100
committer Miodrag Milanovic <mmicko@gmail.com>2015-02-13 13:47:32 +0100
commitf89a72489a39a7283c9050ea1a82f02008df457b (patch)
treec1b2b818bbeea68ba7c20afd9a0e8bfcc898ecb4
parent9f9d4fd25093a31a4657327ea3ee323b0dd0285a (diff)
doh (nw)
-rw-r--r--src/build/makelist.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/build/makelist.py b/src/build/makelist.py
new file mode 100644
index 00000000000..d58abce0c1d
--- /dev/null
+++ b/src/build/makelist.py
@@ -0,0 +1,94 @@
+#!/usr/bin/python
+
+from __future__ import with_statement
+
+import sys
+import os
+
+drivlist = []
+
+def parse_file(srcfile):
+ try:
+ fp = open(srcfile, 'rb')
+ except IOError:
+ print("Unable to open source file '%s'" % srcfile)
+ return 1
+ in_comment = 0
+ linenum = 0
+ for line in fp.readlines():
+ drivname = ''
+ linenum+=1
+ srcptr = 0
+ while srcptr < len(line):
+ c = line[srcptr]
+ srcptr+=1
+ if c==13 or c==10:
+ if c==13 and line[srcptr]==10:
+ srcptr+=1
+ continue
+ if c==' ':
+ continue;
+ if in_comment==1 and c=='*' and line[srcptr]=='/' :
+ srcptr+=1
+ in_comment = 0;
+ continue
+ if (in_comment):
+ continue
+ if c=='/' and line[srcptr]=='*' :
+ srcptr+=1
+ in_comment = 1;
+ continue
+ if c=='/' and line[srcptr]=='/' :
+ break
+ drivname += c
+ drivname = drivname.strip()
+ if (len(drivname)>0):
+ if drivname[0]=='#':
+ sys.stderr.write("Importing drivers from '%s'\n" % drivname[1:])
+ parse_file(drivname[1:])
+ continue
+ if not all(((c >='a' and c<='z') or (c>='0' and c<='9') or c=='_') for c in drivname):
+ sys.stderr.write("%s:%d - Invalid character in driver \"%s\"\n" % (srcfile, linenum, drivname))
+ return 1
+ else:
+ drivlist.append(drivname)
+ return 0
+
+
+if (len(sys.argv) < 2) :
+ print('Usage:')
+ print(' makelist <source.lst>')
+ sys.exit(0)
+
+if (parse_file(sys.argv[1])) :
+ sys.exit(1)
+
+# output a count
+if (len(drivlist)==0) :
+ sys.stderr.write("No drivers found\n")
+ sys.exit(1)
+
+sys.stderr.write("%d drivers found\n" % len(drivlist))
+
+# add a reference to the ___empty driver
+drivlist.append("___empty")
+
+# start with a header
+print('#include "emu.h"\n');
+print('#include "drivenum.h"\n');
+
+#output the list of externs first
+for drv in sorted(drivlist):
+ print("GAME_EXTERN(%s);" % drv)
+print("")
+
+# then output the array
+print("const game_driver * const driver_list::s_drivers_sorted[%d] =" % len(drivlist))
+print("{")
+for drv in sorted(drivlist):
+ print("\t&GAME_NAME(%s)," % drv)
+print("};");
+print("");
+
+# also output a global count
+print("int driver_list::s_driver_count = %d;\n" % len(drivlist))