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) 6from scantools import Scanner 7 8LONG = "Lists" 9SHORT = "list" 10OBJECT = "ListHandle" 11 12def main(): 13 input = LONG + ".h" 14 output = SHORT + "gen.py" 15 defsoutput = TOOLBOXDIR + LONG + ".py" 16 scanner = MyScanner(input, output, defsoutput) 17 scanner.scan() 18 scanner.close() 19 print "=== Testing definitions output code ===" 20 execfile(defsoutput, {}, {}) 21 print "=== Done scanning and generating, now importing the generated code... ===" 22 exec "import " + SHORT + "support" 23 print "=== Done. It's up to you to compile it now! ===" 24 25class MyScanner(Scanner): 26 27 def destination(self, type, name, arglist): 28 classname = "Function" 29 listname = "functions" 30 if arglist: 31 t, n, m = arglist[-1] 32 # This is non-functional today 33 if t in ('ListHandle', 'ListRef') and m == "InMode": 34 classname = "Method" 35 listname = "methods" 36 return classname, listname 37 38 def makeblacklistnames(self): 39 return [ 40 "LDispose", # Done by removing the object 41 "LSearch", # We don't want to handle procs just yet 42 "CreateCustomList", # done manually 43 "SetListDefinitionProc", 44 45 # These have funny argument/return values 46 "GetListViewBounds", 47 "GetListCellIndent", 48 "GetListCellSize", 49 "GetListVisibleCells", 50 "GetListClickLocation", 51 "GetListMouseLocation", 52 "GetListDataBounds", 53 "SetListLastClick", 54 ] 55 56 def makeblacklisttypes(self): 57 return [ 58 "ListClickLoopUPP", # Too difficult for now 59 "ListDefSpecPtr", # later 60 ] 61 62 def makerepairinstructions(self): 63 return [ 64 ([('ListBounds_ptr', '*', 'InMode')], 65 [('Rect_ptr', '*', 'InMode')]), 66 67 ([("Cell", "theCell", "OutMode")], 68 [("Cell", "theCell", "InOutMode")]), 69 70 ([("void_ptr", "*", "InMode"), ("short", "*", "InMode")], 71 [("InBufferShortsize", "*", "*")]), 72 73 ([("void", "*", "OutMode"), ("short", "*", "OutMode")], 74 [("VarOutBufferShortsize", "*", "InOutMode")]), 75 76 # SetListCellIndent doesn't have const 77 ([("Point", "indent", "OutMode")], 78 [("Point_ptr", "indent", "InMode")]), 79 80 ] 81 82 def writeinitialdefs(self): 83 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") 84 85 86if __name__ == "__main__": 87 main() 88