blob: 1258a303db14c2f69fb1f85453c2b4e95bc467a1 [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
Jack Jansenaaebdd62002-08-05 15:39:30 +00005from bgenlocations import TOOLBOXDIR, BGENDIR
Jack Jansen0c4d9471998-04-17 14:07:56 +00006sys.path.append(BGENDIR)
Guido van Rossume56db431995-03-19 22:49:50 +00007
8from scantools import Scanner
9
10def main():
11 input = "QuickDraw.h"
12 output = "qdgen.py"
Jack Jansen46d9e791996-04-12 16:29:23 +000013 defsoutput = TOOLBOXDIR + "QuickDraw.py"
Guido van Rossume56db431995-03-19 22:49:50 +000014 scanner = MyScanner(input, output, defsoutput)
15 scanner.scan()
16 scanner.close()
Jack Jansenb81cf9d1995-06-06 13:08:40 +000017
18 # Grmpf. Universal Headers have Text-stuff in a different include file...
19 input = "QuickDrawText.h"
20 output = "@qdgentext.py"
21 defsoutput = "@QuickDrawText.py"
22 have_extra = 0
23 try:
24 scanner = MyScanner(input, output, defsoutput)
25 scanner.scan()
26 scanner.close()
27 have_extra = 1
28 except IOError:
29 pass
30 if have_extra:
31 print "=== Copying QuickDrawText stuff into main files... ==="
32 ifp = open("@qdgentext.py")
33 ofp = open("qdgen.py", "a")
34 ofp.write(ifp.read())
35 ifp.close()
36 ofp.close()
37 ifp = open("@QuickDrawText.py")
Jack Jansen46d9e791996-04-12 16:29:23 +000038 ofp = open(TOOLBOXDIR + "QuickDraw.py", "a")
Jack Jansenb81cf9d1995-06-06 13:08:40 +000039 ofp.write(ifp.read())
40 ifp.close()
41 ofp.close()
42
Guido van Rossume56db431995-03-19 22:49:50 +000043 print "=== Done scanning and generating, now importing the generated code... ==="
44 import qdsupport
45 print "=== Done. It's up to you to compile it now! ==="
46
47class MyScanner(Scanner):
48
49 def destination(self, type, name, arglist):
50 classname = "Function"
51 listname = "functions"
52 if arglist:
53 t, n, m = arglist[0]
Jack Jansen330381c1995-11-15 15:18:01 +000054## elif t == "PolyHandle" and m == "InMode":
55## classname = "Method"
56## listname = "p_methods"
57## elif t == "RgnHandle" and m == "InMode":
58## classname = "Method"
59## listname = "r_methods"
Guido van Rossume56db431995-03-19 22:49:50 +000060 return classname, listname
61
Jack Jansen7f725e41998-04-23 13:21:09 +000062
63 def writeinitialdefs(self):
Jack Jansend9f5a391999-01-21 13:31:30 +000064 self.defsfile.write("""
65def FOUR_CHAR_CODE(x): return x
66normal = 0
67bold = 1
68italic = 2
69underline = 4
70outline = 8
71shadow = 0x10
72condense = 0x20
73extend = 0x40
74""")
Jack Jansen7f725e41998-04-23 13:21:09 +000075
Guido van Rossume56db431995-03-19 22:49:50 +000076 def makeblacklistnames(self):
77 return [
78 'InitGraf',
79 'StuffHex',
80 'StdLine',
81 'StdComment',
82 'StdGetPic',
Jack Jansen330381c1995-11-15 15:18:01 +000083 'OpenPort',
84 'InitPort',
85 'ClosePort',
86 'OpenCPort',
87 'InitCPort',
88 'CloseCPort',
Jack Jansen41058c01995-11-16 22:48:29 +000089 'BitMapToRegionGlue',
Jack Jansen21f96871998-02-20 16:02:09 +000090 'StdOpcode', # XXXX Missing from library...
Jack Jansen1c4e6141998-04-21 15:23:55 +000091 # The following are for non-macos use:
92 'LockPortBits',
93 'UnlockPortBits',
94 'UpdatePort',
95 'GetPortNativeWindow',
96 'GetNativeWindowPort',
97 'NativeRegionToMacRegion',
98 'MacRegionToNativeRegion',
99 'GetPortHWND',
100 'GetHWNDPort',
101 'GetPICTFromDIB',
Jack Jansenbd58eda2001-01-24 14:05:11 +0000102
103 'HandleToRgn', # Funny signature
Jack Jansen21f96871998-02-20 16:02:09 +0000104
Jack Jansenf47075e2001-01-24 14:22:13 +0000105 # Need Cm, which we don't want to drag in just yet
106 'OpenCursorComponent',
107 'CloseCursorComponent',
108 'SetCursorComponent',
109 'CursorComponentChanged',
110 'CursorComponentSetData',
Guido van Rossume56db431995-03-19 22:49:50 +0000111 ]
112
Jack Jansen723ad8a2000-12-12 22:10:21 +0000113 def makegreylist(self):
114 return [
115 ('#if !TARGET_API_MAC_CARBON', [
116 ]),
117 ('#if TARGET_API_MAC_CARBON', [
Jack Jansenbd58eda2001-01-24 14:05:11 +0000118 'IsPortOffscreen', # Lazy
119 'IsPortColor', # Lazy
120 'IsRegionRectangular',
121 'CreateNewPort',
122 'DisposePort',
123 'SetQDError',
Jack Jansen620a7662001-12-18 15:39:38 +0000124 'IsPortPolyBeingDefined',
125 'QDSetDirtyRegion',
126 'QDGetDirtyRegion',
127 'IsValidPort',
128 'RgnToHandle',
Jack Jansen723ad8a2000-12-12 22:10:21 +0000129 ])]
130
131
Guido van Rossume56db431995-03-19 22:49:50 +0000132 def makeblacklisttypes(self):
133 return [
Jack Jansen69b43ed1997-08-15 14:35:54 +0000134 'CIconHandle', # Obsolete
Guido van Rossume56db431995-03-19 22:49:50 +0000135 'CQDProcs',
Jack Jansen723ad8a2000-12-12 22:10:21 +0000136 'CQDProcsPtr',
Guido van Rossume56db431995-03-19 22:49:50 +0000137 'CSpecArray',
Guido van Rossume56db431995-03-19 22:49:50 +0000138 'ColorComplementProcPtr',
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000139 'ColorComplementUPP',
Guido van Rossume56db431995-03-19 22:49:50 +0000140 'ColorSearchProcPtr',
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000141 'ColorSearchUPP',
Guido van Rossume56db431995-03-19 22:49:50 +0000142 'ConstPatternParam',
Guido van Rossume56db431995-03-19 22:49:50 +0000143 'DeviceLoopDrawingProcPtr',
144 'DeviceLoopFlags',
Guido van Rossume56db431995-03-19 22:49:50 +0000145 'GrafVerb',
146 'OpenCPicParams_ptr',
Guido van Rossume56db431995-03-19 22:49:50 +0000147 'Ptr',
148 'QDProcs',
Guido van Rossume56db431995-03-19 22:49:50 +0000149 'ReqListRec',
150 'void_ptr',
Jack Jansen723ad8a2000-12-12 22:10:21 +0000151 'CustomXFerProcPtr',
Guido van Rossume56db431995-03-19 22:49:50 +0000152 ]
153
154 def makerepairinstructions(self):
155 return [
156 ([('void_ptr', 'textBuf', 'InMode'),
157 ('short', 'firstByte', 'InMode'),
158 ('short', 'byteCount', 'InMode')],
159 [('TextThingie', '*', '*'), ('*', '*', '*'), ('*', '*', '*')]),
160
Jack Jansen1d8ede71996-01-08 23:47:31 +0000161 # GetPen and SetPt use a point-pointer as output-only:
162 ('GetPen', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
163 ('SetPt', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
164
165 # All others use it as input/output:
Guido van Rossume56db431995-03-19 22:49:50 +0000166 ([('Point', '*', 'OutMode')],
167 [('*', '*', 'InOutMode')]),
Jack Jansen54c8f7e1995-11-14 10:46:01 +0000168
169 # InsetRect, OffsetRect
170 ([('Rect', 'r', 'OutMode'),
171 ('short', 'dh', 'InMode'),
172 ('short', 'dv', 'InMode')],
173 [('Rect', 'r', 'InOutMode'),
174 ('short', 'dh', 'InMode'),
175 ('short', 'dv', 'InMode')]),
176
177 # MapRect
178 ([('Rect', 'r', 'OutMode'),
179 ('Rect_ptr', 'srcRect', 'InMode'),
180 ('Rect_ptr', 'dstRect', 'InMode')],
181 [('Rect', 'r', 'InOutMode'),
182 ('Rect_ptr', 'srcRect', 'InMode'),
183 ('Rect_ptr', 'dstRect', 'InMode')]),
Jack Jansen425e9eb1995-12-12 15:02:03 +0000184
185 # CopyBits and friends
186 ([('RgnHandle', 'maskRgn', 'InMode')],
187 [('OptRgnHandle', 'maskRgn', 'InMode')]),
Jack Jansenbd58eda2001-01-24 14:05:11 +0000188
Jack Jansend6b2aeb2001-02-06 16:13:50 +0000189 ('QDFlushPortBuffer',
190 [('RgnHandle', '*', 'InMode')],
191 [('OptRgnHandle', '*', 'InMode')]),
192
Jack Jansenbd58eda2001-01-24 14:05:11 +0000193 # Accessors with reference argument also returned.
194 ([('Rect_ptr', 'GetPortBounds', 'ReturnMode')],
195 [('void', '*', 'ReturnMode')]),
196
197 ([('RGBColor_ptr', 'GetPortForeColor', 'ReturnMode')],
198 [('void', '*', 'ReturnMode')]),
199
200 ([('RGBColor_ptr', 'GetPortBackColor', 'ReturnMode')],
201 [('void', '*', 'ReturnMode')]),
202
203 ([('RGBColor_ptr', 'GetPortOpColor', 'ReturnMode')],
204 [('void', '*', 'ReturnMode')]),
205
206 ([('RGBColor_ptr', 'GetPortHiliteColor', 'ReturnMode')],
207 [('void', '*', 'ReturnMode')]),
208
209 ([('Point_ptr', 'GetPortPenSize', 'ReturnMode')],
210 [('void', '*', 'ReturnMode')]),
211
212 ([('Point_ptr', 'GetPortPenLocation', 'ReturnMode')],
213 [('void', '*', 'ReturnMode')]),
214
215 ([('Rect_ptr', 'GetPixBounds', 'ReturnMode')],
216 [('void', '*', 'ReturnMode')]),
217
218 ([('BitMap_ptr', 'GetQDGlobalsScreenBits', 'ReturnMode')],
219 [('void', '*', 'ReturnMode')]),
220
221 ([('Cursor_ptr', 'GetQDGlobalsArrow', 'ReturnMode')],
222 [('void', '*', 'ReturnMode')]),
223
224 ([('Rect_ptr', 'GetRegionBounds', 'ReturnMode')],
225 [('void', '*', 'ReturnMode')]),
226
227 ([('Pattern_ptr', '*', 'ReturnMode')],
228 [('void', '*', 'ReturnMode')]),
Guido van Rossume56db431995-03-19 22:49:50 +0000229
230 ]
231
232if __name__ == "__main__":
233 main()