diff options
Diffstat (limited to 'Mac/Modules/list/Listmodule.c')
-rw-r--r-- | Mac/Modules/list/Listmodule.c | 638 |
1 files changed, 638 insertions, 0 deletions
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 ========================= */ + |