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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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