📄 _cursesmodule.c
字号:
PyDict_SetItemString(ModDict, "LINES", nlines);
Py_DECREF(nlines);
cols = PyInt_FromLong((long) COLS);
PyDict_SetItemString(ModDict, "COLS", cols);
Py_DECREF(cols);
return (PyObject *)PyCursesWindow_New(win);
}
static PyObject *
PyCurses_setupterm(PyObject* self, PyObject *args, PyObject* keywds)
{
int fd = -1;
int err;
char* termstr = NULL;
static char *kwlist[] = {"term", "fd", NULL};
if (!PyArg_ParseTupleAndKeywords(
args,keywds,"|zi:setupterm",kwlist,&termstr,&fd)) {
return NULL;
}
if (fd == -1) {
PyObject* sys_stdout;
sys_stdout = PySys_GetObject("stdout");
if (sys_stdout == NULL) {
PyErr_SetString(
PyCursesError,
"lost sys.stdout");
return NULL;
}
fd = PyObject_AsFileDescriptor(sys_stdout);
if (fd == -1) {
return NULL;
}
}
if (setupterm(termstr,fd,&err) == ERR) {
char* s = "setupterm: unknown error";
if (err == 0) {
s = "setupterm: could not find terminal";
} else if (err == -1) {
s = "setupterm: could not find terminfo database";
}
PyErr_SetString(PyCursesError,s);
return NULL;
}
initialised_setupterm = TRUE;
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
PyCurses_IntrFlush(PyObject *self, PyObject *args)
{
int ch;
PyCursesInitialised
switch(ARG_COUNT(args)) {
case 1:
if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
break;
default:
PyErr_SetString(PyExc_TypeError, "intrflush requires 1 argument");
return NULL;
}
return PyCursesCheckERR(intrflush(NULL,ch), "intrflush");
}
#if !defined(__NetBSD__)
static PyObject *
PyCurses_KeyName(PyObject *self, PyObject *args)
{
const char *knp;
int ch;
PyCursesInitialised
if (!PyArg_Parse(args,"i",&ch)) return NULL;
knp = keyname(ch);
return PyString_FromString((knp == NULL) ? "" : (char *)knp);
}
#endif
static PyObject *
PyCurses_KillChar(PyObject *self, PyObject *args)
{
char ch;
if (!PyArg_NoArgs(args)) return NULL;
ch = killchar();
return PyString_FromStringAndSize(&ch, 1);
}
static PyObject *
PyCurses_Meta(PyObject *self, PyObject *args)
{
int ch;
PyCursesInitialised
switch(ARG_COUNT(args)) {
case 1:
if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
break;
default:
PyErr_SetString(PyExc_TypeError, "meta requires 1 argument");
return NULL;
}
return PyCursesCheckERR(meta(stdscr, ch), "meta");
}
#ifdef NCURSES_MOUSE_VERSION
static PyObject *
PyCurses_MouseInterval(PyObject *self, PyObject *args)
{
int interval;
PyCursesInitialised
if (!PyArg_Parse(args,"i;interval",&interval))
return NULL;
return PyCursesCheckERR(mouseinterval(interval), "mouseinterval");
}
static PyObject *
PyCurses_MouseMask(PyObject *self, PyObject *args)
{
int newmask;
mmask_t oldmask, availmask;
PyCursesInitialised
if (!PyArg_Parse(args,"i;mousemask",&newmask))
return NULL;
availmask = mousemask(newmask, &oldmask);
return Py_BuildValue("(ll)", (long)availmask, (long)oldmask);
}
#endif
static PyObject *
PyCurses_Napms(PyObject *self, PyObject *args)
{
int ms;
PyCursesInitialised
if (!PyArg_Parse(args, "i;ms", &ms)) return NULL;
return Py_BuildValue("i", napms(ms));
}
static PyObject *
PyCurses_NewPad(PyObject *self, PyObject *args)
{
WINDOW *win;
int nlines, ncols;
PyCursesInitialised
if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols)) return NULL;
win = newpad(nlines, ncols);
if (win == NULL) {
PyErr_SetString(PyCursesError, catchall_NULL);
return NULL;
}
return (PyObject *)PyCursesWindow_New(win);
}
static PyObject *
PyCurses_NewWindow(PyObject *self, PyObject *args)
{
WINDOW *win;
int nlines, ncols, begin_y=0, begin_x=0;
PyCursesInitialised
switch (ARG_COUNT(args)) {
case 2:
if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols))
return NULL;
break;
case 4:
if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
&nlines,&ncols,&begin_y,&begin_x))
return NULL;
break;
default:
PyErr_SetString(PyExc_TypeError, "newwin requires 2 or 4 arguments");
return NULL;
}
win = newwin(nlines,ncols,begin_y,begin_x);
if (win == NULL) {
PyErr_SetString(PyCursesError, catchall_NULL);
return NULL;
}
return (PyObject *)PyCursesWindow_New(win);
}
static PyObject *
PyCurses_Pair_Content(PyObject *self, PyObject *args)
{
short pair,f,b;
PyCursesInitialised
PyCursesInitialisedColor
switch(ARG_COUNT(args)) {
case 1:
if (!PyArg_Parse(args, "h;pair", &pair)) return NULL;
break;
default:
PyErr_SetString(PyExc_TypeError, "pair_content requires 1 argument");
return NULL;
}
if (!pair_content(pair, &f, &b)) {
PyErr_SetString(PyCursesError,
"Argument 1 was out of range. (1..COLOR_PAIRS-1)");
return NULL;
}
return Py_BuildValue("(ii)", f, b);
}
static PyObject *
PyCurses_pair_number(PyObject *self, PyObject *args)
{
int n;
PyCursesInitialised
PyCursesInitialisedColor
switch(ARG_COUNT(args)) {
case 1:
if (!PyArg_Parse(args, "i;pairvalue", &n)) return NULL;
break;
default:
PyErr_SetString(PyExc_TypeError,
"pair_number requires 1 argument");
return NULL;
}
return PyInt_FromLong((long) ((n & A_COLOR) >> 8));
}
static PyObject *
PyCurses_Putp(PyObject *self, PyObject *args)
{
char *str;
if (!PyArg_Parse(args,"s;str", &str)) return NULL;
return PyCursesCheckERR(putp(str), "putp");
}
static PyObject *
PyCurses_QiFlush(PyObject *self, PyObject *args)
{
int flag = 0;
PyCursesInitialised
switch(ARG_COUNT(args)) {
case 0:
qiflush();
Py_INCREF(Py_None);
return Py_None;
case 1:
if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL;
if (flag) qiflush();
else noqiflush();
Py_INCREF(Py_None);
return Py_None;
default:
PyErr_SetString(PyExc_TypeError, "qiflush requires 0 or 1 arguments");
return NULL;
}
}
static PyObject *
PyCurses_setsyx(PyObject *self, PyObject *args)
{
int y,x;
PyCursesInitialised
if (ARG_COUNT(args)!=2) {
PyErr_SetString(PyExc_TypeError, "setsyx requires 2 arguments");
return NULL;
}
if (!PyArg_Parse(args, "(ii);y, x", &y, &x)) return NULL;
setsyx(y,x);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
PyCurses_Start_Color(PyObject *self, PyObject *args)
{
int code;
PyObject *c, *cp;
PyCursesInitialised
if (!PyArg_NoArgs(args)) return NULL;
code = start_color();
if (code != ERR) {
initialisedcolors = TRUE;
c = PyInt_FromLong((long) COLORS);
PyDict_SetItemString(ModDict, "COLORS", c);
Py_DECREF(c);
cp = PyInt_FromLong((long) COLOR_PAIRS);
PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp);
Py_DECREF(cp);
Py_INCREF(Py_None);
return Py_None;
} else {
PyErr_SetString(PyCursesError, "start_color() returned ERR");
return NULL;
}
}
static PyObject *
PyCurses_tigetflag(PyObject *self, PyObject *args)
{
char *capname;
PyCursesSetupTermCalled;
if (!PyArg_ParseTuple(args, "z", &capname))
return NULL;
return PyInt_FromLong( (long) tigetflag( capname ) );
}
static PyObject *
PyCurses_tigetnum(PyObject *self, PyObject *args)
{
char *capname;
PyCursesSetupTermCalled;
if (!PyArg_ParseTuple(args, "z", &capname))
return NULL;
return PyInt_FromLong( (long) tigetnum( capname ) );
}
static PyObject *
PyCurses_tigetstr(PyObject *self, PyObject *args)
{
char *capname;
PyCursesSetupTermCalled;
if (!PyArg_ParseTuple(args, "z", &capname))
return NULL;
capname = tigetstr( capname );
if (capname == 0 || capname == (char*) -1) {
Py_INCREF(Py_None);
return Py_None;
}
return PyString_FromString( capname );
}
static PyObject *
PyCurses_tparm(PyObject *self, PyObject *args)
{
char* fmt;
char* result = NULL;
int i1,i2,i3,i4,i5,i6,i7,i8,i9;
PyCursesSetupTermCalled;
if (!PyArg_ParseTuple(args, "s|iiiiiiiii:tparm",
&fmt, &i1, &i2, &i3, &i4,
&i5, &i6, &i7, &i8, &i9)) {
return NULL;
}
#if defined(__hpux) || defined(_AIX)
/* tparm is declared with 10 arguments on a few platforms
(HP-UX, AIX). If this proves to be a problem on other
platforms as well, perhaps an autoconf test should be
added to determine whether tparm can be called with a
variable number of arguments. Perhaps the other arguments
should be initialized in this case also. */
result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7,i8,i9);
#else
switch (PyTuple_GET_SIZE(args)) {
case 1:
result = tparm(fmt);
break;
case 2:
result = tparm(fmt,i1);
break;
case 3:
result = tparm(fmt,i1,i2);
break;
case 4:
result = tparm(fmt,i1,i2,i3);
break;
case 5:
result = tparm(fmt,i1,i2,i3,i4);
break;
case 6:
result = tparm(fmt,i1,i2,i3,i4,i5);
break;
case 7:
result = tparm(fmt,i1,i2,i3,i4,i5,i6);
break;
case 8:
result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7);
break;
case 9:
result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7,i8);
break;
case 10:
result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7,i8,i9);
break;
}
#endif /* defined(__hpux) || defined(_AIX) */
return PyString_FromString(result);
}
static PyObject *
PyCurses_TypeAhead(PyObject *self, PyObject *args)
{
int fd;
PyCursesInitialised
if (!PyArg_Parse(args,"i;fd",&fd)) return NULL;
PyCursesCheckERR(typeahead( fd ), "typeahead");
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
PyCurses_UnCtrl(PyObject *self, PyObject *args)
{
PyObject *temp;
chtype ch;
PyCursesInitialised
if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
if (PyInt_Check(temp))
ch = (chtype) PyInt_AsLong(temp);
else if (PyString_Check(temp))
ch = (chtype) *PyString_AsString(tem
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -