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