117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# Scan an Apple header file, generating a Python file of generator calls. 217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 30c4d947eacfb360515a5ba58f1a6b96dddc6d265Jack Jansenimport sys 4aaebdd6a02dd4d650b14e2192e327336ecb62a98Jack Jansenfrom bgenlocations import TOOLBOXDIR, BGENDIR 50c4d947eacfb360515a5ba58f1a6b96dddc6d265Jack Jansensys.path.append(BGENDIR) 6ae8a68f40cd56aa952520260970ebd5b9d3fb95cJack Jansen 717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumfrom scantools import Scanner 817448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 917448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumLONG = "Dialogs" 1017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumSHORT = "dlg" 1117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumOBJECT = "DialogPtr" 1217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 1317448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumdef main(): 14182b5aca27d376b08a2904bed42b751496f932f3Tim Peters input = LONG + ".h" 15182b5aca27d376b08a2904bed42b751496f932f3Tim Peters output = SHORT + "gen.py" 16182b5aca27d376b08a2904bed42b751496f932f3Tim Peters defsoutput = TOOLBOXDIR + LONG + ".py" 17182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner = MyScanner(input, output, defsoutput) 18182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.scan() 19182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.close() 20182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Testing definitions output code ===" 21182b5aca27d376b08a2904bed42b751496f932f3Tim Peters execfile(defsoutput, {}, {}) 22182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Done scanning and generating, now importing the generated code... ===" 23182b5aca27d376b08a2904bed42b751496f932f3Tim Peters exec "import " + SHORT + "support" 24182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Done. It's up to you to compile it now! ===" 2517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 2617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumclass MyScanner(Scanner): 2717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 28182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def destination(self, type, name, arglist): 29182b5aca27d376b08a2904bed42b751496f932f3Tim Peters classname = "Function" 30182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listname = "functions" 31182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if arglist: 32182b5aca27d376b08a2904bed42b751496f932f3Tim Peters t, n, m = arglist[0] 33182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if t in ("DialogPtr", "DialogRef") and m == "InMode": 34182b5aca27d376b08a2904bed42b751496f932f3Tim Peters classname = "Method" 35182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listname = "methods" 36182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return classname, listname 37182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 38182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makeblacklistnames(self): 39182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 40182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'InitDialogs', 41182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'ErrorSound', 42182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Dialogs are disposed when the object is deleted 43182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'CloseDialog', 44182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'DisposDialog', 45182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'DisposeDialog', 46182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'UpdtDialog', 47182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'CouldAlert', 48182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'FreeAlert', 49182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'CouldDialog', 50182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'FreeDialog', 51182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'GetStdFilterProc', 52182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'GetDialogParent', 53182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## # Can't find these in the CW Pro 3 libraries 54182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'SetDialogMovableModal', 55182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'GetDialogControlNotificationProc', 56182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'SetGrafPortOfDialog', # Funny, and probably not useful 57182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Can't find these: 58182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'CloseStandardSheet', 59182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'RunStandardAlert', 60182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 61182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 62182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makeblacklisttypes(self): 63182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 64182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AlertStdAlertParamPtr", # Too much work, for now 65182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AlertStdAlertParamRec", # ditto 66182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AlertStdAlertParamRec_ptr", # ditto 67182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AlertStdCFStringAlertParamPtr", # ditto 68182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AlertStdCFStringAlertParamRec", 69182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AlertStdCFStringAlertParamRec_ptr", 70182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "QTModelessCallbackProcPtr", 71182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 72182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 73182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makerepairinstructions(self): 74182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 75182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([("Str255", "*", "InMode")], 76182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [("*", "*", "OutMode")]), 77182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 78182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")], 79182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [("InBuffer", "*", "*")]), 80182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 81182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([("void", "*", "OutMode"), ("long", "*", "InMode"), 82182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ("long", "*", "OutMode")], 83182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [("VarVarOutBuffer", "*", "InOutMode")]), 84182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 85182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # GetDialogItem return handle is optional 86182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([("Handle", "item", "OutMode")], 87182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [("OptHandle", "item", "OutMode")]), 88182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 89182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # NewDialog ETC. 90182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([("void", "*", "OutMode")], 91182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [("NullStorage", "*", "InMode")]), 92182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 93182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([("DialogPtr", "*", "OutMode")], 94182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [("ExistingDialogPtr", "*", "*")]), 95182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([("DialogRef", "*", "OutMode")], 96182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [("ExistingDialogPtr", "*", "*")]), 97182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([("WindowPtr", "*", "OutMode")], 98182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [("ExistingWindowPtr", "*", "*")]), 99182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([("WindowPtr", "*", "ReturnMode")], 100182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [("ExistingWindowPtr", "*", "*")]), 101182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 102182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # StdFilterProc 103182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('EventRecord', 'event', 'OutMode'), 104182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ('DialogItemIndex', 'itemHit', 'OutMode')], 105182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [('EventRecord', 'event', 'InOutMode'), 106182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ('DialogItemIndex', 'itemHit', 'InOutMode')]) 107182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 108182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 109182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 110182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def writeinitialdefs(self): 111182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") 112a05ac607d720727bc0d3799b7bea7a81e02ea561Jack Jansen 113a05ac607d720727bc0d3799b7bea7a81e02ea561Jack Jansen 11417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumif __name__ == "__main__": 115182b5aca27d376b08a2904bed42b751496f932f3Tim Peters main() 116