summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>1995-08-14 11:46:24 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>1995-08-14 11:46:24 (GMT)
commita4b1d0030ef5ea1c45f29fe52048e4470740be68 (patch)
tree8b410579aecd7d816c0d6c64660a815efd202b1d
parentf33a69f2739a2ad7968c0cada7577cbe130602b4 (diff)
downloadcpython-a4b1d0030ef5ea1c45f29fe52048e4470740be68.zip
cpython-a4b1d0030ef5ea1c45f29fe52048e4470740be68.tar.gz
cpython-a4b1d0030ef5ea1c45f29fe52048e4470740be68.tar.bz2
Interface to the Mac List Manager.
-rw-r--r--Mac/Lib/test/tlist.py79
-rw-r--r--Mac/Lib/toolbox/Lists.py15
-rw-r--r--Mac/Modules/list/Listmodule.c638
-rw-r--r--Mac/Modules/list/listgen.py160
-rw-r--r--Mac/Modules/list/listscan.py73
-rw-r--r--Mac/Modules/list/listsupport.py84
6 files changed, 1049 insertions, 0 deletions
diff --git a/Mac/Lib/test/tlist.py b/Mac/Lib/test/tlist.py
new file mode 100644
index 0000000..bf483e1
--- /dev/null
+++ b/Mac/Lib/test/tlist.py
@@ -0,0 +1,79 @@
+# Test List module.
+# Draw a window with all the files in the current folder.
+# double-clicking will change folder.
+#
+# This test expects Win, Evt and FrameWork (and anything used by those)
+# to work.
+
+from FrameWork import *
+import Win
+import Qd
+import List
+import os
+
+class TestList(Application):
+ def __init__(self):
+ os.chdir('Moes:')
+ self.makemenubar()
+ self.makewindow()
+
+ def makewindow(self):
+ r = (40, 40, 400, 300)
+ w = Win.NewWindow(r, "List test", 1, 0, -1, 1, 0x55555555)
+ r2 = (0, 0, 345, 245)
+ self.list = List.LNew(r2, (0, 0, 1, 1), (0,0), 0, w, 0, 1, 1, 1)
+ self.filllist()
+ w.DrawGrowIcon()
+ self.win = w
+
+ def makeusermenus(self):
+ self.filemenu = m = Menu(self.menubar, "File")
+ self.quititem = MenuItem(m, "Quit", "Q", self.quit)
+
+ def quit(self, *args):
+ raise self
+
+ def do_about(self, id, item, window, event):
+ EasyDialogs.Message("""Test the List Manager interface.
+ Double-click on a folder to change directory""")
+
+ def do_activateEvt(self, *args):
+ self.list.LActivate(1) # XXXX Wrong...
+
+ def do_update(self, *args):
+ print 'LUPDATE'
+ self.list.LUpdate()
+
+ def do_inContent(self, partcode, window, event):
+ (what, message, when, where, modifiers) = event
+ Qd.SetPort(window)
+ local = Qd.GlobalToLocal(where)
+ print 'CLICK', where, '->', local
+ dclick = self.list.LClick(local, modifiers)
+ if dclick:
+ h, v = self.list.LLastClick()
+ file = self.list.LGetCell(1000, (h, v))
+ os.chdir(file)
+ self.filllist()
+
+ def filllist(self):
+ """Fill the list with the contents of the current directory"""
+ l = self.list
+ l.LSetDrawingMode(0)
+ l.LDelRow(0, 0)
+ contents = os.listdir(':')
+ print contents
+ l.LAddRow(len(contents), 0)
+ for i in range(len(contents)):
+ l.LSetCell(contents[i], (0, i))
+ l.LSetDrawingMode(1)
+ l.LUpdate()
+
+
+def main():
+ App = TestList()
+ App.mainloop()
+
+if __name__ == '__main__':
+ main()
+
diff --git a/Mac/Lib/toolbox/Lists.py b/Mac/Lib/toolbox/Lists.py
new file mode 100644
index 0000000..79a5f73
--- /dev/null
+++ b/Mac/Lib/toolbox/Lists.py
@@ -0,0 +1,15 @@
+# Generated from 'Sap:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Lists.h'
+
+lDoVAutoscroll = 2
+lDoHAutoscroll = 1
+lOnlyOne = -128
+lExtendDrag = 64
+lNoDisjoint = 32
+lNoExtend = 16
+lNoRect = 8
+lUseSense = 4
+lNoNilHilite = 2
+lInitMsg = 0
+lDrawMsg = 1
+lHiliteMsg = 2
+lCloseMsg = 3
diff --git a/Mac/Modules/list/Listmodule.c b/Mac/Modules/list/Listmodule.c
new file mode 100644
index 0000000..928a9a5
--- /dev/null
+++ b/Mac/Modules/list/Listmodule.c
@@ -0,0 +1,638 @@
+
+/* ========================== Module List =========================== */
+
+#include "Python.h"
+
+
+
+#define SystemSevenOrLater 1
+
+#include "macglue.h"
+#include <Memory.h>
+#include <Dialogs.h>
+#include <Menus.h>
+#include <Controls.h>
+
+extern PyObject *ResObj_New(Handle);
+extern int ResObj_Convert(PyObject *, Handle *);
+
+extern PyObject *WinObj_New(WindowPtr);
+extern int WinObj_Convert(PyObject *, WindowPtr *);
+
+extern PyObject *DlgObj_New(DialogPtr);
+extern int DlgObj_Convert(PyObject *, DialogPtr *);
+extern PyTypeObject Dialog_Type;
+#define DlgObj_Check(x) ((x)->ob_type == &Dialog_Type)
+
+extern PyObject *MenuObj_New(MenuHandle);
+extern int MenuObj_Convert(PyObject *, MenuHandle *);
+
+extern PyObject *CtlObj_New(ControlHandle);
+extern int CtlObj_Convert(PyObject *, ControlHandle *);
+
+extern PyObject *WinObj_WhichWindow(WindowPtr);
+
+#include <Lists.h>
+
+static PyObject *List_Error;
+
+/* ------------------------ Object type List ------------------------ */
+
+PyTypeObject List_Type;
+
+#define ListObj_Check(x) ((x)->ob_type == &List_Type)
+
+typedef struct ListObject {
+ PyObject_HEAD
+ ListRef ob_itself;
+} ListObject;
+
+PyObject *ListObj_New(itself)
+ ListRef itself;
+{
+ ListObject *it;
+ if (itself == NULL) {
+ PyErr_SetString(List_Error,"Cannot create null List");
+ return NULL;
+ }
+ it = PyObject_NEW(ListObject, &List_Type);
+ if (it == NULL) return NULL;
+ it->ob_itself = itself;
+ return (PyObject *)it;
+}
+ListObj_Convert(v, p_itself)
+ PyObject *v;
+ ListRef *p_itself;
+{
+ if (!ListObj_Check(v))
+ {
+ PyErr_SetString(PyExc_TypeError, "List required");
+ return 0;
+ }
+ *p_itself = ((ListObject *)v)->ob_itself;
+ return 1;
+}
+
+static void ListObj_dealloc(self)
+ ListObject *self;
+{
+ LDispose(self->ob_itself);
+ PyMem_DEL(self);
+}
+
+static PyObject *ListObj_LAddColumn(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ short _rv;
+ short count;
+ short colNum;
+ if (!PyArg_ParseTuple(_args, "hh",
+ &count,
+ &colNum))
+ return NULL;
+ _rv = LAddColumn(count,
+ colNum,
+ _self->ob_itself);
+ _res = Py_BuildValue("h",
+ _rv);
+ return _res;
+}
+
+static PyObject *ListObj_LAddRow(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ short _rv;
+ short count;
+ short rowNum;
+ if (!PyArg_ParseTuple(_args, "hh",
+ &count,
+ &rowNum))
+ return NULL;
+ _rv = LAddRow(count,
+ rowNum,
+ _self->ob_itself);
+ _res = Py_BuildValue("h",
+ _rv);
+ return _res;
+}
+
+static PyObject *ListObj_LDelColumn(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ short count;
+ short colNum;
+ if (!PyArg_ParseTuple(_args, "hh",
+ &count,
+ &colNum))
+ return NULL;
+ LDelColumn(count,
+ colNum,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyObject *ListObj_LDelRow(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ short count;
+ short rowNum;
+ if (!PyArg_ParseTuple(_args, "hh",
+ &count,
+ &rowNum))
+ return NULL;
+ LDelRow(count,
+ rowNum,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyObject *ListObj_LGetSelect(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ Boolean _rv;
+ Boolean next;
+ Point theCell;
+ if (!PyArg_ParseTuple(_args, "bO&",
+ &next,
+ PyMac_GetPoint, &theCell))
+ return NULL;
+ _rv = LGetSelect(next,
+ &theCell,
+ _self->ob_itself);
+ _res = Py_BuildValue("bO&",
+ _rv,
+ PyMac_BuildPoint, theCell);
+ return _res;
+}
+
+static PyObject *ListObj_LLastClick(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ Point _rv;
+ if (!PyArg_ParseTuple(_args, ""))
+ return NULL;
+ _rv = LLastClick(_self->ob_itself);
+ _res = Py_BuildValue("O&",
+ PyMac_BuildPoint, _rv);
+ return _res;
+}
+
+static PyObject *ListObj_LNextCell(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ Boolean _rv;
+ Boolean hNext;
+ Boolean vNext;
+ Point theCell;
+ if (!PyArg_ParseTuple(_args, "bbO&",
+ &hNext,
+ &vNext,
+ PyMac_GetPoint, &theCell))
+ return NULL;
+ _rv = LNextCell(hNext,
+ vNext,
+ &theCell,
+ _self->ob_itself);
+ _res = Py_BuildValue("bO&",
+ _rv,
+ PyMac_BuildPoint, theCell);
+ return _res;
+}
+
+static PyObject *ListObj_LSize(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ short listWidth;
+ short listHeight;
+ if (!PyArg_ParseTuple(_args, "hh",
+ &listWidth,
+ &listHeight))
+ return NULL;
+ LSize(listWidth,
+ listHeight,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyObject *ListObj_LSetDrawingMode(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ Boolean drawIt;
+ if (!PyArg_ParseTuple(_args, "b",
+ &drawIt))
+ return NULL;
+ LSetDrawingMode(drawIt,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyObject *ListObj_LScroll(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ short dCols;
+ short dRows;
+ if (!PyArg_ParseTuple(_args, "hh",
+ &dCols,
+ &dRows))
+ return NULL;
+ LScroll(dCols,
+ dRows,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyObject *ListObj_LAutoScroll(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ if (!PyArg_ParseTuple(_args, ""))
+ return NULL;
+ LAutoScroll(_self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyObject *ListObj_LUpdate(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ if (!PyArg_ParseTuple(_args, ""))
+ return NULL;
+ LUpdate((*_self->ob_itself)->port->visRgn,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyObject *ListObj_LActivate(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ Boolean act;
+ if (!PyArg_ParseTuple(_args, "b",
+ &act))
+ return NULL;
+ LActivate(act,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyObject *ListObj_LCellSize(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ Point cSize;
+ if (!PyArg_ParseTuple(_args, "O&",
+ PyMac_GetPoint, &cSize))
+ return NULL;
+ LCellSize(cSize,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyObject *ListObj_LClick(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ Boolean _rv;
+ Point pt;
+ short modifiers;
+ if (!PyArg_ParseTuple(_args, "O&h",
+ PyMac_GetPoint, &pt,
+ &modifiers))
+ return NULL;
+ _rv = LClick(pt,
+ modifiers,
+ _self->ob_itself);
+ _res = Py_BuildValue("b",
+ _rv);
+ return _res;
+}
+
+static PyObject *ListObj_LAddToCell(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ char *dataPtr__in__;
+ short dataPtr__len__;
+ int dataPtr__in_len__;
+ Point theCell;
+ if (!PyArg_ParseTuple(_args, "s#O&",
+ &dataPtr__in__, &dataPtr__in_len__,
+ PyMac_GetPoint, &theCell))
+ return NULL;
+ dataPtr__len__ = dataPtr__in_len__;
+ LAddToCell(dataPtr__in__, dataPtr__len__,
+ theCell,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ dataPtr__error__: ;
+ return _res;
+}
+
+static PyObject *ListObj_LClrCell(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ Point theCell;
+ if (!PyArg_ParseTuple(_args, "O&",
+ PyMac_GetPoint, &theCell))
+ return NULL;
+ LClrCell(theCell,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyObject *ListObj_LGetCell(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ char *dataPtr__out__;
+ short dataPtr__len__;
+ int dataPtr__in_len__;
+ Point theCell;
+ if (!PyArg_ParseTuple(_args, "iO&",
+ &dataPtr__in_len__,
+ PyMac_GetPoint, &theCell))
+ return NULL;
+ if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
+ {
+ PyErr_NoMemory();
+ goto dataPtr__error__;
+ }
+ dataPtr__len__ = dataPtr__in_len__;
+ LGetCell(dataPtr__out__, &dataPtr__len__,
+ theCell,
+ _self->ob_itself);
+ _res = Py_BuildValue("s#",
+ dataPtr__out__, (int)dataPtr__len__);
+ free(dataPtr__out__);
+ dataPtr__error__: ;
+ return _res;
+}
+
+static PyObject *ListObj_LRect(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ Rect cellRect;
+ Point theCell;
+ if (!PyArg_ParseTuple(_args, "O&",
+ PyMac_GetPoint, &theCell))
+ return NULL;
+ LRect(&cellRect,
+ theCell,
+ _self->ob_itself);
+ _res = Py_BuildValue("O&",
+ PyMac_BuildRect, &cellRect);
+ return _res;
+}
+
+static PyObject *ListObj_LSetCell(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ char *dataPtr__in__;
+ short dataPtr__len__;
+ int dataPtr__in_len__;
+ Point theCell;
+ if (!PyArg_ParseTuple(_args, "s#O&",
+ &dataPtr__in__, &dataPtr__in_len__,
+ PyMac_GetPoint, &theCell))
+ return NULL;
+ dataPtr__len__ = dataPtr__in_len__;
+ LSetCell(dataPtr__in__, dataPtr__len__,
+ theCell,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ dataPtr__error__: ;
+ return _res;
+}
+
+static PyObject *ListObj_LSetSelect(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ Boolean setIt;
+ Point theCell;
+ if (!PyArg_ParseTuple(_args, "bO&",
+ &setIt,
+ PyMac_GetPoint, &theCell))
+ return NULL;
+ LSetSelect(setIt,
+ theCell,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyObject *ListObj_LDraw(_self, _args)
+ ListObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ Point theCell;
+ if (!PyArg_ParseTuple(_args, "O&",
+ PyMac_GetPoint, &theCell))
+ return NULL;
+ LDraw(theCell,
+ _self->ob_itself);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;
+}
+
+static PyMethodDef ListObj_methods[] = {
+ {"LAddColumn", (PyCFunction)ListObj_LAddColumn, 1,
+ "(short count, short colNum) -> (short _rv)"},
+ {"LAddRow", (PyCFunction)ListObj_LAddRow, 1,
+ "(short count, short rowNum) -> (short _rv)"},
+ {"LDelColumn", (PyCFunction)ListObj_LDelColumn, 1,
+ "(short count, short colNum) -> None"},
+ {"LDelRow", (PyCFunction)ListObj_LDelRow, 1,
+ "(short count, short rowNum) -> None"},
+ {"LGetSelect", (PyCFunction)ListObj_LGetSelect, 1,
+ "(Boolean next, Point theCell) -> (Boolean _rv, Point theCell)"},
+ {"LLastClick", (PyCFunction)ListObj_LLastClick, 1,
+ "() -> (Point _rv)"},
+ {"LNextCell", (PyCFunction)ListObj_LNextCell, 1,
+ "(Boolean hNext, Boolean vNext, Point theCell) -> (Boolean _rv, Point theCell)"},
+ {"LSize", (PyCFunction)ListObj_LSize, 1,
+ "(short listWidth, short listHeight) -> None"},
+ {"LSetDrawingMode", (PyCFunction)ListObj_LSetDrawingMode, 1,
+ "(Boolean drawIt) -> None"},
+ {"LScroll", (PyCFunction)ListObj_LScroll, 1,
+ "(short dCols, short dRows) -> None"},
+ {"LAutoScroll", (PyCFunction)ListObj_LAutoScroll, 1,
+ "() -> None"},
+ {"LUpdate", (PyCFunction)ListObj_LUpdate, 1,
+ "() -> None"},
+ {"LActivate", (PyCFunction)ListObj_LActivate, 1,
+ "(Boolean act) -> None"},
+ {"LCellSize", (PyCFunction)ListObj_LCellSize, 1,
+ "(Point cSize) -> None"},
+ {"LClick", (PyCFunction)ListObj_LClick, 1,
+ "(Point pt, short modifiers) -> (Boolean _rv)"},
+ {"LAddToCell", (PyCFunction)ListObj_LAddToCell, 1,
+ "(Buffer dataPtr, Point theCell) -> None"},
+ {"LClrCell", (PyCFunction)ListObj_LClrCell, 1,
+ "(Point theCell) -> None"},
+ {"LGetCell", (PyCFunction)ListObj_LGetCell, 1,
+ "(Buffer dataPtr, Point theCell) -> (Buffer dataPtr)"},
+ {"LRect", (PyCFunction)ListObj_LRect, 1,
+ "(Point theCell) -> (Rect cellRect)"},
+ {"LSetCell", (PyCFunction)ListObj_LSetCell, 1,
+ "(Buffer dataPtr, Point theCell) -> None"},
+ {"LSetSelect", (PyCFunction)ListObj_LSetSelect, 1,
+ "(Boolean setIt, Point theCell) -> None"},
+ {"LDraw", (PyCFunction)ListObj_LDraw, 1,
+ "(Point theCell) -> None"},
+ {NULL, NULL, 0}
+};
+
+PyMethodChain ListObj_chain = { ListObj_methods, NULL };
+
+static PyObject *ListObj_getattr(self, name)
+ ListObject *self;
+ char *name;
+{
+ return Py_FindMethodInChain(&ListObj_chain, (PyObject *)self, name);
+}
+
+#define ListObj_setattr NULL
+
+PyTypeObject List_Type = {
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, /*ob_size*/
+ "List", /*tp_name*/
+ sizeof(ListObject), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ /* methods */
+ (destructor) ListObj_dealloc, /*tp_dealloc*/
+ 0, /*tp_print*/
+ (getattrfunc) ListObj_getattr, /*tp_getattr*/
+ (setattrfunc) ListObj_setattr, /*tp_setattr*/
+};
+
+/* ---------------------- End object type List ---------------------- */
+
+
+static PyObject *List_LNew(_self, _args)
+ PyObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+ ListRef _rv;
+ Rect rView;
+ Rect dataBounds;
+ Point cSize;
+ short theProc;
+ WindowPtr theWindow;
+ Boolean drawIt;
+ Boolean hasGrow;
+ Boolean scrollHoriz;
+ Boolean scrollVert;
+ if (!PyArg_ParseTuple(_args, "O&O&O&hO&bbbb",
+ PyMac_GetRect, &rView,
+ PyMac_GetRect, &dataBounds,
+ PyMac_GetPoint, &cSize,
+ &theProc,
+ WinObj_Convert, &theWindow,
+ &drawIt,
+ &hasGrow,
+ &scrollHoriz,
+ &scrollVert))
+ return NULL;
+ _rv = LNew(&rView,
+ &dataBounds,
+ cSize,
+ theProc,
+ theWindow,
+ drawIt,
+ hasGrow,
+ scrollHoriz,
+ scrollVert);
+ _res = Py_BuildValue("O&",
+ ListObj_New, _rv);
+ return _res;
+}
+
+static PyMethodDef List_methods[] = {
+ {"LNew", (PyCFunction)List_LNew, 1,
+ "(Rect rView, Rect dataBounds, Point cSize, short theProc, WindowPtr theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert) -> (ListRef _rv)"},
+ {NULL, NULL, 0}
+};
+
+
+
+
+void initList()
+{
+ PyObject *m;
+ PyObject *d;
+
+
+
+
+ m = Py_InitModule("List", List_methods);
+ d = PyModule_GetDict(m);
+ List_Error = PyMac_GetOSErrException();
+ if (List_Error == NULL ||
+ PyDict_SetItemString(d, "Error", List_Error) != 0)
+ Py_FatalError("can't initialize List.Error");
+}
+
+/* ======================== End module List ========================= */
+
diff --git a/Mac/Modules/list/listgen.py b/Mac/Modules/list/listgen.py
new file mode 100644
index 0000000..6189e7a
--- /dev/null
+++ b/Mac/Modules/list/listgen.py
@@ -0,0 +1,160 @@
+# Generated from 'Sap:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Lists.h'
+
+f = Function(ListRef, 'LNew',
+ (Rect_ptr, 'rView', InMode),
+ (Rect_ptr, 'dataBounds', InMode),
+ (Point, 'cSize', InMode),
+ (short, 'theProc', InMode),
+ (WindowRef, 'theWindow', InMode),
+ (Boolean, 'drawIt', InMode),
+ (Boolean, 'hasGrow', InMode),
+ (Boolean, 'scrollHoriz', InMode),
+ (Boolean, 'scrollVert', InMode),
+)
+functions.append(f)
+
+f = Method(short, 'LAddColumn',
+ (short, 'count', InMode),
+ (short, 'colNum', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(short, 'LAddRow',
+ (short, 'count', InMode),
+ (short, 'rowNum', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LDelColumn',
+ (short, 'count', InMode),
+ (short, 'colNum', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LDelRow',
+ (short, 'count', InMode),
+ (short, 'rowNum', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(Boolean, 'LGetSelect',
+ (Boolean, 'next', InMode),
+ (Cell, 'theCell', InOutMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(Cell, 'LLastClick',
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(Boolean, 'LNextCell',
+ (Boolean, 'hNext', InMode),
+ (Boolean, 'vNext', InMode),
+ (Cell, 'theCell', InOutMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LSize',
+ (short, 'listWidth', InMode),
+ (short, 'listHeight', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LSetDrawingMode',
+ (Boolean, 'drawIt', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LScroll',
+ (short, 'dCols', InMode),
+ (short, 'dRows', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LAutoScroll',
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LUpdate',
+ (RgnHandle, 'theRgn', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LActivate',
+ (Boolean, 'act', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LCellSize',
+ (Point, 'cSize', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(Boolean, 'LClick',
+ (Point, 'pt', InMode),
+ (short, 'modifiers', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LAddToCell',
+ (InBufferShortsize, 'dataPtr', InMode),
+ (Cell, 'theCell', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LClrCell',
+ (Cell, 'theCell', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LGetCell',
+ (VarOutBufferShortsize, 'dataPtr', InOutMode),
+ (Cell, 'theCell', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LRect',
+ (Rect, 'cellRect', OutMode),
+ (Cell, 'theCell', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LSetCell',
+ (InBufferShortsize, 'dataPtr', InMode),
+ (Cell, 'theCell', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LSetSelect',
+ (Boolean, 'setIt', InMode),
+ (Cell, 'theCell', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'LDraw',
+ (Cell, 'theCell', InMode),
+ (ListRef, 'lHandle', InMode),
+)
+methods.append(f)
+
diff --git a/Mac/Modules/list/listscan.py b/Mac/Modules/list/listscan.py
new file mode 100644
index 0000000..8061b56
--- /dev/null
+++ b/Mac/Modules/list/listscan.py
@@ -0,0 +1,73 @@
+# Scan an Apple header file, generating a Python file of generator calls.
+
+import addpack
+addpack.addpack(':tools:bgen:bgen')
+from scantools import Scanner
+
+LONG = "Lists"
+SHORT = "list"
+OBJECT = "ListRef"
+
+def main():
+ input = LONG + ".h"
+ output = SHORT + "gen.py"
+ defsoutput = LONG + ".py"
+ scanner = MyScanner(input, output, defsoutput)
+ scanner.scan()
+ scanner.close()
+ print "=== Done scanning and generating, now importing the generated code... ==="
+ exec "import " + SHORT + "support"
+ print "=== Done. It's up to you to compile it now! ==="
+
+class MyScanner(Scanner):
+
+ def destination(self, type, name, arglist):
+ classname = "Function"
+ listname = "functions"
+ if arglist:
+ t, n, m = arglist[-1]
+ # This is non-functional today
+ if t == OBJECT and m == "InMode":
+ classname = "Method"
+ listname = "methods"
+ return classname, listname
+
+ def makeblacklistnames(self):
+ return [
+ "LDispose", # Done by removing the object
+ "LSearch", # We don't want to handle procs just yet
+ "LGetCellDataLocation", # What does this do??
+ ]
+
+ def makeblacklisttypes(self):
+ return [
+ ]
+
+ def makerepairinstructions(self):
+ return [
+ ([('ListBounds_ptr', '*', 'InMode')],
+ [('Rect_ptr', '*', 'InMode')]),
+
+ ([("Cell", "theCell", "OutMode")],
+ [("Cell", "theCell", "InOutMode")]),
+
+ ([("void_ptr", "*", "InMode"), ("short", "*", "InMode")],
+ [("InBufferShortsize", "*", "*")]),
+
+ ([("void", "*", "OutMode"), ("short", "*", "OutMode")],
+ [("VarOutBufferShortsize", "*", "InOutMode")]),
+
+# ([("void", "wStorage", "OutMode")],
+# [("NullStorage", "*", "InMode")]),
+#
+# # GetKeys
+# ([('KeyMap', 'theKeys', 'InMode')],
+# [('*', '*', 'OutMode')]),
+#
+# # GetTicker
+# ([('unsigned long', '*', '*')],
+# [('unsigned_long', '*', '*')]),
+ ]
+
+if __name__ == "__main__":
+ main()
diff --git a/Mac/Modules/list/listsupport.py b/Mac/Modules/list/listsupport.py
new file mode 100644
index 0000000..fa1e9c4
--- /dev/null
+++ b/Mac/Modules/list/listsupport.py
@@ -0,0 +1,84 @@
+# This script generates a Python interface for an Apple Macintosh Manager.
+# It uses the "bgen" package to generate C code.
+# The function specifications are generated by scanning the mamager's header file,
+# using the "scantools" package (customized for this particular manager).
+
+import string
+
+# Declarations that change for each manager
+MACHEADERFILE = 'Lists.h' # The Apple header file
+MODNAME = 'List' # The name of the module
+OBJECTNAME = 'List' # The basic name of the objects used here
+KIND = 'Handle' # Usually 'Ptr' or 'Handle'
+
+# The following is *usually* unchanged but may still require tuning
+MODPREFIX = MODNAME # The prefix for module-wide routines
+OBJECTTYPE = "ListRef" # The C type used to represent them
+OBJECTPREFIX = MODPREFIX + 'Obj' # The prefix for object methods
+INPUTFILE = string.lower(MODPREFIX) + 'gen.py' # The file generated by the scanner
+OUTPUTFILE = MODNAME + "module.c" # The file generated by this program
+
+from macsupport import *
+
+# Create the type objects
+ListRef = OpaqueByValueType("ListRef", "ListObj")
+Cell = Point
+VarOutBufferShortsize = VarHeapOutputBufferType('char', 'short', 's') # (buf, &len)
+InBufferShortsize = VarInputBufferType('char', 'short', 's') # (buf, len)
+
+# For LUpdate, we alsways update the complete visible region.
+RgnHandle = FakeType("(*_self->ob_itself)->port->visRgn")
+
+
+includestuff = includestuff + """
+#include <%s>""" % MACHEADERFILE + """
+"""
+
+class ListMethodGenerator(MethodGenerator):
+ """Similar to MethodGenerator, but has self as last argument"""
+
+ def parseArgumentList(self, args):
+ args, a0 = args[:-1], args[-1]
+ t0, n0, m0 = a0
+ if m0 != InMode:
+ raise ValueError, "method's 'self' must be 'InMode'"
+ self.itself = Variable(t0, "_self->ob_itself", SelfMode)
+ FunctionGenerator.parseArgumentList(self, args)
+ self.argumentList.append(self.itself)
+
+
+
+class MyObjectDefinition(GlobalObjectDefinition):
+ def outputCheckNewArg(self):
+ Output("""if (itself == NULL) {
+ PyErr_SetString(List_Error,"Cannot create null List");
+ return NULL;
+ }""")
+ def outputFreeIt(self, itselfname):
+ Output("LDispose(%s);", itselfname)
+
+# From here on it's basically all boiler plate...
+
+# Create the generator groups and link them
+module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
+object = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE)
+module.addobject(object)
+
+# Create the generator classes used to populate the lists
+Function = FunctionGenerator
+Method = ListMethodGenerator
+
+# Create and populate the lists
+functions = []
+methods = []
+execfile(INPUTFILE)
+
+# add the populated lists to the generator groups
+# (in a different wordl the scan program would generate this)
+for f in functions: module.add(f)
+for f in methods: object.add(f)
+
+# generate output (open the output file as late as possible)
+SetOutputFileName(OUTPUTFILE)
+module.generate()
+