blob: 4155df01308d60b6726eedfd1559d23aab585792 [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
3import addpack
Jack Jansenb81cf9d1995-06-06 13:08:40 +00004addpack.addpack(':Tools:bgen:bgen')
Guido van Rossume56db431995-03-19 22:49:50 +00005
6from scantools import Scanner
Jack Jansen46d9e791996-04-12 16:29:23 +00007from bgenlocations import TOOLBOXDIR
Guido van Rossume56db431995-03-19 22:49:50 +00008
9def main():
10 input = "QuickDraw.h"
11 output = "qdgen.py"
Jack Jansen46d9e791996-04-12 16:29:23 +000012 defsoutput = TOOLBOXDIR + "QuickDraw.py"
Guido van Rossume56db431995-03-19 22:49:50 +000013 scanner = MyScanner(input, output, defsoutput)
14 scanner.scan()
15 scanner.close()
Jack Jansenb81cf9d1995-06-06 13:08:40 +000016
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")
Jack Jansen46d9e791996-04-12 16:29:23 +000037 ofp = open(TOOLBOXDIR + "QuickDraw.py", "a")
Jack Jansenb81cf9d1995-06-06 13:08:40 +000038 ofp.write(ifp.read())
39 ifp.close()
40 ofp.close()
41
Guido van Rossume56db431995-03-19 22:49:50 +000042 print "=== Done scanning and generating, now importing the generated code... ==="
43 import qdsupport
44 print "=== Done. It's up to you to compile it now! ==="
45
46class MyScanner(Scanner):
47
48 def destination(self, type, name, arglist):
49 classname = "Function"
50 listname = "functions"
51 if arglist:
52 t, n, m = arglist[0]
Jack Jansen330381c1995-11-15 15:18:01 +000053## elif t == "PolyHandle" and m == "InMode":
54## classname = "Method"
55## listname = "p_methods"
56## elif t == "RgnHandle" and m == "InMode":
57## classname = "Method"
58## listname = "r_methods"
Guido van Rossume56db431995-03-19 22:49:50 +000059 return classname, listname
60
61 def makeblacklistnames(self):
62 return [
63 'InitGraf',
64 'StuffHex',
65 'StdLine',
66 'StdComment',
67 'StdGetPic',
Jack Jansen330381c1995-11-15 15:18:01 +000068 'OpenPort',
69 'InitPort',
70 'ClosePort',
71 'OpenCPort',
72 'InitCPort',
73 'CloseCPort',
Jack Jansen41058c01995-11-16 22:48:29 +000074 'BitMapToRegionGlue',
Guido van Rossume56db431995-03-19 22:49:50 +000075 ]
76
77 def makeblacklisttypes(self):
78 return [
Guido van Rossume56db431995-03-19 22:49:50 +000079 'CCrsrHandle',
Guido van Rossume56db431995-03-19 22:49:50 +000080 'CIconHandle',
81 'CQDProcs',
82 'CSpecArray',
83 'CTabHandle',
84 'ColorComplementProcPtr',
Jack Jansenb81cf9d1995-06-06 13:08:40 +000085 'ColorComplementUPP',
Guido van Rossume56db431995-03-19 22:49:50 +000086 'ColorSearchProcPtr',
Jack Jansenb81cf9d1995-06-06 13:08:40 +000087 'ColorSearchUPP',
Guido van Rossume56db431995-03-19 22:49:50 +000088 'ConstPatternParam',
Guido van Rossume56db431995-03-19 22:49:50 +000089 'DeviceLoopDrawingProcPtr',
90 'DeviceLoopFlags',
Jack Jansen3a50f8a1996-01-11 16:17:14 +000091## 'FontInfo',
Guido van Rossume56db431995-03-19 22:49:50 +000092 'GDHandle',
93 'GrafVerb',
94 'OpenCPicParams_ptr',
Guido van Rossume56db431995-03-19 22:49:50 +000095 'Ptr',
96 'QDProcs',
Guido van Rossume56db431995-03-19 22:49:50 +000097 'ReqListRec',
98 'void_ptr',
99 ]
100
101 def makerepairinstructions(self):
102 return [
103 ([('void_ptr', 'textBuf', 'InMode'),
104 ('short', 'firstByte', 'InMode'),
105 ('short', 'byteCount', 'InMode')],
106 [('TextThingie', '*', '*'), ('*', '*', '*'), ('*', '*', '*')]),
107
Jack Jansen1d8ede71996-01-08 23:47:31 +0000108 # GetPen and SetPt use a point-pointer as output-only:
109 ('GetPen', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
110 ('SetPt', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
111
112 # All others use it as input/output:
Guido van Rossume56db431995-03-19 22:49:50 +0000113 ([('Point', '*', 'OutMode')],
114 [('*', '*', 'InOutMode')]),
Jack Jansen54c8f7e1995-11-14 10:46:01 +0000115
116 # InsetRect, OffsetRect
117 ([('Rect', 'r', 'OutMode'),
118 ('short', 'dh', 'InMode'),
119 ('short', 'dv', 'InMode')],
120 [('Rect', 'r', 'InOutMode'),
121 ('short', 'dh', 'InMode'),
122 ('short', 'dv', 'InMode')]),
123
124 # MapRect
125 ([('Rect', 'r', 'OutMode'),
126 ('Rect_ptr', 'srcRect', 'InMode'),
127 ('Rect_ptr', 'dstRect', 'InMode')],
128 [('Rect', 'r', 'InOutMode'),
129 ('Rect_ptr', 'srcRect', 'InMode'),
130 ('Rect_ptr', 'dstRect', 'InMode')]),
Jack Jansen425e9eb1995-12-12 15:02:03 +0000131
132 # CopyBits and friends
133 ([('RgnHandle', 'maskRgn', 'InMode')],
134 [('OptRgnHandle', 'maskRgn', 'InMode')]),
Guido van Rossume56db431995-03-19 22:49:50 +0000135
136 ]
137
138if __name__ == "__main__":
139 main()