Mercurial > cpython-lru_cache-weakref
annotate Mac/Modules/list/listsupport.py @ 5817:48b94de85bf3 legacy-trunk
Extensive changes by AMK.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 17 Jul 1997 16:29:42 +0000 |
| parents | cc92fa2cd86b |
| children | 3740ff2ee053 |
| rev | line source |
|---|---|
|
2972
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
1 # This script generates a Python interface for an Apple Macintosh Manager. |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
2 # It uses the "bgen" package to generate C code. |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
3 # The function specifications are generated by scanning the mamager's header file, |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
4 # using the "scantools" package (customized for this particular manager). |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
5 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
6 import string |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
7 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
8 # Declarations that change for each manager |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
9 MACHEADERFILE = 'Lists.h' # The Apple header file |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
10 MODNAME = 'List' # The name of the module |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
11 OBJECTNAME = 'List' # The basic name of the objects used here |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
12 KIND = 'Handle' # Usually 'Ptr' or 'Handle' |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
13 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
14 # The following is *usually* unchanged but may still require tuning |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
15 MODPREFIX = MODNAME # The prefix for module-wide routines |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
16 OBJECTTYPE = "ListRef" # The C type used to represent them |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
17 OBJECTPREFIX = MODPREFIX + 'Obj' # The prefix for object methods |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
18 INPUTFILE = string.lower(MODPREFIX) + 'gen.py' # The file generated by the scanner |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
19 OUTPUTFILE = MODNAME + "module.c" # The file generated by this program |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
20 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
21 from macsupport import * |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
22 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
23 # Create the type objects |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
24 ListRef = OpaqueByValueType("ListRef", "ListObj") |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
25 Cell = Point |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
26 VarOutBufferShortsize = VarHeapOutputBufferType('char', 'short', 's') # (buf, &len) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
27 InBufferShortsize = VarInputBufferType('char', 'short', 's') # (buf, len) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
28 |
|
3499
5f25040fd63e
Replaced various dummy updateRegions by real arguments
Jack Jansen <jack.jansen@cwi.nl>
parents:
2972
diff
changeset
|
29 RgnHandle = OpaqueByValueType("RgnHandle", "ResObj") |
|
2972
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
30 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
31 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
32 includestuff = includestuff + """ |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
33 #include <%s>""" % MACHEADERFILE + """ |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
34 """ |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
35 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
36 class ListMethodGenerator(MethodGenerator): |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
37 """Similar to MethodGenerator, but has self as last argument""" |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
38 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
39 def parseArgumentList(self, args): |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
40 args, a0 = args[:-1], args[-1] |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
41 t0, n0, m0 = a0 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
42 if m0 != InMode: |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
43 raise ValueError, "method's 'self' must be 'InMode'" |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
44 self.itself = Variable(t0, "_self->ob_itself", SelfMode) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
45 FunctionGenerator.parseArgumentList(self, args) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
46 self.argumentList.append(self.itself) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
47 |
|
3815
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
48 getattrHookCode = """{ |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
49 /* XXXX Should we HLock() here?? */ |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
50 if ( strcmp(name, "listFlags") == 0 ) |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
51 return Py_BuildValue("l", (long)(*self->ob_itself)->listFlags & 0xff); |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
52 if ( strcmp(name, "selFlags") == 0 ) |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
53 return Py_BuildValue("l", (long)(*self->ob_itself)->selFlags & 0xff); |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
54 }""" |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
55 |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
56 setattrCode = """ |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
57 static int |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
58 ListObj_setattr(self, name, value) |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
59 ListObject *self; |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
60 char *name; |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
61 PyObject *value; |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
62 { |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
63 long intval; |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
64 |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
65 if ( value == NULL || !PyInt_Check(value) ) |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
66 return -1; |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
67 intval = PyInt_AsLong(value); |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
68 if (strcmp(name, "listFlags") == 0 ) { |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
69 /* XXXX Should we HLock the handle here?? */ |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
70 (*self->ob_itself)->listFlags = intval; |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
71 return 0; |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
72 } |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
73 if (strcmp(name, "selFlags") == 0 ) { |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
74 (*self->ob_itself)->selFlags = intval; |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
75 return 0; |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
76 } |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
77 return -1; |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
78 } |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
79 """ |
|
2972
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
80 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
81 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
82 class MyObjectDefinition(GlobalObjectDefinition): |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
83 def outputCheckNewArg(self): |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
84 Output("""if (itself == NULL) { |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
85 PyErr_SetString(List_Error,"Cannot create null List"); |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
86 return NULL; |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
87 }""") |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
88 def outputFreeIt(self, itselfname): |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
89 Output("LDispose(%s);", itselfname) |
|
3815
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
90 |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
91 def outputGetattrHook(self): |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
92 Output(getattrHookCode) |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
93 |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
94 def outputSetattr(self): |
|
cc92fa2cd86b
Added access to selFlags and listFlags members (both read and write)
Jack Jansen <jack.jansen@cwi.nl>
parents:
3499
diff
changeset
|
95 Output(setattrCode) |
|
2972
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
96 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
97 # From here on it's basically all boiler plate... |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
98 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
99 # Create the generator groups and link them |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
100 module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
101 object = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
102 module.addobject(object) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
103 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
104 # Create the generator classes used to populate the lists |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
105 Function = FunctionGenerator |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
106 Method = ListMethodGenerator |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
107 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
108 # Create and populate the lists |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
109 functions = [] |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
110 methods = [] |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
111 execfile(INPUTFILE) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
112 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
113 # add the populated lists to the generator groups |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
114 # (in a different wordl the scan program would generate this) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
115 for f in functions: module.add(f) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
116 for f in methods: object.add(f) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
117 |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
118 # generate output (open the output file as late as possible) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
119 SetOutputFileName(OUTPUTFILE) |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
120 module.generate() |
|
99945fda719d
Interface to the Mac List Manager.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
121 |
