| # Scan an Apple header file, generating a Python file of generator calls. | 
 |  | 
 | import addpack | 
 | addpack.addpack(':Tools:bgen:bgen') | 
 |  | 
 | from scantools import Scanner | 
 |  | 
 | def main(): | 
 | 	input = "QuickDraw.h" | 
 | 	output = "qdgen.py" | 
 | 	defsoutput = "QuickDraw.py" | 
 | 	scanner = MyScanner(input, output, defsoutput) | 
 | 	scanner.scan() | 
 | 	scanner.close() | 
 | 	 | 
 | 	# Grmpf. Universal Headers have Text-stuff in a different include file... | 
 | 	input = "QuickDrawText.h" | 
 | 	output = "@qdgentext.py" | 
 | 	defsoutput = "@QuickDrawText.py" | 
 | 	have_extra = 0 | 
 | 	try: | 
 | 		scanner = MyScanner(input, output, defsoutput) | 
 | 		scanner.scan() | 
 | 		scanner.close() | 
 | 		have_extra = 1 | 
 | 	except IOError: | 
 | 		pass | 
 | 	if have_extra: | 
 | 		print "=== Copying QuickDrawText stuff into main files... ===" | 
 | 		ifp = open("@qdgentext.py") | 
 | 		ofp = open("qdgen.py", "a") | 
 | 		ofp.write(ifp.read()) | 
 | 		ifp.close() | 
 | 		ofp.close() | 
 | 		ifp = open("@QuickDrawText.py") | 
 | 		ofp = open("QuickDraw.py", "a") | 
 | 		ofp.write(ifp.read()) | 
 | 		ifp.close() | 
 | 		ofp.close() | 
 | 		 | 
 | 	print "=== Done scanning and generating, now importing the generated code... ===" | 
 | 	import qdsupport | 
 | 	print "=== Done.  It's up to you to compile it now! ===" | 
 |  | 
 | class MyScanner(Scanner): | 
 |  | 
 | 	def destination(self, type, name, arglist): | 
 | 		classname = "Function" | 
 | 		listname = "functions" | 
 | 		if arglist: | 
 | 			t, n, m = arglist[0] | 
 | 			if t in ("WindowPtr", "WindowPeek", "WindowRef") and m == "InMode": | 
 | 				classname = "Method" | 
 | 				listname = "methods" | 
 | 		return classname, listname | 
 |  | 
 | 	def makeblacklistnames(self): | 
 | 		return [ | 
 | 			'InitGraf', | 
 | 			'StuffHex', | 
 | 			'StdLine', | 
 | 			'StdComment', | 
 | 			'StdGetPic', | 
 | 			'StdLine', | 
 | 			] | 
 |  | 
 | 	def makeblacklisttypes(self): | 
 | 		return [ | 
 | 			'BitMap_ptr', | 
 | 			'CCrsrHandle', | 
 | 			'CGrafPtr', | 
 | 			'CIconHandle', | 
 | 			'CQDProcs', | 
 | 			'CSpecArray', | 
 | 			'CTabHandle', | 
 | 			'ColorComplementProcPtr', | 
 | 			'ColorComplementUPP', | 
 | 			'ColorSearchProcPtr', | 
 | 			'ColorSearchUPP', | 
 | 			'ConstPatternParam', | 
 | 			'Pattern_ptr', | 
 | 			'Cursor_ptr', | 
 | 			'DeviceLoopDrawingProcPtr', | 
 | 			'DeviceLoopFlags', | 
 | 			'FontInfo', | 
 | 			'GDHandle', | 
 | 			'GrafVerb', | 
 | 			'OpenCPicParams_ptr', | 
 | 			'PenState', | 
 | 			'PenState_ptr', | 
 | 			'Ptr', | 
 | 			'QDProcs', | 
 | 			'RGBColor', | 
 | 			'RGBColor_ptr', | 
 | 			'ReqListRec', | 
 | 			'void_ptr', | 
 | 			] | 
 |  | 
 | 	def makerepairinstructions(self): | 
 | 		return [ | 
 | 			([('void_ptr', 'textBuf', 'InMode'), | 
 | 			  ('short', 'firstByte', 'InMode'), | 
 | 			  ('short', 'byteCount', 'InMode')], | 
 | 			 [('TextThingie', '*', '*'), ('*', '*', '*'), ('*', '*', '*')]), | 
 | 			 | 
 | 			([('Point', '*', 'OutMode')], | 
 | 			 [('*', '*', 'InOutMode')]), | 
 | 			 | 
 | 			] | 
 |  | 
 | if __name__ == "__main__": | 
 | 	main() |