blob: 05b4206852c39c98e198410659746bfecfcf2d95 [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 Jansen59f7dc92004-01-02 23:27:42 +000011OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase", "MovieController", "IdleManager")
Jack Jansencb4eaad1995-11-30 15:03:59 +000012
13def main():
Jack Jansen06778242004-01-02 23:51:22 +000014 input = ("Movies.h", "ImageCompression.h")
Jack Jansencb4eaad1995-11-30 15:03:59 +000015 output = SHORT + "gen.py"
Jack Jansen46d9e791996-04-12 16:29:23 +000016 defsoutput = TOOLBOXDIR + LONG + ".py"
Jack Jansencb4eaad1995-11-30 15:03:59 +000017 scanner = MyScanner(input, output, defsoutput)
18 scanner.scan()
19 scanner.close()
Jack Jansen87eea882002-08-15 21:48:16 +000020 print "=== Testing definitions output code ==="
21 execfile(defsoutput, {}, {})
Jack Jansencb4eaad1995-11-30 15:03:59 +000022 print "=== Done scanning and generating, now importing the generated code... ==="
23 exec "import " + SHORT + "support"
24 print "=== Done. It's up to you to compile it now! ==="
25
26class MyScanner(Scanner):
27
28 def destination(self, type, name, arglist):
29 classname = "Function"
30 listname = "functions"
31 if arglist:
32 t, n, m = arglist[0]
Jack Jansen453ced51995-11-30 17:42:08 +000033 if t in OBJECTS and m == "InMode":
Jack Jansencb4eaad1995-11-30 15:03:59 +000034 classname = "Method"
Jack Jansen453ced51995-11-30 17:42:08 +000035 listname = t + "_methods"
Jack Jansencb4eaad1995-11-30 15:03:59 +000036 return classname, listname
37
Jack Jansen21f96871998-02-20 16:02:09 +000038 def writeinitialdefs(self):
39 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
40
Jack Jansencb4eaad1995-11-30 15:03:59 +000041 def makeblacklistnames(self):
42 return [
43 "DisposeMovie", # Done on python-object disposal
Jack Jansen453ced51995-11-30 17:42:08 +000044 "DisposeMovieTrack", # ditto
45 "DisposeTrackMedia", # ditto
46 "DisposeUserData", # ditto
Jack Jansenb2006391998-04-23 13:22:44 +000047# "DisposeTimeBase", # ditto
Jack Jansen9cfea101995-12-09 14:05:56 +000048 "DisposeMovieController", # ditto
Jack Jansen68a0ee01997-09-01 15:38:24 +000049
Jack Jansen453ced51995-11-30 17:42:08 +000050 # The following 4 use 'void *' in an uncontrolled way
51 # TBD when I've read the manual...
52 "GetUserDataItem",
53 "SetUserDataItem",
54 "SetTextSampleData",
Jack Jansene0cf87b1997-04-09 15:53:46 +000055 "BeginFullScreen",
Jack Jansen453ced51995-11-30 17:42:08 +000056 # bgen gets the argument in/out wrong..
57 "AddTextSample",
58 "AddTESample",
59 "AddHiliteSample",
60 "HiliteTextSample",
Jack Jansen1c4e6141998-04-21 15:23:55 +000061
62 "MakeTrackTimeTable", # Uses long * return?
63 "MakeMediaTimeTable", # ditto
Jack Jansena05ac601999-12-12 21:41:51 +000064## "VideoMediaGetStallCount", # Undefined in CW Pro 3 library
Jack Jansen6c7e3262002-12-12 10:31:54 +000065 # OS8 only:
66 'SpriteMediaGetIndImageProperty', # XXXX Why isn't this in carbon?
67 'CheckQuickTimeRegistration',
68 'SetMovieAnchorDataRef',
69 'GetMovieAnchorDataRef',
70 'GetMovieLoadState',
71 'OpenADataHandler',
72 'MovieMediaGetCurrentMovieProperty',
73 'MovieMediaGetCurrentTrackProperty',
74 'MovieMediaGetChildMovieDataReference',
75 'MovieMediaSetChildMovieDataReference',
76 'MovieMediaLoadChildMovieFromDataReference',
77 'Media3DGetViewObject',
Jack Jansencb4eaad1995-11-30 15:03:59 +000078
Jack Jansen06778242004-01-02 23:51:22 +000079 # these are ImageCompression blacklists
80 "GraphicsExportGetInputPtr",
Jack Jansen6c7e3262002-12-12 10:31:54 +000081 ]
Jack Jansen8d929ae2000-06-21 22:07:06 +000082
Jack Jansencb4eaad1995-11-30 15:03:59 +000083 def makeblacklisttypes(self):
84 return [
Jack Jansen453ced51995-11-30 17:42:08 +000085 # I don't think we want to do these
86 "QTSyncTaskPtr",
87 # We dont do callbacks yet, so no need for these
Jack Jansencb4eaad1995-11-30 15:03:59 +000088 "QTCallBack",
Jack Jansen453ced51995-11-30 17:42:08 +000089 # Skipped for now, due to laziness
Jack Jansencb4eaad1995-11-30 15:03:59 +000090 "TrackEditState",
91 "MovieEditState",
Jack Jansencb4eaad1995-11-30 15:03:59 +000092 "MatrixRecord",
93 "MatrixRecord_ptr",
Jack Jansen453ced51995-11-30 17:42:08 +000094 "SampleReferencePtr",
Jack Jansen1c4e6141998-04-21 15:23:55 +000095 "QTTweener",
Jack Jansen59f7dc92004-01-02 23:27:42 +000096 "QTErrorReplacementPtr",
97 "QTRestrictionSet",
98 "QTUUID",
99 "QTUUID_ptr",
Jack Jansen68a0ee01997-09-01 15:38:24 +0000100
Jack Jansen453ced51995-11-30 17:42:08 +0000101 # Routine pointers, not yet.
102 "MoviesErrorUPP",
103 "MoviePreviewCallOutUPP",
104 "MovieDrawingCompleteUPP",
Jack Jansencb4eaad1995-11-30 15:03:59 +0000105 "QTCallBackUPP",
106 "TextMediaUPP",
107 "MovieProgressUPP",
108 "MovieRgnCoverUPP",
109 "MCActionFilterUPP",
110 "MCActionFilterWithRefConUPP",
Jack Jansen453ced51995-11-30 17:42:08 +0000111 "GetMovieUPP",
112 "ModalFilterUPP",
Jack Jansene0cf87b1997-04-09 15:53:46 +0000113 "TrackTransferUPP",
Jack Jansen723ad8a2000-12-12 22:10:21 +0000114 "MoviePrePrerollCompleteUPP",
115 "MovieExecuteWiredActionsUPP",
116 "QTBandwidthNotificationUPP",
117 "DoMCActionUPP",
Jack Jansen59f7dc92004-01-02 23:27:42 +0000118 "QTNextTaskNeededSoonerCallbackUPP",
Jack Jansen723ad8a2000-12-12 22:10:21 +0000119
120 "SampleReference64Ptr", # Don't know what this does, yet
121 "QTRuntimeSpriteDescPtr",
122 "QTBandwidthReference",
123 "QTScheduledBandwidthReference",
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000124 "QTAtomContainer",
125 "SpriteWorld",
126 "Sprite",
Jack Jansen06778242004-01-02 23:51:22 +0000127
128 # these are ImageCompression blacklists
129 "ICMDataUPP",
130 "ICMFlushUPP",
131 "ICMCompletionUPP",
132 "ICMProgressUPP",
133 "StdPixUPP",
134 "QDPixUPP",
135 "ICMAlignmentUPP",
136 "ICMCursorShieldedUPP",
137 "ICMMemoryDisposedUPP",
138 "ICMConvertDataFormatUPP",
139 "ModalFilterYDUPP",
140 "FileFilterUPP",
141
142 "CodecNameSpecListPtr",
143 "CodecInfo",
144 "ImageSequence",
145 "MatrixRecordPtr",
146 "ICMDataProcRecordPtr",
147 "OpenCPicParams",
148 "ICMProgressProcRecordPtr",
149 "ICMAlignmentProcRecordPtr",
150 "ICMPixelFormatInfoPtr",
151 "ImageSequenceDataSource",
152 "ConstStrFileNameParam",
153 "ImageTranscodeSequence",
154 "ImageFieldSequence",
155 "Fract",
156 "PixMapPtr",
157 "GWorldFlags",
158 "void_ptr", # XXX Being lazy, this one is doable.
Jack Jansencb4eaad1995-11-30 15:03:59 +0000159 ]
160
161 def makerepairinstructions(self):
162 return [
Jack Jansen453ced51995-11-30 17:42:08 +0000163 ([('FSSpec', '*', 'OutMode')], [('FSSpec_ptr', '*', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000164
165 # Movie controller creation
166 ([('ComponentInstance', 'NewMovieController', 'ReturnMode')],
167 [('MovieController', '*', 'ReturnMode')]),
168
169 # NewMovieFromFile
170 ([('short', 'resId', 'OutMode'), ('StringPtr', 'resName', 'InMode')],
Jack Jansene0cf87b1997-04-09 15:53:46 +0000171 [('short', 'resId', 'InOutMode'), ('dummyStringPtr', 'resName', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000172
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000173 # MCDoAction and more
174 ([('void', '*', 'OutMode')], [('mcactionparams', '*', 'InMode')]),
175
Jack Jansen1b7a70f2000-03-03 17:06:13 +0000176 # SetTimeBaseZero. Does not handle NULLs, unfortunately
177 ([('TimeRecord', 'zero', 'OutMode')], [('TimeRecord', 'zero', 'InMode')]),
178
179 # ConvertTime and ConvertTimeScale
180 ([('TimeRecord', 'inout', 'OutMode')], [('TimeRecord', 'inout', 'InOutMode')]),
Jack Jansenb9fa1a92003-02-04 15:35:07 +0000181 ([('TimeRecord', 'theTime', 'OutMode')], [('TimeRecord', 'theTime', 'InOutMode')]),
Jack Jansen1b7a70f2000-03-03 17:06:13 +0000182
183 # AddTime and SubtractTime
184 ([('TimeRecord', 'dst', 'OutMode')], [('TimeRecord', 'dst', 'InOutMode')]),
Jack Jansen620a7662001-12-18 15:39:38 +0000185
186 # Funny definitions
187 ([('char_ptr', '*', 'InMode')], [('stringptr', '*', 'InMode')]),
188 ([('FSSpecPtr', '*', 'InMode')], [('FSSpec_ptr', '*', 'InMode')]),
189 ([('unsigned_char', 'swfVersion', 'OutMode')], [('UInt8', 'swfVersion', 'OutMode')]),
Jack Jansencb4eaad1995-11-30 15:03:59 +0000190 ]
191
192if __name__ == "__main__":
193 main()