Fix three PyChecker-detected gotchas.
[python/dscho.git] / Mac / Modules / qt / qtscan.py
blob45ef428a00b02275593d7b3fc995478f336e39c1
1 # Scan an Apple header file, generating a Python file of generator calls.
3 import sys
4 import os
5 BGENDIR=os.path.join(sys.prefix, ':Tools:bgen:bgen')
6 sys.path.append(BGENDIR)
7 from scantools import Scanner
8 from bgenlocations import TOOLBOXDIR
10 LONG = "QuickTime"
11 SHORT = "qt"
12 OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase", "MovieController")
14 def main():
15 input = "Movies.h"
16 output = SHORT + "gen.py"
17 defsoutput = TOOLBOXDIR + LONG + ".py"
18 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! ==="
25 class MyScanner(Scanner):
27 def destination(self, type, name, arglist):
28 classname = "Function"
29 listname = "functions"
30 if arglist:
31 t, n, m = arglist[0]
32 if t in OBJECTS and m == "InMode":
33 classname = "Method"
34 listname = t + "_methods"
35 return classname, listname
37 def writeinitialdefs(self):
38 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
40 def makeblacklistnames(self):
41 return [
42 "DisposeMovie", # Done on python-object disposal
43 "DisposeMovieTrack", # ditto
44 "DisposeTrackMedia", # ditto
45 "DisposeUserData", # ditto
46 # "DisposeTimeBase", # ditto
47 "DisposeMovieController", # ditto
49 # The following 4 use 'void *' in an uncontrolled way
50 # TBD when I've read the manual...
51 "GetUserDataItem",
52 "SetUserDataItem",
53 "SetTextSampleData",
54 "BeginFullScreen",
55 # bgen gets the argument in/out wrong..
56 "AddTextSample",
57 "AddTESample",
58 "AddHiliteSample",
59 "HiliteTextSample",
61 "MakeTrackTimeTable", # Uses long * return?
62 "MakeMediaTimeTable", # ditto
63 ## "VideoMediaGetStallCount", # Undefined in CW Pro 3 library
66 def makegreylist(self):
67 return [
68 ('#if !TARGET_API_MAC_CARBON', [
69 'SpriteMediaGetIndImageProperty', # XXXX Why isn't this in carbon?
70 'CheckQuickTimeRegistration',
71 'SetMovieAnchorDataRef',
72 'GetMovieAnchorDataRef',
73 'GetMovieLoadState',
74 'OpenADataHandler',
75 'MovieMediaGetCurrentMovieProperty',
76 'MovieMediaGetCurrentTrackProperty',
77 'MovieMediaGetChildMovieDataReference',
78 'MovieMediaSetChildMovieDataReference',
79 'MovieMediaLoadChildMovieFromDataReference',
80 'Media3DGetViewObject',
81 ])]
83 def makeblacklisttypes(self):
84 return [
85 # I don't think we want to do these
86 "QTSyncTaskPtr",
87 # We dont do callbacks yet, so no need for these
88 "QTCallBack",
89 # Skipped for now, due to laziness
90 "TrackEditState",
91 "MovieEditState",
92 "MatrixRecord",
93 "MatrixRecord_ptr",
94 "SampleReferencePtr",
95 "QTTweener",
97 # Routine pointers, not yet.
98 "MoviesErrorUPP",
99 "MoviePreviewCallOutUPP",
100 "MovieDrawingCompleteUPP",
101 "QTCallBackUPP",
102 "TextMediaUPP",
103 "MovieProgressUPP",
104 "MovieRgnCoverUPP",
105 "MCActionFilterUPP",
106 "MCActionFilterWithRefConUPP",
107 "GetMovieUPP",
108 "ModalFilterUPP",
109 "TrackTransferUPP",
110 "MoviePrePrerollCompleteUPP",
111 "MovieExecuteWiredActionsUPP",
112 "QTBandwidthNotificationUPP",
113 "DoMCActionUPP",
115 "SampleReference64Ptr", # Don't know what this does, yet
116 "QTRuntimeSpriteDescPtr",
117 "QTBandwidthReference",
118 "QTScheduledBandwidthReference",
119 "QTAtomContainer",
120 "SpriteWorld",
121 "Sprite",
124 def makerepairinstructions(self):
125 return [
126 ([('FSSpec', '*', 'OutMode')], [('FSSpec_ptr', '*', 'InMode')]),
128 # Movie controller creation
129 ([('ComponentInstance', 'NewMovieController', 'ReturnMode')],
130 [('MovieController', '*', 'ReturnMode')]),
132 # NewMovieFromFile
133 ([('short', 'resId', 'OutMode'), ('StringPtr', 'resName', 'InMode')],
134 [('short', 'resId', 'InOutMode'), ('dummyStringPtr', 'resName', 'InMode')]),
136 # MCDoAction and more
137 ([('void', '*', 'OutMode')], [('mcactionparams', '*', 'InMode')]),
139 # SetTimeBaseZero. Does not handle NULLs, unfortunately
140 ([('TimeRecord', 'zero', 'OutMode')], [('TimeRecord', 'zero', 'InMode')]),
142 # ConvertTime and ConvertTimeScale
143 ([('TimeRecord', 'inout', 'OutMode')], [('TimeRecord', 'inout', 'InOutMode')]),
145 # AddTime and SubtractTime
146 ([('TimeRecord', 'dst', 'OutMode')], [('TimeRecord', 'dst', 'InOutMode')]),
149 if __name__ == "__main__":
150 main()