1e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen# Scan an Apple header file, generating a Python file of generator calls. 2e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen 3e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenimport sys 4e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenfrom bgenlocations import TOOLBOXDIR, BGENDIR 5e2ba87396cde5b57259405722910c560f7d237c6Jack Jansensys.path.append(BGENDIR) 6e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenfrom scantools import Scanner_OSX 7e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen 8e2ba87396cde5b57259405722910c560f7d237c6Jack JansenLONG = "Folders" 9e2ba87396cde5b57259405722910c560f7d237c6Jack JansenSHORT = "folder" 10e2ba87396cde5b57259405722910c560f7d237c6Jack JansenOBJECT = "NOTUSED" 11e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen 12e2ba87396cde5b57259405722910c560f7d237c6Jack Jansendef main(): 13182b5aca27d376b08a2904bed42b751496f932f3Tim Peters input = LONG + ".h" 14182b5aca27d376b08a2904bed42b751496f932f3Tim Peters output = SHORT + "gen.py" 15182b5aca27d376b08a2904bed42b751496f932f3Tim Peters defsoutput = TOOLBOXDIR + LONG + ".py" 16182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner = MyScanner(input, output, defsoutput) 17182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.scan() 18182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.close() 19182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.gentypetest(SHORT+"typetest.py") 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! ===" 25e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen 26e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenclass MyScanner(Scanner_OSX): 27e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen 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 # This is non-functional today 34182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if t == OBJECT and m == "InMode": 35182b5aca27d376b08a2904bed42b751496f932f3Tim Peters classname = "Method" 36182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listname = "methods" 37182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return classname, listname 38e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen 39182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makeblacklistnames(self): 40182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 41182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FindFolderExtended", # Has funny void* argument 42182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSFindFolderExtended", # ditto 43182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FolderManagerRegisterCallNotificationProcs", # ditto 44e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen 45182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FindFolderEx", # Non-MacOS routine 46182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 47182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 48182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makeblacklisttypes(self): 49182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 50182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FolderManagerNotificationProcPtr", 51182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FolderManagerNotificationUPP", 52182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FolderRouting", # To be done, not difficult 53182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FolderDesc", # To be done, not difficult 54182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 55182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 56182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 57182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makerepairinstructions(self): 58182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 59182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 60182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 61182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def writeinitialdefs(self): 62182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") 63182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("true = True\n") 64182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("false = False\n") 65e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen 66e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenif __name__ == "__main__": 67182b5aca27d376b08a2904bed42b751496f932f3Tim Peters main() 68