blob: a79381d3b179abdc6758e5dacb9b688503018ee8 [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',
Jack Jansen6c7e3262002-12-12 10:31:54 +000052 # OS8 only:
53 'GetAuxWin',
54 'GetWindowDataHandle',
55 'SaveOld',
56 'DrawNew',
57 'SetWinColor',
58 'SetDeskCPat',
59 'InitWindows',
60 'InitFloatingWindows',
61 'GetWMgrPort',
62 'GetCWMgrPort',
63 'ValidRgn', # Use versions with Window in their name
64 'ValidRect',
65 'InvalRgn',
66 'InvalRect',
67 'IsValidWindowPtr', # I think this is useless for Python, but not sure...
68 'GetWindowZoomFlag', # Not available in Carbon
69 'GetWindowTitleWidth', # Ditto
70 'GetWindowGoAwayFlag',
71 'GetWindowSpareFlag',
Guido van Rossum17448e21995-01-30 11:53:55 +000072 ]
Jack Jansene79dc762000-06-02 21:35:07 +000073
74 def makegreylist(self):
75 return [
Jack Jansen620a7662001-12-18 15:39:38 +000076 ('#if TARGET_API_MAC_OSX', [
77 'TransitionWindowAndParent',
Jack Jansene79dc762000-06-02 21:35:07 +000078 ])]
79
Guido van Rossum17448e21995-01-30 11:53:55 +000080 def makeblacklisttypes(self):
81 return [
82 'ProcPtr',
Jack Jansenb7abb181995-11-15 15:18:47 +000083 'DragGrayRgnUPP',
Jack Jansen723ad8a2000-12-12 22:10:21 +000084 'WindowPaintUPP',
Jack Jansena05ac601999-12-12 21:41:51 +000085 'Collection', # For now, to be done later
Jack Jansen723ad8a2000-12-12 22:10:21 +000086 'WindowDefSpec', # Too difficult for now
87 'WindowDefSpec_ptr',
Jack Jansen620a7662001-12-18 15:39:38 +000088 'EventRef', #TBD
Guido van Rossum17448e21995-01-30 11:53:55 +000089 ]
90
91 def makerepairinstructions(self):
92 return [
93
94 # GetWTitle
95 ([("Str255", "*", "InMode")],
96 [("*", "*", "OutMode")]),
97
98 ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
99 [("InBuffer", "*", "*")]),
100
101 ([("void", "*", "OutMode"), ("long", "*", "InMode"),
102 ("long", "*", "OutMode")],
103 [("VarVarOutBuffer", "*", "InOutMode")]),
104
105 ([("void", "wStorage", "OutMode")],
106 [("NullStorage", "*", "InMode")]),
107
Just van Rossum84fca942002-06-05 17:41:03 +0000108 # match FindWindowOfClass
109 ([("WindowRef", "outWindow", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")],
110 [("ExistingWindowPtr", "*", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")]),
111 # then match CreateNewWindow and CreateWindowFromResource
112 ([("WindowRef", "outWindow", "OutMode")],
113 [("WindowRef", "*", "*")]),
114
Guido van Rossum17448e21995-01-30 11:53:55 +0000115 ([("WindowPtr", "*", "OutMode")],
116 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000117 ([("WindowRef", "*", "OutMode")], # Same, but other style headerfiles
118 [("ExistingWindowPtr", "*", "*")]),
Guido van Rossumea39abd1995-02-28 09:49:02 +0000119
120 ([("WindowPtr", "FrontWindow", "ReturnMode")],
121 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000122 ([("WindowRef", "FrontWindow", "ReturnMode")], # Ditto
123 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen0aee0e62000-08-25 22:17:51 +0000124 ([("WindowPtr", "FrontNonFloatingWindow", "ReturnMode")],
125 [("ExistingWindowPtr", "*", "*")]),
126 ([("WindowRef", "FrontNonFloatingWindow", "ReturnMode")], # Ditto
127 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen723ad8a2000-12-12 22:10:21 +0000128
129 ([("Rect_ptr", "*", "ReturnMode")], # GetWindowXXXState accessors
130 [("void", "*", "ReturnMode")]),
Guido van Rossum17448e21995-01-30 11:53:55 +0000131 ]
132
133if __name__ == "__main__":
134 main()
Guido van Rossumea39abd1995-02-28 09:49:02 +0000135