| 
									
										
										
										
											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 MacOS | 
					
						
							| 
									
										
										
										
											1998-04-17 14:07:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-08-05 15:39:30 +00:00
										 |  |  | from bgenlocations import TOOLBOXDIR, BGENDIR | 
					
						
							| 
									
										
										
										
											1998-04-17 14:07:56 +00:00
										 |  |  | sys.path.append(BGENDIR) | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | from scantools import Scanner | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							| 
									
										
										
										
											2000-12-12 22:09:11 +00:00
										 |  |  | 	print "=== Scanning AEDataModel.h, AppleEvents.h, AERegistry.h, AEObjects.h ===" | 
					
						
							| 
									
										
										
										
											2001-12-17 11:47:27 +00:00
										 |  |  | 	input = ["AEDataModel.h", "AEInteraction.h", "AppleEvents.h", "AERegistry.h", "AEObjects.h"] | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 	output = "aegen.py" | 
					
						
							| 
									
										
										
										
											1996-04-12 16:29:23 +00:00
										 |  |  | 	defsoutput = TOOLBOXDIR + "AppleEvents.py" | 
					
						
							| 
									
										
										
										
											2000-12-12 22:09:11 +00:00
										 |  |  | 	scanner = AppleEventsScanner(input, output, defsoutput) | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 	scanner.scan() | 
					
						
							|  |  |  | 	scanner.close() | 
					
						
							| 
									
										
										
										
											2002-08-15 21:48:16 +00:00
										 |  |  | 	print "=== Testing definitions output code ===" | 
					
						
							|  |  |  | 	execfile(defsoutput, {}, {}) | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 	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", | 
					
						
							| 
									
										
										
										
											2000-12-10 23:43:49 +00:00
										 |  |  | 			"AEGetDescData", # Use object.data | 
					
						
							|  |  |  | 			"AEGetSpecialHandler", | 
					
						
							| 
									
										
										
										
											1999-12-14 15:47:01 +00:00
										 |  |  | 			# Constants with funny definitions | 
					
						
							|  |  |  | 			"kAEDontDisposeOnResume", | 
					
						
							|  |  |  | 			"kAEUseStandardDispatch", | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 			] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def makeblacklisttypes(self): | 
					
						
							|  |  |  | 		return [ | 
					
						
							|  |  |  | 			"ProcPtr", | 
					
						
							|  |  |  | 			"AEArrayType", | 
					
						
							| 
									
										
										
										
											1995-06-05 22:34:12 +00:00
										 |  |  | 			"AECoercionHandlerUPP", | 
					
						
							|  |  |  | 			"UniversalProcPtr", | 
					
						
							| 
									
										
										
										
											2000-12-12 22:09:11 +00:00
										 |  |  | 			"OSLCompareUPP", | 
					
						
							|  |  |  | 			"OSLAccessorUPP", | 
					
						
							| 
									
										
										
										
											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") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  | 	main() |