Mac/Modules/drag/dragscan.py
# Scan <Drag.h>, generating draggen.py. import sys from bgenlocations import TOOLBOXDIR, BGENDIR, INCLUDEDIR sys.path.append(BGENDIR) from scantools import Scanner MISSING_DEFINES=""" kDragHasLeftSenderWindow = (1 << 0) kDragInsideSenderApplication = (1 << 1) kDragInsideSenderWindow = (1 << 2) kDragRegionAndImage = (1 << 4) flavorSenderOnly = (1 << 0) flavorSenderTranslated = (1 << 1) flavorNotSaved = (1 << 2) flavorSystemTranslated = (1 << 8) """ def main(): input = INCLUDEDIR + "Drag.h" output = "draggen.py" defsoutput = TOOLBOXDIR + "Dragconst.py" scanner = MyScanner(input, output, defsoutput) scanner.scan() scanner.close() print "=== Testing definitions output code ===" execfile(defsoutput, {}, {}) print "=== Done scanning and generating, now doing 'import dragsupport' ===" import dragsupport print "=== Done. It's up to you to compile Dragmodule.c ===" class MyScanner(Scanner): def destination(self, type, name, arglist): classname = "Function" listname = "functions" if arglist: t, n, m = arglist[0] if t in ('DragReference', 'DragRef') and m == "InMode": classname = "Method" listname = "methods" return classname, listname def writeinitialdefs(self): self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") self.defsfile.write("from Carbon.TextEdit import *\n") self.defsfile.write("from Carbon.QuickDraw import *\n") self.defsfile.write("fkDragActionAll = -1\n") self.defsfile.write("\n") # Defines unparseable in Drag.h self.defsfile.write(MISSING_DEFINES) def makeblacklistnames(self): return [ "kDragActionAll", ] def makeblacklisttypes(self): return [ "DragTrackingHandlerUPP", "DragReceiveHandlerUPP", "DragSendDataUPP", "DragInputUPP", "DragDrawingUPP", ] def makerepairinstructions(self): return [ ([("void_ptr", "*", "InMode"), ("Size", "*", "InMode")], [("OptionalInBuffer", "*", "*")]), ([("void", "*", "OutMode"), ("Size", "*", "OutMode")], [("VarOutBuffer", "*", "InOutMode")]), ] if __name__ == "__main__": main() |