117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# This script generates a Python interface for an Apple Macintosh Manager.
217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# It uses the "bgen" package to generate C code.
317448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# The function specifications are generated by scanning the mamager's header file,
417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# using the "scantools" package (customized for this particular manager).
517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumimport string
717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
817448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# Declarations that change for each manager
9182b5aca27d376b08a2904bed42b751496f932f3Tim PetersMACHEADERFILE = 'Windows.h'             # The Apple header file
10182b5aca27d376b08a2904bed42b751496f932f3Tim PetersMODNAME = '_Win'                                # The name of the module
11182b5aca27d376b08a2904bed42b751496f932f3Tim PetersOBJECTNAME = 'Window'                   # The basic name of the objects used here
1217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
1317448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# The following is *usually* unchanged but may still require tuning
14182b5aca27d376b08a2904bed42b751496f932f3Tim PetersMODPREFIX = 'Win'                       # The prefix for module-wide routines
15182b5aca27d376b08a2904bed42b751496f932f3Tim PetersOBJECTTYPE = OBJECTNAME + 'Ptr'         # The C type used to represent them
16182b5aca27d376b08a2904bed42b751496f932f3Tim PetersOBJECTPREFIX = MODPREFIX + 'Obj'        # The prefix for object methods
1717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumINPUTFILE = string.lower(MODPREFIX) + 'gen.py' # The file generated by the scanner
18330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack JansenEDITFILE = string.lower(MODPREFIX) + 'edit.py' # The manual definitions
19182b5aca27d376b08a2904bed42b751496f932f3Tim PetersOUTPUTFILE = MODNAME + "module.c"       # The file generated by this program
2017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
2117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumfrom macsupport import *
2217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
2317448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# Create the type objects
2417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
2517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumWindowPtr = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX)
26b81cf9d61c71f9b5949b9424cec1f59ac4a426e8Jack JansenWindowRef = WindowPtr
2717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumWindowPeek = OpaqueByValueType("WindowPeek", OBJECTPREFIX)
2817448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumWindowPeek.passInput = lambda name: "(WindowPeek)(%s)" % name
29b7abb18cd99e348ab2f9f7ea85d72158684319a7Jack JansenCGrafPtr = OpaqueByValueType("CGrafPtr", "GrafObj")
30b7abb18cd99e348ab2f9f7ea85d72158684319a7Jack JansenGrafPtr = OpaqueByValueType("GrafPtr", "GrafObj")
3117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
32723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack JansenDragReference = OpaqueByValueType("DragReference", "DragObj")
33723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen
34b7abb18cd99e348ab2f9f7ea85d72158684319a7Jack JansenRgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
35330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack JansenPicHandle = OpaqueByValueType("PicHandle", "ResObj")
368f0fab78cef6018beafa045df1c29fc89fa423d2Jack JansenWCTabHandle = OpaqueByValueType("WCTabHandle", "ResObj")
378f0fab78cef6018beafa045df1c29fc89fa423d2Jack JansenAuxWinHandle = OpaqueByValueType("AuxWinHandle", "ResObj")
388f0fab78cef6018beafa045df1c29fc89fa423d2Jack JansenPixPatHandle = OpaqueByValueType("PixPatHandle", "ResObj")
39a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenAliasHandle = OpaqueByValueType("AliasHandle", "ResObj")
40a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenIconRef = OpaqueByValueType("IconRef", "ResObj")
4117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
420b13e7c1531351452703d6b9770194e53a3d3f69Jack JansenWindowRegionCode = Type("WindowRegionCode", "H")
43a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenWindowClass = Type("WindowClass", "l")
44a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenWindowAttributes = Type("WindowAttributes", "l")
45a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenWindowPositionMethod = Type("WindowPositionMethod", "l")
46a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenWindowTransitionEffect = Type("WindowTransitionEffect", "l")
47a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenWindowTransitionAction = Type("WindowTransitionAction", "l")
48a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenRGBColor = OpaqueType("RGBColor", "QdRGB")
49723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack JansenRGBColor_ptr = RGBColor
50723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack JansenScrollWindowOptions = Type("ScrollWindowOptions", "l")
51723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack JansenWindowPartCode = Type("WindowPartCode", "h")
52620a7667ebb2ebd31a22349c20e66bad3a8980f9Jack JansenWindowDefPartCode = Type("WindowDefPartCode", "h")
53620a7667ebb2ebd31a22349c20e66bad3a8980f9Jack JansenWindowModality = Type("WindowModality", "l")
54620a7667ebb2ebd31a22349c20e66bad3a8980f9Jack JansenGDHandle = OpaqueByValueType("GDHandle", "ResObj")
55620a7667ebb2ebd31a22349c20e66bad3a8980f9Jack JansenWindowConstrainOptions = Type("WindowConstrainOptions", "l")
56723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen
57a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenPropertyCreator = OSTypeType("PropertyCreator")
58a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenPropertyTag = OSTypeType("PropertyTag")
5921f96872f20080d5f07a72ea4141fac137ac9b15Jack Jansen
6017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumincludestuff = includestuff + """
61fa77e1a1b1ec479600a0f3a1dbc3faf28140d31fJack Jansen#include <Carbon/Carbon.h>
62723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen
630e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen#ifdef USE_TOOLBOX_OBJECT_GLUE
640e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansenextern PyObject *_WinObj_New(WindowRef);
650e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansenextern PyObject *_WinObj_WhichWindow(WindowRef);
660e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansenextern int _WinObj_Convert(PyObject *, WindowRef *);
670e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen
680e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen#define WinObj_New _WinObj_New
690e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen#define WinObj_WhichWindow _WinObj_WhichWindow
700e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen#define WinObj_Convert _WinObj_Convert
710e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen#endif
720e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen
7332248655ee0c7d6909703a48e4128f4e2f3e4937Jack Jansen/* Classic calls that we emulate in carbon mode */
7432248655ee0c7d6909703a48e4128f4e2f3e4937Jack Jansen#define GetWindowUpdateRgn(win, rgn) GetWindowRegion((win), kWindowUpdateRgn, (rgn))
7532248655ee0c7d6909703a48e4128f4e2f3e4937Jack Jansen#define GetWindowStructureRgn(win, rgn) GetWindowRegion((win), kWindowStructureRgn, (rgn))
7632248655ee0c7d6909703a48e4128f4e2f3e4937Jack Jansen#define GetWindowContentRgn(win, rgn) GetWindowRegion((win), kWindowContentRgn, (rgn))
77723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen
780aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen/* Function to dispose a window, with a "normal" calling sequence */
790aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansenstatic void
800aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack JansenPyMac_AutoDisposeWindow(WindowPtr w)
810aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen{
82182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        DisposeWindow(w);
830aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen}
8417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum"""
8517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
8617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumfinalstuff = finalstuff + """
8717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum/* Return the object corresponding to the window, or NULL */
8817448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
8917448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumPyObject *
90fa77e1a1b1ec479600a0f3a1dbc3faf28140d31fJack JansenWinObj_WhichWindow(WindowPtr w)
9117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum{
92182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        PyObject *it;
93182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
94182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        if (w == NULL) {
95182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                it = Py_None;
96182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                Py_INCREF(it);
97182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        } else {
98182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                it = (PyObject *) GetWRefCon(w);
99182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                if (it == NULL || !IsPointerValid((Ptr)it) || ((WindowObject *)it)->ob_itself != w || !WinObj_Check(it)) {
100182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                        it = WinObj_New(w);
101182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                        ((WindowObject *)it)->ob_freeit = NULL;
102182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                } else {
103182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                        Py_INCREF(it);
104182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                }
105182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        }
106182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return it;
10717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum}
10817448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum"""
10917448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
1100e04eecdbf8467cf3fe055e41e96fa48507b998cJack Janseninitstuff = initstuff + """
111182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        PyMac_INIT_TOOLBOX_OBJECT_NEW(WindowPtr, WinObj_New);
112182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        PyMac_INIT_TOOLBOX_OBJECT_NEW(WindowPtr, WinObj_WhichWindow);
113182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        PyMac_INIT_TOOLBOX_OBJECT_CONVERT(WindowPtr, WinObj_Convert);
1140e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen"""
1150e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen
11696cebde909bbb8034af576d8f31f465bbad90374Jack Jansenclass MyObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
117182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def outputCheckNewArg(self):
118182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("if (itself == NULL) return PyMac_Error(resNotFound);")
119182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("/* XXXX Or should we use WhichWindow code here? */")
120182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def outputStructMembers(self):
121182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        GlobalObjectDefinition.outputStructMembers(self)
122182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("void (*ob_freeit)(%s ptr);", self.itselftype)
123182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def outputInitStructMembers(self):
124182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        GlobalObjectDefinition.outputInitStructMembers(self)
125182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("it->ob_freeit = NULL;")
126182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("if (GetWRefCon(itself) == 0)")
127182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutLbrace()
128182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("SetWRefCon(itself, (long)it);")
129182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("it->ob_freeit = PyMac_AutoDisposeWindow;")
130182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutRbrace()
131182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def outputCheckConvertArg(self):
132182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Out("""
133182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        if (v == Py_None) { *p_itself = NULL; return 1; }
134182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        if (PyInt_Check(v)) { *p_itself = (WindowPtr)PyInt_AsLong(v); return 1; }
135182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        """)
136182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutLbrace()
137182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("DialogRef dlg;")
138182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutLbrace("if (DlgObj_Convert(v, &dlg) && dlg)")
139182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("*p_itself = GetDialogWindow(dlg);")
140182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("return 1;")
141182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutRbrace()
142182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("PyErr_Clear();")
143182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutRbrace()
144182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def outputCleanupStructMembers(self):
145182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("if (self->ob_freeit && self->ob_itself)")
146182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutLbrace()
147182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("SetWRefCon(self->ob_itself, 0);")
148182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("self->ob_freeit(self->ob_itself);")
149182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutRbrace()
150182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("self->ob_itself = NULL;")
151182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("self->ob_freeit = NULL;")
152182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
153182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def outputCompare(self):
154182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output()
155182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("static int %s_compare(%s *self, %s *other)", self.prefix, self.objecttype, self.objecttype)
156182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutLbrace()
157182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("if ( self->ob_itself > other->ob_itself ) return 1;")
158182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("if ( self->ob_itself < other->ob_itself ) return -1;")
159182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("return 0;")
160182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutRbrace()
161182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
162182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def outputHash(self):
163182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output()
164182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("static int %s_hash(%s *self)", self.prefix, self.objecttype)
165182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutLbrace()
166182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("return (int)self->ob_itself;")
167182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutRbrace()
168182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
169182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def outputRepr(self):
170182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output()
171182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("static PyObject * %s_repr(%s *self)", self.prefix, self.objecttype)
172182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutLbrace()
173182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("char buf[100];")
174182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("""sprintf(buf, "<Window object at 0x%%8.8x for 0x%%8.8x>", (unsigned)self, (unsigned)self->ob_itself);""")
175182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        Output("return PyString_FromString(buf);")
176182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        OutRbrace()
177182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
178182b5aca27d376b08a2904bed42b751496f932f3Tim Peters##      def outputFreeIt(self, itselfname):
179182b5aca27d376b08a2904bed42b751496f932f3Tim Peters##              Output("DisposeWindow(%s);", itselfname)
18017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# From here on it's basically all boiler plate...
18117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
18217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# Create the generator groups and link them
18317448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossummodule = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
18417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumobject = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE)
18517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossummodule.addobject(object)
18617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
18717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# Create the generator classes used to populate the lists
188b3be216b41a4755556a887baa6ab440279fbe1dcJack JansenFunction = OSErrWeakLinkFunctionGenerator
189b3be216b41a4755556a887baa6ab440279fbe1dcJack JansenMethod = OSErrWeakLinkMethodGenerator
19017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
19117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# Create and populate the lists
19217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumfunctions = []
19317448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossummethods = []
19417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumexecfile(INPUTFILE)
19517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
1968f0fab78cef6018beafa045df1c29fc89fa423d2Jack Jansen# Add manual routines for converting integer WindowPtr's (as returned by
1978f0fab78cef6018beafa045df1c29fc89fa423d2Jack Jansen# various event routines)  and Dialog objects to a WindowObject.
198caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenwhichwin_body = """
199caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenlong ptr;
200caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen
201caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenif ( !PyArg_ParseTuple(_args, "i", &ptr) )
202182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return NULL;
203fd064863ebbe90adc24c60df4c3dbf630ec3a6c4Jack Jansen_res = WinObj_WhichWindow((WindowPtr)ptr);
204fd064863ebbe90adc24c60df4c3dbf630ec3a6c4Jack Jansenreturn _res;
205caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen"""
206caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen
207caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenf = ManualGenerator("WhichWindow", whichwin_body)
208caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenf.docstring = lambda : "Resolve an integer WindowPtr address to a Window object"
209caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen
210caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenfunctions.append(f)
211caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen
212330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack Jansen# And add the routines that access the internal bits of a window struct. They
213330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack Jansen# are currently #defined in Windows.h, they will be real routines in Copland
214330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack Jansen# (at which time this execfile can go)
215330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack Jansenexecfile(EDITFILE)
216330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack Jansen
21717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# add the populated lists to the generator groups
21817448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# (in a different wordl the scan program would generate this)
21917448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumfor f in functions: module.add(f)
22017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumfor f in methods: object.add(f)
22117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum
222caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen
223caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen
22417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# generate output (open the output file as late as possible)
22517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumSetOutputFileName(OUTPUTFILE)
22617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossummodule.generate()
227