Further documentation on these functions can be found in the Platform API
documentation.
+The module implements both the normal and wide char variants of the console I/O
+api. The normal API deals only with ASCII characters and is of limited use
+for internationalized applications. The wide char API should be used where
+ever possible
.. _msvcrt-files:
return the keycode. The :kbd:`Control-C` keypress cannot be read with this
function.
+
+.. function:: getwch()
+
+ Wide char variant of `func:getch`, returns unicode.
+
+ ..versionadded:: 2.6
+
.. function:: getche()
printable character.
+.. function:: getwche()
+
+ Wide char variant of `func:getche`, returns unicode.
+
+ ..versionadded:: 2.6
+
+
.. function:: putch(char)
Print the character *char* to the console without buffering.
+
+.. function:: putwch(unicode_char)
+
+ Wide char variant of `func:putch`, accepts unicode.
+
+ ..versionadded:: 2.6
+
.. function:: ungetch(char)
Cause the character *char* to be "pushed back" into the console buffer; it will
be the next character read by :func:`getch` or :func:`getche`.
+
+.. function:: ungetwch(unicode_char)
+
+ Wide char variant of `func:ungetch`, accepts unicode.
+
+ ..versionadded:: 2.6
+
.. _msvcrt-other:
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)
{
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)
{
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)
{
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)
{"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}
};