blob: 27d76be0221e44e871b2e683e1f2694f6fbcbd78 [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
Jack Jansenb2006391998-04-23 13:22:44 +000046# "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 Jansen1c4e6141998-04-21 15:23:55 +000060
61 "MakeTrackTimeTable", # Uses long * return?
62 "MakeMediaTimeTable", # ditto
Jack Jansena05ac601999-12-12 21:41:51 +000063## "VideoMediaGetStallCount", # Undefined in CW Pro 3 library
Jack Jansencb4eaad1995-11-30 15:03:59 +000064 ]
65
Jack Jansen8d929ae2000-06-21 22:07:06 +000066 def makegreylist(self):
67 return [
Jack Jansen74a1e632000-07-14 22:37:27 +000068 ('#if !TARGET_API_MAC_CARBON', [
Jack Jansen8d929ae2000-06-21 22:07:06 +000069 'SpriteMediaGetIndImageProperty', # XXXX Why isn't this in carbon?
70 'CheckQuickTimeRegistration',
71 ])]
72
Jack Jansencb4eaad1995-11-30 15:03:59 +000073 def makeblacklisttypes(self):
74 return [
Jack Jansen453ced51995-11-30 17:42:08 +000075 # I don't think we want to do these
76 "QTSyncTaskPtr",
77 # We dont do callbacks yet, so no need for these
Jack Jansencb4eaad1995-11-30 15:03:59 +000078 "QTCallBack",
Jack Jansen453ced51995-11-30 17:42:08 +000079 # Skipped for now, due to laziness
Jack Jansencb4eaad1995-11-30 15:03:59 +000080 "TrackEditState",
81 "MovieEditState",
Jack Jansencb4eaad1995-11-30 15:03:59 +000082 "MatrixRecord",
83 "MatrixRecord_ptr",
Jack Jansen453ced51995-11-30 17:42:08 +000084 "SampleReferencePtr",
Jack Jansen1c4e6141998-04-21 15:23:55 +000085 "QTTweener",
Jack Jansen68a0ee01997-09-01 15:38:24 +000086
Jack Jansen453ced51995-11-30 17:42:08 +000087 # Routine pointers, not yet.
88 "MoviesErrorUPP",
89 "MoviePreviewCallOutUPP",
90 "MovieDrawingCompleteUPP",
Jack Jansencb4eaad1995-11-30 15:03:59 +000091 "QTCallBackUPP",
92 "TextMediaUPP",
93 "MovieProgressUPP",
94 "MovieRgnCoverUPP",
95 "MCActionFilterUPP",
96 "MCActionFilterWithRefConUPP",
Jack Jansen453ced51995-11-30 17:42:08 +000097 "GetMovieUPP",
98 "ModalFilterUPP",
Jack Jansene0cf87b1997-04-09 15:53:46 +000099 "TrackTransferUPP",
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000100 "QTAtomContainer",
101 "SpriteWorld",
102 "Sprite",
Jack Jansencb4eaad1995-11-30 15:03:59 +0000103 ]
104
105 def makerepairinstructions(self):
106 return [
Jack Jansen453ced51995-11-30 17:42:08 +0000107 ([('FSSpec', '*', 'OutMode')], [('FSSpec_ptr', '*', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000108
109 # Movie controller creation
110 ([('ComponentInstance', 'NewMovieController', 'ReturnMode')],
111 [('MovieController', '*', 'ReturnMode')]),
112
113 # NewMovieFromFile
114 ([('short', 'resId', 'OutMode'), ('StringPtr', 'resName', 'InMode')],
Jack Jansene0cf87b1997-04-09 15:53:46 +0000115 [('short', 'resId', 'InOutMode'), ('dummyStringPtr', 'resName', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000116
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000117 # MCDoAction and more
118 ([('void', '*', 'OutMode')], [('mcactionparams', '*', 'InMode')]),
119
Jack Jansen1b7a70f2000-03-03 17:06:13 +0000120 # SetTimeBaseZero. Does not handle NULLs, unfortunately
121 ([('TimeRecord', 'zero', 'OutMode')], [('TimeRecord', 'zero', 'InMode')]),
122
123 # ConvertTime and ConvertTimeScale
124 ([('TimeRecord', 'inout', 'OutMode')], [('TimeRecord', 'inout', 'InOutMode')]),
125
126 # AddTime and SubtractTime
127 ([('TimeRecord', 'dst', 'OutMode')], [('TimeRecord', 'dst', 'InOutMode')]),
Jack Jansencb4eaad1995-11-30 15:03:59 +0000128 ]
129
130if __name__ == "__main__":
131 main()