gh-134208: remove dead AC directives for `_curses.window.{chgat,getstr,instr}` (#134325)

This commit is contained in:
Bénédikt Tran 2025-05-26 10:52:19 +02:00 committed by GitHub
parent fb09db1b93
commit 29e8115964
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 150 additions and 175 deletions

View File

@ -1429,32 +1429,27 @@ int py_mvwdelch(WINDOW *w, int y, int x)
/* chgat, added by Fabian Kreutz <fabian.kreutz at gmx.net> */
#ifdef HAVE_CURSES_WCHGAT
/*[-clinic input]
_curses.window.chgat
[
y: int
Y-coordinate.
x: int
X-coordinate.
]
PyDoc_STRVAR(_curses_window_chgat__doc__,
"chgat([y, x,] [n=-1,] attr)\n"
"Set the attributes of characters.\n"
"\n"
" y\n"
" Y-coordinate.\n"
" x\n"
" X-coordinate.\n"
" n\n"
" Number of characters.\n"
" attr\n"
" Attributes for characters.\n"
"\n"
"Set the attributes of num characters at the current cursor position, or at\n"
"position (y, x) if supplied. If no value of num is given or num = -1, the\n"
"attribute will be set on all the characters to the end of the line. This\n"
"function does not move the cursor. The changed line will be touched using\n"
"the touchline() method so that the contents will be redisplayed by the next\n"
"window refresh.");
n: int = -1
Number of characters.
attr: long
Attributes for characters.
/
Set the attributes of characters.
Set the attributes of num characters at the current cursor position, or at
position (y, x) if supplied. If no value of num is given or num = -1, the
attribute will be set on all the characters to the end of the line. This
function does not move the cursor. The changed line will be touched using
the touchline() method so that the contents will be redisplayed by the next
window refresh.
[-clinic start generated code]*/
static PyObject *
PyCursesWindow_ChgAt(PyObject *op, PyObject *args)
{
@ -1481,19 +1476,20 @@ PyCursesWindow_ChgAt(PyObject *op, PyObject *args)
attr = lattr;
break;
case 3:
if (!PyArg_ParseTuple(args,"iil;int,int,attr", &y, &x, &lattr))
if (!PyArg_ParseTuple(args,"iil;y,x,attr", &y, &x, &lattr))
return NULL;
attr = lattr;
use_xy = TRUE;
break;
case 4:
if (!PyArg_ParseTuple(args,"iiil;int,int,n,attr", &y, &x, &num, &lattr))
if (!PyArg_ParseTuple(args,"iiil;y,x,n,attr", &y, &x, &num, &lattr))
return NULL;
attr = lattr;
use_xy = TRUE;
break;
default:
PyErr_SetString(PyExc_TypeError, "chgat requires 1 to 4 arguments");
PyErr_SetString(PyExc_TypeError,
"_curses.window.chgat requires 1 to 4 arguments");
return NULL;
}
@ -1807,102 +1803,102 @@ _curses_window_get_wch_impl(PyCursesWindowObject *self, int group_right_1,
}
#endif
/*[-clinic input]
_curses.window.getstr
/*
* Helper function for parsing parameters from getstr() and instr().
* This function is necessary because Argument Clinic does not know
* how to handle nested optional groups with default values inside.
*
* Return 1 on success and 0 on failure, similar to PyArg_ParseTuple().
*/
static int
curses_clinic_parse_optional_xy_n(PyObject *args,
int *y, int *x, unsigned int *n, int *use_xy,
const char *qualname)
{
switch (PyTuple_GET_SIZE(args)) {
case 0: {
*use_xy = 0;
return 1;
}
case 1: {
*use_xy = 0;
return PyArg_ParseTuple(args, "O&;n",
_PyLong_UnsignedInt_Converter, n);
}
case 2: {
*use_xy = 1;
return PyArg_ParseTuple(args, "ii;y,x", y, x);
}
case 3: {
*use_xy = 1;
return PyArg_ParseTuple(args, "iiO&;y,x,n", y, x,
_PyLong_UnsignedInt_Converter, n);
}
default: {
*use_xy = 0;
PyErr_Format(PyExc_TypeError, "%s requires 0 to 3 arguments",
qualname);
return 0;
}
}
}
[
y: int
Y-coordinate.
x: int
X-coordinate.
]
n: int = 2047
Maximal number of characters.
/
Read a string from the user, with primitive line editing capacity.
[-clinic start generated code]*/
PyDoc_STRVAR(_curses_window_getstr__doc__,
"getstr([[y, x,] n=2047])\n"
"Read a string from the user, with primitive line editing capacity.\n"
"\n"
" y\n"
" Y-coordinate.\n"
" x\n"
" X-coordinate.\n"
" n\n"
" Maximal number of characters.");
static PyObject *
PyCursesWindow_GetStr(PyObject *op, PyObject *args)
PyCursesWindow_getstr(PyObject *op, PyObject *args)
{
PyCursesWindowObject *self = _PyCursesWindowObject_CAST(op);
int rtn, use_xy = 0, y = 0, x = 0;
unsigned int max_buf_size = 2048;
unsigned int n = max_buf_size - 1;
PyObject *res;
int x, y, n;
int rtn;
/* could make the buffer size larger/dynamic */
Py_ssize_t max_buf_size = 2048;
PyObject *result = PyBytes_FromStringAndSize(NULL, max_buf_size);
if (result == NULL)
if (!curses_clinic_parse_optional_xy_n(args, &y, &x, &n, &use_xy,
"_curses.window.instr"))
{
return NULL;
char *buf = PyBytes_AS_STRING(result);
}
switch (PyTuple_Size(args)) {
case 0:
Py_BEGIN_ALLOW_THREADS
rtn = wgetnstr(self->win, buf, max_buf_size - 1);
Py_END_ALLOW_THREADS
break;
case 1:
if (!PyArg_ParseTuple(args,"i;n", &n))
goto error;
if (n < 0) {
PyErr_SetString(PyExc_ValueError, "'n' must be nonnegative");
goto error;
}
Py_BEGIN_ALLOW_THREADS
rtn = wgetnstr(self->win, buf, Py_MIN(n, max_buf_size - 1));
Py_END_ALLOW_THREADS
break;
case 2:
if (!PyArg_ParseTuple(args,"ii;y,x",&y,&x))
goto error;
n = Py_MIN(n, max_buf_size - 1);
res = PyBytes_FromStringAndSize(NULL, n + 1);
if (res == NULL) {
return NULL;
}
char *buf = PyBytes_AS_STRING(res);
if (use_xy) {
Py_BEGIN_ALLOW_THREADS
#ifdef STRICT_SYSV_CURSES
rtn = wmove(self->win,y,x)==ERR ? ERR : wgetnstr(self->win, rtn, max_buf_size - 1);
rtn = wmove(self->win, y, x) == ERR
? ERR
: wgetnstr(self->win, buf, n);
#else
rtn = mvwgetnstr(self->win,y,x,buf, max_buf_size - 1);
rtn = mvwgetnstr(self->win, y, x, buf, n);
#endif
Py_END_ALLOW_THREADS
break;
case 3:
if (!PyArg_ParseTuple(args,"iii;y,x,n", &y, &x, &n))
goto error;
if (n < 0) {
PyErr_SetString(PyExc_ValueError, "'n' must be nonnegative");
goto error;
}
#ifdef STRICT_SYSV_CURSES
}
else {
Py_BEGIN_ALLOW_THREADS
rtn = wmove(self->win,y,x)==ERR ? ERR :
wgetnstr(self->win, rtn, Py_MIN(n, max_buf_size - 1));
rtn = wgetnstr(self->win, buf, n);
Py_END_ALLOW_THREADS
#else
Py_BEGIN_ALLOW_THREADS
rtn = mvwgetnstr(self->win, y, x, buf, Py_MIN(n, max_buf_size - 1));
Py_END_ALLOW_THREADS
#endif
break;
default:
PyErr_SetString(PyExc_TypeError, "getstr requires 0 to 3 arguments");
goto error;
}
if (rtn == ERR) {
Py_DECREF(result);
Py_DECREF(res);
return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
}
if (_PyBytes_Resize(&result, strlen(buf)) < 0) {
return NULL;
}
return result;
error:
Py_DECREF(result);
return NULL;
_PyBytes_Resize(&res, strlen(buf)); // 'res' is set to NULL on failure
return res;
}
/*[clinic input]
@ -2032,87 +2028,57 @@ _curses_window_inch_impl(PyCursesWindowObject *self, int group_right_1,
return rtn;
}
/*[-clinic input]
_curses.window.instr
PyDoc_STRVAR(_curses_window_instr__doc__,
"instr([y, x,] n=2047)\n"
"Return a string of characters, extracted from the window.\n"
"\n"
" y\n"
" Y-coordinate.\n"
" x\n"
" X-coordinate.\n"
" n\n"
" Maximal number of characters.\n"
"\n"
"Return a string of characters, extracted from the window starting at the\n"
"current cursor position, or at y, x if specified. Attributes are stripped\n"
"from the characters. If n is specified, instr() returns a string at most\n"
"n characters long (exclusive of the trailing NUL).");
[
y: int
Y-coordinate.
x: int
X-coordinate.
]
n: int = 2047
Maximal number of characters.
/
Return a string of characters, extracted from the window.
Return a string of characters, extracted from the window starting at the
current cursor position, or at y, x if specified. Attributes are stripped
from the characters. If n is specified, instr() returns a string at most
n characters long (exclusive of the trailing NUL).
[-clinic start generated code]*/
static PyObject *
PyCursesWindow_InStr(PyObject *op, PyObject *args)
PyCursesWindow_instr(PyObject *op, PyObject *args)
{
PyCursesWindowObject *self = _PyCursesWindowObject_CAST(op);
int rtn, use_xy = 0, y = 0, x = 0;
unsigned int max_buf_size = 2048;
unsigned int n = max_buf_size - 1;
PyObject *res;
int x, y, n;
int rtn;
/* could make the buffer size larger/dynamic */
Py_ssize_t max_buf_size = 2048;
PyObject *result = PyBytes_FromStringAndSize(NULL, max_buf_size);
if (result == NULL)
if (!curses_clinic_parse_optional_xy_n(args, &y, &x, &n, &use_xy,
"_curses.window.instr"))
{
return NULL;
char *buf = PyBytes_AS_STRING(result);
}
switch (PyTuple_Size(args)) {
case 0:
rtn = winnstr(self->win, buf, max_buf_size - 1);
break;
case 1:
if (!PyArg_ParseTuple(args,"i;n", &n))
goto error;
if (n < 0) {
PyErr_SetString(PyExc_ValueError, "'n' must be nonnegative");
goto error;
}
rtn = winnstr(self->win, buf, Py_MIN(n, max_buf_size - 1));
break;
case 2:
if (!PyArg_ParseTuple(args,"ii;y,x",&y,&x))
goto error;
rtn = mvwinnstr(self->win, y, x, buf, max_buf_size - 1);
break;
case 3:
if (!PyArg_ParseTuple(args, "iii;y,x,n", &y, &x, &n))
goto error;
if (n < 0) {
PyErr_SetString(PyExc_ValueError, "'n' must be nonnegative");
goto error;
}
rtn = mvwinnstr(self->win, y, x, buf, Py_MIN(n, max_buf_size - 1));
break;
default:
PyErr_SetString(PyExc_TypeError, "instr requires 0 or 3 arguments");
goto error;
n = Py_MIN(n, max_buf_size - 1);
res = PyBytes_FromStringAndSize(NULL, n + 1);
if (res == NULL) {
return NULL;
}
char *buf = PyBytes_AS_STRING(res);
if (use_xy) {
rtn = mvwinnstr(self->win, y, x, buf, n);
}
else {
rtn = winnstr(self->win, buf, n);
}
if (rtn == ERR) {
Py_DECREF(result);
Py_DECREF(res);
return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
}
if (_PyBytes_Resize(&result, strlen(buf)) < 0) {
return NULL;
}
return result;
error:
Py_DECREF(result);
return NULL;
_PyBytes_Resize(&res, strlen(buf)); // 'res' is set to NULL on failure
return res;
}
/*[clinic input]
@ -2854,7 +2820,10 @@ static PyMethodDef PyCursesWindow_methods[] = {
_CURSES_WINDOW_ATTRSET_METHODDEF
_CURSES_WINDOW_BKGD_METHODDEF
#ifdef HAVE_CURSES_WCHGAT
{"chgat", PyCursesWindow_ChgAt, METH_VARARGS},
{
"chgat", PyCursesWindow_ChgAt, METH_VARARGS,
_curses_window_chgat__doc__
},
#endif
_CURSES_WINDOW_BKGDSET_METHODDEF
_CURSES_WINDOW_BORDER_METHODDEF
@ -2877,7 +2846,10 @@ static PyMethodDef PyCursesWindow_methods[] = {
_CURSES_WINDOW_GET_WCH_METHODDEF
{"getmaxyx", PyCursesWindow_getmaxyx, METH_NOARGS},
{"getparyx", PyCursesWindow_getparyx, METH_NOARGS},
{"getstr", PyCursesWindow_GetStr, METH_VARARGS},
{
"getstr", PyCursesWindow_getstr, METH_VARARGS,
_curses_window_getstr__doc__
},
{"getyx", PyCursesWindow_getyx, METH_NOARGS},
_CURSES_WINDOW_HLINE_METHODDEF
{"idcok", PyCursesWindow_idcok, METH_VARARGS},
@ -2891,7 +2863,10 @@ static PyMethodDef PyCursesWindow_methods[] = {
{"insertln", PyCursesWindow_winsertln, METH_NOARGS},
_CURSES_WINDOW_INSNSTR_METHODDEF
_CURSES_WINDOW_INSSTR_METHODDEF
{"instr", PyCursesWindow_InStr, METH_VARARGS},
{
"instr", PyCursesWindow_instr, METH_VARARGS,
_curses_window_instr__doc__
},
_CURSES_WINDOW_IS_LINETOUCHED_METHODDEF
{"is_wintouched", PyCursesWindow_is_wintouched, METH_NOARGS},
{"keypad", PyCursesWindow_keypad, METH_VARARGS},