1# Scan AppleEvents.h header file, generate aegen.py and AppleEvents.py files. 2# Then run aesupport to generate AEmodule.c. 3# (Should learn how to tell the compiler to compile it as well.) 4 5import sys 6import MacOS 7 8from bgenlocations import TOOLBOXDIR, BGENDIR 9sys.path.append(BGENDIR) 10 11from scantools import Scanner 12 13def main(): 14 print "=== Scanning AEDataModel.h, AppleEvents.h, AERegistry.h, AEObjects.h ===" 15 input = ["AEDataModel.h", "AEInteraction.h", "AppleEvents.h", "AERegistry.h", "AEObjects.h"] 16 output = "aegen.py" 17 defsoutput = TOOLBOXDIR + "AppleEvents.py" 18 scanner = AppleEventsScanner(input, output, defsoutput) 19 scanner.scan() 20 scanner.close() 21 print "=== Testing definitions output code ===" 22 execfile(defsoutput, {}, {}) 23 print "=== Done Scanning and Generating, now doing 'import aesupport' ===" 24 import aesupport 25 print "=== Done 'import aesupport'. It's up to you to compile AEmodule.c ===" 26 27class AppleEventsScanner(Scanner): 28 29 def destination(self, type, name, arglist): 30 classname = "AEFunction" 31 listname = "functions" 32 if arglist: 33 t, n, m = arglist[0] 34 if t[-4:] == "_ptr" and m == "InMode" and \ 35 t[:-4] in ("AEDesc", "AEAddressDesc", "AEDescList", 36 "AERecord", "AppleEvent"): 37 classname = "AEMethod" 38 listname = "aedescmethods" 39 return classname, listname 40 41 def makeblacklistnames(self): 42 return [ 43 "AEDisposeDesc", 44# "AEGetEventHandler", 45 "AEGetDescData", # Use object.data 46 "AEGetSpecialHandler", 47 # Constants with funny definitions 48 "kAEDontDisposeOnResume", 49 "kAEUseStandardDispatch", 50 ] 51 52 def makeblacklisttypes(self): 53 return [ 54 "ProcPtr", 55 "AEArrayType", 56 "AECoercionHandlerUPP", 57 "UniversalProcPtr", 58 "OSLCompareUPP", 59 "OSLAccessorUPP", 60 ] 61 62 def makerepairinstructions(self): 63 return [ 64 ([("Boolean", "isSysHandler", "InMode")], 65 [("AlwaysFalse", "*", "*")]), 66 67 ([("void_ptr", "*", "InMode"), ("Size", "*", "InMode")], 68 [("InBuffer", "*", "*")]), 69 70 ([("EventHandlerProcPtr", "*", "InMode"), ("long", "*", "InMode")], 71 [("EventHandler", "*", "*")]), 72 73 ([("EventHandlerProcPtr", "*", "OutMode"), ("long", "*", "OutMode")], 74 [("EventHandler", "*", "*")]), 75 76 ([("AEEventHandlerUPP", "*", "InMode"), ("long", "*", "InMode")], 77 [("EventHandler", "*", "*")]), 78 79 ([("AEEventHandlerUPP", "*", "OutMode"), ("long", "*", "OutMode")], 80 [("EventHandler", "*", "*")]), 81 82 ([("void", "*", "OutMode"), ("Size", "*", "InMode"), 83 ("Size", "*", "OutMode")], 84 [("VarVarOutBuffer", "*", "InOutMode")]), 85 86 ([("AppleEvent", "theAppleEvent", "OutMode")], 87 [("AppleEvent_ptr", "*", "InMode")]), 88 89 ([("AEDescList", "theAEDescList", "OutMode")], 90 [("AEDescList_ptr", "*", "InMode")]), 91 ] 92 93 def writeinitialdefs(self): 94 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") 95 96if __name__ == "__main__": 97 main() 98