Allow [] after a parameter name. We currently take this to be the same as * in front, which isn't 100% correct but good enough.
diff --git a/Tools/bgen/bgen/scantools.py b/Tools/bgen/bgen/scantools.py
index 7dc46a9..23da86a 100644
--- a/Tools/bgen/bgen/scantools.py
+++ b/Tools/bgen/bgen/scantools.py
@@ -244,7 +244,7 @@
 		self.whole_pat = self.type_pat + self.name_pat + self.args_pat
 		self.sym_pat = "^[ \t]*\(<name>[a-zA-Z0-9_]+\)[ \t]*=" + \
 		               "[ \t]*\(<defn>[-0-9_a-zA-Z'\"(][^\t\n,;}]*\),?"
-		self.asplit_pat = "^\(<type>.*[^a-zA-Z0-9_]\)\(<name>[a-zA-Z0-9_]+\)$"
+		self.asplit_pat = "^\(<type>.*[^a-zA-Z0-9_]\)\(<name>[a-zA-Z0-9_]+\)\(<array>\[\]\)?$"
 		self.comment1_pat = "\(<rest>.*\)//.*"
 		# note that the next pattern only removes comments that are wholly within one line
 		self.comment2_pat = "\(<rest1>.*\)/\*.*\*/\(<rest2>.*\)"
@@ -470,8 +470,12 @@
 		mode = "InMode"
 		if self.asplit.match(part) < 0:
 			self.error("Indecipherable argument: %s", `part`)
+			import pdb ; pdb.set_trace()
 			return ("unknown", part, mode)
-		type, name = self.asplit.group('type', 'name')
+		type, name, array = self.asplit.group('type', 'name', 'array')
+		if array:
+			# array matches an optional [] after the argument name
+			type = type + " ptr "
 		type = regsub.gsub("\*", " ptr ", type)
 		type = string.strip(type)
 		type = regsub.gsub("[ \t]+", "_", type)
@@ -573,10 +577,7 @@
 	def initpatterns(self):
 		Scanner.initpatterns(self)
 		self.head_pat = "^extern pascal[ \t]+" # XXX Mac specific!
-		self.tail_pat = "[;={}]"
 		self.type_pat = "pascal[ \t\n]+\(<type>[a-zA-Z0-9_ \t]*[a-zA-Z0-9_]\)[ \t\n]+"
-		self.name_pat = "\(<name>[a-zA-Z0-9_]+\)[ \t\n]*"
-		self.args_pat = "(\(<args>\([^(;=)]+\|([^(;=)]*)\)*\))"
 		self.whole_pat = self.type_pat + self.name_pat + self.args_pat
 		self.sym_pat = "^[ \t]*\(<name>[a-zA-Z0-9_]+\)[ \t]*=" + \
 		               "[ \t]*\(<defn>[-0-9'\"][^\t\n,;}]*\),?"
@@ -585,22 +586,15 @@
 class Scanner_OSX(Scanner):
 	"""Scanner for modern (post UH3.3) Universal Headers """
 	def initpatterns(self):
+		Scanner.initpatterns(self)
 		self.head_pat = "^EXTERN_API_C"
-		self.tail_pat = "[;={}]"
 		self.type_pat = "EXTERN_API_C" + \
 						"[ \t\n]*([ \t\n]*" + \
 						"\(<type>[a-zA-Z0-9_* \t]*[a-zA-Z0-9_*]\)" + \
 						"[ \t\n]*)[ \t\n]*"
-		self.name_pat = "\(<name>[a-zA-Z0-9_]+\)[ \t\n]*"
-		self.args_pat = "(\(<args>\([^(;=)]+\|([^(;=)]*)\)*\))"
 		self.whole_pat = self.type_pat + self.name_pat + self.args_pat
 		self.sym_pat = "^[ \t]*\(<name>[a-zA-Z0-9_]+\)[ \t]*=" + \
 		               "[ \t]*\(<defn>[-0-9_a-zA-Z'\"(][^\t\n,;}]*\),?"
-		self.asplit_pat = "^\(<type>.*[^a-zA-Z0-9_]\)\(<name>[a-zA-Z0-9_]+\)$"
-		self.comment1_pat = "\(<rest>.*\)//.*"
-		# note that the next pattern only removes comments that are wholly within one line
-		self.comment2_pat = "\(<rest1>.*\)/\*.*\*/\(<rest2>.*\)"
-
 	
 def test():
 	input = "D:Development:THINK C:Mac #includes:Apple #includes:AppleEvents.h"