--- _cursesmodule-svn.c 2007-07-10 15:09:57.000000000 +0200
+++ _cursesmodule.c 2007-07-10 23:14:40.000000000 +0200
@@ -42,9 +42,9 @@
Here's a list of currently unsupported functions:
- addchnstr addchstr color_set define_key
+ color_set define_key
del_curterm delscreen dupwin inchnstr inchstr innstr keyok
- mcprint mvaddchnstr mvaddchstr mvcur mvinchnstr
+ mcprint mvcur mvinchnstr
mvinchstr mvinnstr mmvwaddchnstr mvwaddchstr
mvwinchnstr mvwinchstr mvwinnstr newterm
restartterm ripoffline scr_dump
@@ -505,6 +505,86 @@
}
static PyObject *
+PyCursesWindow_AddChStr(PyCursesWindowObject *self, PyObject *args)
+{
+ int rtn;
+ int x, y;
+ int len;
+ char *str;
+
+ int use_xy = FALSE;
+
+ switch (PyTuple_Size(args)) {
+ case 1:
+ if (!PyArg_ParseTuple(args,"s#", &str, &len))
+ return NULL;
+ break;
+ case 3:
+ if (!PyArg_ParseTuple(args,"iis#;int,int,str", &y, &x, &str, &len))
+ return NULL;
+ use_xy = TRUE;
+ break;
+ default:
+ PyErr_SetString(PyExc_TypeError, "addchstr requires 1 or 3 arguments");
+ return NULL;
+ }
+
+ if (len % sizeof(chtype)) {
+ PyErr_SetString(PyExc_ValueError, "string length must be multiply of curses.chtype_size");
+ return NULL;
+ }
+
+ if (use_xy == TRUE)
+ rtn = mvwaddchnstr(self->win,y,x,(chtype*)str,len/sizeof(chtype));
+ else
+ rtn = waddchnstr(self->win,(chtype*)str,len/sizeof(chtype));
+
+ return PyCursesCheckERR(rtn, "addchstr");
+}
+
+static PyObject *
+PyCursesWindow_AddChNStr(PyCursesWindowObject *self, PyObject *args)
+{
+ int rtn;
+ int x, y;
+ int len;
+ int n;
+ char *str;
+
+ int use_xy = FALSE;
+
+ switch (PyTuple_Size(args)) {
+ case 2:
+ if (!PyArg_ParseTuple(args,"s#i;str,int", &str, &len, &n))
+ return NULL;
+ break;
+ case 4:
+ if (!PyArg_ParseTuple(args,"iis#i;int,int,str,int", &y, &x, &str, &len, &n))
+ return NULL;
+ use_xy = TRUE;
+ break;
+ default:
+ PyErr_SetString(PyExc_TypeError, "addchnstr requires 2 or 4 arguments");
+ return NULL;
+ }
+
+ if (len % sizeof(chtype)) {
+ PyErr_SetString(PyExc_ValueError, "string length must be multiply of curses.chtype_size");
+ return NULL;
+ }
+
+ if (n > len/sizeof(chtype))
+ n = len/sizeof(chtype);
+
+ if (use_xy == TRUE)
+ rtn = mvwaddchnstr(self->win,y,x,(chtype*)str,n);
+ else
+ rtn = waddchnstr(self->win,(chtype*)str,n);
+
+ return PyCursesCheckERR(rtn, "addchnstr");
+}
+
+static PyObject *
PyCursesWindow_Bkgd(PyCursesWindowObject *self, PyObject *args)
{
PyObject *temp;
@@ -1477,6 +1557,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_AddChNStr, METH_VARARGS},
{"attroff", (PyCFunction)PyCursesWindow_wattroff, METH_VARARGS},
{"attron", (PyCFunction)PyCursesWindow_wattron, METH_VARARGS},
{"attrset", (PyCFunction)PyCursesWindow_wattrset, METH_VARARGS},
@@ -2774,6 +2856,9 @@
SetDictInt("ALL_MOUSE_EVENTS", ALL_MOUSE_EVENTS);
SetDictInt("REPORT_MOUSE_POSITION", REPORT_MOUSE_POSITION);
#endif
+ /* Set size of chtype (addchstr/addnstr) */
+ SetDictInt("chtype_size", sizeof(chtype));
+
/* Now set everything up for KEY_ variables */
{
int key;