blob: 82f44418c0625fff3e7b3a57f3e3308344fe2bff [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
4BGENDIR=os.path.join(sys.prefix, ':Tools:bgen:bgen')
5sys.path.append(BGENDIR)
Jack Jansen46d9e791996-04-12 16:29:23 +00006from bgenlocations import TOOLBOXDIR
Guido van Rossum17448e21995-01-30 11:53:55 +00007
8from scantools import Scanner
9
10def main():
Jack Jansen21f96871998-02-20 16:02:09 +000011 input = "MacWindows.h"
Guido van Rossum17448e21995-01-30 11:53:55 +000012 output = "wingen.py"
Jack Jansen46d9e791996-04-12 16:29:23 +000013 defsoutput = TOOLBOXDIR + "Windows.py"
Guido van Rossum17448e21995-01-30 11:53:55 +000014 scanner = MyScanner(input, output, defsoutput)
15 scanner.scan()
16 scanner.close()
17 print "=== Done scanning and generating, now importing the generated code... ==="
18 import winsupport
19 print "=== Done. It's up to you to compile it now! ==="
20
21class MyScanner(Scanner):
22
23 def destination(self, type, name, arglist):
24 classname = "Function"
25 listname = "functions"
26 if arglist:
27 t, n, m = arglist[0]
Jack Jansenb81cf9d1995-06-06 13:08:40 +000028 if t in ("WindowPtr", "WindowPeek", "WindowRef") and m == "InMode":
Guido van Rossum17448e21995-01-30 11:53:55 +000029 classname = "Method"
30 listname = "methods"
31 return classname, listname
32
Jack Jansen21f96871998-02-20 16:02:09 +000033 def writeinitialdefs(self):
34 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
35
Guido van Rossum17448e21995-01-30 11:53:55 +000036 def makeblacklistnames(self):
37 return [
38 'DisposeWindow', # Implied when the object is deleted
39 'CloseWindow',
Jack Jansena05ac601999-12-12 21:41:51 +000040 'SetWindowProperty', # For the moment
41 'GetWindowProperty',
42 'GetWindowPropertySize',
43 'RemoveWindowProperty',
Jack Jansene79dc762000-06-02 21:35:07 +000044 'MacCloseWindow',
Jack Jansen723ad8a2000-12-12 22:10:21 +000045 'GetWindowList', # Don't know whether this is safe...
Jack Jansenb1b78d81999-12-14 15:47:01 +000046 # Constants with funny definitions
47 'kMouseUpOutOfSlop',
Jack Jansen723ad8a2000-12-12 22:10:21 +000048 'kAllWindowClasses',
Guido van Rossum17448e21995-01-30 11:53:55 +000049 ]
Jack Jansene79dc762000-06-02 21:35:07 +000050
51 def makegreylist(self):
52 return [
Jack Jansen74a1e632000-07-14 22:37:27 +000053 ('#if !TARGET_API_MAC_CARBON', [
Jack Jansene79dc762000-06-02 21:35:07 +000054 'GetAuxWin',
55 'GetWindowDataHandle',
56 'SaveOld',
57 'DrawNew',
58 'SetWinColor',
59 'SetDeskCPat',
60 'InitWindows',
61 'InitFloatingWindows',
62 'GetWMgrPort',
63 'GetCWMgrPort',
64 'ValidRgn', # Use versions with Window in their name
65 'ValidRect',
66 'InvalRgn',
67 'InvalRect',
Jack Jansen8d929ae2000-06-21 22:07:06 +000068 'IsValidWindowPtr', # I think this is useless for Python, but not sure...
Jack Jansen0d202b72001-01-09 22:09:31 +000069 'GetWindowZoomFlag', # Not available in Carbon
70 'GetWindowTitleWidth', # Ditto
Jack Jansenf1d7b412001-02-28 23:32:42 +000071 'GetWindowGoAwayFlag',
72 'GetWindowSpareFlag',
Jack Jansen723ad8a2000-12-12 22:10:21 +000073 ]),
Jack Jansen620a7662001-12-18 15:39:38 +000074 ('#if !TARGET_API_MAC_OS8', [
Jack Jansen723ad8a2000-12-12 22:10:21 +000075 'IsWindowUpdatePending',
76 'FindWindowOfClass',
77 'GetFrontWindowOfClass',
78 'ChangeWindowPropertyAttributes',
79 'GetWindowPropertyAttributes',
80 'GetNextWindowOfClass',
81 'ScrollWindowRegion',
82 'ScrollWindowRect',
83 'ChangeWindowAttributes',
84 'ReshapeCustomWindow',
Jack Jansen620a7662001-12-18 15:39:38 +000085 'EnableScreenUpdates',
86 'DisableScreenUpdates',
87 'GetAvailableWindowPositioningBounds',
88 'CreateStandardWindowMenu',
89 'GetSheetWindowParent',
90 'HideSheetWindow',
91 'ShowSheetWindow',
92 'ConstrainWindowToScreen',
93 'GetWindowGreatestAreaDevice',
94 'CopyWindowTitleAsCFString',
95 'SetWindowTitleWithCFString',
96 'CopyWindowAlternateTitle',
97 'SetWindowAlternateTitle',
98 'GetWindowModality',
99 'SetWindowModality',
100 'SetWindowClass',
101 'ReleaseWindow',
102 'RetainWindow',
103 'GetWindowRetainCount',
104 ]),
105 ('#if TARGET_API_MAC_OSX', [
106 'TransitionWindowAndParent',
Jack Jansene79dc762000-06-02 21:35:07 +0000107 ])]
108
Guido van Rossum17448e21995-01-30 11:53:55 +0000109 def makeblacklisttypes(self):
110 return [
111 'ProcPtr',
Jack Jansenb7abb181995-11-15 15:18:47 +0000112 'DragGrayRgnUPP',
Jack Jansen723ad8a2000-12-12 22:10:21 +0000113 'WindowPaintUPP',
Jack Jansena05ac601999-12-12 21:41:51 +0000114 'Collection', # For now, to be done later
Jack Jansen723ad8a2000-12-12 22:10:21 +0000115 'WindowDefSpec', # Too difficult for now
116 'WindowDefSpec_ptr',
Jack Jansen620a7662001-12-18 15:39:38 +0000117 'EventRef', #TBD
Guido van Rossum17448e21995-01-30 11:53:55 +0000118 ]
119
120 def makerepairinstructions(self):
121 return [
122
123 # GetWTitle
124 ([("Str255", "*", "InMode")],
125 [("*", "*", "OutMode")]),
126
127 ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
128 [("InBuffer", "*", "*")]),
129
130 ([("void", "*", "OutMode"), ("long", "*", "InMode"),
131 ("long", "*", "OutMode")],
132 [("VarVarOutBuffer", "*", "InOutMode")]),
133
134 ([("void", "wStorage", "OutMode")],
135 [("NullStorage", "*", "InMode")]),
136
137 ([("WindowPtr", "*", "OutMode")],
138 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000139 ([("WindowRef", "*", "OutMode")], # Same, but other style headerfiles
140 [("ExistingWindowPtr", "*", "*")]),
Guido van Rossumea39abd1995-02-28 09:49:02 +0000141
142 ([("WindowPtr", "FrontWindow", "ReturnMode")],
143 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000144 ([("WindowRef", "FrontWindow", "ReturnMode")], # Ditto
145 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen0aee0e62000-08-25 22:17:51 +0000146 ([("WindowPtr", "FrontNonFloatingWindow", "ReturnMode")],
147 [("ExistingWindowPtr", "*", "*")]),
148 ([("WindowRef", "FrontNonFloatingWindow", "ReturnMode")], # Ditto
149 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen723ad8a2000-12-12 22:10:21 +0000150
151 ([("Rect_ptr", "*", "ReturnMode")], # GetWindowXXXState accessors
152 [("void", "*", "ReturnMode")]),
Guido van Rossum17448e21995-01-30 11:53:55 +0000153 ]
154
155if __name__ == "__main__":
156 main()
Guido van Rossumea39abd1995-02-28 09:49:02 +0000157