Index: _cursesmodule.c =================================================================== --- _cursesmodule.c (revision 70006) +++ _cursesmodule.c (working copy) @@ -411,7 +411,84 @@ return PyCursesCheckERR(rtn, "addch"); } +/* Window.addchstr Inserted Steve Owens 2/25/2005 */ static PyObject * +PyCursesWindow_AddChstr(PyCursesWindowObject *self, PyObject *args) +{ + int x, y, n; + PyObject * rtn = NULL; + Py_ssize_t size, ix; + PyObject *pList = NULL; + chtype* pChstr = NULL; + + switch (PyTuple_Size(args)) { + case 1: + if (!PyArg_ParseTuple(args, "O;(List) expected for waddchstr", &pList)) + return NULL; + break; + case 2: + if (!PyArg_ParseTuple(args, "Oi;(List, int) expected for waddchnstr", &pList, &n)) + return NULL; + break; + case 3: + if (!PyArg_ParseTuple(args,"iiO;(int, int, List) expected for mvwaddchstr", &y, &x, &pList)) + return NULL; + break; + case 4: + if (!PyArg_ParseTuple(args,"iiOi;(int, int, List, int) expected for mvwaddchnstr", &y, &x, &pList, &n)) + return NULL; + break; + default: + PyErr_SetString(PyExc_TypeError, "addchstr requires 1 to 4 arguments"); + } + + if(!PyList_Check(pList)) + { + PyErr_SetString(PyExc_TypeError, "Invalid object passed as List argument to addchstr."); + return NULL; + } + size = PyList_Size(pList); + if(size < 1) + { + return PyCursesCheckERR(OK, "Nothing to do"); /* Nothing to do */ + } + + pChstr = (chtype *)malloc((size + 1) * sizeof(chtype)); + for(ix = 0; ix < size; ix++) + { + PyObject * pPyCh = PyList_GetItem(pList, ix); + if (PyInt_Check(pPyCh)) + pChstr[ix] = (chtype) PyInt_AsLong(pPyCh); + else + { + PyErr_SetString(PyExc_TypeError, "Invalid element type in List argument to addchstr. Must be a list of elements."); + free(pChstr); + return NULL; + } + } + pChstr[size] = 0L; + + switch (PyTuple_Size(args)) { + case 1: + rtn = PyCursesCheckERR(waddchstr(self->win, pChstr), "waddchstr"); + break; + case 2: + rtn = PyCursesCheckERR(waddchnstr(self->win, pChstr, n), "waddchnstr"); + break; + case 3: + rtn = PyCursesCheckERR(mvwaddchstr(self->win, y, x, pChstr), "mvwaddchstr"); + break; + case 4: + rtn = PyCursesCheckERR(mvwaddchnstr(self->win, y, x, pChstr, n), "mvwaddchnstr"); + break; + } + if(pChstr != NULL) + free(pChstr); + + return rtn; +} + +static PyObject * PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args) { int rtn; @@ -715,7 +792,20 @@ return PyCursesCheckERR(rtn, "chgat"); } +/* Inserted Steve Owens 2/24/4009 */ +static PyObject * +PyCursesWindow_wcolor_set(PyCursesWindowObject *self, PyObject *args) +{ + short color_pair_number; + PyCursesInitialised + PyCursesInitialisedColor + if (!PyArg_ParseTuple(args, "h:wcolor_set", &color_pair_number)) return NULL; + + return PyCursesCheckERR(wcolor_set(self->win, color_pair_number, NULL), "wcolor_set"); +} + + static PyObject * PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args) { @@ -1536,6 +1626,8 @@ {"addch", (PyCFunction)PyCursesWindow_AddCh, METH_VARARGS}, {"addnstr", (PyCFunction)PyCursesWindow_AddNStr, METH_VARARGS}, {"addstr", (PyCFunction)PyCursesWindow_AddStr, METH_VARARGS}, + {"addchstr", (PyCFunction)PyCursesWindow_AddChstr, METH_VARARGS}, + {"addchnstr", (PyCFunction)PyCursesWindow_AddChstr, METH_VARARGS}, {"attroff", (PyCFunction)PyCursesWindow_AttrOff, METH_VARARGS}, {"attron", (PyCFunction)PyCursesWindow_AttrOn, METH_VARARGS}, {"attrset", (PyCFunction)PyCursesWindow_AttrSet, METH_VARARGS}, @@ -1548,6 +1640,7 @@ {"clearok", (PyCFunction)PyCursesWindow_clearok, METH_VARARGS}, {"clrtobot", (PyCFunction)PyCursesWindow_wclrtobot, METH_NOARGS}, {"clrtoeol", (PyCFunction)PyCursesWindow_wclrtoeol, METH_NOARGS}, + {"color_set", (PyCFunction)PyCursesWindow_wcolor_set, METH_VARARGS}, {"cursyncup", (PyCFunction)PyCursesWindow_wcursyncup, METH_NOARGS}, {"delch", (PyCFunction)PyCursesWindow_DelCh, METH_VARARGS}, {"deleteln", (PyCFunction)PyCursesWindow_wdeleteln, METH_NOARGS}, @@ -1680,7 +1773,87 @@ NoArgNoReturnVoidFunction(flushinp) NoArgNoReturnVoidFunction(noqiflush) + +/* addchstr Inserted Steve Owens 2/25/2005 */ static PyObject * +PyCurses_AddChstr(PyObject *self, PyObject *args) +{ + int x, y, n; + PyObject * rtn = NULL; + Py_ssize_t size, ix; + PyObject *pList = NULL; + chtype* pChstr = NULL; + + switch (PyTuple_Size(args)) { + case 1: + if (!PyArg_ParseTuple(args, "O;(List) expected for waddchstr", &pList)) + return NULL; + break; + case 2: + if (!PyArg_ParseTuple(args, "Oi;(List, int) expected for waddchnstr", &pList, &n)) + return NULL; + break; + case 3: + if (!PyArg_ParseTuple(args,"iiO;(int, int, List) expected for mvwaddchstr", &y, &x, &pList)) + return NULL; + break; + case 4: + if (!PyArg_ParseTuple(args,"iiOi;(int, int, List, int) expected for mvwaddchnstr", &y, &x, &pList, &n)) + return NULL; + break; + default: + PyErr_SetString(PyExc_TypeError, "addchstr requires 1 to 4 arguments"); + } + + if(!PyList_Check(pList)) + { + PyErr_SetString(PyExc_TypeError, "Invalid object passed as List argument to addchstr."); + return NULL; + } + size = PyList_Size(pList); + if(size < 1) + { + return PyCursesCheckERR(OK, "Nothing to do"); /* Nothing to do */ + } + + pChstr = (chtype *)malloc((size + 1) * sizeof(chtype)); + for(ix = 0; ix < size; ix++) + { + PyObject * pPyCh = PyList_GetItem(pList, ix); + if (PyInt_Check(pPyCh)) + pChstr[ix] = (chtype) PyInt_AsLong(pPyCh); + else + { + PyErr_SetString(PyExc_TypeError, "Invalid element type in List argument to addchstr. Must be a list of elements."); + if(pChstr != NULL) + free(pChstr); + return NULL; + } + } + pChstr[size] = 0L; + + switch (PyTuple_Size(args)) { + case 1: + rtn = PyCursesCheckERR(addchstr(pChstr), "addchstr"); + break; + case 2: + rtn = PyCursesCheckERR(addchnstr(pChstr, n), "addchnstr"); + break; + case 3: + rtn = PyCursesCheckERR(mvaddchstr(y, x, pChstr), "mvaddchstr"); + break; + case 4: + rtn = PyCursesCheckERR(mvaddchnstr(y, x, pChstr, n), "mvaddchnstr"); + break; + } + if(pChstr != NULL) + free(pChstr); + + return rtn; +} + + +static PyObject * PyCurses_filter(PyObject *self) { /* not checking for PyCursesInitialised here since filter() must @@ -1721,7 +1894,26 @@ return PyInt_FromLong((long) (n << 8)); } +/* + Insert new method color_set Steve Owens 2/24/2009 + The curses library color_set function has the following signature: + int color_set(short color_pair_number, void* opts); + opts is reserved for future use and must be set to NULL +*/ static PyObject * +PyCurses_color_set(PyObject *self, PyObject *args) +{ + short color_pair_number = 0; + + PyCursesInitialised + PyCursesInitialisedColor + + if (!PyArg_ParseTuple(args, "h:color_set", &color_pair_number)) return NULL; + + return PyCursesCheckERR(color_set(color_pair_number, NULL), "color_set"); +} + +static PyObject * PyCurses_Curs_Set(PyObject *self, PyObject *args) { int vis,erg; @@ -2624,13 +2816,16 @@ /* List of functions defined in the module */ -static PyMethodDef PyCurses_methods[] = { +static PyMethodDef PyCurses_methods[] = { + {"addchstr", (PyCFunction)PyCurses_AddChstr, METH_VARARGS}, + {"addchnstr", (PyCFunction)PyCurses_AddChstr, METH_VARARGS}, {"baudrate", (PyCFunction)PyCurses_baudrate, METH_NOARGS}, {"beep", (PyCFunction)PyCurses_beep, METH_NOARGS}, {"can_change_color", (PyCFunction)PyCurses_can_change_color, METH_NOARGS}, {"cbreak", (PyCFunction)PyCurses_cbreak, METH_VARARGS}, {"color_content", (PyCFunction)PyCurses_Color_Content, METH_VARARGS}, {"color_pair", (PyCFunction)PyCurses_color_pair, METH_VARARGS}, + {"color_set", (PyCFunction)PyCurses_color_set, METH_VARARGS}, {"curs_set", (PyCFunction)PyCurses_Curs_Set, METH_VARARGS}, {"def_prog_mode", (PyCFunction)PyCurses_def_prog_mode, METH_NOARGS}, {"def_shell_mode", (PyCFunction)PyCurses_def_shell_mode, METH_NOARGS}, @@ -2881,3 +3076,4 @@ SetDictInt("KEY_MAX", KEY_MAX); } } +