symbian-qemu-0.9.1-12/python-2.6.1/Mac/Modules/qt/qtscan.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
       
     7 
       
     8 LONG = "QuickTime"
       
     9 SHORT = "qt"
       
    10 HEADERFILES= (
       
    11 #       "Components.h"  -- In Carbon.Cm
       
    12         "Movies.h",
       
    13         "ImageCompression.h",
       
    14         "QuickTimeComponents.h",
       
    15 #       "ImageCodec.h"  -- seems not too useful, and difficult.
       
    16 #       "IsochronousDataHandlers.h" -- Is this useful?
       
    17         "MediaHandlers.h",
       
    18 #       "QTML.h", -- Windows only, needs separate module
       
    19 #       "QuickTimeStreaming.h", -- Difficult
       
    20 #       "QTStreamingComponents.h", -- Needs QTStreaming
       
    21         "QuickTimeMusic.h",
       
    22 #       "QuickTimeVR.h", -- Not done yet
       
    23 #       "Sound.h", -- In Carbon.Snd
       
    24         )
       
    25 OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase", "MovieController",
       
    26         "IdleManager", "SGOutput")
       
    27 
       
    28 def main():
       
    29     input = HEADERFILES
       
    30     output = SHORT + "gen.py"
       
    31     defsoutput = TOOLBOXDIR + LONG + ".py"
       
    32     scanner = MyScanner(input, output, defsoutput)
       
    33     scanner.scan()
       
    34     scanner.close()
       
    35     scanner.gentypetest(SHORT+"typetest.py")
       
    36     print "=== Testing definitions output code ==="
       
    37     execfile(defsoutput, {}, {})
       
    38     print "=== Done scanning and generating, now importing the generated code... ==="
       
    39     exec "import " + SHORT + "support"
       
    40     print "=== Done.  It's up to you to compile it now! ==="
       
    41 
       
    42 class MyScanner(Scanner):
       
    43 
       
    44     def destination(self, type, name, arglist):
       
    45         classname = "Function"
       
    46         listname = "functions"
       
    47         if arglist:
       
    48             t, n, m = arglist[0]
       
    49             if t in OBJECTS and m == "InMode":
       
    50                 classname = "Method"
       
    51                 listname = t + "_methods"
       
    52         return classname, listname
       
    53 
       
    54     def writeinitialdefs(self):
       
    55         self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
       
    56         self.defsfile.write("xmlIdentifierUnrecognized = -1\n")
       
    57         self.defsfile.write("kControllerMinimum = -0xf777\n")
       
    58         self.defsfile.write("notImplementedMusicOSErr      = -2071\n")
       
    59         self.defsfile.write("cantSendToSynthesizerOSErr    = -2072\n")
       
    60         self.defsfile.write("cantReceiveFromSynthesizerOSErr = -2073\n")
       
    61         self.defsfile.write("illegalVoiceAllocationOSErr   = -2074\n")
       
    62         self.defsfile.write("illegalPartOSErr              = -2075\n")
       
    63         self.defsfile.write("illegalChannelOSErr           = -2076\n")
       
    64         self.defsfile.write("illegalKnobOSErr              = -2077\n")
       
    65         self.defsfile.write("illegalKnobValueOSErr         = -2078\n")
       
    66         self.defsfile.write("illegalInstrumentOSErr        = -2079\n")
       
    67         self.defsfile.write("illegalControllerOSErr        = -2080\n")
       
    68         self.defsfile.write("midiManagerAbsentOSErr        = -2081\n")
       
    69         self.defsfile.write("synthesizerNotRespondingOSErr = -2082\n")
       
    70         self.defsfile.write("synthesizerOSErr              = -2083\n")
       
    71         self.defsfile.write("illegalNoteChannelOSErr       = -2084\n")
       
    72         self.defsfile.write("noteChannelNotAllocatedOSErr  = -2085\n")
       
    73         self.defsfile.write("tunePlayerFullOSErr           = -2086\n")
       
    74         self.defsfile.write("tuneParseOSErr                = -2087\n")
       
    75 
       
    76     def makeblacklistnames(self):
       
    77         return [
       
    78                 "xmlIdentifierUnrecognized", # const with incompatible definition
       
    79                 "DisposeMovie",         # Done on python-object disposal
       
    80                 "DisposeMovieTrack",    # ditto
       
    81                 "DisposeTrackMedia",    # ditto
       
    82                 "DisposeUserData",              # ditto
       
    83 #                       "DisposeTimeBase",              # ditto
       
    84                 "DisposeMovieController", # ditto
       
    85 
       
    86                 # The following 4 use 'void *' in an uncontrolled way
       
    87                 # TBD when I've read the manual...
       
    88                 "GetUserDataItem",
       
    89                 "SetUserDataItem",
       
    90                 "SetTextSampleData",
       
    91                 "BeginFullScreen",
       
    92                 # bgen gets the argument in/out wrong..
       
    93                 "AddTextSample",
       
    94                 "AddTESample",
       
    95                 "AddHiliteSample",
       
    96                 "HiliteTextSample",
       
    97 
       
    98                 "MakeTrackTimeTable", # Uses long * return?
       
    99                 "MakeMediaTimeTable", # ditto
       
   100 ##                      "VideoMediaGetStallCount", # Undefined in CW Pro 3 library
       
   101                 # OS8 only:
       
   102                 'SpriteMediaGetIndImageProperty',       # XXXX Why isn't this in carbon?
       
   103                 'CheckQuickTimeRegistration',
       
   104                 'SetMovieAnchorDataRef',
       
   105                 'GetMovieAnchorDataRef',
       
   106                 'GetMovieLoadState',
       
   107                 'OpenADataHandler',
       
   108                 'MovieMediaGetCurrentMovieProperty',
       
   109                 'MovieMediaGetCurrentTrackProperty',
       
   110                 'MovieMediaGetChildMovieDataReference',
       
   111                 'MovieMediaSetChildMovieDataReference',
       
   112                 'MovieMediaLoadChildMovieFromDataReference',
       
   113                 'Media3DGetViewObject',
       
   114 
       
   115     # these are ImageCompression blacklists
       
   116                 "GraphicsExportGetInputPtr",
       
   117 
       
   118                 # QuickTimeComponents
       
   119                 # These two need some help: the first returns a point to a databuffer that
       
   120                 # the second disposes. Generate manually?
       
   121                 "VDCompressDone",
       
   122                 "VDReleaseCompressBuffer",
       
   123                 "QTVideoOutputGetGWorldParameters", # How useful is this?
       
   124 
       
   125                 # MediaHandlers
       
   126                 "MediaMakeMediaTimeTable", # just lazy
       
   127                 "MediaGetSampleDataPointer", # funny output pointer
       
   128 
       
   129                 # QuickTimeMusic
       
   130                 "kControllerMinimum",
       
   131                 # These are artefacts of a macro definition
       
   132                 "ulen",
       
   133                 "_ext",
       
   134                 "x",
       
   135                 "w1",
       
   136                 "w2",
       
   137                 ]
       
   138 
       
   139     def makeblacklisttypes(self):
       
   140         return [
       
   141                 # I don't think we want to do these
       
   142                 "QTSyncTaskPtr",
       
   143                 # We dont do callbacks yet, so no need for these
       
   144                 "QTCallBack",
       
   145                 # Skipped for now, due to laziness
       
   146                 "TrackEditState",
       
   147                 "MovieEditState",
       
   148                 "MatrixRecord",
       
   149                 "MatrixRecord_ptr",
       
   150                 "SampleReferencePtr",
       
   151                 "QTTweener",
       
   152                 "QTErrorReplacementPtr",
       
   153                 "QTRestrictionSet",
       
   154                 "QTUUID",
       
   155                 "QTUUID_ptr",
       
   156 
       
   157                 # Routine pointers, not yet.
       
   158                 "MoviesErrorUPP",
       
   159                 "MoviePreviewCallOutUPP",
       
   160                 "MovieDrawingCompleteUPP",
       
   161                 "QTCallBackUPP",
       
   162                 "TextMediaUPP",
       
   163                 "MovieProgressUPP",
       
   164                 "MovieRgnCoverUPP",
       
   165                 "MCActionFilterUPP",
       
   166                 "MCActionFilterWithRefConUPP",
       
   167                 "GetMovieUPP",
       
   168                 "ModalFilterUPP",
       
   169                 "TrackTransferUPP",
       
   170                 "MoviePrePrerollCompleteUPP",
       
   171                 "MovieExecuteWiredActionsUPP",
       
   172                 "QTBandwidthNotificationUPP",
       
   173                 "DoMCActionUPP",
       
   174                 "QTNextTaskNeededSoonerCallbackUPP",
       
   175 
       
   176                 "SampleReference64Ptr", # Don't know what this does, yet
       
   177                 "QTRuntimeSpriteDescPtr",
       
   178                 "QTBandwidthReference",
       
   179                 "QTScheduledBandwidthReference",
       
   180                 "QTAtomContainer",
       
   181                 "SpriteWorld",
       
   182                 "Sprite",
       
   183 
       
   184     # these are ImageCompression blacklists
       
   185     "ICMDataUPP",
       
   186     "ICMFlushUPP",
       
   187     "ICMCompletionUPP",
       
   188     "ICMProgressUPP",
       
   189     "StdPixUPP",
       
   190     "QDPixUPP",
       
   191     "ICMAlignmentUPP",
       
   192     "ICMCursorShieldedUPP",
       
   193     "ICMMemoryDisposedUPP",
       
   194     "ICMConvertDataFormatUPP",
       
   195     "ModalFilterYDUPP",
       
   196                 "FileFilterUPP",
       
   197 
       
   198     "CodecNameSpecListPtr",
       
   199     "CodecInfo",
       
   200      "ImageSequence",
       
   201     "MatrixRecordPtr",
       
   202     "ICMDataProcRecordPtr",
       
   203     "OpenCPicParams",
       
   204     "ICMProgressProcRecordPtr",
       
   205     "ICMAlignmentProcRecordPtr",
       
   206     "ICMPixelFormatInfoPtr",
       
   207     "ImageSequenceDataSource",
       
   208     "ConstStrFileNameParam",
       
   209     "ImageTranscodeSequence",
       
   210     "ImageFieldSequence",
       
   211     "Fract",
       
   212     "PixMapPtr",
       
   213     "GWorldFlags",
       
   214     "void_ptr",   # XXX Being lazy, this one is doable.
       
   215 
       
   216     # These are from QuickTimeComponents
       
   217     "CDataHandlerUPP",
       
   218     "CharDataHandlerUPP",
       
   219     "CommentHandlerUPP",
       
   220     "DataHCompletionUPP",
       
   221     "'MovieExportGetDataUPP",
       
   222     "MovieExportGetPropertyUPP",
       
   223     "PreprocessInstructionHandlerUPP",
       
   224     "SGModalFilterUPP",
       
   225     "StartDocumentHandlerUPP",
       
   226     "StartElementHandlerUPP",
       
   227     "VdigIntUPP",
       
   228     "SGDataUPP",
       
   229     "EndDocumentHandlerUPP",
       
   230     "EndElementHandlerUPP",
       
   231     "VideoBottles", # Record full of UPPs
       
   232 
       
   233     "SCParams",
       
   234     "ICMCompletionProcRecordPtr",
       
   235     "DataHVolumeList",
       
   236     "DigitizerInfo",
       
   237     "SGCompressInfo",
       
   238     "SeqGrabExtendedFrameInfoPtr",
       
   239     "SeqGrabFrameInfoPtr",
       
   240     "TCTextOptionsPtr",
       
   241     "SGCompressInfo_ptr",
       
   242     "SGDeviceList",
       
   243     "TextDisplayData",
       
   244     "TimeCodeDef",
       
   245     "TimeCodeRecord",
       
   246     "TweenRecord",
       
   247     "VDGamRecPtr",
       
   248     "ToneDescription",  # XXXX Just lazy: this one is easy.
       
   249     "XMLDoc",
       
   250     "UInt64",   # XXXX lazy
       
   251     "UInt64_ptr", # XXXX lazy
       
   252 
       
   253     # From MediaHandlers
       
   254     "ActionsUPP",
       
   255     "PrePrerollCompleteUPP",
       
   256     "CodecComponentHandle", # Difficult: handle containing list of components.
       
   257     "GetMovieCompleteParams", # Immense struct
       
   258     "LevelMeterInfoPtr", # Lazy. Also: can be an output parameter!!
       
   259     "MediaEQSpectrumBandsRecordPtr", # ditto
       
   260 
       
   261     # From QuickTimeMusic
       
   262     "MusicMIDISendUPP",
       
   263     "MusicOfflineDataUPP",
       
   264     "TuneCallBackUPP",
       
   265     "TunePlayCallBackUPP",
       
   266     "GCPart", # Struct with lots of fields
       
   267     "GCPart_ptr",
       
   268     "GenericKnobDescription", # Struct with lots of fields
       
   269     "KnobDescription",  # Struct with lots of fields
       
   270     "InstrumentAboutInfo", # Struct, not too difficult
       
   271     "NoteChannel", # XXXX Lazy. Could be opaque, I think
       
   272     "NoteRequest", # XXXX Lazy. Not-too-difficult struct
       
   273     "SynthesizerConnections", # Struct with lots of fields
       
   274     "SynthesizerDescription", # Struct with lots of fields
       
   275     "TuneStatus", # Struct with lots of fields
       
   276 
       
   277                 ]
       
   278 
       
   279     def makerepairinstructions(self):
       
   280         return [
       
   281                 ([('FSSpec', '*', 'OutMode')], [('FSSpec_ptr', '*', 'InMode')]),
       
   282 
       
   283                 # Movie controller creation
       
   284                 ([('ComponentInstance', 'NewMovieController', 'ReturnMode')],
       
   285                  [('MovieController', '*', 'ReturnMode')]),
       
   286 
       
   287                 # NewMovieFromFile
       
   288                 ([('short', 'resId', 'OutMode'), ('StringPtr', 'resName', 'InMode')],
       
   289                  [('short', 'resId', 'InOutMode'), ('dummyStringPtr', 'resName', 'InMode')]),
       
   290 
       
   291                 # MCDoAction and more
       
   292                 ([('void', '*', 'OutMode')], [('mcactionparams', '*', 'InMode')]),
       
   293 
       
   294                 # SetTimeBaseZero. Does not handle NULLs, unfortunately
       
   295                 ([('TimeRecord', 'zero', 'OutMode')], [('TimeRecord', 'zero', 'InMode')]),
       
   296 
       
   297                 # ConvertTime and ConvertTimeScale
       
   298                 ([('TimeRecord', 'inout', 'OutMode')], [('TimeRecord', 'inout', 'InOutMode')]),
       
   299                 ([('TimeRecord', 'theTime', 'OutMode')], [('TimeRecord', 'theTime', 'InOutMode')]),
       
   300 
       
   301                 # AddTime and SubtractTime
       
   302                 ([('TimeRecord', 'dst', 'OutMode')], [('TimeRecord', 'dst', 'InOutMode')]),
       
   303 
       
   304                 # Funny definitions
       
   305                 ([('char_ptr', '*', 'InMode')], [('stringptr', '*', 'InMode')]),
       
   306                 ([('FSSpecPtr', '*', 'InMode')], [('FSSpec_ptr', '*', 'InMode')]),
       
   307                 ([('unsigned_char', 'swfVersion', 'OutMode')], [('UInt8', 'swfVersion', 'OutMode')]),
       
   308 
       
   309                 # It seems MusicMIDIPacket if never flagged with const but always used
       
   310                 # for sending only. If that ever changes this needs to be fixed.
       
   311                 ([('MusicMIDIPacket', '*', 'OutMode')], [('MusicMIDIPacket_ptr', '*', 'InMode')]),
       
   312 
       
   313                 # QTMusic const-less input parameters
       
   314                 ([('unsigned_long', 'header', 'OutMode')], [('UnsignedLongPtr', 'header', 'InMode')]),
       
   315                 ]
       
   316 
       
   317 if __name__ == "__main__":
       
   318     main()