Added -i option to ignore general regexps
diff --git a/Tools/scripts/h2py.py b/Tools/scripts/h2py.py
index 0b260c1..3d7a851 100755
--- a/Tools/scripts/h2py.py
+++ b/Tools/scripts/h2py.py
@@ -1,17 +1,21 @@
 #! /usr/local/bin/python
 
 # Read #define's from stdin and translate to Python code on stdout.
-# Very primitive: non-#define's are ignored.
-# You will have to edit the output in some cases.
+# Very primitive: non-#define's are ignored, as is anything that isn't
+# valid Python as it stands.
 # If one or more filenames are given, output is written to corresponding
 # filenames in the local directory, translated to all uppercase, with
 # the extension replaced by ".py".
+# By passing one or more options of the form "-i regular_expression"
+# you can specify additional strings to be ignored.  This is useful
+# e.g. to ignore casts to u_long: simply specify "-i '(u_long)'".
 
 # XXX To do:
 # - turn trailing C comments into Python comments
 # - turn C string quotes into Python comments
 # - turn C Boolean operators "&& || !" into Python "and or not"
 # - what to do about #if(def)?
+# - what to do about #include?
 # - what to do about macros with parameters?
 # - reject definitions with semicolons in them
 
@@ -21,8 +25,13 @@
 
 p_comment = regex.compile('/\*\([^*]+\|\*+[^/]\)*\(\*+/\)?')
 
+ignores = [p_comment]
+
 def main():
-	opts, args = getopt.getopt(sys.argv[1:], '')
+	opts, args = getopt.getopt(sys.argv[1:], 'i:')
+	for o, a in opts:
+		if o == '-i':
+			ignores.append(regex.compile(a))
 	if not args:
 		args = ['-']
 	for filename in args:
@@ -49,22 +58,21 @@
 		line = fp.readline()
 		if not line: break
 		lineno = lineno + 1
-		if p_define.match(line) >= 0:
-			# gobble up continuation lines
-			while line[-2:] == '\\\n':
-				nextline = fp.readline()
-				if not nextline: break
-				lineno = lineno + 1
-				line = line + nextline
-			regs = p_define.regs
-			a, b = regs[1] # where the macro name is
-			name = line[a:b]
-			a, b = regs[0] # the whole match
-			body = line[b:]
-			# replace comments by spaces
-			while p_comment.search(body) >= 0:
-				a, b = p_comment.regs[0]
-				body = body[:a] + ' ' + body[b:]
+		# gobble up continuation lines
+		while line[-2:] == '\\\n':
+			nextline = fp.readline()
+			if not nextline: break
+			lineno = lineno + 1
+			line = line + nextline
+		n = p_define.match(line)
+		if n >= 0:
+			name = p_define.group(1)
+			body = line[n:]
+			# replace ignored patterns by spaces
+			for p in ignores:
+				while p.search(body) >= 0:
+					a, b = p.regs[0]
+					body = body[:a] + ' ' + body[b:]
 			stmt = '%s = %s\n' % (name, string.strip(body))
 			ok = 0
 			try: