1# Scan an Apple header file, generating a Python file of generator calls. 2 3import sys 4from bgenlocations import TOOLBOXDIR, BGENDIR 5sys.path.append(BGENDIR) 6 7from scantools import Scanner 8 9LONG = "Dialogs" 10SHORT = "dlg" 11OBJECT = "DialogPtr" 12 13def main(): 14 input = LONG + ".h" 15 output = SHORT + "gen.py" 16 defsoutput = TOOLBOXDIR + LONG + ".py" 17 scanner = MyScanner(input, output, defsoutput) 18 scanner.scan() 19 scanner.close() 20 print "=== Testing definitions output code ===" 21 execfile(defsoutput, {}, {}) 22 print "=== Done scanning and generating, now importing the generated code... ===" 23 exec "import " + SHORT + "support" 24 print "=== Done. It's up to you to compile it now! ===" 25 26class MyScanner(Scanner): 27 28 def destination(self, type, name, arglist): 29 classname = "Function" 30 listname = "functions" 31 if arglist: 32 t, n, m = arglist[0] 33 if t in ("DialogPtr", "DialogRef") and m == "InMode": 34 classname = "Method" 35 listname = "methods" 36 return classname, listname 37 38 def makeblacklistnames(self): 39 return [ 40 'InitDialogs', 41 'ErrorSound', 42 # Dialogs are disposed when the object is deleted 43 'CloseDialog', 44 'DisposDialog', 45 'DisposeDialog', 46 'UpdtDialog', 47 'CouldAlert', 48 'FreeAlert', 49 'CouldDialog', 50 'FreeDialog', 51 'GetStdFilterProc', 52 'GetDialogParent', 53## # Can't find these in the CW Pro 3 libraries 54 'SetDialogMovableModal', 55 'GetDialogControlNotificationProc', 56 'SetGrafPortOfDialog', # Funny, and probably not useful 57 # Can't find these: 58 'CloseStandardSheet', 59 'RunStandardAlert', 60 ] 61 62 def makeblacklisttypes(self): 63 return [ 64 "AlertStdAlertParamPtr", # Too much work, for now 65 "AlertStdAlertParamRec", # ditto 66 "AlertStdAlertParamRec_ptr", # ditto 67 "AlertStdCFStringAlertParamPtr", # ditto 68 "AlertStdCFStringAlertParamRec", 69 "AlertStdCFStringAlertParamRec_ptr", 70 "QTModelessCallbackProcPtr", 71 ] 72 73 def makerepairinstructions(self): 74 return [ 75 ([("Str255", "*", "InMode")], 76 [("*", "*", "OutMode")]), 77 78 ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")], 79 [("InBuffer", "*", "*")]), 80 81 ([("void", "*", "OutMode"), ("long", "*", "InMode"), 82 ("long", "*", "OutMode")], 83 [("VarVarOutBuffer", "*", "InOutMode")]), 84 85 # GetDialogItem return handle is optional 86 ([("Handle", "item", "OutMode")], 87 [("OptHandle", "item", "OutMode")]), 88 89 # NewDialog ETC. 90 ([("void", "*", "OutMode")], 91 [("NullStorage", "*", "InMode")]), 92 93 ([("DialogPtr", "*", "OutMode")], 94 [("ExistingDialogPtr", "*", "*")]), 95 ([("DialogRef", "*", "OutMode")], 96 [("ExistingDialogPtr", "*", "*")]), 97 ([("WindowPtr", "*", "OutMode")], 98 [("ExistingWindowPtr", "*", "*")]), 99 ([("WindowPtr", "*", "ReturnMode")], 100 [("ExistingWindowPtr", "*", "*")]), 101 102 # StdFilterProc 103 ([('EventRecord', 'event', 'OutMode'), 104 ('DialogItemIndex', 'itemHit', 'OutMode')], 105 [('EventRecord', 'event', 'InOutMode'), 106 ('DialogItemIndex', 'itemHit', 'InOutMode')]) 107 108 ] 109 110 def writeinitialdefs(self): 111 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") 112 113 114if __name__ == "__main__": 115 main() 116