| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | # Scan AppleEvents.h header file, generate aegen.py and AppleEvents.py files. | 
					
						
							|  |  |  | # Then run aesupport to generate AEmodule.c. | 
					
						
							| 
									
										
										
										
											1998-04-17 14:07:56 +00:00
										 |  |  | # (Should learn how to tell the compiler to compile it as well.) | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import string | 
					
						
							|  |  |  | import regex | 
					
						
							|  |  |  | import regsub | 
					
						
							|  |  |  | import MacOS | 
					
						
							| 
									
										
										
										
											1998-04-17 14:07:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | BGENDIR=os.path.join(sys.prefix, ':Tools:bgen:bgen') | 
					
						
							|  |  |  | sys.path.append(BGENDIR) | 
					
						
							| 
									
										
										
										
											1996-04-12 16:29:23 +00:00
										 |  |  | from bgenlocations import TOOLBOXDIR | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | from scantools import Scanner | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							| 
									
										
										
										
											1995-07-17 11:39:04 +00:00
										 |  |  | 	print "=== Scanning AERegistry.h for defines ===" | 
					
						
							|  |  |  | 	input = "AERegistry.h" | 
					
						
							|  |  |  | 	output = "@dummy-registry.py" | 
					
						
							| 
									
										
										
										
											1996-04-12 16:29:23 +00:00
										 |  |  | 	defsoutput = TOOLBOXDIR + "AERegistry.py" | 
					
						
							| 
									
										
										
										
											1998-02-20 16:02:09 +00:00
										 |  |  | 	scanner = AppleEventsRegScanner(input, output, defsoutput) | 
					
						
							| 
									
										
										
										
											1995-07-17 11:39:04 +00:00
										 |  |  | 	scanner.scan() | 
					
						
							|  |  |  | 	scanner.close() | 
					
						
							|  |  |  | 	print "=== Scanning AEObjects.h for defines ===" | 
					
						
							|  |  |  | 	# XXXX This isn't correct. We only scan AEObjects.h for defines, but there | 
					
						
							|  |  |  | 	# are some functions in there that are probably useful (the accessor stuff) | 
					
						
							|  |  |  | 	# once we start writing servers in python. | 
					
						
							|  |  |  | 	input = "AEObjects.h" | 
					
						
							|  |  |  | 	output = "@dummy-objects.py" | 
					
						
							| 
									
										
										
										
											1996-04-12 16:29:23 +00:00
										 |  |  | 	defsoutput = TOOLBOXDIR + "AEObjects.py" | 
					
						
							| 
									
										
										
										
											1995-07-17 11:39:04 +00:00
										 |  |  | 	scanner = AppleEventsScanner(input, output, defsoutput) | 
					
						
							|  |  |  | 	scanner.scan() | 
					
						
							|  |  |  | 	scanner.close() | 
					
						
							| 
									
										
										
										
											1998-02-20 16:02:09 +00:00
										 |  |  | 	print "=== Scanning AEDataModel.h ===" | 
					
						
							|  |  |  | 	input = "AEDataModel.h" | 
					
						
							|  |  |  | 	output = "aedatamodelgen.py" | 
					
						
							|  |  |  | 	defsoutput = TOOLBOXDIR + "AEDataModel.py" | 
					
						
							|  |  |  | 	scanner = AppleEventsScanner(input, output, defsoutput) | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	scanner.scan() | 
					
						
							|  |  |  | 	scanner.close() | 
					
						
							|  |  |  | 	print "=== Scanning AppleEvents.h ===" | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 	input = "AppleEvents.h" | 
					
						
							|  |  |  | 	output = "aegen.py" | 
					
						
							| 
									
										
										
										
											1996-04-12 16:29:23 +00:00
										 |  |  | 	defsoutput = TOOLBOXDIR + "AppleEvents.py" | 
					
						
							| 
									
										
										
										
											1998-02-20 16:02:09 +00:00
										 |  |  | 	scanner = AppleEventsRegScanner(input, output, defsoutput) | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 	scanner.scan() | 
					
						
							|  |  |  | 	scanner.close() | 
					
						
							|  |  |  | 	print "=== Done Scanning and Generating, now doing 'import aesupport' ===" | 
					
						
							|  |  |  | 	import aesupport | 
					
						
							|  |  |  | 	print "=== Done 'import aesupport'.  It's up to you to compile AEmodule.c ===" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AppleEventsScanner(Scanner): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def destination(self, type, name, arglist): | 
					
						
							|  |  |  | 		classname = "AEFunction" | 
					
						
							|  |  |  | 		listname = "functions" | 
					
						
							|  |  |  | 		if arglist: | 
					
						
							|  |  |  | 			t, n, m = arglist[0] | 
					
						
							|  |  |  | 			if t[-4:] == "_ptr" and m == "InMode" and \ | 
					
						
							|  |  |  | 			   t[:-4] in ("AEDesc", "AEAddressDesc", "AEDescList", | 
					
						
							|  |  |  | 			         "AERecord", "AppleEvent"): | 
					
						
							|  |  |  | 				classname = "AEMethod" | 
					
						
							|  |  |  | 				listname = "aedescmethods" | 
					
						
							|  |  |  | 		return classname, listname | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def makeblacklistnames(self): | 
					
						
							|  |  |  | 		return [ | 
					
						
							|  |  |  | 			"AEDisposeDesc", | 
					
						
							| 
									
										
										
										
											1995-07-29 13:58:41 +00:00
										 |  |  | #			"AEGetEventHandler", | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 			] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def makeblacklisttypes(self): | 
					
						
							|  |  |  | 		return [ | 
					
						
							|  |  |  | 			"ProcPtr", | 
					
						
							|  |  |  | 			"AEArrayType", | 
					
						
							| 
									
										
										
										
											1995-06-05 22:34:12 +00:00
										 |  |  | 			"AECoercionHandlerUPP", | 
					
						
							|  |  |  | 			"UniversalProcPtr", | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 			] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def makerepairinstructions(self): | 
					
						
							|  |  |  | 		return [ | 
					
						
							|  |  |  | 			([("Boolean", "isSysHandler", "InMode")], | 
					
						
							|  |  |  | 			 [("AlwaysFalse", "*", "*")]), | 
					
						
							|  |  |  | 			 | 
					
						
							|  |  |  | 			([("void_ptr", "*", "InMode"), ("Size", "*", "InMode")], | 
					
						
							|  |  |  | 			 [("InBuffer", "*", "*")]), | 
					
						
							|  |  |  | 			 | 
					
						
							|  |  |  | 			([("EventHandlerProcPtr", "*", "InMode"), ("long", "*", "InMode")], | 
					
						
							|  |  |  | 			 [("EventHandler", "*", "*")]), | 
					
						
							|  |  |  | 			 | 
					
						
							|  |  |  | 			([("EventHandlerProcPtr", "*", "OutMode"), ("long", "*", "OutMode")], | 
					
						
							|  |  |  | 			 [("EventHandler", "*", "*")]), | 
					
						
							|  |  |  | 			 | 
					
						
							| 
									
										
										
										
											1995-07-29 13:58:41 +00:00
										 |  |  | 			([("AEEventHandlerUPP", "*", "InMode"), ("long", "*", "InMode")], | 
					
						
							|  |  |  | 			 [("EventHandler", "*", "*")]), | 
					
						
							|  |  |  | 			 | 
					
						
							|  |  |  | 			([("AEEventHandlerUPP", "*", "OutMode"), ("long", "*", "OutMode")], | 
					
						
							|  |  |  | 			 [("EventHandler", "*", "*")]), | 
					
						
							|  |  |  | 			 | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 			([("void", "*", "OutMode"), ("Size", "*", "InMode"), | 
					
						
							|  |  |  | 			                            ("Size", "*", "OutMode")], | 
					
						
							|  |  |  | 			 [("VarVarOutBuffer", "*", "InOutMode")]), | 
					
						
							| 
									
										
										
										
											1995-06-05 22:34:12 +00:00
										 |  |  | 			  | 
					
						
							|  |  |  | 			([("AppleEvent", "theAppleEvent", "OutMode")], | 
					
						
							|  |  |  | 			 [("AppleEvent_ptr", "*", "InMode")]), | 
					
						
							| 
									
										
										
										
											1995-07-17 11:39:04 +00:00
										 |  |  | 			  | 
					
						
							|  |  |  | 			([("AEDescList", "theAEDescList", "OutMode")], | 
					
						
							|  |  |  | 			 [("AEDescList_ptr", "*", "InMode")]), | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 			] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-02-20 16:02:09 +00:00
										 |  |  | 	def writeinitialdefs(self): | 
					
						
							|  |  |  | 		self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AppleEventsRegScanner(AppleEventsScanner): | 
					
						
							|  |  |  | 	def writeinitialdefs(self): | 
					
						
							|  |  |  | 		self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") | 
					
						
							|  |  |  | 		self.defsfile.write("from AEDataModel import *\n") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  | 	main() |