blob: c161b7c7549ab774a2d9d0fd081caa3d05b76369 [file] [log] [blame]
Jack Jansencb4eaad1995-11-30 15:03:59 +00001# Scan an Apple header file, generating a Python file of generator calls.
2
Jack Jansen0c4d9471998-04-17 14:07:56 +00003import sys
4import os
Jack Jansenaaebdd62002-08-05 15:39:30 +00005from bgenlocations import TOOLBOXDIR, BGENDIR
Jack Jansen0c4d9471998-04-17 14:07:56 +00006sys.path.append(BGENDIR)
Jack Jansencb4eaad1995-11-30 15:03:59 +00007from scantools import Scanner
8
9LONG = "QuickTime"
10SHORT = "qt"
Jack Jansen007b8eb2004-01-03 17:23:27 +000011HEADERFILES= ("Movies.h", "ImageCompression.h", "QuickTimeComponents.h")
12OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase", "MovieController",
13 "IdleManager", "SGOutput")
Jack Jansencb4eaad1995-11-30 15:03:59 +000014
15def main():
Jack Jansen007b8eb2004-01-03 17:23:27 +000016 input = HEADERFILES
Jack Jansencb4eaad1995-11-30 15:03:59 +000017 output = SHORT + "gen.py"
Jack Jansen46d9e791996-04-12 16:29:23 +000018 defsoutput = TOOLBOXDIR + LONG + ".py"
Jack Jansencb4eaad1995-11-30 15:03:59 +000019 scanner = MyScanner(input, output, defsoutput)
20 scanner.scan()
21 scanner.close()
Jack Jansen007b8eb2004-01-03 17:23:27 +000022 scanner.gentypetest(SHORT+"typetest.py")
Jack Jansen87eea882002-08-15 21:48:16 +000023 print "=== Testing definitions output code ==="
24 execfile(defsoutput, {}, {})
Jack Jansencb4eaad1995-11-30 15:03:59 +000025 print "=== Done scanning and generating, now importing the generated code... ==="
26 exec "import " + SHORT + "support"
27 print "=== Done. It's up to you to compile it now! ==="
28
29class MyScanner(Scanner):
30
31 def destination(self, type, name, arglist):
32 classname = "Function"
33 listname = "functions"
34 if arglist:
35 t, n, m = arglist[0]
Jack Jansen453ced51995-11-30 17:42:08 +000036 if t in OBJECTS and m == "InMode":
Jack Jansencb4eaad1995-11-30 15:03:59 +000037 classname = "Method"
Jack Jansen453ced51995-11-30 17:42:08 +000038 listname = t + "_methods"
Jack Jansencb4eaad1995-11-30 15:03:59 +000039 return classname, listname
40
Jack Jansen21f96871998-02-20 16:02:09 +000041 def writeinitialdefs(self):
42 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
Jack Jansen007b8eb2004-01-03 17:23:27 +000043 self.defsfile.write("xmlIdentifierUnrecognized = -1\n")
Jack Jansen21f96871998-02-20 16:02:09 +000044
Jack Jansencb4eaad1995-11-30 15:03:59 +000045 def makeblacklistnames(self):
46 return [
Jack Jansen007b8eb2004-01-03 17:23:27 +000047 "xmlIdentifierUnrecognized", # const with incompatible definition
Jack Jansencb4eaad1995-11-30 15:03:59 +000048 "DisposeMovie", # Done on python-object disposal
Jack Jansen453ced51995-11-30 17:42:08 +000049 "DisposeMovieTrack", # ditto
50 "DisposeTrackMedia", # ditto
51 "DisposeUserData", # ditto
Jack Jansenb2006391998-04-23 13:22:44 +000052# "DisposeTimeBase", # ditto
Jack Jansen9cfea101995-12-09 14:05:56 +000053 "DisposeMovieController", # ditto
Jack Jansen68a0ee01997-09-01 15:38:24 +000054
Jack Jansen453ced51995-11-30 17:42:08 +000055 # The following 4 use 'void *' in an uncontrolled way
56 # TBD when I've read the manual...
57 "GetUserDataItem",
58 "SetUserDataItem",
59 "SetTextSampleData",
Jack Jansene0cf87b1997-04-09 15:53:46 +000060 "BeginFullScreen",
Jack Jansen453ced51995-11-30 17:42:08 +000061 # bgen gets the argument in/out wrong..
62 "AddTextSample",
63 "AddTESample",
64 "AddHiliteSample",
65 "HiliteTextSample",
Jack Jansen1c4e6141998-04-21 15:23:55 +000066
67 "MakeTrackTimeTable", # Uses long * return?
68 "MakeMediaTimeTable", # ditto
Jack Jansena05ac601999-12-12 21:41:51 +000069## "VideoMediaGetStallCount", # Undefined in CW Pro 3 library
Jack Jansen6c7e3262002-12-12 10:31:54 +000070 # OS8 only:
71 'SpriteMediaGetIndImageProperty', # XXXX Why isn't this in carbon?
72 'CheckQuickTimeRegistration',
73 'SetMovieAnchorDataRef',
74 'GetMovieAnchorDataRef',
75 'GetMovieLoadState',
76 'OpenADataHandler',
77 'MovieMediaGetCurrentMovieProperty',
78 'MovieMediaGetCurrentTrackProperty',
79 'MovieMediaGetChildMovieDataReference',
80 'MovieMediaSetChildMovieDataReference',
81 'MovieMediaLoadChildMovieFromDataReference',
82 'Media3DGetViewObject',
Jack Jansencb4eaad1995-11-30 15:03:59 +000083
Jack Jansen06778242004-01-02 23:51:22 +000084 # these are ImageCompression blacklists
85 "GraphicsExportGetInputPtr",
Jack Jansen007b8eb2004-01-03 17:23:27 +000086
87 # QuickTimeComponents
88 # These two need some help: the first returns a point to a databuffer that
89 # the second disposes. Generate manually?
90 "VDCompressDone",
91 "VDReleaseCompressBuffer",
92 "QTVideoOutputGetGWorldParameters", # How useful is this?
Jack Jansen6c7e3262002-12-12 10:31:54 +000093 ]
Jack Jansen8d929ae2000-06-21 22:07:06 +000094
Jack Jansencb4eaad1995-11-30 15:03:59 +000095 def makeblacklisttypes(self):
96 return [
Jack Jansen453ced51995-11-30 17:42:08 +000097 # I don't think we want to do these
98 "QTSyncTaskPtr",
99 # We dont do callbacks yet, so no need for these
Jack Jansencb4eaad1995-11-30 15:03:59 +0000100 "QTCallBack",
Jack Jansen453ced51995-11-30 17:42:08 +0000101 # Skipped for now, due to laziness
Jack Jansencb4eaad1995-11-30 15:03:59 +0000102 "TrackEditState",
103 "MovieEditState",
Jack Jansencb4eaad1995-11-30 15:03:59 +0000104 "MatrixRecord",
105 "MatrixRecord_ptr",
Jack Jansen453ced51995-11-30 17:42:08 +0000106 "SampleReferencePtr",
Jack Jansen1c4e6141998-04-21 15:23:55 +0000107 "QTTweener",
Jack Jansen59f7dc92004-01-02 23:27:42 +0000108 "QTErrorReplacementPtr",
109 "QTRestrictionSet",
110 "QTUUID",
111 "QTUUID_ptr",
Jack Jansen68a0ee01997-09-01 15:38:24 +0000112
Jack Jansen453ced51995-11-30 17:42:08 +0000113 # Routine pointers, not yet.
114 "MoviesErrorUPP",
115 "MoviePreviewCallOutUPP",
116 "MovieDrawingCompleteUPP",
Jack Jansencb4eaad1995-11-30 15:03:59 +0000117 "QTCallBackUPP",
118 "TextMediaUPP",
119 "MovieProgressUPP",
120 "MovieRgnCoverUPP",
121 "MCActionFilterUPP",
122 "MCActionFilterWithRefConUPP",
Jack Jansen453ced51995-11-30 17:42:08 +0000123 "GetMovieUPP",
124 "ModalFilterUPP",
Jack Jansene0cf87b1997-04-09 15:53:46 +0000125 "TrackTransferUPP",
Jack Jansen723ad8a2000-12-12 22:10:21 +0000126 "MoviePrePrerollCompleteUPP",
127 "MovieExecuteWiredActionsUPP",
128 "QTBandwidthNotificationUPP",
129 "DoMCActionUPP",
Jack Jansen59f7dc92004-01-02 23:27:42 +0000130 "QTNextTaskNeededSoonerCallbackUPP",
Jack Jansen723ad8a2000-12-12 22:10:21 +0000131
132 "SampleReference64Ptr", # Don't know what this does, yet
133 "QTRuntimeSpriteDescPtr",
134 "QTBandwidthReference",
135 "QTScheduledBandwidthReference",
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000136 "QTAtomContainer",
137 "SpriteWorld",
138 "Sprite",
Jack Jansen06778242004-01-02 23:51:22 +0000139
140 # these are ImageCompression blacklists
141 "ICMDataUPP",
142 "ICMFlushUPP",
143 "ICMCompletionUPP",
144 "ICMProgressUPP",
145 "StdPixUPP",
146 "QDPixUPP",
147 "ICMAlignmentUPP",
148 "ICMCursorShieldedUPP",
149 "ICMMemoryDisposedUPP",
150 "ICMConvertDataFormatUPP",
151 "ModalFilterYDUPP",
152 "FileFilterUPP",
153
154 "CodecNameSpecListPtr",
155 "CodecInfo",
156 "ImageSequence",
157 "MatrixRecordPtr",
158 "ICMDataProcRecordPtr",
159 "OpenCPicParams",
160 "ICMProgressProcRecordPtr",
161 "ICMAlignmentProcRecordPtr",
162 "ICMPixelFormatInfoPtr",
163 "ImageSequenceDataSource",
164 "ConstStrFileNameParam",
165 "ImageTranscodeSequence",
166 "ImageFieldSequence",
167 "Fract",
168 "PixMapPtr",
169 "GWorldFlags",
170 "void_ptr", # XXX Being lazy, this one is doable.
Jack Jansen007b8eb2004-01-03 17:23:27 +0000171
172 # These are from QuickTimeComponents
173 "CDataHandlerUPP",
174 "CharDataHandlerUPP",
175 "CommentHandlerUPP",
176 "DataHCompletionUPP",
177 "'MovieExportGetDataUPP",
178 "MovieExportGetPropertyUPP",
179 "PreprocessInstructionHandlerUPP",
180 "SGModalFilterUPP",
181 "StartDocumentHandlerUPP",
182 "StartElementHandlerUPP",
183 "VdigIntUPP",
184 "SGDataUPP",
185 "EndDocumentHandlerUPP",
186 "EndElementHandlerUPP",
187 "VideoBottles", # Record full of UPPs
188
189 "SCParams",
190 "ICMCompletionProcRecordPtr",
191 "DataHVolumeList",
192 "DigitizerInfo",
193 "SGCompressInfo",
194 "SeqGrabExtendedFrameInfoPtr",
195 "SeqGrabFrameInfoPtr",
196 "TCTextOptionsPtr",
197 "SGCompressInfo_ptr",
198 "SGDeviceList",
199 "TextDisplayData",
200 "TimeCodeDef",
201 "TimeCodeRecord",
202 "TweenRecord",
203 "VDGamRecPtr",
204 "ToneDescription", # XXXX Just lazy: this one is easy.
205 "XMLDoc",
206 "UInt64", # XXXX lazy
207 "UInt64_ptr", # XXXX lazy
Jack Jansencb4eaad1995-11-30 15:03:59 +0000208 ]
209
210 def makerepairinstructions(self):
211 return [
Jack Jansen453ced51995-11-30 17:42:08 +0000212 ([('FSSpec', '*', 'OutMode')], [('FSSpec_ptr', '*', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000213
214 # Movie controller creation
215 ([('ComponentInstance', 'NewMovieController', 'ReturnMode')],
216 [('MovieController', '*', 'ReturnMode')]),
217
218 # NewMovieFromFile
219 ([('short', 'resId', 'OutMode'), ('StringPtr', 'resName', 'InMode')],
Jack Jansene0cf87b1997-04-09 15:53:46 +0000220 [('short', 'resId', 'InOutMode'), ('dummyStringPtr', 'resName', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000221
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000222 # MCDoAction and more
223 ([('void', '*', 'OutMode')], [('mcactionparams', '*', 'InMode')]),
224
Jack Jansen1b7a70f2000-03-03 17:06:13 +0000225 # SetTimeBaseZero. Does not handle NULLs, unfortunately
226 ([('TimeRecord', 'zero', 'OutMode')], [('TimeRecord', 'zero', 'InMode')]),
227
228 # ConvertTime and ConvertTimeScale
229 ([('TimeRecord', 'inout', 'OutMode')], [('TimeRecord', 'inout', 'InOutMode')]),
Jack Jansenb9fa1a92003-02-04 15:35:07 +0000230 ([('TimeRecord', 'theTime', 'OutMode')], [('TimeRecord', 'theTime', 'InOutMode')]),
Jack Jansen1b7a70f2000-03-03 17:06:13 +0000231
232 # AddTime and SubtractTime
233 ([('TimeRecord', 'dst', 'OutMode')], [('TimeRecord', 'dst', 'InOutMode')]),
Jack Jansen620a7662001-12-18 15:39:38 +0000234
235 # Funny definitions
236 ([('char_ptr', '*', 'InMode')], [('stringptr', '*', 'InMode')]),
237 ([('FSSpecPtr', '*', 'InMode')], [('FSSpec_ptr', '*', 'InMode')]),
238 ([('unsigned_char', 'swfVersion', 'OutMode')], [('UInt8', 'swfVersion', 'OutMode')]),
Jack Jansencb4eaad1995-11-30 15:03:59 +0000239 ]
240
241if __name__ == "__main__":
242 main()