blob: 6b08c00195a1363e0d9d9bc1b7345395fd53bb3f [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 Jansenda6081f2003-12-03 23:20:13 +000038 self.defsfile.write("kWindowNoConstrainAttribute = 0x80000000\n")
Jack Jansen21f96871998-02-20 16:02:09 +000039
Guido van Rossum17448e21995-01-30 11:53:55 +000040 def makeblacklistnames(self):
41 return [
42 'DisposeWindow', # Implied when the object is deleted
43 'CloseWindow',
Jack Jansena05ac601999-12-12 21:41:51 +000044 'SetWindowProperty', # For the moment
45 'GetWindowProperty',
46 'GetWindowPropertySize',
47 'RemoveWindowProperty',
Jack Jansene79dc762000-06-02 21:35:07 +000048 'MacCloseWindow',
Jack Jansen723ad8a2000-12-12 22:10:21 +000049 'GetWindowList', # Don't know whether this is safe...
Jack Jansenb1b78d81999-12-14 15:47:01 +000050 # Constants with funny definitions
51 'kMouseUpOutOfSlop',
Jack Jansen723ad8a2000-12-12 22:10:21 +000052 'kAllWindowClasses',
Jack Jansenda6081f2003-12-03 23:20:13 +000053 'kWindowNoConstrainAttribute',
Jack Jansen6c7e3262002-12-12 10:31:54 +000054 # OS8 only:
55 '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',
69 'IsValidWindowPtr', # I think this is useless for Python, but not sure...
70 'GetWindowZoomFlag', # Not available in Carbon
71 'GetWindowTitleWidth', # Ditto
72 'GetWindowGoAwayFlag',
73 'GetWindowSpareFlag',
Guido van Rossum17448e21995-01-30 11:53:55 +000074 ]
Jack Jansena53f4eb2003-11-19 16:34:04 +000075
Guido van Rossum17448e21995-01-30 11:53:55 +000076 def makeblacklisttypes(self):
77 return [
78 'ProcPtr',
Jack Jansenb7abb181995-11-15 15:18:47 +000079 'DragGrayRgnUPP',
Jack Jansen723ad8a2000-12-12 22:10:21 +000080 'WindowPaintUPP',
Jack Jansena05ac601999-12-12 21:41:51 +000081 'Collection', # For now, to be done later
Jack Jansen723ad8a2000-12-12 22:10:21 +000082 'WindowDefSpec', # Too difficult for now
83 'WindowDefSpec_ptr',
Jack Jansen620a7662001-12-18 15:39:38 +000084 'EventRef', #TBD
Guido van Rossum17448e21995-01-30 11:53:55 +000085 ]
86
87 def makerepairinstructions(self):
88 return [
89
90 # GetWTitle
91 ([("Str255", "*", "InMode")],
92 [("*", "*", "OutMode")]),
93
94 ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
95 [("InBuffer", "*", "*")]),
96
97 ([("void", "*", "OutMode"), ("long", "*", "InMode"),
98 ("long", "*", "OutMode")],
99 [("VarVarOutBuffer", "*", "InOutMode")]),
100
101 ([("void", "wStorage", "OutMode")],
102 [("NullStorage", "*", "InMode")]),
103
Just van Rossum84fca942002-06-05 17:41:03 +0000104 # match FindWindowOfClass
105 ([("WindowRef", "outWindow", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")],
106 [("ExistingWindowPtr", "*", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")]),
107 # then match CreateNewWindow and CreateWindowFromResource
108 ([("WindowRef", "outWindow", "OutMode")],
109 [("WindowRef", "*", "*")]),
110
Guido van Rossum17448e21995-01-30 11:53:55 +0000111 ([("WindowPtr", "*", "OutMode")],
112 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000113 ([("WindowRef", "*", "OutMode")], # Same, but other style headerfiles
114 [("ExistingWindowPtr", "*", "*")]),
Guido van Rossumea39abd1995-02-28 09:49:02 +0000115
116 ([("WindowPtr", "FrontWindow", "ReturnMode")],
117 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000118 ([("WindowRef", "FrontWindow", "ReturnMode")], # Ditto
119 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen0aee0e62000-08-25 22:17:51 +0000120 ([("WindowPtr", "FrontNonFloatingWindow", "ReturnMode")],
121 [("ExistingWindowPtr", "*", "*")]),
122 ([("WindowRef", "FrontNonFloatingWindow", "ReturnMode")], # Ditto
123 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen723ad8a2000-12-12 22:10:21 +0000124
125 ([("Rect_ptr", "*", "ReturnMode")], # GetWindowXXXState accessors
126 [("void", "*", "ReturnMode")]),
Guido van Rossum17448e21995-01-30 11:53:55 +0000127 ]
128
129if __name__ == "__main__":
130 main()
Guido van Rossumea39abd1995-02-28 09:49:02 +0000131