]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Interface to the Mac List Manager.
authorJack Jansen <jack.jansen@cwi.nl>
Mon, 14 Aug 1995 11:46:24 +0000 (11:46 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Mon, 14 Aug 1995 11:46:24 +0000 (11:46 +0000)
Mac/Lib/test/tlist.py [new file with mode: 0644]
Mac/Lib/toolbox/Lists.py [new file with mode: 0644]
Mac/Modules/list/Listmodule.c [new file with mode: 0644]
Mac/Modules/list/listgen.py [new file with mode: 0644]
Mac/Modules/list/listscan.py [new file with mode: 0644]
Mac/Modules/list/listsupport.py [new file with mode: 0644]

diff --git a/Mac/Lib/test/tlist.py b/Mac/Lib/test/tlist.py
new file mode 100644 (file)
index 0000000..bf483e1
--- /dev/null
@@ -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 (file)
index 0000000..79a5f73
--- /dev/null
@@ -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 (file)
index 0000000..928a9a5
--- /dev/null
@@ -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 (file)
index 0000000..6189e7a
--- /dev/null
@@ -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 (file)
index 0000000..8061b56
--- /dev/null
@@ -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 (file)
index 0000000..fa1e9c4
--- /dev/null
@@ -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()
+