winsupport.py revision 32248655ee0c7d6909703a48e4128f4e2f3e4937
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 917448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumMACHEADERFILE = 'Windows.h' # The Apple header file 1017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumMODNAME = 'Win' # The name of the module 1117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumOBJECTNAME = '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 1417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumMODPREFIX = MODNAME # The prefix for module-wide routines 1517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumOBJECTTYPE = OBJECTNAME + 'Ptr' # The C type used to represent them 1617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumOBJECTPREFIX = 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 1917448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumOUTPUTFILE = 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") 52723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen 53a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenPropertyCreator = OSTypeType("PropertyCreator") 54a05ac607d720727bc0d3799b7bea7a81e02ea561Jack JansenPropertyTag = OSTypeType("PropertyTag") 5521f96872f20080d5f07a72ea4141fac137ac9b15Jack Jansen 5617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumincludestuff = includestuff + """ 5717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum#include <%s>""" % MACHEADERFILE + """ 58723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen 59723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen#if !ACCESSOR_CALLS_ARE_FUNCTIONS 6032248655ee0c7d6909703a48e4128f4e2f3e4937Jack Jansen/* Carbon calls that we emulate in classic mode */ 61723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen#define GetWindowSpareFlag(win) (((CWindowPeek)(win))->spareFlag) 62723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen#define GetWindowFromPort(port) ((WindowRef)(port)) 63723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen#define GetWindowPortBounds(win, rectp) (*(rectp) = ((CWindowPeek)(win))->port.portRect) 64723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen#endif 6532248655ee0c7d6909703a48e4128f4e2f3e4937Jack Jansen#if ACCESSOR_CALLS_ARE_FUNCTIONS 6632248655ee0c7d6909703a48e4128f4e2f3e4937Jack Jansen/* Classic calls that we emulate in carbon mode */ 6732248655ee0c7d6909703a48e4128f4e2f3e4937Jack Jansen#define GetWindowUpdateRgn(win, rgn) GetWindowRegion((win), kWindowUpdateRgn, (rgn)) 6832248655ee0c7d6909703a48e4128f4e2f3e4937Jack Jansen#define GetWindowStructureRgn(win, rgn) GetWindowRegion((win), kWindowStructureRgn, (rgn)) 6932248655ee0c7d6909703a48e4128f4e2f3e4937Jack Jansen#define GetWindowContentRgn(win, rgn) GetWindowRegion((win), kWindowContentRgn, (rgn)) 7032248655ee0c7d6909703a48e4128f4e2f3e4937Jack Jansen#endif 71723ad8ae738e02a5b6f6f1d172cf297db1c11b26Jack Jansen 720aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen/* Function to dispose a window, with a "normal" calling sequence */ 730aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansenstatic void 740aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack JansenPyMac_AutoDisposeWindow(WindowPtr w) 750aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen{ 760aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen DisposeWindow(w); 770aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen} 7817448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum""" 7917448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 8017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumfinalstuff = finalstuff + """ 8117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum/* Return the object corresponding to the window, or NULL */ 8217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 8317448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumPyObject * 8417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumWinObj_WhichWindow(w) 8517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum WindowPtr w; 8617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum{ 8717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum PyObject *it; 8817448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 890aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen if (w == NULL) { 9017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum it = Py_None; 910aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen Py_INCREF(it); 920aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen } else { 930aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen it = (PyObject *) GetWRefCon(w); 9480716f0e618cc5689161cea55328e4c8bb1f4b3dJack Jansen if (it == NULL || ((WindowObject *)it)->ob_itself != w || !WinObj_Check(it)) { 950aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen it = WinObj_New(w); 960aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen ((WindowObject *)it)->ob_freeit = NULL; 970aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen } else { 980aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen Py_INCREF(it); 990aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen } 1000aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen } 10117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum return it; 10217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum} 10317448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum""" 10417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 10517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumclass MyObjectDefinition(GlobalObjectDefinition): 10617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum def outputCheckNewArg(self): 10717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum Output("if (itself == NULL) return PyMac_Error(resNotFound);") 1080aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen def outputStructMembers(self): 1090aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen GlobalObjectDefinition.outputStructMembers(self) 1100aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen Output("void (*ob_freeit)(%s ptr);", self.itselftype) 11117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum def outputInitStructMembers(self): 11217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum GlobalObjectDefinition.outputInitStructMembers(self) 11380716f0e618cc5689161cea55328e4c8bb1f4b3dJack Jansen Output("it->ob_freeit = NULL;") 11480716f0e618cc5689161cea55328e4c8bb1f4b3dJack Jansen Output("if (GetWRefCon(itself) == 0)") 11580716f0e618cc5689161cea55328e4c8bb1f4b3dJack Jansen OutLbrace() 11617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum Output("SetWRefCon(itself, (long)it);") 1170aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen Output("it->ob_freeit = PyMac_AutoDisposeWindow;") 11880716f0e618cc5689161cea55328e4c8bb1f4b3dJack Jansen OutRbrace() 11917448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum def outputCheckConvertArg(self): 12017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum OutLbrace("if (DlgObj_Check(v))") 1210aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen Output("*p_itself = DlgObj_ConvertToWindow(v);") 12217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum Output("return 1;") 12317448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum OutRbrace() 12417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum Out(""" 12517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum if (v == Py_None) { *p_itself = NULL; return 1; } 12617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum if (PyInt_Check(v)) { *p_itself = (WindowPtr)PyInt_AsLong(v); return 1; } 12717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum """) 1280aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen def outputCleanupStructMembers(self): 1290aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen Output("if (self->ob_freeit && self->ob_itself)") 1300aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen OutLbrace() 13180716f0e618cc5689161cea55328e4c8bb1f4b3dJack Jansen Output("SetWRefCon(self->ob_itself, 0);") 1320aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen Output("self->ob_freeit(self->ob_itself);") 1330aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen OutRbrace() 1340aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen Output("self->ob_itself = NULL;") 13580716f0e618cc5689161cea55328e4c8bb1f4b3dJack Jansen Output("self->ob_freeit = NULL;") 13687a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen 13787a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen def outputCompare(self): 13887a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen Output() 13987a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen Output("static int %s_compare(self, other)", self.prefix) 14087a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen IndentLevel() 14187a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen Output("%s *self, *other;", self.objecttype) 14287a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen DedentLevel() 14387a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen OutLbrace() 14487a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen Output("if ( self->ob_itself > other->ob_itself ) return 1;") 14587a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen Output("if ( self->ob_itself < other->ob_itself ) return -1;") 14687a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen Output("return 0;") 14787a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen OutRbrace() 14887a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen 14987a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen def outputHash(self): 15087a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen Output() 15187a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen Output("static int %s_hash(self)", self.prefix) 15287a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen IndentLevel() 15387a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen Output("%s *self;", self.objecttype) 15487a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen DedentLevel() 15587a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen OutLbrace() 15687a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen Output("return (int)self->ob_itself;") 15787a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen OutRbrace() 15887a30924d07d0665519c75db93d3addd8a9b1dbfJack Jansen 1590aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen## def outputFreeIt(self, itselfname): 1600aee0e61f8e7b1b112500aa3ae1edb7bcb5e28b1Jack Jansen## Output("DisposeWindow(%s);", itselfname) 16117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# From here on it's basically all boiler plate... 16217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 16317448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# Create the generator groups and link them 16417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossummodule = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff) 16517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumobject = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE) 16617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossummodule.addobject(object) 16717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 16817448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# Create the generator classes used to populate the lists 16917448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumFunction = OSErrFunctionGenerator 17017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumMethod = OSErrMethodGenerator 17117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 17217448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# Create and populate the lists 17317448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumfunctions = [] 17417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossummethods = [] 17517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumexecfile(INPUTFILE) 17617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 1778f0fab78cef6018beafa045df1c29fc89fa423d2Jack Jansen# Add manual routines for converting integer WindowPtr's (as returned by 1788f0fab78cef6018beafa045df1c29fc89fa423d2Jack Jansen# various event routines) and Dialog objects to a WindowObject. 179caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenwhichwin_body = """ 180caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenlong ptr; 181caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen 182caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenif ( !PyArg_ParseTuple(_args, "i", &ptr) ) 183caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen return NULL; 184caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenreturn WinObj_WhichWindow((WindowPtr)ptr); 185caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen""" 186caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen 187caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenf = ManualGenerator("WhichWindow", whichwin_body) 188caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenf.docstring = lambda : "Resolve an integer WindowPtr address to a Window object" 189caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen 190caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansenfunctions.append(f) 191caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen 192330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack Jansen# And add the routines that access the internal bits of a window struct. They 193330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack Jansen# are currently #defined in Windows.h, they will be real routines in Copland 194330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack Jansen# (at which time this execfile can go) 195330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack Jansenexecfile(EDITFILE) 196330f57699fd3e5c22c7f354ea0fb52deb47fa6a7Jack Jansen 19717448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# add the populated lists to the generator groups 19817448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# (in a different wordl the scan program would generate this) 19917448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumfor f in functions: module.add(f) 20017448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossumfor f in methods: object.add(f) 20117448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum 202caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen 203caf7505edc872e1a6dc25b70176227b1d7754e93Jack Jansen 20417448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossum# generate output (open the output file as late as possible) 20517448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van RossumSetOutputFileName(OUTPUTFILE) 20617448e24081eb713ac00d7bcb681f4f0d8abfcbfGuido van Rossummodule.generate() 207