symbian-qemu-0.9.1-12/python-2.6.1/Mac/Modules/file/filescan.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 # Scan an Apple header file, generating a Python file of generator calls.
       
     2 
       
     3 import sys
       
     4 from bgenlocations import TOOLBOXDIR, BGENDIR
       
     5 sys.path.append(BGENDIR)
       
     6 from scantools import Scanner_OSX
       
     7 
       
     8 LONG = "Files"
       
     9 SHORT = "file"
       
    10 
       
    11 def main():
       
    12     input = ["Files.h", "Aliases.h", "Finder.h"]
       
    13     output = SHORT + "gen.py"
       
    14     defsoutput = TOOLBOXDIR + LONG + ".py"
       
    15     scanner = MyScanner(input, output, defsoutput)
       
    16     scanner.scan()
       
    17     scanner.close()
       
    18     scanner.gentypetest(SHORT+"typetest.py")
       
    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 
       
    25 class MyScanner(Scanner_OSX):
       
    26 
       
    27     def destination(self, type, name, arglist):
       
    28         classname = "Function"
       
    29         listname = "functions"
       
    30         if arglist:
       
    31             # Funny special case
       
    32             if len(arglist) > 2:
       
    33                 t, n, m = arglist[1]
       
    34                 if t == "AliasHandle" and m == "InMode":
       
    35                     classname = "Arg2MethodGenerator"
       
    36                     listname = "alias_methods"
       
    37                     return classname, listname
       
    38             # Normal cases
       
    39             t, n, m = arglist[0]
       
    40             if t == "AliasHandle" and m == "InMode":
       
    41                 classname = "Method"
       
    42                 listname = "alias_methods"
       
    43             if t == "FSSpec_ptr" and m == "InMode":
       
    44                 classname = "Method"
       
    45                 listname = "fsspec_methods"
       
    46             if t == "FSRef_ptr" and m == "InMode":
       
    47                 classname = "Method"
       
    48                 listname = "fsref_methods"
       
    49         return classname, listname
       
    50 
       
    51     def makeblacklistnames(self):
       
    52         return [
       
    53                 # Constants with incompatible definitions
       
    54                 "kioACAccessOwnerMask",
       
    55                 "kFSCatInfoReserved",
       
    56                 "kFSIterateReserved",
       
    57                 "kSystemFolderType",
       
    58 
       
    59                 "FSRefMakePath", # Do this manually
       
    60 #                       "ResolveAlias", # Do this manually
       
    61 #                       "ResolveAliasWithMountFlags", # Do this manually
       
    62 #                       "FollowFinderAlias", # Do this manually
       
    63 
       
    64                 "FSRead", # Couldn't be bothered
       
    65                 "FSWrite", # ditto
       
    66                 "FSReadFork", # ditto
       
    67                 "FSWriteFork", # ditto
       
    68 
       
    69                 # Old routines:
       
    70                 "GetWDInfo",
       
    71                 "OpenWD",
       
    72                 "CloseWD",
       
    73                 "FInitQueue",
       
    74                 "rstflock",
       
    75                 "setflock",
       
    76                 "setfinfo",
       
    77                 "fsrename",
       
    78                 "fsdelete",
       
    79                 "create",
       
    80                 "flushvol",
       
    81                 "eject",
       
    82                 "umountvol",
       
    83                 "setvol",
       
    84                 "getvol",
       
    85                 "getfinfo",
       
    86                 "getvinfo",
       
    87                 "fsopen",
       
    88                 "RstFLock",
       
    89                 "SetFLock",
       
    90                 "SetFInfo",
       
    91                 "Rename",
       
    92                 "OpenRF",
       
    93                 "FSDelete",
       
    94                 "Create",
       
    95                 "GetVol",
       
    96                 "GetFInfo",
       
    97                 "GetVInfo",
       
    98                 "FSOpen",
       
    99                 "Eject",
       
   100                 "SetVol",
       
   101                 "openrf",
       
   102                 "unmountvol",
       
   103                 "OpenDF",
       
   104 
       
   105                 ]
       
   106 
       
   107     def makeblacklisttypes(self):
       
   108         return [
       
   109                 "CInfoPBPtr", # Old stuff
       
   110                 "CMovePBPtr", # Old stuff
       
   111                 "ParmBlkPtr", # Old stuff
       
   112                 "HParmBlkPtr", # Old stuff
       
   113                 "DTPBPtr", # Old stuff
       
   114                 "FCBPBPtr", # Old stuff
       
   115                 "QHdrPtr", # Old stuff
       
   116                 "CSParamPtr", # Old stuff
       
   117                 "FSCatalogBulkParam", # old stuff
       
   118                 "FSForkCBInfoParam", # old stuff
       
   119                 "FSForkIOParam", # old stuff
       
   120                 "FSRefParam",  # old stuff
       
   121                 "FSVolumeInfoParam", # old stuff
       
   122                 "WDPBPtr", # old stuff
       
   123                 "XCInfoPBPtr", # old stuff
       
   124                 "XVolumeParamPtr", # old stuff
       
   125 
       
   126 
       
   127                 "CatPositionRec", # State variable, not too difficult
       
   128                 "FSIterator", # Should become an object
       
   129                 "FSForkInfo", # Lots of fields, difficult struct
       
   130                 "FSSearchParams", # Also catsearch stuff
       
   131                 "FSVolumeInfo", # big struct
       
   132                 "FSVolumeInfo_ptr", # big struct
       
   133 
       
   134                 "IOCompletionProcPtr", # proc pointer
       
   135                 "IOCompletionUPP", # Proc pointer
       
   136                 "AliasFilterProcPtr",
       
   137                 "AliasFilterUPP",
       
   138                 "FNSubscriptionUPP",
       
   139 
       
   140                 "FNSubscriptionRef", # Lazy, for now.
       
   141                 ]
       
   142 
       
   143     def makerepairinstructions(self):
       
   144         return [
       
   145                 # Various ways to give pathnames
       
   146                 ([('char_ptr', '*', 'InMode')],
       
   147                  [('stringptr', '*', 'InMode')]
       
   148                 ),
       
   149 
       
   150                 # Unicode filenames passed as length, buffer
       
   151                 ([('UniCharCount', '*', 'InMode'),
       
   152                   ('UniChar_ptr', '*', 'InMode')],
       
   153                  [('UnicodeReverseInBuffer', '*', 'InMode')]
       
   154                 ),
       
   155                 # Wrong guess
       
   156                 ([('Str63', 'theString', 'InMode')],
       
   157                  [('Str63', 'theString', 'OutMode')]),
       
   158 
       
   159                 # Yet another way to give a pathname:-)
       
   160                 ([('short', 'fullPathLength', 'InMode'),
       
   161                   ('void_ptr', 'fullPath', 'InMode')],
       
   162                  [('FullPathName', 'fullPath', 'InMode')]),
       
   163 
       
   164                 # Various ResolveAliasFileXXXX functions
       
   165                 ([('FSSpec', 'theSpec', 'OutMode')],
       
   166                  [('FSSpec_ptr', 'theSpec', 'InOutMode')]),
       
   167 
       
   168                 ([('FSRef', 'theRef', 'OutMode')],
       
   169                  [('FSRef_ptr', 'theRef', 'InOutMode')]),
       
   170 
       
   171                 # The optional FSSpec to all ResolveAlias and NewAlias methods
       
   172                 ([('FSSpec_ptr', 'fromFile', 'InMode')],
       
   173          [('OptFSSpecPtr', 'fromFile', 'InMode')]),
       
   174 
       
   175                 ([('FSRef_ptr', 'fromFile', 'InMode')],
       
   176          [('OptFSRefPtr', 'fromFile', 'InMode')]),
       
   177 
       
   178 ##              # FSCatalogInfo input handling
       
   179 ##                      ([('FSCatalogInfoBitmap', 'whichInfo', 'InMode'),
       
   180 ##                ('FSCatalogInfo_ptr', 'catalogInfo', 'InMode')],
       
   181 ##               [('FSCatalogInfoAndBitmap_in', 'catalogInfo', 'InMode')]),
       
   182 ##
       
   183 ##              # FSCatalogInfo output handling
       
   184 ##                      ([('FSCatalogInfoBitmap', 'whichInfo', 'InMode'),
       
   185 ##                ('FSCatalogInfo', 'catalogInfo', 'OutMode')],
       
   186 ##               [('FSCatalogInfoAndBitmap_out', 'catalogInfo', 'InOutMode')]),
       
   187 ##
       
   188 
       
   189         ]
       
   190 
       
   191 
       
   192     def writeinitialdefs(self):
       
   193         self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
       
   194         self.defsfile.write("true = True\n")
       
   195         self.defsfile.write("false = False\n")
       
   196 
       
   197 if __name__ == "__main__":
       
   198     main()