blob: 1aefbd3a2a0447dfb63ef3293f0e65e46b3589e0 [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 Jansena53f4eb2003-11-19 16:34:04 +000073
Guido van Rossum17448e21995-01-30 11:53:55 +000074 def makeblacklisttypes(self):
75 return [
76 'ProcPtr',
Jack Jansenb7abb181995-11-15 15:18:47 +000077 'DragGrayRgnUPP',
Jack Jansen723ad8a2000-12-12 22:10:21 +000078 'WindowPaintUPP',
Jack Jansena05ac601999-12-12 21:41:51 +000079 'Collection', # For now, to be done later
Jack Jansen723ad8a2000-12-12 22:10:21 +000080 'WindowDefSpec', # Too difficult for now
81 'WindowDefSpec_ptr',
Jack Jansen620a7662001-12-18 15:39:38 +000082 'EventRef', #TBD
Guido van Rossum17448e21995-01-30 11:53:55 +000083 ]
84
85 def makerepairinstructions(self):
86 return [
87
88 # GetWTitle
89 ([("Str255", "*", "InMode")],
90 [("*", "*", "OutMode")]),
91
92 ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
93 [("InBuffer", "*", "*")]),
94
95 ([("void", "*", "OutMode"), ("long", "*", "InMode"),
96 ("long", "*", "OutMode")],
97 [("VarVarOutBuffer", "*", "InOutMode")]),
98
99 ([("void", "wStorage", "OutMode")],
100 [("NullStorage", "*", "InMode")]),
101
Just van Rossum84fca942002-06-05 17:41:03 +0000102 # match FindWindowOfClass
103 ([("WindowRef", "outWindow", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")],
104 [("ExistingWindowPtr", "*", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")]),
105 # then match CreateNewWindow and CreateWindowFromResource
106 ([("WindowRef", "outWindow", "OutMode")],
107 [("WindowRef", "*", "*")]),
108
Guido van Rossum17448e21995-01-30 11:53:55 +0000109 ([("WindowPtr", "*", "OutMode")],
110 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000111 ([("WindowRef", "*", "OutMode")], # Same, but other style headerfiles
112 [("ExistingWindowPtr", "*", "*")]),
Guido van Rossumea39abd1995-02-28 09:49:02 +0000113
114 ([("WindowPtr", "FrontWindow", "ReturnMode")],
115 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000116 ([("WindowRef", "FrontWindow", "ReturnMode")], # Ditto
117 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen0aee0e62000-08-25 22:17:51 +0000118 ([("WindowPtr", "FrontNonFloatingWindow", "ReturnMode")],
119 [("ExistingWindowPtr", "*", "*")]),
120 ([("WindowRef", "FrontNonFloatingWindow", "ReturnMode")], # Ditto
121 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen723ad8a2000-12-12 22:10:21 +0000122
123 ([("Rect_ptr", "*", "ReturnMode")], # GetWindowXXXState accessors
124 [("void", "*", "ReturnMode")]),
Guido van Rossum17448e21995-01-30 11:53:55 +0000125 ]
126
127if __name__ == "__main__":
128 main()
Guido van Rossumea39abd1995-02-28 09:49:02 +0000129