1a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# This script generates a Python interface for an Apple Macintosh Manager. 2a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# It uses the "bgen" package to generate C code. 3a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# The function specifications are generated by scanning the mamager's header file, 4a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# using the "scantools" package (customized for this particular manager). 5a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 6a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenimport string 7a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 8a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# Declarations that change for each manager 9182b5aca27d376b08a2904bed42b751496f932f3Tim PetersMACHEADERFILE = 'Lists.h' # The Apple header file 10182b5aca27d376b08a2904bed42b751496f932f3Tim PetersMODNAME = '_List' # The name of the module 11182b5aca27d376b08a2904bed42b751496f932f3Tim PetersOBJECTNAME = 'List' # The basic name of the objects used here 12182b5aca27d376b08a2904bed42b751496f932f3Tim PetersKIND = 'Handle' # Usually 'Ptr' or 'Handle' 13a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 14a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# The following is *usually* unchanged but may still require tuning 15182b5aca27d376b08a2904bed42b751496f932f3Tim PetersMODPREFIX = 'List' # The prefix for module-wide routines 16182b5aca27d376b08a2904bed42b751496f932f3Tim PetersOBJECTTYPE = "ListHandle" # The C type used to represent them 17182b5aca27d376b08a2904bed42b751496f932f3Tim PetersOBJECTPREFIX = MODPREFIX + 'Obj' # The prefix for object methods 18a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack JansenINPUTFILE = string.lower(MODPREFIX) + 'gen.py' # The file generated by the scanner 19182b5aca27d376b08a2904bed42b751496f932f3Tim PetersOUTPUTFILE = MODNAME + "module.c" # The file generated by this program 20a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 21a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenfrom macsupport import * 22a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 23a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# Create the type objects 2421f96872f20080d5f07a72ea4141fac137ac9b15Jack JansenListHandle = OpaqueByValueType("ListHandle", "ListObj") 25f7d5aa61d34cb7816ead2757860e5a66f7da0dcbJack JansenListRef = ListHandle # Obsolete, but used in Lists.h 26a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack JansenCell = Point 27f7d5aa61d34cb7816ead2757860e5a66f7da0dcbJack JansenListBounds = Rect 28f7d5aa61d34cb7816ead2757860e5a66f7da0dcbJack JansenListBounds_ptr = Rect_ptr 29dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 30dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumListDefSpec = ListDefSpec_ptr = OpaqueType("ListDefSpec", "PyMac_BuildListDefSpec", "PyMac_GetListDefSpec") 31dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 32182b5aca27d376b08a2904bed42b751496f932f3Tim PetersVarOutBufferShortsize = VarHeapOutputBufferType('char', 'short', 's') # (buf, &len) 33182b5aca27d376b08a2904bed42b751496f932f3Tim PetersInBufferShortsize = VarInputBufferType('char', 'short', 's') # (buf, len) 34a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 352b72417da0af053f6efc1b3574361744eb22d2a7Jack JansenRgnHandle = OpaqueByValueType("RgnHandle", "ResObj") 36f7d5aa61d34cb7816ead2757860e5a66f7da0dcbJack JansenDataHandle = OpaqueByValueType("DataHandle", "ResObj") 37a1a0fef2ea9ece5b16f9e6c37800778c64844e69Jack JansenHandle = OpaqueByValueType("Handle", "ResObj") 38f7d5aa61d34cb7816ead2757860e5a66f7da0dcbJack JansenCGrafPtr = OpaqueByValueType("CGrafPtr", "GrafObj") 392168e9d602cffbb6975a11353707a921455c05f7Jack JansenEventModifiers = Type("EventModifiers", "H") 40a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 41a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenincludestuff = includestuff + """ 42fa77e1a1b1ec479600a0f3a1dbc3faf28140d31fJack Jansen#include <Carbon/Carbon.h> 430e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen 440e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen#ifdef USE_TOOLBOX_OBJECT_GLUE 450e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansenextern PyObject *_ListObj_New(ListHandle); 460e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansenextern int _ListObj_Convert(PyObject *, ListHandle *); 470e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen 480e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen#define ListObj_New _ListObj_New 490e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen#define ListObj_Convert _ListObj_Convert 500e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen#endif 510e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen 52a1a0fef2ea9ece5b16f9e6c37800778c64844e69Jack Jansen#define as_List(x) ((ListHandle)x) 53a1a0fef2ea9ece5b16f9e6c37800778c64844e69Jack Jansen#define as_Resource(lh) ((Handle)lh) 54dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 55dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossumstatic ListDefUPP myListDefFunctionUPP; 56dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 57a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen""" 58a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 590e04eecdbf8467cf3fe055e41e96fa48507b998cJack Janseninitstuff = initstuff + """ 60dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossummyListDefFunctionUPP = NewListDefUPP((ListDefProcPtr)myListDefFunction); 61dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 62dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumPyMac_INIT_TOOLBOX_OBJECT_NEW(ListHandle, ListObj_New); 63dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumPyMac_INIT_TOOLBOX_OBJECT_CONVERT(ListHandle, ListObj_Convert); 640e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen""" 650e04eecdbf8467cf3fe055e41e96fa48507b998cJack Jansen 66a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenclass ListMethodGenerator(MethodGenerator): 67182b5aca27d376b08a2904bed42b751496f932f3Tim Peters """Similar to MethodGenerator, but has self as last argument""" 68a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 69182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def parseArgumentList(self, args): 70182b5aca27d376b08a2904bed42b751496f932f3Tim Peters args, a0 = args[:-1], args[-1] 71182b5aca27d376b08a2904bed42b751496f932f3Tim Peters t0, n0, m0 = a0 72182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if m0 != InMode: 73182b5aca27d376b08a2904bed42b751496f932f3Tim Peters raise ValueError, "method's 'self' must be 'InMode'" 74182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.itself = Variable(t0, "_self->ob_itself", SelfMode) 75182b5aca27d376b08a2904bed42b751496f932f3Tim Peters FunctionGenerator.parseArgumentList(self, args) 76182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.argumentList.append(self.itself) 77a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 7896cebde909bbb8034af576d8f31f465bbad90374Jack Jansenclass MyObjectDefinition(PEP253Mixin, GlobalObjectDefinition): 79182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # XXXX Should inherit from Resource 80182b5aca27d376b08a2904bed42b751496f932f3Tim Peters getsetlist = [( 81182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'listFlags', 82182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'return Py_BuildValue("l", (long)GetListFlags(self->ob_itself) & 0xff);', 83182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'if (!PyArg_Parse(v, "B", &(*self->ob_itself)->listFlags)) return -1;', 84182b5aca27d376b08a2904bed42b751496f932f3Tim Peters None, 85182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ), ( 86182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'selFlags', 87182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'return Py_BuildValue("l", (long)GetListSelectionFlags(self->ob_itself) & 0xff);', 88182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'if (!PyArg_Parse(v, "B", &(*self->ob_itself)->selFlags)) return -1;', 89182b5aca27d376b08a2904bed42b751496f932f3Tim Peters None, 90182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ), ( 91182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'cellSize', 92182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'return Py_BuildValue("O&", PyMac_BuildPoint, (*self->ob_itself)->cellSize);', 93182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'if (!PyArg_Parse(v, "O&", PyMac_GetPoint, &(*self->ob_itself)->cellSize)) return -1;', 94182b5aca27d376b08a2904bed42b751496f932f3Tim Peters None 95182b5aca27d376b08a2904bed42b751496f932f3Tim Peters )] 96182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 97182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def outputStructMembers(self): 98182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ObjectDefinition.outputStructMembers(self) 99182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Output("PyObject *ob_ldef_func;") 100182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Output("int ob_must_be_disposed;") 101182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 102182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def outputCheckNewArg(self): 103182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Output("""if (itself == NULL) { 104182b5aca27d376b08a2904bed42b751496f932f3Tim Peters PyErr_SetString(List_Error,"Cannot create null List"); 105182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return NULL; 106182b5aca27d376b08a2904bed42b751496f932f3Tim Peters }""") 107182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 108182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def outputInitStructMembers(self): 109182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ObjectDefinition.outputInitStructMembers(self) 110182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Output("it->ob_ldef_func = NULL;") 111182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Output("it->ob_must_be_disposed = 1;") 112182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Output("SetListRefCon(itself, (long)it);") 113182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 114182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def outputFreeIt(self, itselfname): 115182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Output("Py_XDECREF(self->ob_ldef_func);") 116182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Output("self->ob_ldef_func = NULL;") 117182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Output("SetListRefCon(self->ob_itself, (long)0);") 118182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Output("if (self->ob_must_be_disposed && %s) LDispose(%s);", itselfname, itselfname) 119182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 120a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# From here on it's basically all boiler plate... 121a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 122dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossumfinalstuff = finalstuff + """ 123dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossumstatic void myListDefFunction(SInt16 message, 124dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum Boolean selected, 125dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum Rect *cellRect, 126dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum Cell theCell, 127dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum SInt16 dataOffset, 128dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum SInt16 dataLen, 129182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ListHandle theList) 130dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum{ 131182b5aca27d376b08a2904bed42b751496f932f3Tim Peters PyObject *listDefFunc, *args, *rv=NULL; 132182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ListObject *self; 133182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 134182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self = (ListObject*)GetListRefCon(theList); 135182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if (self == NULL || self->ob_itself != theList) 136182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return; /* nothing we can do */ 137182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listDefFunc = self->ob_ldef_func; 138182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if (listDefFunc == NULL) 139182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return; /* nothing we can do */ 140182b5aca27d376b08a2904bed42b751496f932f3Tim Peters args = Py_BuildValue("hbO&O&hhO", message, 141182b5aca27d376b08a2904bed42b751496f932f3Tim Peters selected, 142182b5aca27d376b08a2904bed42b751496f932f3Tim Peters PyMac_BuildRect, cellRect, 143182b5aca27d376b08a2904bed42b751496f932f3Tim Peters PyMac_BuildPoint, theCell, 144182b5aca27d376b08a2904bed42b751496f932f3Tim Peters dataOffset, 145182b5aca27d376b08a2904bed42b751496f932f3Tim Peters dataLen, 146182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self); 147182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if (args != NULL) { 148182b5aca27d376b08a2904bed42b751496f932f3Tim Peters rv = PyEval_CallObject(listDefFunc, args); 149182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Py_DECREF(args); 150182b5aca27d376b08a2904bed42b751496f932f3Tim Peters } 151182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if (rv == NULL) { 152182b5aca27d376b08a2904bed42b751496f932f3Tim Peters PySys_WriteStderr("error in list definition callback:\\n"); 153182b5aca27d376b08a2904bed42b751496f932f3Tim Peters PyErr_Print(); 154182b5aca27d376b08a2904bed42b751496f932f3Tim Peters } else { 155182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Py_DECREF(rv); 156182b5aca27d376b08a2904bed42b751496f932f3Tim Peters } 157dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum} 158dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum""" 159dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 160a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# Create the generator groups and link them 161a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenmodule = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff) 162a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenobject = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE) 163a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenmodule.addobject(object) 164a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 165a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# Create the generator classes used to populate the lists 166a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack JansenFunction = FunctionGenerator 167a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack JansenMethod = ListMethodGenerator 168a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 169a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# Create and populate the lists 170a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenfunctions = [] 171a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenmethods = [] 172a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenexecfile(INPUTFILE) 173a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 174a1a0fef2ea9ece5b16f9e6c37800778c64844e69Jack Jansen# Function to convert any handle to a list and vv. 1753d6163ad2d2ad255f19fb9a2c643c602b3155728Jack Jansen##f = Function(ListHandle, 'as_List', (Handle, 'h', InMode)) 1763d6163ad2d2ad255f19fb9a2c643c602b3155728Jack Jansenas_List_body = """ 1773d6163ad2d2ad255f19fb9a2c643c602b3155728Jack JansenHandle h; 1783d6163ad2d2ad255f19fb9a2c643c602b3155728Jack JansenListObject *l; 1793d6163ad2d2ad255f19fb9a2c643c602b3155728Jack Jansenif (!PyArg_ParseTuple(_args, "O&", ResObj_Convert, &h)) 180182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return NULL; 1813d6163ad2d2ad255f19fb9a2c643c602b3155728Jack Jansenl = (ListObject *)ListObj_New(as_List(h)); 1823d6163ad2d2ad255f19fb9a2c643c602b3155728Jack Jansenl->ob_must_be_disposed = 0; 183fd064863ebbe90adc24c60df4c3dbf630ec3a6c4Jack Jansen_res = Py_BuildValue("O", l); 184fd064863ebbe90adc24c60df4c3dbf630ec3a6c4Jack Jansenreturn _res; 1853d6163ad2d2ad255f19fb9a2c643c602b3155728Jack Jansen""" 1863d6163ad2d2ad255f19fb9a2c643c602b3155728Jack Jansenf = ManualGenerator("as_List", as_List_body) 1873d6163ad2d2ad255f19fb9a2c643c602b3155728Jack Jansenf.docstring = lambda: "(Resource)->List.\nReturns List object (which is not auto-freed!)" 188a1a0fef2ea9ece5b16f9e6c37800778c64844e69Jack Jansenfunctions.append(f) 189a1a0fef2ea9ece5b16f9e6c37800778c64844e69Jack Jansen 190a1a0fef2ea9ece5b16f9e6c37800778c64844e69Jack Jansenf = Method(Handle, 'as_Resource', (ListHandle, 'lh', InMode)) 191a1a0fef2ea9ece5b16f9e6c37800778c64844e69Jack Jansenmethods.append(f) 192a1a0fef2ea9ece5b16f9e6c37800778c64844e69Jack Jansen 193dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum# Manual generator for CreateCustomList, due to callback ideosyncracies 194dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumCreateCustomList_body = """\ 195dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumRect rView; 196dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumRect dataBounds; 197dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumPoint cellSize; 198dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 199dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumPyObject *listDefFunc; 200dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumListDefSpec theSpec; 201dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumWindowPtr theWindow; 202dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumBoolean drawIt; 203dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumBoolean hasGrow; 204dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumBoolean scrollHoriz; 205dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumBoolean scrollVert; 206dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumListHandle outList; 207dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 208dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossumif (!PyArg_ParseTuple(_args, "O&O&O&(iO)O&bbbb", 209dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum PyMac_GetRect, &rView, 210dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum PyMac_GetRect, &dataBounds, 211dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum PyMac_GetPoint, &cellSize, 212dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum &theSpec.defType, &listDefFunc, 213dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum WinObj_Convert, &theWindow, 214dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum &drawIt, 215dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum &hasGrow, 216dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum &scrollHoriz, 217dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum &scrollVert)) 218182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return NULL; 219dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 220dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 221182b5aca27d376b08a2904bed42b751496f932f3Tim Peters/* Carbon applications use the CreateCustomList API */ 222dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumtheSpec.u.userProc = myListDefFunctionUPP; 223dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumCreateCustomList(&rView, 224dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum &dataBounds, 225dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum cellSize, 226dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum &theSpec, 227dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum theWindow, 228dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum drawIt, 229dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum hasGrow, 230dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum scrollHoriz, 231dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum scrollVert, 232dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum &outList); 233dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 234dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 235dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum_res = ListObj_New(outList); 236dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossumif (_res == NULL) 237182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return NULL; 238dd4830ac1dffd95d1f17e080421483a9010720f6Just van RossumPy_INCREF(listDefFunc); 239dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum((ListObject*)_res)->ob_ldef_func = listDefFunc; 240dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossumreturn _res;\ 241dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum""" 242dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 243dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossumf = ManualGenerator("CreateCustomList", CreateCustomList_body); 244dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossumf.docstring = lambda: "(Rect rView, Rect dataBounds, Point cellSize, ListDefSpec theSpec, WindowPtr theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert) -> (ListHandle outList)" 245dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossummodule.add(f) 246dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 247a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# add the populated lists to the generator groups 248a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# (in a different wordl the scan program would generate this) 249a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenfor f in functions: module.add(f) 250a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenfor f in methods: object.add(f) 251a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen 252dd4830ac1dffd95d1f17e080421483a9010720f6Just van Rossum 253a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansen# generate output (open the output file as late as possible) 254a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack JansenSetOutputFileName(OUTPUTFILE) 255a4b1d0030ef5ea1c45f29fe52048e4470740be68Jack Jansenmodule.generate() 256