blob: 756291514ffbb393b829af5ee9d573bdfe4ab52f [file] [log] [blame]
Guido van Rossume56db431995-03-19 22:49:50 +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)
Guido van Rossume56db431995-03-19 22:49:50 +00007
8from scantools import Scanner
Jack Jansen46d9e791996-04-12 16:29:23 +00009from bgenlocations import TOOLBOXDIR
Guido van Rossume56db431995-03-19 22:49:50 +000010
11def main():
12 input = "QuickDraw.h"
13 output = "qdgen.py"
Jack Jansen46d9e791996-04-12 16:29:23 +000014 defsoutput = TOOLBOXDIR + "QuickDraw.py"
Guido van Rossume56db431995-03-19 22:49:50 +000015 scanner = MyScanner(input, output, defsoutput)
16 scanner.scan()
17 scanner.close()
Jack Jansenb81cf9d1995-06-06 13:08:40 +000018
19 # Grmpf. Universal Headers have Text-stuff in a different include file...
20 input = "QuickDrawText.h"
21 output = "@qdgentext.py"
22 defsoutput = "@QuickDrawText.py"
23 have_extra = 0
24 try:
25 scanner = MyScanner(input, output, defsoutput)
26 scanner.scan()
27 scanner.close()
28 have_extra = 1
29 except IOError:
30 pass
31 if have_extra:
32 print "=== Copying QuickDrawText stuff into main files... ==="
33 ifp = open("@qdgentext.py")
34 ofp = open("qdgen.py", "a")
35 ofp.write(ifp.read())
36 ifp.close()
37 ofp.close()
38 ifp = open("@QuickDrawText.py")
Jack Jansen46d9e791996-04-12 16:29:23 +000039 ofp = open(TOOLBOXDIR + "QuickDraw.py", "a")
Jack Jansenb81cf9d1995-06-06 13:08:40 +000040 ofp.write(ifp.read())
41 ifp.close()
42 ofp.close()
43
Guido van Rossume56db431995-03-19 22:49:50 +000044 print "=== Done scanning and generating, now importing the generated code... ==="
45 import qdsupport
46 print "=== Done. It's up to you to compile it now! ==="
47
48class MyScanner(Scanner):
49
50 def destination(self, type, name, arglist):
51 classname = "Function"
52 listname = "functions"
53 if arglist:
54 t, n, m = arglist[0]
Jack Jansen330381c1995-11-15 15:18:01 +000055## elif t == "PolyHandle" and m == "InMode":
56## classname = "Method"
57## listname = "p_methods"
58## elif t == "RgnHandle" and m == "InMode":
59## classname = "Method"
60## listname = "r_methods"
Guido van Rossume56db431995-03-19 22:49:50 +000061 return classname, listname
62
Jack Jansen7f725e41998-04-23 13:21:09 +000063
64 def writeinitialdefs(self):
Jack Jansend9f5a391999-01-21 13:31:30 +000065 self.defsfile.write("""
66def FOUR_CHAR_CODE(x): return x
67normal = 0
68bold = 1
69italic = 2
70underline = 4
71outline = 8
72shadow = 0x10
73condense = 0x20
74extend = 0x40
75""")
Jack Jansen7f725e41998-04-23 13:21:09 +000076
Guido van Rossume56db431995-03-19 22:49:50 +000077 def makeblacklistnames(self):
78 return [
79 'InitGraf',
80 'StuffHex',
81 'StdLine',
82 'StdComment',
83 'StdGetPic',
Jack Jansen330381c1995-11-15 15:18:01 +000084 'OpenPort',
85 'InitPort',
86 'ClosePort',
87 'OpenCPort',
88 'InitCPort',
89 'CloseCPort',
Jack Jansen41058c01995-11-16 22:48:29 +000090 'BitMapToRegionGlue',
Jack Jansen21f96871998-02-20 16:02:09 +000091 'StdOpcode', # XXXX Missing from library...
Jack Jansen1c4e6141998-04-21 15:23:55 +000092 # The following are for non-macos use:
93 'LockPortBits',
94 'UnlockPortBits',
95 'UpdatePort',
96 'GetPortNativeWindow',
97 'GetNativeWindowPort',
98 'NativeRegionToMacRegion',
99 'MacRegionToNativeRegion',
100 'GetPortHWND',
101 'GetHWNDPort',
102 'GetPICTFromDIB',
Jack Jansenbd58eda2001-01-24 14:05:11 +0000103
104 'HandleToRgn', # Funny signature
Jack Jansen21f96871998-02-20 16:02:09 +0000105
Jack Jansenf47075e2001-01-24 14:22:13 +0000106 # Need Cm, which we don't want to drag in just yet
107 'OpenCursorComponent',
108 'CloseCursorComponent',
109 'SetCursorComponent',
110 'CursorComponentChanged',
111 'CursorComponentSetData',
Guido van Rossume56db431995-03-19 22:49:50 +0000112 ]
113
Jack Jansen723ad8a2000-12-12 22:10:21 +0000114 def makegreylist(self):
115 return [
116 ('#if !TARGET_API_MAC_CARBON', [
117 ]),
118 ('#if TARGET_API_MAC_CARBON', [
Jack Jansenbd58eda2001-01-24 14:05:11 +0000119 'IsPortOffscreen', # Lazy
120 'IsPortColor', # Lazy
121 'IsRegionRectangular',
122 'CreateNewPort',
123 'DisposePort',
124 'SetQDError',
Jack Jansen620a7662001-12-18 15:39:38 +0000125 'IsPortPolyBeingDefined',
126 'QDSetDirtyRegion',
127 'QDGetDirtyRegion',
128 'IsValidPort',
129 'RgnToHandle',
Jack Jansen723ad8a2000-12-12 22:10:21 +0000130 ])]
131
132
Guido van Rossume56db431995-03-19 22:49:50 +0000133 def makeblacklisttypes(self):
134 return [
Jack Jansen69b43ed1997-08-15 14:35:54 +0000135 'CIconHandle', # Obsolete
Guido van Rossume56db431995-03-19 22:49:50 +0000136 'CQDProcs',
Jack Jansen723ad8a2000-12-12 22:10:21 +0000137 'CQDProcsPtr',
Guido van Rossume56db431995-03-19 22:49:50 +0000138 'CSpecArray',
Guido van Rossume56db431995-03-19 22:49:50 +0000139 'ColorComplementProcPtr',
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000140 'ColorComplementUPP',
Guido van Rossume56db431995-03-19 22:49:50 +0000141 'ColorSearchProcPtr',
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000142 'ColorSearchUPP',
Guido van Rossume56db431995-03-19 22:49:50 +0000143 'ConstPatternParam',
Guido van Rossume56db431995-03-19 22:49:50 +0000144 'DeviceLoopDrawingProcPtr',
145 'DeviceLoopFlags',
Guido van Rossume56db431995-03-19 22:49:50 +0000146 'GrafVerb',
147 'OpenCPicParams_ptr',
Guido van Rossume56db431995-03-19 22:49:50 +0000148 'Ptr',
149 'QDProcs',
Guido van Rossume56db431995-03-19 22:49:50 +0000150 'ReqListRec',
151 'void_ptr',
Jack Jansen723ad8a2000-12-12 22:10:21 +0000152 'CustomXFerProcPtr',
Guido van Rossume56db431995-03-19 22:49:50 +0000153 ]
154
155 def makerepairinstructions(self):
156 return [
157 ([('void_ptr', 'textBuf', 'InMode'),
158 ('short', 'firstByte', 'InMode'),
159 ('short', 'byteCount', 'InMode')],
160 [('TextThingie', '*', '*'), ('*', '*', '*'), ('*', '*', '*')]),
161
Jack Jansen1d8ede71996-01-08 23:47:31 +0000162 # GetPen and SetPt use a point-pointer as output-only:
163 ('GetPen', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
164 ('SetPt', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
165
166 # All others use it as input/output:
Guido van Rossume56db431995-03-19 22:49:50 +0000167 ([('Point', '*', 'OutMode')],
168 [('*', '*', 'InOutMode')]),
Jack Jansen54c8f7e1995-11-14 10:46:01 +0000169
170 # InsetRect, OffsetRect
171 ([('Rect', 'r', 'OutMode'),
172 ('short', 'dh', 'InMode'),
173 ('short', 'dv', 'InMode')],
174 [('Rect', 'r', 'InOutMode'),
175 ('short', 'dh', 'InMode'),
176 ('short', 'dv', 'InMode')]),
177
178 # MapRect
179 ([('Rect', 'r', 'OutMode'),
180 ('Rect_ptr', 'srcRect', 'InMode'),
181 ('Rect_ptr', 'dstRect', 'InMode')],
182 [('Rect', 'r', 'InOutMode'),
183 ('Rect_ptr', 'srcRect', 'InMode'),
184 ('Rect_ptr', 'dstRect', 'InMode')]),
Jack Jansen425e9eb1995-12-12 15:02:03 +0000185
186 # CopyBits and friends
187 ([('RgnHandle', 'maskRgn', 'InMode')],
188 [('OptRgnHandle', 'maskRgn', 'InMode')]),
Jack Jansenbd58eda2001-01-24 14:05:11 +0000189
Jack Jansend6b2aeb2001-02-06 16:13:50 +0000190 ('QDFlushPortBuffer',
191 [('RgnHandle', '*', 'InMode')],
192 [('OptRgnHandle', '*', 'InMode')]),
193
Jack Jansenbd58eda2001-01-24 14:05:11 +0000194 # Accessors with reference argument also returned.
195 ([('Rect_ptr', 'GetPortBounds', 'ReturnMode')],
196 [('void', '*', 'ReturnMode')]),
197
198 ([('RGBColor_ptr', 'GetPortForeColor', 'ReturnMode')],
199 [('void', '*', 'ReturnMode')]),
200
201 ([('RGBColor_ptr', 'GetPortBackColor', 'ReturnMode')],
202 [('void', '*', 'ReturnMode')]),
203
204 ([('RGBColor_ptr', 'GetPortOpColor', 'ReturnMode')],
205 [('void', '*', 'ReturnMode')]),
206
207 ([('RGBColor_ptr', 'GetPortHiliteColor', 'ReturnMode')],
208 [('void', '*', 'ReturnMode')]),
209
210 ([('Point_ptr', 'GetPortPenSize', 'ReturnMode')],
211 [('void', '*', 'ReturnMode')]),
212
213 ([('Point_ptr', 'GetPortPenLocation', 'ReturnMode')],
214 [('void', '*', 'ReturnMode')]),
215
216 ([('Rect_ptr', 'GetPixBounds', 'ReturnMode')],
217 [('void', '*', 'ReturnMode')]),
218
219 ([('BitMap_ptr', 'GetQDGlobalsScreenBits', 'ReturnMode')],
220 [('void', '*', 'ReturnMode')]),
221
222 ([('Cursor_ptr', 'GetQDGlobalsArrow', 'ReturnMode')],
223 [('void', '*', 'ReturnMode')]),
224
225 ([('Rect_ptr', 'GetRegionBounds', 'ReturnMode')],
226 [('void', '*', 'ReturnMode')]),
227
228 ([('Pattern_ptr', '*', 'ReturnMode')],
229 [('void', '*', 'ReturnMode')]),
Guido van Rossume56db431995-03-19 22:49:50 +0000230
231 ]
232
233if __name__ == "__main__":
234 main()