1 | # Scan an Apple header file, generating a Python file of generator calls.
|
---|
2 | import sys
|
---|
3 | from bgenlocations import TOOLBOXDIR, BGENDIR
|
---|
4 | sys.path.append(BGENDIR)
|
---|
5 |
|
---|
6 | from scantools import Scanner
|
---|
7 |
|
---|
8 | def main():
|
---|
9 | input = "MacWindows.h"
|
---|
10 | output = "wingen.py"
|
---|
11 | defsoutput = TOOLBOXDIR + "Windows.py"
|
---|
12 | scanner = MyScanner(input, output, defsoutput)
|
---|
13 | scanner.scan()
|
---|
14 | scanner.close()
|
---|
15 | print "=== Testing definitions output code ==="
|
---|
16 | execfile(defsoutput, {}, {})
|
---|
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 |
|
---|
21 | class 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]
|
---|
28 | if t in ("WindowPtr", "WindowPeek", "WindowRef") and m == "InMode":
|
---|
29 | classname = "Method"
|
---|
30 | listname = "methods"
|
---|
31 | return classname, listname
|
---|
32 |
|
---|
33 | def writeinitialdefs(self):
|
---|
34 | self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
|
---|
35 | self.defsfile.write("false = 0\n")
|
---|
36 | self.defsfile.write("true = 1\n")
|
---|
37 | self.defsfile.write("kWindowNoConstrainAttribute = 0x80000000\n")
|
---|
38 |
|
---|
39 | def makeblacklistnames(self):
|
---|
40 | return [
|
---|
41 | 'DisposeWindow', # Implied when the object is deleted
|
---|
42 | 'CloseWindow',
|
---|
43 | 'SetWindowProperty', # For the moment
|
---|
44 | 'GetWindowProperty',
|
---|
45 | 'GetWindowPropertySize',
|
---|
46 | 'RemoveWindowProperty',
|
---|
47 | 'MacCloseWindow',
|
---|
48 | 'GetWindowList', # Don't know whether this is safe...
|
---|
49 | # Constants with funny definitions
|
---|
50 | 'kMouseUpOutOfSlop',
|
---|
51 | 'kAllWindowClasses',
|
---|
52 | 'kWindowNoConstrainAttribute',
|
---|
53 | # OS8 only:
|
---|
54 | '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',
|
---|
68 | 'IsValidWindowPtr', # I think this is useless for Python, but not sure...
|
---|
69 | 'GetWindowZoomFlag', # Not available in Carbon
|
---|
70 | 'GetWindowTitleWidth', # Ditto
|
---|
71 | 'GetWindowGoAwayFlag',
|
---|
72 | 'GetWindowSpareFlag',
|
---|
73 | ]
|
---|
74 |
|
---|
75 | def makeblacklisttypes(self):
|
---|
76 | return [
|
---|
77 | 'ProcPtr',
|
---|
78 | 'DragGrayRgnUPP',
|
---|
79 | 'WindowPaintUPP',
|
---|
80 | 'Collection', # For now, to be done later
|
---|
81 | 'WindowDefSpec', # Too difficult for now
|
---|
82 | 'WindowDefSpec_ptr',
|
---|
83 | 'EventRef', #TBD
|
---|
84 | ]
|
---|
85 |
|
---|
86 | def makerepairinstructions(self):
|
---|
87 | return [
|
---|
88 |
|
---|
89 | # GetWTitle
|
---|
90 | ([("Str255", "*", "InMode")],
|
---|
91 | [("*", "*", "OutMode")]),
|
---|
92 |
|
---|
93 | ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
|
---|
94 | [("InBuffer", "*", "*")]),
|
---|
95 |
|
---|
96 | ([("void", "*", "OutMode"), ("long", "*", "InMode"),
|
---|
97 | ("long", "*", "OutMode")],
|
---|
98 | [("VarVarOutBuffer", "*", "InOutMode")]),
|
---|
99 |
|
---|
100 | ([("void", "wStorage", "OutMode")],
|
---|
101 | [("NullStorage", "*", "InMode")]),
|
---|
102 |
|
---|
103 | # match FindWindowOfClass
|
---|
104 | ([("WindowRef", "outWindow", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")],
|
---|
105 | [("ExistingWindowPtr", "*", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")]),
|
---|
106 | # then match CreateNewWindow and CreateWindowFromResource
|
---|
107 | ([("WindowRef", "outWindow", "OutMode")],
|
---|
108 | [("WindowRef", "*", "*")]),
|
---|
109 |
|
---|
110 | ([("WindowPtr", "*", "OutMode")],
|
---|
111 | [("ExistingWindowPtr", "*", "*")]),
|
---|
112 | ([("WindowRef", "*", "OutMode")], # Same, but other style headerfiles
|
---|
113 | [("ExistingWindowPtr", "*", "*")]),
|
---|
114 |
|
---|
115 | ([("WindowPtr", "FrontWindow", "ReturnMode")],
|
---|
116 | [("ExistingWindowPtr", "*", "*")]),
|
---|
117 | ([("WindowRef", "FrontWindow", "ReturnMode")], # Ditto
|
---|
118 | [("ExistingWindowPtr", "*", "*")]),
|
---|
119 | ([("WindowPtr", "FrontNonFloatingWindow", "ReturnMode")],
|
---|
120 | [("ExistingWindowPtr", "*", "*")]),
|
---|
121 | ([("WindowRef", "FrontNonFloatingWindow", "ReturnMode")], # Ditto
|
---|
122 | [("ExistingWindowPtr", "*", "*")]),
|
---|
123 |
|
---|
124 | ([("Rect_ptr", "*", "ReturnMode")], # GetWindowXXXState accessors
|
---|
125 | [("void", "*", "ReturnMode")]),
|
---|
126 | ]
|
---|
127 |
|
---|
128 | if __name__ == "__main__":
|
---|
129 | main()
|
---|