1 | # Scan an Apple header file, generating a Python file of generator calls.
|
---|
2 |
|
---|
3 | import sys
|
---|
4 | from bgenlocations import TOOLBOXDIR, BGENDIR
|
---|
5 | sys.path.append(BGENDIR)
|
---|
6 |
|
---|
7 | from scantools import Scanner
|
---|
8 |
|
---|
9 | def main():
|
---|
10 | input = "QuickDraw.h"
|
---|
11 | output = "qdgen.py"
|
---|
12 | defsoutput = TOOLBOXDIR + "QuickDraw.py"
|
---|
13 | scanner = MyScanner(input, output, defsoutput)
|
---|
14 | scanner.scan()
|
---|
15 | scanner.close()
|
---|
16 |
|
---|
17 | # Grmpf. Universal Headers have Text-stuff in a different include file...
|
---|
18 | input = "QuickDrawText.h"
|
---|
19 | output = "@qdgentext.py"
|
---|
20 | defsoutput = "@QuickDrawText.py"
|
---|
21 | have_extra = 0
|
---|
22 | try:
|
---|
23 | scanner = MyScanner(input, output, defsoutput)
|
---|
24 | scanner.scan()
|
---|
25 | scanner.close()
|
---|
26 | have_extra = 1
|
---|
27 | except IOError:
|
---|
28 | pass
|
---|
29 | if have_extra:
|
---|
30 | print "=== Copying QuickDrawText stuff into main files... ==="
|
---|
31 | ifp = open("@qdgentext.py")
|
---|
32 | ofp = open("qdgen.py", "a")
|
---|
33 | ofp.write(ifp.read())
|
---|
34 | ifp.close()
|
---|
35 | ofp.close()
|
---|
36 | ifp = open("@QuickDrawText.py")
|
---|
37 | ofp = open(TOOLBOXDIR + "QuickDraw.py", "a")
|
---|
38 | ofp.write(ifp.read())
|
---|
39 | ifp.close()
|
---|
40 | ofp.close()
|
---|
41 |
|
---|
42 | print "=== Testing definitions output code ==="
|
---|
43 | execfile(defsoutput, {}, {})
|
---|
44 | 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 |
|
---|
48 | class 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]
|
---|
55 | if t in ('GrafPtr', 'CGrafPtr') and m == 'InMode':
|
---|
56 | classname = "Method"
|
---|
57 | listname = "gr_methods"
|
---|
58 | elif t == 'BitMapPtr' and m == 'InMode':
|
---|
59 | classname = "Method"
|
---|
60 | listname = "bm_methods"
|
---|
61 | ## elif t == "PolyHandle" and m == "InMode":
|
---|
62 | ## classname = "Method"
|
---|
63 | ## listname = "p_methods"
|
---|
64 | ## elif t == "RgnHandle" and m == "InMode":
|
---|
65 | ## classname = "Method"
|
---|
66 | ## listname = "r_methods"
|
---|
67 | return classname, listname
|
---|
68 |
|
---|
69 |
|
---|
70 | def writeinitialdefs(self):
|
---|
71 | self.defsfile.write("""
|
---|
72 | def FOUR_CHAR_CODE(x): return x
|
---|
73 | normal = 0
|
---|
74 | bold = 1
|
---|
75 | italic = 2
|
---|
76 | underline = 4
|
---|
77 | outline = 8
|
---|
78 | shadow = 0x10
|
---|
79 | condense = 0x20
|
---|
80 | extend = 0x40
|
---|
81 | """)
|
---|
82 |
|
---|
83 | def makeblacklistnames(self):
|
---|
84 | return [
|
---|
85 | 'InitGraf',
|
---|
86 | 'StuffHex',
|
---|
87 | 'StdLine',
|
---|
88 | 'StdComment',
|
---|
89 | 'StdGetPic',
|
---|
90 | 'OpenPort',
|
---|
91 | 'InitPort',
|
---|
92 | 'ClosePort',
|
---|
93 | 'OpenCPort',
|
---|
94 | 'InitCPort',
|
---|
95 | 'CloseCPort',
|
---|
96 | 'BitMapToRegionGlue',
|
---|
97 | 'StdOpcode', # XXXX Missing from library...
|
---|
98 | # The following are for non-macos use:
|
---|
99 | 'LockPortBits',
|
---|
100 | 'UnlockPortBits',
|
---|
101 | 'UpdatePort',
|
---|
102 | 'GetPortNativeWindow',
|
---|
103 | 'GetNativeWindowPort',
|
---|
104 | 'NativeRegionToMacRegion',
|
---|
105 | 'MacRegionToNativeRegion',
|
---|
106 | 'GetPortHWND',
|
---|
107 | 'GetHWNDPort',
|
---|
108 | 'GetPICTFromDIB',
|
---|
109 |
|
---|
110 | 'HandleToRgn', # Funny signature
|
---|
111 |
|
---|
112 | # Need Cm, which we don't want to drag in just yet
|
---|
113 | 'OpenCursorComponent',
|
---|
114 | 'CloseCursorComponent',
|
---|
115 | 'SetCursorComponent',
|
---|
116 | 'CursorComponentChanged',
|
---|
117 | 'CursorComponentSetData',
|
---|
118 | ]
|
---|
119 |
|
---|
120 | def makeblacklisttypes(self):
|
---|
121 | return [
|
---|
122 | "QDRegionBitsRef", # Should do this, but too lazy now.
|
---|
123 | 'CIconHandle', # Obsolete
|
---|
124 | 'CQDProcs',
|
---|
125 | 'CQDProcsPtr',
|
---|
126 | 'CSpecArray',
|
---|
127 | 'ColorComplementProcPtr',
|
---|
128 | 'ColorComplementUPP',
|
---|
129 | 'ColorSearchProcPtr',
|
---|
130 | 'ColorSearchUPP',
|
---|
131 | 'ConstPatternParam',
|
---|
132 | 'DeviceLoopDrawingProcPtr',
|
---|
133 | 'DeviceLoopFlags',
|
---|
134 | 'GrafVerb',
|
---|
135 | 'OpenCPicParams_ptr',
|
---|
136 | 'Ptr',
|
---|
137 | 'QDProcs',
|
---|
138 | 'ReqListRec',
|
---|
139 | 'void_ptr',
|
---|
140 | 'CustomXFerProcPtr',
|
---|
141 | ]
|
---|
142 |
|
---|
143 | def makerepairinstructions(self):
|
---|
144 | return [
|
---|
145 | ([('void_ptr', 'textBuf', 'InMode'),
|
---|
146 | ('short', 'firstByte', 'InMode'),
|
---|
147 | ('short', 'byteCount', 'InMode')],
|
---|
148 | [('TextThingie', '*', '*'), ('*', '*', '*'), ('*', '*', '*')]),
|
---|
149 |
|
---|
150 | # GetPen and SetPt use a point-pointer as output-only:
|
---|
151 | ('GetPen', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
|
---|
152 | ('SetPt', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
|
---|
153 |
|
---|
154 | # All others use it as input/output:
|
---|
155 | ([('Point', '*', 'OutMode')],
|
---|
156 | [('*', '*', 'InOutMode')]),
|
---|
157 |
|
---|
158 | # InsetRect, OffsetRect
|
---|
159 | ([('Rect', 'r', 'OutMode'),
|
---|
160 | ('short', 'dh', 'InMode'),
|
---|
161 | ('short', 'dv', 'InMode')],
|
---|
162 | [('Rect', 'r', 'InOutMode'),
|
---|
163 | ('short', 'dh', 'InMode'),
|
---|
164 | ('short', 'dv', 'InMode')]),
|
---|
165 |
|
---|
166 | # MapRect
|
---|
167 | ([('Rect', 'r', 'OutMode'),
|
---|
168 | ('Rect_ptr', 'srcRect', 'InMode'),
|
---|
169 | ('Rect_ptr', 'dstRect', 'InMode')],
|
---|
170 | [('Rect', 'r', 'InOutMode'),
|
---|
171 | ('Rect_ptr', 'srcRect', 'InMode'),
|
---|
172 | ('Rect_ptr', 'dstRect', 'InMode')]),
|
---|
173 |
|
---|
174 | # CopyBits and friends
|
---|
175 | ([('RgnHandle', 'maskRgn', 'InMode')],
|
---|
176 | [('OptRgnHandle', 'maskRgn', 'InMode')]),
|
---|
177 |
|
---|
178 | ('QDFlushPortBuffer',
|
---|
179 | [('RgnHandle', '*', 'InMode')],
|
---|
180 | [('OptRgnHandle', '*', 'InMode')]),
|
---|
181 |
|
---|
182 | # Accessors with reference argument also returned.
|
---|
183 | ([('Rect_ptr', 'GetPortBounds', 'ReturnMode')],
|
---|
184 | [('void', '*', 'ReturnMode')]),
|
---|
185 |
|
---|
186 | ([('RGBColor_ptr', 'GetPortForeColor', 'ReturnMode')],
|
---|
187 | [('void', '*', 'ReturnMode')]),
|
---|
188 |
|
---|
189 | ([('RGBColor_ptr', 'GetPortBackColor', 'ReturnMode')],
|
---|
190 | [('void', '*', 'ReturnMode')]),
|
---|
191 |
|
---|
192 | ([('RGBColor_ptr', 'GetPortOpColor', 'ReturnMode')],
|
---|
193 | [('void', '*', 'ReturnMode')]),
|
---|
194 |
|
---|
195 | ([('RGBColor_ptr', 'GetPortHiliteColor', 'ReturnMode')],
|
---|
196 | [('void', '*', 'ReturnMode')]),
|
---|
197 |
|
---|
198 | ([('Point_ptr', 'GetPortPenSize', 'ReturnMode')],
|
---|
199 | [('void', '*', 'ReturnMode')]),
|
---|
200 |
|
---|
201 | ([('Point_ptr', 'GetPortPenLocation', 'ReturnMode')],
|
---|
202 | [('void', '*', 'ReturnMode')]),
|
---|
203 |
|
---|
204 | ([('Rect_ptr', 'GetPixBounds', 'ReturnMode')],
|
---|
205 | [('void', '*', 'ReturnMode')]),
|
---|
206 |
|
---|
207 | ([('BitMap_ptr', 'GetQDGlobalsScreenBits', 'ReturnMode')],
|
---|
208 | [('void', '*', 'ReturnMode')]),
|
---|
209 |
|
---|
210 | ([('Cursor_ptr', 'GetQDGlobalsArrow', 'ReturnMode')],
|
---|
211 | [('void', '*', 'ReturnMode')]),
|
---|
212 |
|
---|
213 | ([('Rect_ptr', 'GetRegionBounds', 'ReturnMode')],
|
---|
214 | [('void', '*', 'ReturnMode')]),
|
---|
215 |
|
---|
216 | ([('Pattern_ptr', '*', 'ReturnMode')],
|
---|
217 | [('void', '*', 'ReturnMode')]),
|
---|
218 |
|
---|
219 | ([('Point_ptr', 'QDLocalToGlobalPoint', 'ReturnMode')],
|
---|
220 | [('void', '*', 'ReturnMode')]),
|
---|
221 |
|
---|
222 | ([('Rect_ptr', 'QDLocalToGlobalRect', 'ReturnMode')],
|
---|
223 | [('void', '*', 'ReturnMode')]),
|
---|
224 |
|
---|
225 | ([('Point_ptr', 'QDGlobalToLocalPoint', 'ReturnMode')],
|
---|
226 | [('void', '*', 'ReturnMode')]),
|
---|
227 |
|
---|
228 | ([('Rect_ptr', 'QDGlobalToLocalRect', 'ReturnMode')],
|
---|
229 | [('void', '*', 'ReturnMode')]),
|
---|
230 |
|
---|
231 | ]
|
---|
232 |
|
---|
233 | if __name__ == "__main__":
|
---|
234 | main()
|
---|