blob: eca1f23c9c31d9773c2802557f45b2a1f8312f34 [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():
14 input = "Movies.h"
15 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 Jansen6c7e3262002-12-12 10:31:54 +000079 ]
Jack Jansen8d929ae2000-06-21 22:07:06 +000080
Jack Jansencb4eaad1995-11-30 15:03:59 +000081 def makeblacklisttypes(self):
82 return [
Jack Jansen453ced51995-11-30 17:42:08 +000083 # I don't think we want to do these
84 "QTSyncTaskPtr",
85 # We dont do callbacks yet, so no need for these
Jack Jansencb4eaad1995-11-30 15:03:59 +000086 "QTCallBack",
Jack Jansen453ced51995-11-30 17:42:08 +000087 # Skipped for now, due to laziness
Jack Jansencb4eaad1995-11-30 15:03:59 +000088 "TrackEditState",
89 "MovieEditState",
Jack Jansencb4eaad1995-11-30 15:03:59 +000090 "MatrixRecord",
91 "MatrixRecord_ptr",
Jack Jansen453ced51995-11-30 17:42:08 +000092 "SampleReferencePtr",
Jack Jansen1c4e6141998-04-21 15:23:55 +000093 "QTTweener",
Jack Jansen59f7dc92004-01-02 23:27:42 +000094 "QTErrorReplacementPtr",
95 "QTRestrictionSet",
96 "QTUUID",
97 "QTUUID_ptr",
Jack Jansen68a0ee01997-09-01 15:38:24 +000098
Jack Jansen453ced51995-11-30 17:42:08 +000099 # Routine pointers, not yet.
100 "MoviesErrorUPP",
101 "MoviePreviewCallOutUPP",
102 "MovieDrawingCompleteUPP",
Jack Jansencb4eaad1995-11-30 15:03:59 +0000103 "QTCallBackUPP",
104 "TextMediaUPP",
105 "MovieProgressUPP",
106 "MovieRgnCoverUPP",
107 "MCActionFilterUPP",
108 "MCActionFilterWithRefConUPP",
Jack Jansen453ced51995-11-30 17:42:08 +0000109 "GetMovieUPP",
110 "ModalFilterUPP",
Jack Jansene0cf87b1997-04-09 15:53:46 +0000111 "TrackTransferUPP",
Jack Jansen723ad8a2000-12-12 22:10:21 +0000112 "MoviePrePrerollCompleteUPP",
113 "MovieExecuteWiredActionsUPP",
114 "QTBandwidthNotificationUPP",
115 "DoMCActionUPP",
Jack Jansen59f7dc92004-01-02 23:27:42 +0000116 "QTNextTaskNeededSoonerCallbackUPP",
Jack Jansen723ad8a2000-12-12 22:10:21 +0000117
118 "SampleReference64Ptr", # Don't know what this does, yet
119 "QTRuntimeSpriteDescPtr",
120 "QTBandwidthReference",
121 "QTScheduledBandwidthReference",
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000122 "QTAtomContainer",
123 "SpriteWorld",
124 "Sprite",
Jack Jansencb4eaad1995-11-30 15:03:59 +0000125 ]
126
127 def makerepairinstructions(self):
128 return [
Jack Jansen453ced51995-11-30 17:42:08 +0000129 ([('FSSpec', '*', 'OutMode')], [('FSSpec_ptr', '*', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000130
131 # Movie controller creation
132 ([('ComponentInstance', 'NewMovieController', 'ReturnMode')],
133 [('MovieController', '*', 'ReturnMode')]),
134
135 # NewMovieFromFile
136 ([('short', 'resId', 'OutMode'), ('StringPtr', 'resName', 'InMode')],
Jack Jansene0cf87b1997-04-09 15:53:46 +0000137 [('short', 'resId', 'InOutMode'), ('dummyStringPtr', 'resName', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000138
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000139 # MCDoAction and more
140 ([('void', '*', 'OutMode')], [('mcactionparams', '*', 'InMode')]),
141
Jack Jansen1b7a70f2000-03-03 17:06:13 +0000142 # SetTimeBaseZero. Does not handle NULLs, unfortunately
143 ([('TimeRecord', 'zero', 'OutMode')], [('TimeRecord', 'zero', 'InMode')]),
144
145 # ConvertTime and ConvertTimeScale
146 ([('TimeRecord', 'inout', 'OutMode')], [('TimeRecord', 'inout', 'InOutMode')]),
Jack Jansenb9fa1a92003-02-04 15:35:07 +0000147 ([('TimeRecord', 'theTime', 'OutMode')], [('TimeRecord', 'theTime', 'InOutMode')]),
Jack Jansen1b7a70f2000-03-03 17:06:13 +0000148
149 # AddTime and SubtractTime
150 ([('TimeRecord', 'dst', 'OutMode')], [('TimeRecord', 'dst', 'InOutMode')]),
Jack Jansen620a7662001-12-18 15:39:38 +0000151
152 # Funny definitions
153 ([('char_ptr', '*', 'InMode')], [('stringptr', '*', 'InMode')]),
154 ([('FSSpecPtr', '*', 'InMode')], [('FSSpec_ptr', '*', 'InMode')]),
155 ([('unsigned_char', 'swfVersion', 'OutMode')], [('UInt8', 'swfVersion', 'OutMode')]),
Jack Jansencb4eaad1995-11-30 15:03:59 +0000156 ]
157
158if __name__ == "__main__":
159 main()