mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Added wide char api variants of getch and putch to msvcrt module. The wide char methods are required to fix #1578 in py3k. I figured out that they might be useful in 2.6, too.
This commit is contained in:
parent
e6daafb449
commit
7c7f6afa92
3 changed files with 104 additions and 0 deletions
|
@ -143,6 +143,22 @@ msvcrt_getch(PyObject *self, PyObject *args)
|
|||
return PyString_FromStringAndSize(s, 1);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
msvcrt_getwch(PyObject *self, PyObject *args)
|
||||
{
|
||||
Py_UNICODE ch;
|
||||
Py_UNICODE u[1];
|
||||
|
||||
if (!PyArg_ParseTuple(args, ":getwch"))
|
||||
return NULL;
|
||||
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
ch = _getwch();
|
||||
Py_END_ALLOW_THREADS
|
||||
u[0] = ch;
|
||||
return PyUnicode_FromUnicode(u, 1);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
msvcrt_getche(PyObject *self, PyObject *args)
|
||||
{
|
||||
|
@ -159,6 +175,22 @@ msvcrt_getche(PyObject *self, PyObject *args)
|
|||
return PyString_FromStringAndSize(s, 1);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
msvcrt_getwche(PyObject *self, PyObject *args)
|
||||
{
|
||||
Py_UNICODE ch;
|
||||
Py_UNICODE s[1];
|
||||
|
||||
if (!PyArg_ParseTuple(args, ":getwche"))
|
||||
return NULL;
|
||||
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
ch = _getwche();
|
||||
Py_END_ALLOW_THREADS
|
||||
s[0] = ch;
|
||||
return PyUnicode_FromUnicode(s, 1);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
msvcrt_putch(PyObject *self, PyObject *args)
|
||||
{
|
||||
|
@ -172,6 +204,25 @@ msvcrt_putch(PyObject *self, PyObject *args)
|
|||
return Py_None;
|
||||
}
|
||||
|
||||
|
||||
static PyObject *
|
||||
msvcrt_putwch(PyObject *self, PyObject *args)
|
||||
{
|
||||
Py_UNICODE *ch;
|
||||
int size;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "u#:putwch", &ch, &size))
|
||||
return NULL;
|
||||
|
||||
if (size == 1)
|
||||
_putwch(*ch);
|
||||
Py_RETURN_NONE;
|
||||
else {
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"Expected unicode of length 1");
|
||||
}
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
msvcrt_ungetch(PyObject *self, PyObject *args)
|
||||
{
|
||||
|
@ -186,6 +237,19 @@ msvcrt_ungetch(PyObject *self, PyObject *args)
|
|||
return Py_None;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
msvcrt_ungetwch(PyObject *self, PyObject *args)
|
||||
{
|
||||
Py_UNICODE ch;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "u:ungetwch", &ch))
|
||||
return NULL;
|
||||
|
||||
if (_ungetch(ch) == EOF)
|
||||
return PyErr_SetFromErrno(PyExc_IOError);
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static void
|
||||
insertint(PyObject *d, char *name, int value)
|
||||
|
@ -214,6 +278,11 @@ static struct PyMethodDef msvcrt_functions[] = {
|
|||
{"getche", msvcrt_getche, METH_VARARGS},
|
||||
{"putch", msvcrt_putch, METH_VARARGS},
|
||||
{"ungetch", msvcrt_ungetch, METH_VARARGS},
|
||||
{"getwch", msvcrt_getwch, METH_VARARGS},
|
||||
{"getwche", msvcrt_getwche, METH_VARARGS},
|
||||
{"putwch", msvcrt_putwch, METH_VARARGS},
|
||||
{"ungetwch", msvcrt_ungetwch, METH_VARARGS},
|
||||
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue