blob: 9f326a68451421ffec46835ba56071757bd2d623 [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
5BGENDIR=os.path.join(sys.prefix, ':Tools:bgen:bgen')
6sys.path.append(BGENDIR)
Jack Jansencb4eaad1995-11-30 15:03:59 +00007from scantools import Scanner
Jack Jansen46d9e791996-04-12 16:29:23 +00008from bgenlocations import TOOLBOXDIR
Jack Jansencb4eaad1995-11-30 15:03:59 +00009
10LONG = "QuickTime"
11SHORT = "qt"
Jack Jansen9cfea101995-12-09 14:05:56 +000012OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase", "MovieController")
Jack Jansencb4eaad1995-11-30 15:03:59 +000013
14def main():
15 input = "Movies.h"
16 output = SHORT + "gen.py"
Jack Jansen46d9e791996-04-12 16:29:23 +000017 defsoutput = TOOLBOXDIR + LONG + ".py"
Jack Jansencb4eaad1995-11-30 15:03:59 +000018 scanner = MyScanner(input, output, defsoutput)
19 scanner.scan()
20 scanner.close()
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
25class MyScanner(Scanner):
26
27 def destination(self, type, name, arglist):
28 classname = "Function"
29 listname = "functions"
30 if arglist:
31 t, n, m = arglist[0]
Jack Jansen453ced51995-11-30 17:42:08 +000032 if t in OBJECTS and m == "InMode":
Jack Jansencb4eaad1995-11-30 15:03:59 +000033 classname = "Method"
Jack Jansen453ced51995-11-30 17:42:08 +000034 listname = t + "_methods"
Jack Jansencb4eaad1995-11-30 15:03:59 +000035 return classname, listname
36
Jack Jansen21f96871998-02-20 16:02:09 +000037 def writeinitialdefs(self):
38 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
39
Jack Jansencb4eaad1995-11-30 15:03:59 +000040 def makeblacklistnames(self):
41 return [
42 "DisposeMovie", # Done on python-object disposal
Jack Jansen453ced51995-11-30 17:42:08 +000043 "DisposeMovieTrack", # ditto
44 "DisposeTrackMedia", # ditto
45 "DisposeUserData", # ditto
46 "DisposeTimeBase", # ditto
Jack Jansen9cfea101995-12-09 14:05:56 +000047 "DisposeMovieController", # ditto
Jack Jansen68a0ee01997-09-01 15:38:24 +000048
Jack Jansen453ced51995-11-30 17:42:08 +000049 # The following 4 use 'void *' in an uncontrolled way
50 # TBD when I've read the manual...
51 "GetUserDataItem",
52 "SetUserDataItem",
53 "SetTextSampleData",
Jack Jansene0cf87b1997-04-09 15:53:46 +000054 "BeginFullScreen",
Jack Jansen453ced51995-11-30 17:42:08 +000055 # bgen gets the argument in/out wrong..
56 "AddTextSample",
57 "AddTESample",
58 "AddHiliteSample",
59 "HiliteTextSample",
Jack Jansen4a8c54e1997-02-24 13:56:59 +000060 # Missing in CW11 quicktime library
61 "SpriteMediaGetDisplayedSampleNumber",
62 "SpriteMediaGetIndImageDescription",
63 "SpriteMediaCountImages",
64 "SpriteMediaCountSprites",
65 "SpriteMediaHitTestSprites",
66 "SpriteMediaGetProperty",
67 "SpriteMediaSetProperty",
68 "TextMediaSetTextSampleData",
69 "TextMediaHiliteTextSample",
70 "TextMediaFindNextText",
71 "TextMediaAddHiliteSample",
72 "TextMediaAddTESample",
73 "TextMediaAddTextSample",
74 "VideoMediaGetStatistics",
75 "VideoMediaResetStatistics",
76 "EndFullScreen",
77 "NewMovieFromDataRef",
78 "MCPtInController",
79 "MCRemoveAMovie",
80 "MCRemoveAllMovies",
81 "MCInvalidate",
82 "InvalidateMovieRegion",
83 "GetMovieCompositeBufferFlags",
84 "SetMovieCompositeBufferFlags",
85 "SetTrackSoundLocalizationSettings",
86 "GetTrackSoundLocalizationSettings",
87 "GetMovieNaturalBoundsRect",
Jack Jansencb4eaad1995-11-30 15:03:59 +000088 ]
89
90 def makeblacklisttypes(self):
91 return [
Jack Jansen453ced51995-11-30 17:42:08 +000092 # I don't think we want to do these
93 "QTSyncTaskPtr",
94 # We dont do callbacks yet, so no need for these
Jack Jansencb4eaad1995-11-30 15:03:59 +000095 "QTCallBack",
Jack Jansen453ced51995-11-30 17:42:08 +000096 # Skipped for now, due to laziness
Jack Jansencb4eaad1995-11-30 15:03:59 +000097 "TimeRecord",
98 "TimeRecord_ptr",
99 "TrackEditState",
100 "MovieEditState",
Jack Jansencb4eaad1995-11-30 15:03:59 +0000101 "MatrixRecord",
102 "MatrixRecord_ptr",
Jack Jansen453ced51995-11-30 17:42:08 +0000103 "SampleReferencePtr",
Jack Jansen68a0ee01997-09-01 15:38:24 +0000104
Jack Jansen453ced51995-11-30 17:42:08 +0000105 # Routine pointers, not yet.
106 "MoviesErrorUPP",
107 "MoviePreviewCallOutUPP",
108 "MovieDrawingCompleteUPP",
Jack Jansencb4eaad1995-11-30 15:03:59 +0000109 "QTCallBackUPP",
110 "TextMediaUPP",
111 "MovieProgressUPP",
112 "MovieRgnCoverUPP",
113 "MCActionFilterUPP",
114 "MCActionFilterWithRefConUPP",
Jack Jansen453ced51995-11-30 17:42:08 +0000115 "GetMovieUPP",
116 "ModalFilterUPP",
Jack Jansene0cf87b1997-04-09 15:53:46 +0000117 "TrackTransferUPP",
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000118 "QTAtomContainer",
119 "SpriteWorld",
120 "Sprite",
Jack Jansencb4eaad1995-11-30 15:03:59 +0000121 ]
122
123 def makerepairinstructions(self):
124 return [
Jack Jansen453ced51995-11-30 17:42:08 +0000125 ([('FSSpec', '*', 'OutMode')], [('FSSpec_ptr', '*', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000126
127 # Movie controller creation
128 ([('ComponentInstance', 'NewMovieController', 'ReturnMode')],
129 [('MovieController', '*', 'ReturnMode')]),
130
131 # NewMovieFromFile
132 ([('short', 'resId', 'OutMode'), ('StringPtr', 'resName', 'InMode')],
Jack Jansene0cf87b1997-04-09 15:53:46 +0000133 [('short', 'resId', 'InOutMode'), ('dummyStringPtr', 'resName', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000134
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000135 # MCDoAction and more
136 ([('void', '*', 'OutMode')], [('mcactionparams', '*', 'InMode')]),
137
Jack Jansencb4eaad1995-11-30 15:03:59 +0000138 ]
139
140if __name__ == "__main__":
141 main()