blob: 46adaaa585a21b2496bced1f253bfd40944381e4 [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',
Jack Jansen21f96871998-02-20 16:02:09 +000075 'StdOpcode', # XXXX Missing from library...
76
Guido van Rossume56db431995-03-19 22:49:50 +000077 ]
78
79 def makeblacklisttypes(self):
80 return [
Jack Jansen69b43ed1997-08-15 14:35:54 +000081## 'CCrsrHandle',
82 'CIconHandle', # Obsolete
Guido van Rossume56db431995-03-19 22:49:50 +000083 'CQDProcs',
84 'CSpecArray',
Jack Jansen69b43ed1997-08-15 14:35:54 +000085## 'CTabHandle',
Guido van Rossume56db431995-03-19 22:49:50 +000086 'ColorComplementProcPtr',
Jack Jansenb81cf9d1995-06-06 13:08:40 +000087 'ColorComplementUPP',
Guido van Rossume56db431995-03-19 22:49:50 +000088 'ColorSearchProcPtr',
Jack Jansenb81cf9d1995-06-06 13:08:40 +000089 'ColorSearchUPP',
Guido van Rossume56db431995-03-19 22:49:50 +000090 'ConstPatternParam',
Guido van Rossume56db431995-03-19 22:49:50 +000091 'DeviceLoopDrawingProcPtr',
92 'DeviceLoopFlags',
Jack Jansen3a50f8a1996-01-11 16:17:14 +000093## 'FontInfo',
Jack Jansen69b43ed1997-08-15 14:35:54 +000094## 'GDHandle',
Guido van Rossume56db431995-03-19 22:49:50 +000095 'GrafVerb',
96 'OpenCPicParams_ptr',
Guido van Rossume56db431995-03-19 22:49:50 +000097 'Ptr',
98 'QDProcs',
Guido van Rossume56db431995-03-19 22:49:50 +000099 'ReqListRec',
100 'void_ptr',
101 ]
102
103 def makerepairinstructions(self):
104 return [
105 ([('void_ptr', 'textBuf', 'InMode'),
106 ('short', 'firstByte', 'InMode'),
107 ('short', 'byteCount', 'InMode')],
108 [('TextThingie', '*', '*'), ('*', '*', '*'), ('*', '*', '*')]),
109
Jack Jansen1d8ede71996-01-08 23:47:31 +0000110 # GetPen and SetPt use a point-pointer as output-only:
111 ('GetPen', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
112 ('SetPt', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
113
114 # All others use it as input/output:
Guido van Rossume56db431995-03-19 22:49:50 +0000115 ([('Point', '*', 'OutMode')],
116 [('*', '*', 'InOutMode')]),
Jack Jansen54c8f7e1995-11-14 10:46:01 +0000117
118 # InsetRect, OffsetRect
119 ([('Rect', 'r', 'OutMode'),
120 ('short', 'dh', 'InMode'),
121 ('short', 'dv', 'InMode')],
122 [('Rect', 'r', 'InOutMode'),
123 ('short', 'dh', 'InMode'),
124 ('short', 'dv', 'InMode')]),
125
126 # MapRect
127 ([('Rect', 'r', 'OutMode'),
128 ('Rect_ptr', 'srcRect', 'InMode'),
129 ('Rect_ptr', 'dstRect', 'InMode')],
130 [('Rect', 'r', 'InOutMode'),
131 ('Rect_ptr', 'srcRect', 'InMode'),
132 ('Rect_ptr', 'dstRect', 'InMode')]),
Jack Jansen425e9eb1995-12-12 15:02:03 +0000133
134 # CopyBits and friends
135 ([('RgnHandle', 'maskRgn', 'InMode')],
136 [('OptRgnHandle', 'maskRgn', 'InMode')]),
Guido van Rossume56db431995-03-19 22:49:50 +0000137
138 ]
139
140if __name__ == "__main__":
141 main()