]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/python/contrib/Mac/Modules/list/listscan.py
Inital import
[l4.git] / l4 / pkg / python / contrib / Mac / Modules / list / listscan.py
1 # Scan an Apple header file, generating a Python file of generator calls.
2
3 import sys
4 from bgenlocations import TOOLBOXDIR, BGENDIR
5 sys.path.append(BGENDIR)
6 from scantools import Scanner
7
8 LONG = "Lists"
9 SHORT = "list"
10 OBJECT = "ListHandle"
11
12 def 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
25 class MyScanner(Scanner):
26
27     def destination(self, type, name, arglist):
28         classname = "Function"
29         listname = "functions"
30         if arglist:
31             t, n, m = arglist[-1]
32             # This is non-functional today
33             if t in ('ListHandle', 'ListRef') and m == "InMode":
34                 classname = "Method"
35                 listname = "methods"
36         return classname, listname
37
38     def makeblacklistnames(self):
39         return [
40                 "LDispose",             # Done by removing the object
41                 "LSearch",              # We don't want to handle procs just yet
42                 "CreateCustomList",  # done manually
43                 "SetListDefinitionProc",
44
45                 # These have funny argument/return values
46                 "GetListViewBounds",
47                 "GetListCellIndent",
48                 "GetListCellSize",
49                 "GetListVisibleCells",
50                 "GetListClickLocation",
51                 "GetListMouseLocation",
52                 "GetListDataBounds",
53                 "SetListLastClick",
54                 ]
55
56     def makeblacklisttypes(self):
57         return [
58                 "ListClickLoopUPP",  # Too difficult for now
59                 "ListDefSpecPtr", # later
60                 ]
61
62     def makerepairinstructions(self):
63         return [
64                 ([('ListBounds_ptr', '*', 'InMode')],
65                  [('Rect_ptr', '*', 'InMode')]),
66
67                 ([("Cell", "theCell", "OutMode")],
68                  [("Cell", "theCell", "InOutMode")]),
69
70                 ([("void_ptr", "*", "InMode"), ("short", "*", "InMode")],
71                  [("InBufferShortsize", "*", "*")]),
72
73                 ([("void", "*", "OutMode"), ("short", "*", "OutMode")],
74                  [("VarOutBufferShortsize", "*", "InOutMode")]),
75
76                 # SetListCellIndent doesn't have const
77                 ([("Point", "indent", "OutMode")],
78                  [("Point_ptr", "indent", "InMode")]),
79
80                 ]
81
82     def writeinitialdefs(self):
83         self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
84
85
86 if __name__ == "__main__":
87     main()