blob: 0052fad60c0600d313b01a6e847e15336e63691c [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()
16 print "=== Done scanning and generating, now importing the generated code... ==="
17 import winsupport
18 print "=== Done. It's up to you to compile it now! ==="
19
20class MyScanner(Scanner):
21
22 def destination(self, type, name, arglist):
23 classname = "Function"
24 listname = "functions"
25 if arglist:
26 t, n, m = arglist[0]
Jack Jansenb81cf9d1995-06-06 13:08:40 +000027 if t in ("WindowPtr", "WindowPeek", "WindowRef") and m == "InMode":
Guido van Rossum17448e21995-01-30 11:53:55 +000028 classname = "Method"
29 listname = "methods"
30 return classname, listname
31
Jack Jansen21f96871998-02-20 16:02:09 +000032 def writeinitialdefs(self):
33 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
Jack Jansen9d799902002-03-24 23:04:18 +000034 self.defsfile.write("false = 0\n")
35 self.defsfile.write("true = 1\n")
Jack Jansen21f96871998-02-20 16:02:09 +000036
Guido van Rossum17448e21995-01-30 11:53:55 +000037 def makeblacklistnames(self):
38 return [
39 'DisposeWindow', # Implied when the object is deleted
40 'CloseWindow',
Jack Jansena05ac601999-12-12 21:41:51 +000041 'SetWindowProperty', # For the moment
42 'GetWindowProperty',
43 'GetWindowPropertySize',
44 'RemoveWindowProperty',
Jack Jansene79dc762000-06-02 21:35:07 +000045 'MacCloseWindow',
Jack Jansen723ad8a2000-12-12 22:10:21 +000046 'GetWindowList', # Don't know whether this is safe...
Jack Jansenb1b78d81999-12-14 15:47:01 +000047 # Constants with funny definitions
48 'kMouseUpOutOfSlop',
Jack Jansen723ad8a2000-12-12 22:10:21 +000049 'kAllWindowClasses',
Guido van Rossum17448e21995-01-30 11:53:55 +000050 ]
Jack Jansene79dc762000-06-02 21:35:07 +000051
52 def makegreylist(self):
53 return [
Jack Jansen74a1e632000-07-14 22:37:27 +000054 ('#if !TARGET_API_MAC_CARBON', [
Jack Jansene79dc762000-06-02 21:35:07 +000055 'GetAuxWin',
56 'GetWindowDataHandle',
57 'SaveOld',
58 'DrawNew',
59 'SetWinColor',
60 'SetDeskCPat',
61 'InitWindows',
62 'InitFloatingWindows',
63 'GetWMgrPort',
64 'GetCWMgrPort',
65 'ValidRgn', # Use versions with Window in their name
66 'ValidRect',
67 'InvalRgn',
68 'InvalRect',
Jack Jansen8d929ae2000-06-21 22:07:06 +000069 'IsValidWindowPtr', # I think this is useless for Python, but not sure...
Jack Jansen0d202b72001-01-09 22:09:31 +000070 'GetWindowZoomFlag', # Not available in Carbon
71 'GetWindowTitleWidth', # Ditto
Jack Jansenf1d7b412001-02-28 23:32:42 +000072 'GetWindowGoAwayFlag',
73 'GetWindowSpareFlag',
Jack Jansen723ad8a2000-12-12 22:10:21 +000074 ]),
Jack Jansen620a7662001-12-18 15:39:38 +000075 ('#if !TARGET_API_MAC_OS8', [
Jack Jansen723ad8a2000-12-12 22:10:21 +000076 'IsWindowUpdatePending',
77 'FindWindowOfClass',
78 'GetFrontWindowOfClass',
79 'ChangeWindowPropertyAttributes',
80 'GetWindowPropertyAttributes',
81 'GetNextWindowOfClass',
82 'ScrollWindowRegion',
83 'ScrollWindowRect',
84 'ChangeWindowAttributes',
85 'ReshapeCustomWindow',
Jack Jansen620a7662001-12-18 15:39:38 +000086 'EnableScreenUpdates',
87 'DisableScreenUpdates',
88 'GetAvailableWindowPositioningBounds',
89 'CreateStandardWindowMenu',
90 'GetSheetWindowParent',
91 'HideSheetWindow',
92 'ShowSheetWindow',
93 'ConstrainWindowToScreen',
94 'GetWindowGreatestAreaDevice',
95 'CopyWindowTitleAsCFString',
96 'SetWindowTitleWithCFString',
97 'CopyWindowAlternateTitle',
98 'SetWindowAlternateTitle',
99 'GetWindowModality',
100 'SetWindowModality',
101 'SetWindowClass',
102 'ReleaseWindow',
103 'RetainWindow',
104 'GetWindowRetainCount',
105 ]),
106 ('#if TARGET_API_MAC_OSX', [
107 'TransitionWindowAndParent',
Jack Jansene79dc762000-06-02 21:35:07 +0000108 ])]
109
Guido van Rossum17448e21995-01-30 11:53:55 +0000110 def makeblacklisttypes(self):
111 return [
112 'ProcPtr',
Jack Jansenb7abb181995-11-15 15:18:47 +0000113 'DragGrayRgnUPP',
Jack Jansen723ad8a2000-12-12 22:10:21 +0000114 'WindowPaintUPP',
Jack Jansena05ac601999-12-12 21:41:51 +0000115 'Collection', # For now, to be done later
Jack Jansen723ad8a2000-12-12 22:10:21 +0000116 'WindowDefSpec', # Too difficult for now
117 'WindowDefSpec_ptr',
Jack Jansen620a7662001-12-18 15:39:38 +0000118 'EventRef', #TBD
Guido van Rossum17448e21995-01-30 11:53:55 +0000119 ]
120
121 def makerepairinstructions(self):
122 return [
123
124 # GetWTitle
125 ([("Str255", "*", "InMode")],
126 [("*", "*", "OutMode")]),
127
128 ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
129 [("InBuffer", "*", "*")]),
130
131 ([("void", "*", "OutMode"), ("long", "*", "InMode"),
132 ("long", "*", "OutMode")],
133 [("VarVarOutBuffer", "*", "InOutMode")]),
134
135 ([("void", "wStorage", "OutMode")],
136 [("NullStorage", "*", "InMode")]),
137
Just van Rossum84fca942002-06-05 17:41:03 +0000138 # match FindWindowOfClass
139 ([("WindowRef", "outWindow", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")],
140 [("ExistingWindowPtr", "*", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")]),
141 # then match CreateNewWindow and CreateWindowFromResource
142 ([("WindowRef", "outWindow", "OutMode")],
143 [("WindowRef", "*", "*")]),
144
Guido van Rossum17448e21995-01-30 11:53:55 +0000145 ([("WindowPtr", "*", "OutMode")],
146 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000147 ([("WindowRef", "*", "OutMode")], # Same, but other style headerfiles
148 [("ExistingWindowPtr", "*", "*")]),
Guido van Rossumea39abd1995-02-28 09:49:02 +0000149
150 ([("WindowPtr", "FrontWindow", "ReturnMode")],
151 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000152 ([("WindowRef", "FrontWindow", "ReturnMode")], # Ditto
153 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen0aee0e62000-08-25 22:17:51 +0000154 ([("WindowPtr", "FrontNonFloatingWindow", "ReturnMode")],
155 [("ExistingWindowPtr", "*", "*")]),
156 ([("WindowRef", "FrontNonFloatingWindow", "ReturnMode")], # Ditto
157 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen723ad8a2000-12-12 22:10:21 +0000158
159 ([("Rect_ptr", "*", "ReturnMode")], # GetWindowXXXState accessors
160 [("void", "*", "ReturnMode")]),
Guido van Rossum17448e21995-01-30 11:53:55 +0000161 ]
162
163if __name__ == "__main__":
164 main()
Guido van Rossumea39abd1995-02-28 09:49:02 +0000165