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