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 = "Files" 9e2ba87396cde5b57259405722910c560f7d237c6Jack JansenSHORT = "file" 10e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen 11e2ba87396cde5b57259405722910c560f7d237c6Jack Jansendef main(): 12182b5aca27d376b08a2904bed42b751496f932f3Tim Peters input = ["Files.h", "Aliases.h", "Finder.h"] 13182b5aca27d376b08a2904bed42b751496f932f3Tim Peters output = SHORT + "gen.py" 14182b5aca27d376b08a2904bed42b751496f932f3Tim Peters defsoutput = TOOLBOXDIR + LONG + ".py" 15182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner = MyScanner(input, output, defsoutput) 16182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.scan() 17182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.close() 18182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.gentypetest(SHORT+"typetest.py") 19182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Testing definitions output code ===" 20182b5aca27d376b08a2904bed42b751496f932f3Tim Peters execfile(defsoutput, {}, {}) 21182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Done scanning and generating, now importing the generated code... ===" 22182b5aca27d376b08a2904bed42b751496f932f3Tim Peters exec "import " + SHORT + "support" 23182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Done. It's up to you to compile it now! ===" 24e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen 25e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenclass MyScanner(Scanner_OSX): 26e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen 27182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def destination(self, type, name, arglist): 28182b5aca27d376b08a2904bed42b751496f932f3Tim Peters classname = "Function" 29182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listname = "functions" 30182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if arglist: 31182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Funny special case 32182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if len(arglist) > 2: 33182b5aca27d376b08a2904bed42b751496f932f3Tim Peters t, n, m = arglist[1] 34182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if t == "AliasHandle" and m == "InMode": 35182b5aca27d376b08a2904bed42b751496f932f3Tim Peters classname = "Arg2MethodGenerator" 36182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listname = "alias_methods" 37182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return classname, listname 38182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Normal cases 39182b5aca27d376b08a2904bed42b751496f932f3Tim Peters t, n, m = arglist[0] 40182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if t == "AliasHandle" and m == "InMode": 41182b5aca27d376b08a2904bed42b751496f932f3Tim Peters classname = "Method" 42182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listname = "alias_methods" 43182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if t == "FSSpec_ptr" and m == "InMode": 44182b5aca27d376b08a2904bed42b751496f932f3Tim Peters classname = "Method" 45182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listname = "fsspec_methods" 46182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if t == "FSRef_ptr" and m == "InMode": 47182b5aca27d376b08a2904bed42b751496f932f3Tim Peters classname = "Method" 48182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listname = "fsref_methods" 49182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return classname, listname 50182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 51182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makeblacklistnames(self): 52182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 53182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Constants with incompatible definitions 54182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "kioACAccessOwnerMask", 55182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "kFSCatInfoReserved", 56182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "kFSIterateReserved", 57182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "kSystemFolderType", 58182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 59182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSRefMakePath", # Do this manually 60182b5aca27d376b08a2904bed42b751496f932f3Tim Peters# "ResolveAlias", # Do this manually 61182b5aca27d376b08a2904bed42b751496f932f3Tim Peters# "ResolveAliasWithMountFlags", # Do this manually 62182b5aca27d376b08a2904bed42b751496f932f3Tim Peters# "FollowFinderAlias", # Do this manually 63182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 64182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSRead", # Couldn't be bothered 65182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSWrite", # ditto 66182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSReadFork", # ditto 67182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSWriteFork", # ditto 68182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 69182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Old routines: 70182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "GetWDInfo", 71182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "OpenWD", 72182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "CloseWD", 73182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FInitQueue", 74182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "rstflock", 75182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "setflock", 76182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "setfinfo", 77182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "fsrename", 78182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "fsdelete", 79182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "create", 80182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "flushvol", 81182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "eject", 82182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "umountvol", 83182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "setvol", 84182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "getvol", 85182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "getfinfo", 86182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "getvinfo", 87182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "fsopen", 88182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "RstFLock", 89182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "SetFLock", 90182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "SetFInfo", 91182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "Rename", 92182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "OpenRF", 93182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSDelete", 94182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "Create", 95182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "GetVol", 96182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "GetFInfo", 97182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "GetVInfo", 98182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSOpen", 99182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "Eject", 100182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "SetVol", 101182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "openrf", 102182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "unmountvol", 103182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "OpenDF", 104182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 105182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 106182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 107182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makeblacklisttypes(self): 108182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 109182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "CInfoPBPtr", # Old stuff 110182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "CMovePBPtr", # Old stuff 111182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "ParmBlkPtr", # Old stuff 112182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "HParmBlkPtr", # Old stuff 113182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "DTPBPtr", # Old stuff 114182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FCBPBPtr", # Old stuff 115182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "QHdrPtr", # Old stuff 116182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "CSParamPtr", # Old stuff 117182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSCatalogBulkParam", # old stuff 118182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSForkCBInfoParam", # old stuff 119182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSForkIOParam", # old stuff 120182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSRefParam", # old stuff 121182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSVolumeInfoParam", # old stuff 122182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "WDPBPtr", # old stuff 123182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "XCInfoPBPtr", # old stuff 124182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "XVolumeParamPtr", # old stuff 125182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 126182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 127182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "CatPositionRec", # State variable, not too difficult 128182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSIterator", # Should become an object 129182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSForkInfo", # Lots of fields, difficult struct 130182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSSearchParams", # Also catsearch stuff 131182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSVolumeInfo", # big struct 132182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FSVolumeInfo_ptr", # big struct 133182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 134182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "IOCompletionProcPtr", # proc pointer 135182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "IOCompletionUPP", # Proc pointer 136182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AliasFilterProcPtr", 137182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AliasFilterUPP", 138182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FNSubscriptionUPP", 139182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 140182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FNSubscriptionRef", # Lazy, for now. 141182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 142182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 143182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makerepairinstructions(self): 144182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 145182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Various ways to give pathnames 146182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('char_ptr', '*', 'InMode')], 147182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [('stringptr', '*', 'InMode')] 148182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ), 149182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 150182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Unicode filenames passed as length, buffer 151182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('UniCharCount', '*', 'InMode'), 152182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ('UniChar_ptr', '*', 'InMode')], 153182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [('UnicodeReverseInBuffer', '*', 'InMode')] 154182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ), 155182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Wrong guess 156182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('Str63', 'theString', 'InMode')], 157182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [('Str63', 'theString', 'OutMode')]), 158182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 159182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Yet another way to give a pathname:-) 160182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('short', 'fullPathLength', 'InMode'), 161182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ('void_ptr', 'fullPath', 'InMode')], 162182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [('FullPathName', 'fullPath', 'InMode')]), 163182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 164182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Various ResolveAliasFileXXXX functions 165182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('FSSpec', 'theSpec', 'OutMode')], 166182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [('FSSpec_ptr', 'theSpec', 'InOutMode')]), 167182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 168182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('FSRef', 'theRef', 'OutMode')], 169182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [('FSRef_ptr', 'theRef', 'InOutMode')]), 170182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 171182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # The optional FSSpec to all ResolveAlias and NewAlias methods 172182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('FSSpec_ptr', 'fromFile', 'InMode')], 173182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [('OptFSSpecPtr', 'fromFile', 'InMode')]), 174182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 175182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('FSRef_ptr', 'fromFile', 'InMode')], 176182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [('OptFSRefPtr', 'fromFile', 'InMode')]), 177182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 178182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## # FSCatalogInfo input handling 179182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## ([('FSCatalogInfoBitmap', 'whichInfo', 'InMode'), 180182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## ('FSCatalogInfo_ptr', 'catalogInfo', 'InMode')], 181182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## [('FSCatalogInfoAndBitmap_in', 'catalogInfo', 'InMode')]), 182182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## 183182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## # FSCatalogInfo output handling 184182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## ([('FSCatalogInfoBitmap', 'whichInfo', 'InMode'), 185182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## ('FSCatalogInfo', 'catalogInfo', 'OutMode')], 186182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## [('FSCatalogInfoAndBitmap_out', 'catalogInfo', 'InOutMode')]), 187182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## 188182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 189182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 190182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 191182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 192182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def writeinitialdefs(self): 193182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") 194182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("true = True\n") 195182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("false = False\n") 196182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 197e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenif __name__ == "__main__": 198182b5aca27d376b08a2904bed42b751496f932f3Tim Peters main() 199