1# Scan an Apple header file, generating a Python file of generator calls.
2
3import sys
4from bgenlocations import TOOLBOXDIR, BGENDIR
5sys.path.append(BGENDIR)
6from scantools import Scanner
7
8LONG = "Events"
9SHORT = "evt"
10OBJECT = "NOTUSED"
11
12def main():
13    input = LONG + ".h"
14    output = SHORT + "gen.py"
15    defsoutput = TOOLBOXDIR + LONG + ".py"
16    scanner = MyScanner(input, output, defsoutput)
17    scanner.scan()
18    scanner.close()
19    print "=== Testing definitions output code ==="
20    execfile(defsoutput, {}, {})
21    print "=== Done scanning and generating, now importing the generated code... ==="
22    exec "import " + SHORT + "support"
23    print "=== Done.  It's up to you to compile it now! ==="
24
25class MyScanner(Scanner):
26
27    def destination(self, type, name, arglist):
28        classname = "Function"
29        listname = "functions"
30        if arglist:
31            t, n, m = arglist[0]
32            # This is non-functional today
33            if t == OBJECT and m == "InMode":
34                classname = "Method"
35                listname = "methods"
36        return classname, listname
37
38    def makeblacklistnames(self):
39        return [
40                "KeyTranslate",
41                "GetEventMask",         # I cannot seem to find this routine...
42                "WaitNextEvent",        # Manually generated because of optional region
43                # Constants with funny definitions
44                "osEvtMessageMask",
45                # OS8 calls
46                'SystemEvent',
47                'SystemTask',
48                'SystemClick',
49                'GetOSEvent',
50                'OSEventAvail',
51                ]
52
53    def makeblacklisttypes(self):
54        return [
55                "EvQElPtr", "QHdrPtr"
56                ]
57
58    def makerepairinstructions(self):
59        return [
60                ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
61                 [("InBuffer", "*", "*")]),
62
63                ([("void", "*", "OutMode"), ("long", "*", "InMode"),
64                                            ("long", "*", "OutMode")],
65                 [("VarVarOutBuffer", "*", "InOutMode")]),
66
67                ([("void", "wStorage", "OutMode")],
68                 [("NullStorage", "*", "InMode")]),
69
70                # GetKeys
71                ([('KeyMap', 'theKeys', 'InMode')],
72                 [('*', '*', 'OutMode')]),
73
74                # GetTicker
75                ([('unsigned long', '*', '*')],
76                 [('unsigned_long', '*', '*')]),
77                ]
78
79if __name__ == "__main__":
80    main()
81