blob: 06b421f830a744a2a72fbea79cf616bfb3117f4f [file] [log] [blame]
Guido van Rossum17448e21995-01-30 11:53:55 +00001# Scan an Apple header file, generating a Python file of generator calls.
Jack Jansen0c4d9471998-04-17 14:07:56 +00002import sys
3import os
Jack Jansenaaebdd62002-08-05 15:39:30 +00004from bgenlocations import TOOLBOXDIR, BGENDIR
Jack Jansen0c4d9471998-04-17 14:07:56 +00005sys.path.append(BGENDIR)
Guido van Rossum17448e21995-01-30 11:53:55 +00006
7from scantools import Scanner
8
9def main():
Jack Jansen21f96871998-02-20 16:02:09 +000010 input = "MacWindows.h"
Guido van Rossum17448e21995-01-30 11:53:55 +000011 output = "wingen.py"
Jack Jansen46d9e791996-04-12 16:29:23 +000012 defsoutput = TOOLBOXDIR + "Windows.py"
Guido van Rossum17448e21995-01-30 11:53:55 +000013 scanner = MyScanner(input, output, defsoutput)
14 scanner.scan()
15 scanner.close()
Jack Jansen87eea882002-08-15 21:48:16 +000016 print "=== Testing definitions output code ==="
17 execfile(defsoutput, {}, {})
Guido van Rossum17448e21995-01-30 11:53:55 +000018 print "=== Done scanning and generating, now importing the generated code... ==="
19 import winsupport
20 print "=== Done. It's up to you to compile it now! ==="
21
22class MyScanner(Scanner):
23
24 def destination(self, type, name, arglist):
25 classname = "Function"
26 listname = "functions"
27 if arglist:
28 t, n, m = arglist[0]
Jack Jansenb81cf9d1995-06-06 13:08:40 +000029 if t in ("WindowPtr", "WindowPeek", "WindowRef") and m == "InMode":
Guido van Rossum17448e21995-01-30 11:53:55 +000030 classname = "Method"
31 listname = "methods"
32 return classname, listname
33
Jack Jansen21f96871998-02-20 16:02:09 +000034 def writeinitialdefs(self):
35 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
Jack Jansen9d799902002-03-24 23:04:18 +000036 self.defsfile.write("false = 0\n")
37 self.defsfile.write("true = 1\n")
Jack Jansen21f96871998-02-20 16:02:09 +000038
Guido van Rossum17448e21995-01-30 11:53:55 +000039 def makeblacklistnames(self):
40 return [
41 'DisposeWindow', # Implied when the object is deleted
42 'CloseWindow',
Jack Jansena05ac601999-12-12 21:41:51 +000043 'SetWindowProperty', # For the moment
44 'GetWindowProperty',
45 'GetWindowPropertySize',
46 'RemoveWindowProperty',
Jack Jansene79dc762000-06-02 21:35:07 +000047 'MacCloseWindow',
Jack Jansen723ad8a2000-12-12 22:10:21 +000048 'GetWindowList', # Don't know whether this is safe...
Jack Jansenb1b78d81999-12-14 15:47:01 +000049 # Constants with funny definitions
50 'kMouseUpOutOfSlop',
Jack Jansen723ad8a2000-12-12 22:10:21 +000051 'kAllWindowClasses',
Guido van Rossum17448e21995-01-30 11:53:55 +000052 ]
Jack Jansene79dc762000-06-02 21:35:07 +000053
54 def makegreylist(self):
55 return [
Jack Jansen74a1e632000-07-14 22:37:27 +000056 ('#if !TARGET_API_MAC_CARBON', [
Jack Jansene79dc762000-06-02 21:35:07 +000057 'GetAuxWin',
58 'GetWindowDataHandle',
59 'SaveOld',
60 'DrawNew',
61 'SetWinColor',
62 'SetDeskCPat',
63 'InitWindows',
64 'InitFloatingWindows',
65 'GetWMgrPort',
66 'GetCWMgrPort',
67 'ValidRgn', # Use versions with Window in their name
68 'ValidRect',
69 'InvalRgn',
70 'InvalRect',
Jack Jansen8d929ae2000-06-21 22:07:06 +000071 'IsValidWindowPtr', # I think this is useless for Python, but not sure...
Jack Jansen0d202b72001-01-09 22:09:31 +000072 'GetWindowZoomFlag', # Not available in Carbon
73 'GetWindowTitleWidth', # Ditto
Jack Jansenf1d7b412001-02-28 23:32:42 +000074 'GetWindowGoAwayFlag',
75 'GetWindowSpareFlag',
Jack Jansen723ad8a2000-12-12 22:10:21 +000076 ]),
Jack Jansen620a7662001-12-18 15:39:38 +000077 ('#if !TARGET_API_MAC_OS8', [
Jack Jansen723ad8a2000-12-12 22:10:21 +000078 'IsWindowUpdatePending',
79 'FindWindowOfClass',
80 'GetFrontWindowOfClass',
81 'ChangeWindowPropertyAttributes',
82 'GetWindowPropertyAttributes',
83 'GetNextWindowOfClass',
84 'ScrollWindowRegion',
85 'ScrollWindowRect',
86 'ChangeWindowAttributes',
87 'ReshapeCustomWindow',
Jack Jansen620a7662001-12-18 15:39:38 +000088 'EnableScreenUpdates',
89 'DisableScreenUpdates',
90 'GetAvailableWindowPositioningBounds',
91 'CreateStandardWindowMenu',
92 'GetSheetWindowParent',
93 'HideSheetWindow',
94 'ShowSheetWindow',
95 'ConstrainWindowToScreen',
96 'GetWindowGreatestAreaDevice',
97 'CopyWindowTitleAsCFString',
98 'SetWindowTitleWithCFString',
99 'CopyWindowAlternateTitle',
100 'SetWindowAlternateTitle',
101 'GetWindowModality',
102 'SetWindowModality',
103 'SetWindowClass',
104 'ReleaseWindow',
105 'RetainWindow',
106 'GetWindowRetainCount',
107 ]),
108 ('#if TARGET_API_MAC_OSX', [
109 'TransitionWindowAndParent',
Jack Jansene79dc762000-06-02 21:35:07 +0000110 ])]
111
Guido van Rossum17448e21995-01-30 11:53:55 +0000112 def makeblacklisttypes(self):
113 return [
114 'ProcPtr',
Jack Jansenb7abb181995-11-15 15:18:47 +0000115 'DragGrayRgnUPP',
Jack Jansen723ad8a2000-12-12 22:10:21 +0000116 'WindowPaintUPP',
Jack Jansena05ac601999-12-12 21:41:51 +0000117 'Collection', # For now, to be done later
Jack Jansen723ad8a2000-12-12 22:10:21 +0000118 'WindowDefSpec', # Too difficult for now
119 'WindowDefSpec_ptr',
Jack Jansen620a7662001-12-18 15:39:38 +0000120 'EventRef', #TBD
Guido van Rossum17448e21995-01-30 11:53:55 +0000121 ]
122
123 def makerepairinstructions(self):
124 return [
125
126 # GetWTitle
127 ([("Str255", "*", "InMode")],
128 [("*", "*", "OutMode")]),
129
130 ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
131 [("InBuffer", "*", "*")]),
132
133 ([("void", "*", "OutMode"), ("long", "*", "InMode"),
134 ("long", "*", "OutMode")],
135 [("VarVarOutBuffer", "*", "InOutMode")]),
136
137 ([("void", "wStorage", "OutMode")],
138 [("NullStorage", "*", "InMode")]),
139
Just van Rossum84fca942002-06-05 17:41:03 +0000140 # match FindWindowOfClass
141 ([("WindowRef", "outWindow", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")],
142 [("ExistingWindowPtr", "*", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")]),
143 # then match CreateNewWindow and CreateWindowFromResource
144 ([("WindowRef", "outWindow", "OutMode")],
145 [("WindowRef", "*", "*")]),
146
Guido van Rossum17448e21995-01-30 11:53:55 +0000147 ([("WindowPtr", "*", "OutMode")],
148 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000149 ([("WindowRef", "*", "OutMode")], # Same, but other style headerfiles
150 [("ExistingWindowPtr", "*", "*")]),
Guido van Rossumea39abd1995-02-28 09:49:02 +0000151
152 ([("WindowPtr", "FrontWindow", "ReturnMode")],
153 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000154 ([("WindowRef", "FrontWindow", "ReturnMode")], # Ditto
155 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen0aee0e62000-08-25 22:17:51 +0000156 ([("WindowPtr", "FrontNonFloatingWindow", "ReturnMode")],
157 [("ExistingWindowPtr", "*", "*")]),
158 ([("WindowRef", "FrontNonFloatingWindow", "ReturnMode")], # Ditto
159 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen723ad8a2000-12-12 22:10:21 +0000160
161 ([("Rect_ptr", "*", "ReturnMode")], # GetWindowXXXState accessors
162 [("void", "*", "ReturnMode")]),
Guido van Rossum17448e21995-01-30 11:53:55 +0000163 ]
164
165if __name__ == "__main__":
166 main()
Guido van Rossumea39abd1995-02-28 09:49:02 +0000167