blob: a9b71a1605e2ad8245c45036e902e7ee3c050661 [file] [log] [blame]
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001/*
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002 * This is a curses module for Python.
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00003 *
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00004 * Based on prior work by Lance Ellinghaus and Oliver Andrich
5 * Version 1.2 of this module: Copyright 1994 by Lance Ellinghouse,
6 * Cathedral City, California Republic, United States of America.
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00007 *
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00008 * Version 1.5b1, heavily extended for ncurses by Oliver Andrich:
9 * Copyright 1996,1997 by Oliver Andrich, Koblenz, Germany.
10 *
11 * Tidied for Python 1.6, and currently maintained by AMK (amk1@bigfoot.com)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000012 *
13 * Permission is hereby granted, free of charge, to any person obtaining
14 * a copy of this source file to use, copy, modify, merge, or publish it
15 * subject to the following conditions:
16 *
17 * The above copyright notice and this permission notice shall be included
18 * in all copies or in any new file that contains a substantial portion of
19 * this file.
20 *
21 * THE AUTHOR MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF
22 * THE SOFTWARE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT
23 * EXPRESS OR IMPLIED WARRANTY. THE AUTHOR DISCLAIMS ALL WARRANTIES
24 * WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
25 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 * NON-INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
27 * AUTHOR BE LIABLE TO YOU OR ANY OTHER PARTY FOR ANY SPECIAL,
28 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
29 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE, STRICT LIABILITY OR
30 * ANY OTHER ACTION ARISING OUT OF OR IN CONNECTION WITH THE USE OR
31 * PERFORMANCE OF THIS SOFTWARE.
32 */
Guido van Rossumf6971e21994-08-30 12:25:20 +000033
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000034/* CVS: $Id$ */
Guido van Rossumf6971e21994-08-30 12:25:20 +000035
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000036/* Release Number */
Guido van Rossumf6971e21994-08-30 12:25:20 +000037
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +000038char *PyCursesVersion = "1.6";
Guido van Rossumf6971e21994-08-30 12:25:20 +000039
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000040/* Includes */
Guido van Rossumf6971e21994-08-30 12:25:20 +000041
Guido van Rossum602099a1994-09-14 13:32:22 +000042#include "Python.h"
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000043
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000044#ifdef __osf__
45#define _XOPEN_SOURCE_EXTENDED /* Define macro for OSF/1 */
46#define STRICT_SYSV_CURSES
47#endif
48
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +000049#ifdef HAVE_NCURSES_H
50#include <ncurses.h>
51#else
52#include <curses.h>
53#endif
54
55#if defined(__sgi__) || defined(__sun__)
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000056#define STRICT_SYSV_CURSES
57typedef chtype attr_t; /* No attr_t type is available */
Guido van Rossum1266a011996-02-25 04:50:31 +000058#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +000059
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000060/* Definition of exception curses.error */
Guido van Rossumf6971e21994-08-30 12:25:20 +000061
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000062static PyObject *PyCursesError;
Guido van Rossumf6971e21994-08-30 12:25:20 +000063
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000064/* general error messages */
Guido van Rossum85738471995-02-17 13:50:17 +000065static char *catchall_ERR = "curses function returned ERR";
66static char *catchall_NULL = "curses function returned NULL";
67
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000068/* Tells whether initscr() has been called to initialise curses. */
Guido van Rossum585c6dc1995-02-24 13:45:43 +000069static int initialised = FALSE;
70
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000071/* Tells whether start_color() has been called to initialise colorusage. */
72static int initialisedcolors = FALSE;
73
74/* Utility Macros */
Guido van Rossum85738471995-02-17 13:50:17 +000075#define ARG_COUNT(X) \
76 (((X) == NULL) ? 0 : (PyTuple_Check(X) ? PyTuple_Size(X) : 1))
Guido van Rossumf6971e21994-08-30 12:25:20 +000077
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000078#define PyCursesInitialised \
79 if (initialised != TRUE) { \
80 PyErr_SetString(PyCursesError, \
81 "must call initscr() first"); \
82 return NULL; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +000083
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000084#define PyCursesInitialisedColor \
85 if (initialisedcolors != TRUE) { \
86 PyErr_SetString(PyCursesError, \
87 "must call start_color() first"); \
88 return NULL; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +000089
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000090/* Utility Functions */
Guido van Rossumfbea2f31994-08-31 22:05:27 +000091
Guido van Rossum85738471995-02-17 13:50:17 +000092/*
93 * Check the return code from a curses function and return None
94 * or raise an exception as appropriate.
95 */
96
97static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +000098PyCursesCheckERR(int code, char *fname)
Guido van Rossum85738471995-02-17 13:50:17 +000099{
Guido van Rossum85738471995-02-17 13:50:17 +0000100 if (code != ERR) {
101 Py_INCREF(Py_None);
102 return Py_None;
103 } else {
104 if (fname == NULL) {
105 PyErr_SetString(PyCursesError, catchall_ERR);
106 } else {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000107 PyErr_Format(PyCursesError, "%s() returned ERR", fname);
Guido van Rossum85738471995-02-17 13:50:17 +0000108 }
109 return NULL;
110 }
111}
112
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000113static int
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000114PyCurses_ConvertToChtype(PyObject *obj, chtype *ch)
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000115{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000116 if (PyInt_Check(obj)) {
117 *ch = (chtype) PyInt_AsLong(obj);
118 } else if(PyString_Check(obj) &
119 (PyString_Size(obj) == 1)) {
120 *ch = (chtype) *PyString_AsString(obj);
121 } else {
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000122 return 0;
123 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000124 return 1;
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000125}
126
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000127/*****************************************************************************
128 The Window Object
129******************************************************************************/
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000130
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000131/* Definition of the window object and window type */
Guido van Rossum85738471995-02-17 13:50:17 +0000132
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000133typedef struct {
134 PyObject_HEAD
135 WINDOW *win;
136} PyCursesWindowObject;
Guido van Rossum85738471995-02-17 13:50:17 +0000137
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000138PyTypeObject PyCursesWindow_Type;
139
140#define PyCursesWindow_Check(v) ((v)->ob_type == &PyCursesWindow_Type)
141
142/* Function Prototype Macros - They are ugly but very, very useful. ;-)
143
144 X - function name
145 TYPE - parameter Type
146 ERGSTR - format string for construction of the return value
147 PARSESTR - format string for argument parsing
148 */
149
150#define Window_NoArgNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000151static PyObject *PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
152{ if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000153 return PyCursesCheckERR(X(self->win), # X); }
154
155#define Window_NoArgTrueFalseFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000156static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000157{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000158 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000159 if (X (self->win) == FALSE) { Py_INCREF(Py_False); return Py_False; } \
160 else { Py_INCREF(Py_True); return Py_True; } }
161
162#define Window_NoArgNoReturnVoidFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000163static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000164{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000165 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000166 X(self->win); Py_INCREF(Py_None); return Py_None; }
167
168#define Window_NoArg2TupleReturnFunction(X, TYPE, ERGSTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000169static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000170{ \
171 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000172 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000173 X(self->win,arg1,arg2); return Py_BuildValue(ERGSTR, arg1, arg2); }
174
175#define Window_OneArgNoReturnVoidFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000176static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000177{ \
178 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000179 if (!PyArg_Parse(args, PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000180 X(self->win,arg1); Py_INCREF(Py_None); return Py_None; }
181
182#define Window_OneArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000183static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000184{ \
185 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000186 if (!PyArg_Parse(args,PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000187 return PyCursesCheckERR(X(self->win, arg1), # X); }
188
189#define Window_TwoArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000190static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000191{ \
192 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000193 if (!PyArg_Parse(args,PARSESTR, &arg1, &arg2)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000194 return PyCursesCheckERR(X(self->win, arg1, arg2), # X); }
Guido van Rossum85738471995-02-17 13:50:17 +0000195
Guido van Rossumf6971e21994-08-30 12:25:20 +0000196/* ------------- WINDOW routines --------------- */
Guido van Rossum85738471995-02-17 13:50:17 +0000197
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000198Window_NoArgNoReturnFunction(untouchwin)
199Window_NoArgNoReturnFunction(touchwin)
200Window_NoArgNoReturnFunction(redrawwin)
201Window_NoArgNoReturnFunction(winsertln)
202Window_NoArgNoReturnFunction(werase)
203Window_NoArgNoReturnFunction(wdeleteln)
204
205Window_NoArgTrueFalseFunction(is_wintouched)
206
207Window_NoArgNoReturnVoidFunction(wsyncup)
208Window_NoArgNoReturnVoidFunction(wsyncdown)
209Window_NoArgNoReturnVoidFunction(wstandend)
210Window_NoArgNoReturnVoidFunction(wstandout)
211Window_NoArgNoReturnVoidFunction(wcursyncup)
212Window_NoArgNoReturnVoidFunction(wclrtoeol)
213Window_NoArgNoReturnVoidFunction(wclrtobot)
214Window_NoArgNoReturnVoidFunction(wclear)
215
216Window_OneArgNoReturnVoidFunction(idcok, int, "i;True(1) or False(0)")
217Window_OneArgNoReturnVoidFunction(immedok, int, "i;True(1) or False(0)")
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +0000218Window_OneArgNoReturnVoidFunction(wtimeout, int, "i;delay")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000219
220Window_NoArg2TupleReturnFunction(getyx, int, "(ii)")
221Window_NoArg2TupleReturnFunction(getbegyx, int, "(ii)")
222Window_NoArg2TupleReturnFunction(getmaxyx, int, "(ii)")
223Window_NoArg2TupleReturnFunction(getparyx, int, "(ii)")
224
225Window_OneArgNoReturnFunction(wattron, attr_t, "l;attr")
226Window_OneArgNoReturnFunction(wattroff, attr_t, "l;attr")
227Window_OneArgNoReturnFunction(wattrset, attr_t, "l;attr")
228Window_OneArgNoReturnFunction(clearok, int, "i;True(1) or False(0)")
229Window_OneArgNoReturnFunction(idlok, int, "i;True(1) or False(0)")
230Window_OneArgNoReturnFunction(keypad, int, "i;True(1) or False(0)")
231Window_OneArgNoReturnFunction(leaveok, int, "i;True(1) or False(0)")
232Window_OneArgNoReturnFunction(nodelay, int, "i;True(1) or False(0)")
233Window_OneArgNoReturnFunction(notimeout, int, "i;True(1) or False(0)")
234Window_OneArgNoReturnFunction(scrollok, int, "i;True(1) or False(0)")
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000235Window_OneArgNoReturnFunction(winsdelln, int, "i;nlines")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000236Window_OneArgNoReturnFunction(syncok, int, "i;True(1) or False(0)")
237
238Window_TwoArgNoReturnFunction(mvwin, int, "(ii);y,x")
239Window_TwoArgNoReturnFunction(mvderwin, int, "(ii);y,x")
240Window_TwoArgNoReturnFunction(wmove, int, "(ii);y,x")
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000241#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000242Window_TwoArgNoReturnFunction(wresize, int, "(ii);lines,columns")
243#endif
244
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000245/* Allocation and deallocation of Window Objects */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000246
Guido van Rossumf6971e21994-08-30 12:25:20 +0000247static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000248PyCursesWindow_New(WINDOW *win)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000249{
250 PyCursesWindowObject *wo;
Guido van Rossum85738471995-02-17 13:50:17 +0000251
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000252 wo = PyObject_NEW(PyCursesWindowObject, &PyCursesWindow_Type);
253 if (wo == NULL) return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000254 wo->win = win;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000255 return (PyObject *)wo;
256}
257
258static void
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000259PyCursesWindow_Dealloc(PyCursesWindowObject *wo)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000260{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000261 if (wo->win != stdscr) delwin(wo->win);
262 PyMem_DEL(wo);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000263}
264
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000265/* Addch, Addstr, Addnstr */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000266
267static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000268PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000269{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000270 int rtn, x, y, use_xy = FALSE;
271 PyObject *temp;
272 chtype ch = 0;
273 attr_t attr = A_NORMAL;
274
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000275 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000276 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000277 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000278 return NULL;
279 break;
280 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000281 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000282 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000283 break;
284 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000285 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000286 return NULL;
287 use_xy = TRUE;
288 break;
289 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000290 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000291 &y, &x, &temp, &attr))
292 return NULL;
293 use_xy = TRUE;
294 break;
295 default:
296 PyErr_SetString(PyExc_TypeError, "addch requires 1 or 4 arguments");
297 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000298 }
Guido van Rossum85738471995-02-17 13:50:17 +0000299
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000300 if (!PyCurses_ConvertToChtype(temp, &ch)) {
301 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
302 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000303 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000304
Guido van Rossumf6971e21994-08-30 12:25:20 +0000305 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000306 rtn = mvwaddch(self->win,y,x, ch | attr);
307 else {
308 rtn = waddch(self->win, ch | attr);
309 }
310 return PyCursesCheckERR(rtn, "addch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000311}
312
313static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000314PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000315{
316 int rtn;
317 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000318 char *str;
319 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
320 int use_xy = FALSE, use_attr = FALSE;
Guido van Rossum85738471995-02-17 13:50:17 +0000321
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000322 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000323 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000324 if (!PyArg_Parse(args,"s;str", &str))
Guido van Rossum85738471995-02-17 13:50:17 +0000325 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000326 break;
327 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000328 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000329 return NULL;
330 use_attr = TRUE;
331 break;
332 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000333 if (!PyArg_Parse(args,"(iis);int,int,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000334 return NULL;
335 use_xy = TRUE;
336 break;
337 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000338 if (!PyArg_Parse(args,"(iisl);int,int,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000339 return NULL;
340 use_xy = use_attr = TRUE;
341 break;
342 default:
343 PyErr_SetString(PyExc_TypeError, "addstr requires 1 to 4 arguments");
344 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000345 }
Guido van Rossum85738471995-02-17 13:50:17 +0000346
Guido van Rossumf6971e21994-08-30 12:25:20 +0000347 if (use_attr == TRUE) {
348 attr_old = getattrs(self->win);
349 wattrset(self->win,attr);
350 }
351 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000352 rtn = mvwaddstr(self->win,y,x,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000353 else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000354 rtn = waddstr(self->win,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000355 if (use_attr == TRUE)
356 wattrset(self->win,attr_old);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000357 return PyCursesCheckERR(rtn, "addstr");
358}
Guido van Rossum85738471995-02-17 13:50:17 +0000359
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000360static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000361PyCursesWindow_AddNStr(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000362{
363 int rtn, x, y, n;
364 char *str;
365 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
366 int use_xy = FALSE, use_attr = FALSE;
367
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000368 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000369 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000370 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000371 return NULL;
372 break;
373 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000374 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000375 return NULL;
376 use_attr = TRUE;
377 break;
378 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000379 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000380 return NULL;
381 use_xy = TRUE;
382 break;
383 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000384 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000385 return NULL;
386 use_xy = use_attr = TRUE;
387 break;
388 default:
389 PyErr_SetString(PyExc_TypeError, "addnstr requires 2 to 5 arguments");
390 return NULL;
391 }
392
393 if (use_attr == TRUE) {
394 attr_old = getattrs(self->win);
395 wattrset(self->win,attr);
396 }
397 if (use_xy == TRUE)
398 rtn = mvwaddnstr(self->win,y,x,str,n);
399 else
400 rtn = waddnstr(self->win,str,n);
401 if (use_attr == TRUE)
402 wattrset(self->win,attr_old);
403 return PyCursesCheckERR(rtn, "addnstr");
404}
405
406static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000407PyCursesWindow_Bkgd(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000408{
409 PyObject *temp;
410 chtype bkgd;
411 attr_t attr = A_NORMAL;
412
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000413 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000414 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000415 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000416 return NULL;
417 break;
418 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000419 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000420 return NULL;
421 break;
422 default:
423 PyErr_SetString(PyExc_TypeError, "bkgd requires 1 or 2 arguments");
424 return NULL;
425 }
426
427 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
428 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
429 return NULL;
430 }
431
432 return PyCursesCheckERR(wbkgd(self->win, bkgd | A_NORMAL), "bkgd");
433}
434
435static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000436PyCursesWindow_BkgdSet(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000437{
438 PyObject *temp;
439 chtype bkgd;
440 attr_t attr = A_NORMAL;
441
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000442 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000443 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000444 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000445 return NULL;
446 break;
447 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000448 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000449 return NULL;
450 break;
451 default:
452 PyErr_SetString(PyExc_TypeError, "bkgdset requires 1 or 2 arguments");
453 return NULL;
454 }
455
456 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000457 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000458 return NULL;
459 }
460
461 wbkgdset(self->win, bkgd | attr);
462 return PyCursesCheckERR(0, "bkgdset");
463}
464
465static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000466PyCursesWindow_Border(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000467{
468 chtype ls, rs, ts, bs, tl, tr, bl, br;
469 ls = rs = ts = bs = tl = tr = bl = br = 0;
470 if (!PyArg_Parse(args,"|llllllll;ls,rs,ts,bs,tl,tr,bl,br",
471 &ls, &rs, &ts, &bs, &tl, &tr, &bl, &br))
472 return NULL;
473 wborder(self->win, ls, rs, ts, bs, tl, tr, bl, br);
474 Py_INCREF(Py_None);
475 return Py_None;
476}
477
478static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000479PyCursesWindow_Box(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000480{
481 chtype ch1=0,ch2=0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000482 if (!PyArg_NoArgs(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000483 PyErr_Clear();
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000484 if (!PyArg_Parse(args,"(ll);vertint,horint", &ch1, &ch2))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000485 return NULL;
486 }
487 box(self->win,ch1,ch2);
488 Py_INCREF(Py_None);
489 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000490}
491
492static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000493PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000494{
495 int rtn;
496 int x, y;
Guido van Rossum85738471995-02-17 13:50:17 +0000497
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000498 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000499 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000500 rtn = wdelch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000501 break;
502 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000503 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Guido van Rossum85738471995-02-17 13:50:17 +0000504 return NULL;
505 rtn = mvwdelch(self->win,y,x);
506 break;
507 default:
508 PyErr_SetString(PyExc_TypeError, "delch requires 0 or 2 arguments");
509 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000510 }
Guido van Rossum85738471995-02-17 13:50:17 +0000511 return PyCursesCheckERR(rtn, "[mv]wdelch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000512}
513
514static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000515PyCursesWindow_DerWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000516{
517 WINDOW *win;
518 int nlines, ncols, begin_y, begin_x;
519
520 nlines = 0;
521 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000522 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000523 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000524 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000525 return NULL;
526 break;
527 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000528 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000529 &nlines,&ncols,&begin_y,&begin_x))
530 return NULL;
531 break;
532 default:
533 PyErr_SetString(PyExc_TypeError, "derwin requires 2 or 4 arguments");
534 return NULL;
535 }
536
537 win = derwin(self->win,nlines,ncols,begin_y,begin_x);
538
539 if (win == NULL) {
540 PyErr_SetString(PyCursesError, catchall_NULL);
541 return NULL;
542 }
543
544 return (PyObject *)PyCursesWindow_New(win);
545}
546
547static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000548PyCursesWindow_EchoChar(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000549{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000550 PyObject *temp;
551 chtype ch;
552 attr_t attr = A_NORMAL;
Guido van Rossum85738471995-02-17 13:50:17 +0000553
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000554 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000555 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000556 if (!PyArg_Parse(args,"O;ch or int", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +0000557 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000558 break;
559 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000560 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000561 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000562 break;
563 default:
564 PyErr_SetString(PyExc_TypeError, "echochar requires 1 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000565
566
Guido van Rossum85738471995-02-17 13:50:17 +0000567 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000568 }
Guido van Rossum85738471995-02-17 13:50:17 +0000569
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000570 if (!PyCurses_ConvertToChtype(temp, &ch)) {
571 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +0000572 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000573 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000574
575 if (self->win->_flags & _ISPAD)
576 return PyCursesCheckERR(pechochar(self->win, ch | attr),
577 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000578 else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000579 return PyCursesCheckERR(wechochar(self->win, ch | attr),
580 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000581}
582
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000583#ifdef NCURSES_MOUSE_VERSION
584static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000585PyCursesWindow_Enclose(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000586{
587 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000588 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000589 return NULL;
590
591 return PyInt_FromLong( wenclose(self->win,y,x) );
592}
593#endif
594
Guido van Rossumf6971e21994-08-30 12:25:20 +0000595static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000596PyCursesWindow_GetBkgd(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000597{
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000598 if (!PyArg_NoArgs(args))
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000599 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000600 return PyInt_FromLong((long) getbkgd(self->win));
Guido van Rossumf6971e21994-08-30 12:25:20 +0000601}
602
603static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000604PyCursesWindow_GetCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000605{
606 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000607 chtype rtn;
Guido van Rossum85738471995-02-17 13:50:17 +0000608
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000609 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000610 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000611 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000612 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000613 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000614 break;
615 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000616 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000617 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000618 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000619 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000620 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000621 break;
622 default:
623 PyErr_SetString(PyExc_TypeError, "getch requires 0 or 2 arguments");
624 return NULL;
625 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000626 return PyInt_FromLong(rtn);
627}
Guido van Rossum85738471995-02-17 13:50:17 +0000628
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000629static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000630PyCursesWindow_GetKey(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000631{
632 int x, y;
633 chtype rtn;
634
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000635 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000636 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000637 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000638 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000639 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000640 break;
641 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000642 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000643 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000644 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000645 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000646 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000647 break;
648 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000649 PyErr_SetString(PyExc_TypeError, "getkey requires 0 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000650 return NULL;
651 }
652 if (rtn<=255)
653 return Py_BuildValue("c", rtn);
654 else
655 return PyString_FromString((char *)keyname(rtn));
Guido van Rossumf6971e21994-08-30 12:25:20 +0000656}
657
658static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000659PyCursesWindow_GetStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000660{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000661 int x, y, n;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000662 char rtn[1024]; /* This should be big enough.. I hope */
663 int rtn2;
Guido van Rossum85738471995-02-17 13:50:17 +0000664
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000665 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000666 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000667 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000668 rtn2 = wgetstr(self->win,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000669 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000670 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000671 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000672 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000673 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000674 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000675 rtn2 = wgetnstr(self->win,rtn,n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000676 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000677 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000678 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000679 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000680 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000681 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000682 rtn2 = mvwgetstr(self->win,y,x,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000683 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000684 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000685 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000686 if (!PyArg_Parse(args,"(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000687 return NULL;
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000688#ifdef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000689 /* Untested */
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000690 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000691 rtn2 = wmove(self->win,y,x)==ERR ? ERR :
692 wgetnstr(self->win, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000693 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000694#else
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000695 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000696 rtn2 = mvwgetnstr(self->win, y, x, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000697 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000698#endif
699 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000700 default:
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000701 PyErr_SetString(PyExc_TypeError, "getstr requires 0 to 2 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000702 return NULL;
703 }
Guido van Rossumf6971e21994-08-30 12:25:20 +0000704 if (rtn2 == ERR)
705 rtn[0] = 0;
Guido van Rossum85738471995-02-17 13:50:17 +0000706 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000707}
708
709static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000710PyCursesWindow_Hline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000711{
712 PyObject *temp;
713 chtype ch;
714 int n, x, y, code = OK;
715 attr_t attr = A_NORMAL;
716
717 switch (ARG_COUNT(args)) {
718 case 2:
719 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
720 return NULL;
721 break;
722 case 3:
723 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
724 return NULL;
725 break;
726 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000727 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000728 return NULL;
729 code = wmove(self->win, y, x);
730 break;
731 case 5:
732 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
733 &y, &x, &temp, &n, &attr))
734 return NULL;
735 code = wmove(self->win, y, x);
736 default:
737 PyErr_SetString(PyExc_TypeError, "hline requires 2 or 5 arguments");
738 return NULL;
739 }
740
741 if (code != ERR) {
742 if (!PyCurses_ConvertToChtype(temp, &ch)) {
743 PyErr_SetString(PyExc_TypeError,
744 "argument 1 or 3 must be a ch or an int");
745 return NULL;
746 }
747 return PyCursesCheckERR(whline(self->win, ch | attr, n), "hline");
748 } else
749 return PyCursesCheckERR(code, "wmove");
750}
751
752static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000753PyCursesWindow_InsCh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000754{
755 int rtn, x, y, use_xy = FALSE;
756 PyObject *temp;
757 chtype ch = 0;
758 attr_t attr = A_NORMAL;
759
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000760 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000761 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000762 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000763 return NULL;
764 break;
765 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000766 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000767 return NULL;
768 break;
769 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000770 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000771 return NULL;
772 use_xy = TRUE;
773 break;
774 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000775 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr", &y, &x, &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000776 return NULL;
777 use_xy = TRUE;
778 break;
779 default:
780 PyErr_SetString(PyExc_TypeError, "insch requires 1 or 4 arguments");
781 return NULL;
782 }
783
784 if (!PyCurses_ConvertToChtype(temp, &ch)) {
785 PyErr_SetString(PyExc_TypeError,
786 "argument 1 or 3 must be a ch or an int");
787 return NULL;
788 }
789
790 if (use_xy == TRUE)
791 rtn = mvwinsch(self->win,y,x, ch | attr);
792 else {
793 rtn = winsch(self->win, ch | attr);
794 }
795 return PyCursesCheckERR(rtn, "insch");
796}
797
798static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000799PyCursesWindow_InCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000800{
Guido van Rossum85738471995-02-17 13:50:17 +0000801 int x, y, rtn;
802
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000803 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000804 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000805 rtn = winch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000806 break;
807 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000808 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000809 return NULL;
810 rtn = mvwinch(self->win,y,x);
811 break;
812 default:
813 PyErr_SetString(PyExc_TypeError, "inch requires 0 or 2 arguments");
814 return NULL;
815 }
Guido van Rossum85738471995-02-17 13:50:17 +0000816 return PyInt_FromLong((long) rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000817}
818
819static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000820PyCursesWindow_InStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000821{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000822 int x, y, n;
823 char rtn[1024]; /* This should be big enough.. I hope */
824 int rtn2;
825
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000826 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000827 case 0:
828 rtn2 = winstr(self->win,rtn);
829 break;
830 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000831 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000832 return NULL;
833 rtn2 = winnstr(self->win,rtn,n);
834 break;
835 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000836 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000837 return NULL;
838 rtn2 = mvwinstr(self->win,y,x,rtn);
839 break;
840 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000841 if (!PyArg_Parse(args, "(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000842 return NULL;
843 rtn2 = mvwinnstr(self->win, y, x, rtn, n);
844 break;
845 default:
846 PyErr_SetString(PyExc_TypeError, "instr requires 0 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000847 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000848 }
849 if (rtn2 == ERR)
850 rtn[0] = 0;
851 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000852}
853
854static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000855PyCursesWindow_InsStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000856{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000857 int rtn;
858 int x, y;
859 char *str;
860 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
861 int use_xy = FALSE, use_attr = FALSE;
862
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000863 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000864 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000865 if (!PyArg_Parse(args,"s;str", &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000866 return NULL;
867 break;
868 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000869 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000870 return NULL;
871 use_attr = TRUE;
872 break;
873 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000874 if (!PyArg_Parse(args,"(iis);y,x,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000875 return NULL;
876 use_xy = TRUE;
877 break;
878 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000879 if (!PyArg_Parse(args,"(iisl);y,x,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000880 return NULL;
881 use_xy = use_attr = TRUE;
882 break;
883 default:
884 PyErr_SetString(PyExc_TypeError, "insstr requires 1 to 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000885 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000886 }
887
888 if (use_attr == TRUE) {
889 attr_old = getattrs(self->win);
890 wattrset(self->win,attr);
891 }
892 if (use_xy == TRUE)
893 rtn = mvwinsstr(self->win,y,x,str);
894 else
895 rtn = winsstr(self->win,str);
896 if (use_attr == TRUE)
897 wattrset(self->win,attr_old);
898 return PyCursesCheckERR(rtn, "insstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000899}
900
901static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000902PyCursesWindow_InsNStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000903{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000904 int rtn, x, y, n;
905 char *str;
906 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
907 int use_xy = FALSE, use_attr = FALSE;
908
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000909 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000910 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000911 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000912 return NULL;
913 break;
914 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000915 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000916 return NULL;
917 use_attr = TRUE;
918 break;
919 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000920 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000921 return NULL;
922 use_xy = TRUE;
923 break;
924 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000925 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000926 return NULL;
927 use_xy = use_attr = TRUE;
928 break;
929 default:
930 PyErr_SetString(PyExc_TypeError, "insnstr requires 2 to 5 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000931 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000932 }
933
934 if (use_attr == TRUE) {
935 attr_old = getattrs(self->win);
936 wattrset(self->win,attr);
937 }
938 if (use_xy == TRUE)
939 rtn = mvwinsnstr(self->win,y,x,str,n);
940 else
941 rtn = winsnstr(self->win,str,n);
942 if (use_attr == TRUE)
943 wattrset(self->win,attr_old);
944 return PyCursesCheckERR(rtn, "insnstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000945}
946
947static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000948PyCursesWindow_Is_LineTouched(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000949{
950 int line, erg;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000951 if (!PyArg_Parse(args,"i;line", &line))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000952 return NULL;
953 erg = is_linetouched(self->win, line);
954 if (erg == ERR) {
955 PyErr_SetString(PyExc_TypeError,
956 "is_linetouched: line number outside of boundaries");
957 return NULL;
958 } else
959 if (erg == FALSE) {
960 Py_INCREF(Py_False);
961 return Py_False;
962 } else {
963 Py_INCREF(Py_True);
964 return Py_True;
965 }
966}
967
968static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000969PyCursesWindow_NoOutRefresh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000970{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000971 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000972 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000973
974 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000975 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000976 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000977 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000978 "(iiiiii);" \
979 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
980 &pminrow, &pmincol, &sminrow,
981 &smincol, &smaxrow, &smaxcol))
982 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000983 Py_BEGIN_ALLOW_THREADS
984 rtn = pnoutrefresh(self->win,
985 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +0000986 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000987 Py_END_ALLOW_THREADS
988 return PyCursesCheckERR(rtn, "pnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000989 default:
990 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000991 "noutrefresh() called for a pad "
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000992 "requires 6 arguments");
993 return NULL;
994 }
995 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000996 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000997 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000998
999 Py_BEGIN_ALLOW_THREADS
1000 rtn = wnoutrefresh(self->win);
1001 Py_END_ALLOW_THREADS
1002 return PyCursesCheckERR(rtn, "wnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001003 }
1004}
1005
1006static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001007PyCursesWindow_PutWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001008{
1009 PyObject *temp;
1010
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001011 if (!PyArg_Parse(args, "O;fileobj", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +00001012 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001013 if (!PyFile_Check(temp)) {
1014 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1015 return NULL;
1016 }
1017 return PyCursesCheckERR(putwin(self->win, PyFile_AsFile(temp)),
1018 "putwin");
1019}
1020
1021static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001022PyCursesWindow_RedrawLine(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001023{
1024 int beg, num;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001025 if (!PyArg_Parse(args,"(ii);beg,num", &beg, &num))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001026 return NULL;
1027 return PyCursesCheckERR(wredrawln(self->win,beg,num), "redrawln");
1028}
1029
1030static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001031PyCursesWindow_Refresh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001032{
1033 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001034 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001035
1036 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001037 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001038 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001039 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001040 "(iiiiii);" \
1041 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
1042 &pminrow, &pmincol, &sminrow,
1043 &smincol, &smaxrow, &smaxcol))
1044 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001045
1046 Py_BEGIN_ALLOW_THREADS
1047 rtn = prefresh(self->win,
1048 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +00001049 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001050 Py_END_ALLOW_THREADS
1051 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001052 default:
1053 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001054 "refresh() for a pad requires 6 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001055 return NULL;
1056 }
1057 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001058 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001059 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001060 Py_BEGIN_ALLOW_THREADS
1061 rtn = wrefresh(self->win);
1062 Py_END_ALLOW_THREADS
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001063 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001064 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001065}
1066
1067static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001068PyCursesWindow_SetScrollRegion(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001069{
1070 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001071 if (!PyArg_Parse(args,"(ii);top, bottom",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +00001072 return NULL;
1073 return PyCursesCheckERR(wsetscrreg(self->win,y,x), "wsetscrreg");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001074}
1075
1076static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001077PyCursesWindow_SubWin(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001078{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001079 WINDOW *win;
1080 int nlines, ncols, begin_y, begin_x;
1081
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001082 nlines = 0;
1083 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001084 switch (ARG_COUNT(args)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001085 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001086 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001087 return NULL;
1088 break;
1089 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001090 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001091 &nlines,&ncols,&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001092 return NULL;
1093 break;
1094 default:
1095 PyErr_SetString(PyExc_TypeError, "subwin requires 2 or 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001096 return NULL;
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001097 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001098
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001099 printf("Subwin: %i %i %i %i \n", nlines, ncols, begin_y, begin_x);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001100 if (self->win->_flags & _ISPAD)
1101 win = subpad(self->win, nlines, ncols, begin_y, begin_x);
1102 else
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001103 win = subwin(self->win, nlines, ncols, begin_y, begin_x);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001104
1105 if (win == NULL) {
1106 PyErr_SetString(PyCursesError, catchall_NULL);
1107 return NULL;
1108 }
1109
1110 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001111}
1112
1113static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001114PyCursesWindow_Scroll(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001115{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001116 int lines;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001117 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001118 case 0:
1119 return PyCursesCheckERR(scroll(self->win), "scroll");
1120 break;
1121 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001122 if (!PyArg_Parse(args, "i;lines", &lines))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001123 return NULL;
1124 return PyCursesCheckERR(wscrl(self->win, lines), "scroll");
1125 default:
1126 PyErr_SetString(PyExc_TypeError, "scroll requires 0 or 1 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001127 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001128 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001129}
1130
1131static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001132PyCursesWindow_TouchLine(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001133{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001134 int st, cnt, val;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001135 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001136 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001137 if (!PyArg_Parse(args,"(ii);start,count",&st,&cnt))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001138 return NULL;
1139 return PyCursesCheckERR(touchline(self->win,st,cnt), "touchline");
1140 break;
1141 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001142 if (!PyArg_Parse(args, "(iii);start,count,val", &st, &cnt, &val))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001143 return NULL;
1144 return PyCursesCheckERR(wtouchln(self->win, st, cnt, val), "touchline");
1145 default:
1146 PyErr_SetString(PyExc_TypeError, "touchline requires 2 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001147 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001148 }
1149}
1150
1151static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001152PyCursesWindow_Vline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001153{
1154 PyObject *temp;
1155 chtype ch;
1156 int n, x, y, code = OK;
1157 attr_t attr = A_NORMAL;
1158
1159 switch (ARG_COUNT(args)) {
1160 case 2:
1161 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
1162 return NULL;
1163 break;
1164 case 3:
1165 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
1166 return NULL;
1167 break;
1168 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001169 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001170 return NULL;
1171 code = wmove(self->win, y, x);
1172 break;
1173 case 5:
1174 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
1175 &y, &x, &temp, &n, &attr))
1176 return NULL;
1177 code = wmove(self->win, y, x);
1178 default:
1179 PyErr_SetString(PyExc_TypeError, "vline requires 2 or 5 arguments");
1180 return NULL;
1181 }
1182
1183 if (code != ERR) {
1184 if (!PyCurses_ConvertToChtype(temp, &ch)) {
1185 PyErr_SetString(PyExc_TypeError,
1186 "argument 1 or 3 must be a ch or an int");
1187 return NULL;
1188 }
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001189 return PyCursesCheckERR(wvline(self->win, ch | attr, n), "vline");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001190 } else
1191 return PyCursesCheckERR(code, "wmove");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001192}
1193
1194static PyMethodDef PyCursesWindow_Methods[] = {
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001195 {"addch", (PyCFunction)PyCursesWindow_AddCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001196 {"addnstr", (PyCFunction)PyCursesWindow_AddNStr},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001197 {"addstr", (PyCFunction)PyCursesWindow_AddStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001198 {"attroff", (PyCFunction)PyCursesWindow_wattroff},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001199 {"attron", (PyCFunction)PyCursesWindow_wattron},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001200 {"attrset", (PyCFunction)PyCursesWindow_wattrset},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001201 {"bkgd", (PyCFunction)PyCursesWindow_Bkgd},
1202 {"bkgdset", (PyCFunction)PyCursesWindow_BkgdSet},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001203 {"border", (PyCFunction)PyCursesWindow_Border, METH_VARARGS},
1204 {"box", (PyCFunction)PyCursesWindow_Box},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001205 {"clear", (PyCFunction)PyCursesWindow_wclear},
1206 {"clearok", (PyCFunction)PyCursesWindow_clearok},
1207 {"clrtobot", (PyCFunction)PyCursesWindow_wclrtobot},
1208 {"clrtoeol", (PyCFunction)PyCursesWindow_wclrtoeol},
1209 {"cursyncup", (PyCFunction)PyCursesWindow_wcursyncup},
1210 {"delch", (PyCFunction)PyCursesWindow_DelCh},
1211 {"deleteln", (PyCFunction)PyCursesWindow_wdeleteln},
1212 {"derwin", (PyCFunction)PyCursesWindow_DerWin},
1213 {"echochar", (PyCFunction)PyCursesWindow_EchoChar},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001214#ifdef NCURSES_MOUSE_VERSION
1215 {"enclose", (PyCFunction)PyCursesWindow_Enclose},
1216#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001217 {"erase", (PyCFunction)PyCursesWindow_werase},
1218 {"getbegyx", (PyCFunction)PyCursesWindow_getbegyx},
1219 {"getbkgd", (PyCFunction)PyCursesWindow_GetBkgd},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001220 {"getch", (PyCFunction)PyCursesWindow_GetCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001221 {"getkey", (PyCFunction)PyCursesWindow_GetKey},
1222 {"getmaxyx", (PyCFunction)PyCursesWindow_getmaxyx},
1223 {"getparyx", (PyCFunction)PyCursesWindow_getparyx},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001224 {"getstr", (PyCFunction)PyCursesWindow_GetStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001225 {"getyx", (PyCFunction)PyCursesWindow_getyx},
1226 {"hline", (PyCFunction)PyCursesWindow_Hline},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001227 {"idcok", (PyCFunction)PyCursesWindow_idcok},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001228 {"idlok", (PyCFunction)PyCursesWindow_idlok},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001229 {"immedok", (PyCFunction)PyCursesWindow_immedok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001230 {"inch", (PyCFunction)PyCursesWindow_InCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001231 {"insch", (PyCFunction)PyCursesWindow_InsCh},
1232 {"insdelln", (PyCFunction)PyCursesWindow_winsdelln},
1233 {"insertln", (PyCFunction)PyCursesWindow_winsertln},
1234 {"insnstr", (PyCFunction)PyCursesWindow_InsNStr},
1235 {"insstr", (PyCFunction)PyCursesWindow_InsStr},
1236 {"instr", (PyCFunction)PyCursesWindow_InStr},
1237 {"is_linetouched", (PyCFunction)PyCursesWindow_Is_LineTouched},
1238 {"is_wintouched", (PyCFunction)PyCursesWindow_is_wintouched},
1239 {"keypad", (PyCFunction)PyCursesWindow_keypad},
1240 {"leaveok", (PyCFunction)PyCursesWindow_leaveok},
1241 {"move", (PyCFunction)PyCursesWindow_wmove},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001242 {"mvderwin", (PyCFunction)PyCursesWindow_mvderwin},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001243 {"mvwin", (PyCFunction)PyCursesWindow_mvwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001244 {"nodelay", (PyCFunction)PyCursesWindow_nodelay},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001245 {"notimeout", (PyCFunction)PyCursesWindow_notimeout},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001246 {"noutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001247 {"putwin", (PyCFunction)PyCursesWindow_PutWin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001248 {"redrawln", (PyCFunction)PyCursesWindow_RedrawLine},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001249 {"redrawwin", (PyCFunction)PyCursesWindow_redrawwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001250 {"refresh", (PyCFunction)PyCursesWindow_Refresh},
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00001251#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001252 {"resize", (PyCFunction)PyCursesWindow_wresize},
1253#endif
1254 {"scroll", (PyCFunction)PyCursesWindow_Scroll},
1255 {"scrollok", (PyCFunction)PyCursesWindow_scrollok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001256 {"setscrreg", (PyCFunction)PyCursesWindow_SetScrollRegion},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001257 {"standend", (PyCFunction)PyCursesWindow_wstandend},
1258 {"standout", (PyCFunction)PyCursesWindow_wstandout},
1259 {"subpad", (PyCFunction)PyCursesWindow_SubWin},
1260 {"subwin", (PyCFunction)PyCursesWindow_SubWin},
1261 {"syncdown", (PyCFunction)PyCursesWindow_wsyncdown},
1262 {"syncok", (PyCFunction)PyCursesWindow_syncok},
1263 {"syncup", (PyCFunction)PyCursesWindow_wsyncup},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00001264 {"timeout", (PyCFunction)PyCursesWindow_wtimeout},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001265 {"touchline", (PyCFunction)PyCursesWindow_TouchLine},
1266 {"touchwin", (PyCFunction)PyCursesWindow_touchwin},
1267 {"untouchwin", (PyCFunction)PyCursesWindow_untouchwin},
1268 {"vline", (PyCFunction)PyCursesWindow_Vline},
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001269 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00001270};
1271
1272static PyObject *
1273PyCursesWindow_GetAttr(self, name)
1274 PyCursesWindowObject *self;
1275 char *name;
1276{
Guido van Rossuma597dde1995-01-10 20:56:29 +00001277 return Py_FindMethod(PyCursesWindow_Methods, (PyObject *)self, name);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001278}
1279
Guido van Rossumf6971e21994-08-30 12:25:20 +00001280/* -------------------------------------------------------*/
Guido van Rossum85738471995-02-17 13:50:17 +00001281
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001282PyTypeObject PyCursesWindow_Type = {
Guido van Rossumf6971e21994-08-30 12:25:20 +00001283 PyObject_HEAD_INIT(&PyType_Type)
1284 0, /*ob_size*/
1285 "curses window", /*tp_name*/
1286 sizeof(PyCursesWindowObject), /*tp_basicsize*/
1287 0, /*tp_itemsize*/
1288 /* methods */
1289 (destructor)PyCursesWindow_Dealloc, /*tp_dealloc*/
1290 0, /*tp_print*/
1291 (getattrfunc)PyCursesWindow_GetAttr, /*tp_getattr*/
1292 (setattrfunc)0, /*tp_setattr*/
1293 0, /*tp_compare*/
1294 0, /*tp_repr*/
1295 0, /*tp_as_number*/
1296 0, /*tp_as_sequence*/
1297 0, /*tp_as_mapping*/
1298 0, /*tp_hash*/
1299};
1300
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001301/*********************************************************************
1302 Global Functions
1303**********************************************************************/
Guido van Rossumf6971e21994-08-30 12:25:20 +00001304
Guido van Rossume4485b01994-09-07 14:32:49 +00001305static PyObject *ModDict;
1306
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001307/* Function Prototype Macros - They are ugly but very, very useful. ;-)
1308
1309 X - function name
1310 TYPE - parameter Type
1311 ERGSTR - format string for construction of the return value
1312 PARSESTR - format string for argument parsing
1313 */
1314
1315#define NoArgNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001316static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001317{ \
1318 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001319 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001320 return PyCursesCheckERR(X(), # X); }
1321
1322#define NoArgOrFlagNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001323static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001324{ \
1325 int flag = 0; \
1326 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001327 switch(ARG_COUNT(args)) { \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001328 case 0: \
1329 return PyCursesCheckERR(X(), # X); \
1330 case 1: \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001331 if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001332 if (flag) return PyCursesCheckERR(X(), # X); \
1333 else return PyCursesCheckERR(no ## X (), # X); \
1334 default: \
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001335 PyErr_SetString(PyExc_TypeError, # X " requires 0 or 1 arguments"); \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001336 return NULL; } }
1337
1338#define NoArgReturnIntFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001339static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001340{ \
1341 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001342 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001343 return PyInt_FromLong((long) X()); }
1344
1345
1346#define NoArgReturnStringFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001347static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001348{ \
1349 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001350 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001351 return PyString_FromString(X()); }
1352
1353#define NoArgTrueFalseFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001354static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001355{ \
1356 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001357 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001358 if (X () == FALSE) { \
1359 Py_INCREF(Py_False); \
1360 return Py_False; \
1361 } \
1362 Py_INCREF(Py_True); \
1363 return Py_True; }
1364
1365#define NoArgNoReturnVoidFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001366static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001367{ \
1368 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001369 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001370 X(); \
1371 Py_INCREF(Py_None); \
1372 return Py_None; }
1373
1374NoArgNoReturnFunction(beep)
1375NoArgNoReturnFunction(def_prog_mode)
1376NoArgNoReturnFunction(def_shell_mode)
1377NoArgNoReturnFunction(doupdate)
1378NoArgNoReturnFunction(endwin)
1379NoArgNoReturnFunction(flash)
1380NoArgNoReturnFunction(nocbreak)
1381NoArgNoReturnFunction(noecho)
1382NoArgNoReturnFunction(nonl)
1383NoArgNoReturnFunction(noraw)
1384NoArgNoReturnFunction(reset_prog_mode)
1385NoArgNoReturnFunction(reset_shell_mode)
1386NoArgNoReturnFunction(resetty)
1387NoArgNoReturnFunction(savetty)
1388
1389NoArgOrFlagNoReturnFunction(cbreak)
1390NoArgOrFlagNoReturnFunction(echo)
1391NoArgOrFlagNoReturnFunction(nl)
1392NoArgOrFlagNoReturnFunction(raw)
1393
1394NoArgReturnIntFunction(baudrate)
1395NoArgReturnIntFunction(termattrs)
1396
1397NoArgReturnStringFunction(termname)
1398NoArgReturnStringFunction(longname)
1399
1400NoArgTrueFalseFunction(can_change_color)
1401NoArgTrueFalseFunction(has_colors)
1402NoArgTrueFalseFunction(has_ic)
1403NoArgTrueFalseFunction(has_il)
1404NoArgTrueFalseFunction(isendwin)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001405NoArgNoReturnVoidFunction(filter)
1406NoArgNoReturnVoidFunction(flushinp)
1407NoArgNoReturnVoidFunction(noqiflush)
1408
1409static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001410PyCurses_Color_Content(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001411{
1412 short color,r,g,b;
1413
1414 PyCursesInitialised
1415 PyCursesInitialisedColor
1416
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001417 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001418 PyErr_SetString(PyExc_TypeError,
1419 "color_content requires 1 argument");
1420 return NULL;
1421 }
1422
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001423 if (!PyArg_Parse(args, "h;color", &color)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001424
1425 if (color_content(color, &r, &g, &b) != ERR)
1426 return Py_BuildValue("(iii)", r, g, b);
1427 else {
1428 PyErr_SetString(PyCursesError,
1429 "Argument 1 was out of range. Check value of COLORS.");
1430 return NULL;
1431 }
1432}
1433
1434static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001435PyCurses_color_pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001436{
1437 int n;
1438
1439 PyCursesInitialised
1440 PyCursesInitialisedColor
1441
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001442 if (ARG_COUNT(args)!=1) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001443 PyErr_SetString(PyExc_TypeError, "color_pair requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001444 return NULL;
1445 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001446 if (!PyArg_Parse(args, "i;number", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001447 return PyInt_FromLong((long) (n << 8));
1448}
1449
1450static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001451PyCurses_Curs_Set(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001452{
1453 int vis,erg;
1454
1455 PyCursesInitialised
1456
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001457 if (ARG_COUNT(args)==1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001458 PyErr_SetString(PyExc_TypeError, "curs_set requires 1 argument");
1459 return NULL;
1460 }
1461
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001462 if (!PyArg_Parse(args, "i;int", &vis)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001463
1464 erg = curs_set(vis);
1465 if (erg == ERR) return PyCursesCheckERR(erg, "curs_set");
1466
1467 return PyInt_FromLong((long) erg);
1468}
1469
1470static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001471PyCurses_Delay_Output(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001472{
1473 int ms;
1474
1475 PyCursesInitialised
1476
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001477 if (ARG_COUNT(args)==1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001478 PyErr_SetString(PyExc_TypeError, "delay_output requires 1 argument");
1479 return NULL;
1480 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001481 if (!PyArg_Parse(args, "i;ms", &ms)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001482
1483 return PyCursesCheckERR(delay_output(ms), "delay_output");
1484}
1485
1486static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001487PyCurses_EraseChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001488{
1489 char ch;
1490
1491 PyCursesInitialised
1492
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001493 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001494
1495 ch = erasechar();
1496
1497 return PyString_FromString(&ch);
1498}
1499
1500static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001501PyCurses_getsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001502{
1503 int x,y;
1504
1505 PyCursesInitialised
1506
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001507 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001508
1509 getsyx(y, x);
1510
1511 return Py_BuildValue("(ii)", y, x);
1512}
1513
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001514#ifdef NCURSES_MOUSE_VERSION
1515static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001516PyCurses_GetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001517{
1518 int rtn;
1519 MEVENT event;
1520
1521 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001522 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001523
1524 rtn = getmouse( &event );
1525 if (rtn == ERR) {
1526 PyErr_SetString(PyCursesError, "getmouse() returned ERR");
1527 return NULL;
1528 }
1529 return Py_BuildValue("(hiiil)",
1530 (short)event.id,
1531 event.x, event.y, event.z,
1532 (long) event.bstate);
1533}
1534
1535static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001536PyCurses_UngetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001537{
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001538 MEVENT event;
1539
1540 PyCursesInitialised
1541 if (!PyArg_ParseTuple(args, "(hiiil)",
1542 &event.id,
1543 &event.x, &event.y, &event.z,
1544 (int *) &event.bstate))
1545 return NULL;
1546
1547 return PyCursesCheckERR(ungetmouse(&event), "ungetmouse");
1548}
1549#endif
1550
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001551static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001552PyCurses_GetWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001553{
1554 WINDOW *win;
1555 PyObject *temp;
1556
1557 PyCursesInitialised
1558
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001559 if (!PyArg_Parse(args, "O;fileobj", &temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001560
1561 if (!PyFile_Check(temp)) {
1562 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1563 return NULL;
1564 }
1565
1566 win = getwin(PyFile_AsFile(temp));
1567
1568 if (win == NULL) {
1569 PyErr_SetString(PyCursesError, catchall_NULL);
1570 return NULL;
1571 }
1572
1573 return PyCursesWindow_New(win);
1574}
1575
1576static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001577PyCurses_HalfDelay(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001578{
1579 unsigned char tenths;
1580
1581 PyCursesInitialised
1582
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001583 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001584 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001585 if (!PyArg_Parse(args, "b;tenths", &tenths)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001586 break;
1587 default:
1588 PyErr_SetString(PyExc_TypeError, "halfdelay requires 1 argument");
1589 return NULL;
1590 }
1591
1592 return PyCursesCheckERR(halfdelay(tenths), "halfdelay");
1593}
1594
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001595#if !defined(__sgi__) && !defined(__sun__)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001596 /* No has_key! */
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001597static PyObject * PyCurses_has_key(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001598{
1599 int ch;
1600
1601 PyCursesInitialised
1602
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001603 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001604
1605 if (has_key(ch) == FALSE) {
1606 Py_INCREF(Py_False);
1607 return Py_False;
1608 }
1609 Py_INCREF(Py_True);
1610 return Py_True;
1611}
1612#endif
1613
1614static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001615PyCurses_Init_Color(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001616{
1617 short color, r, g, b;
1618
1619 PyCursesInitialised
1620 PyCursesInitialisedColor
1621
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001622 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001623 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001624 if (!PyArg_Parse(args, "(hhhh);color,r,g,b", &color, &r, &g, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001625 break;
1626 default:
1627 PyErr_SetString(PyExc_TypeError, "init_color requires 4 arguments");
1628 return NULL;
1629 }
1630
1631 return PyCursesCheckERR(init_color(color, r, g, b), "init_color");
1632}
1633
1634static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001635PyCurses_Init_Pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001636{
1637 short pair, f, b;
1638
1639 PyCursesInitialised
1640 PyCursesInitialisedColor
1641
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001642 if (ARG_COUNT(args) == 3) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001643 PyErr_SetString(PyExc_TypeError, "init_pair requires 3 arguments");
1644 return NULL;
1645 }
1646
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001647 if (!PyArg_Parse(args, "(hhh);pair, f, b", &pair, &f, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001648
1649 return PyCursesCheckERR(init_pair(pair, f, b), "init_pair");
1650}
1651
Guido van Rossumf6971e21994-08-30 12:25:20 +00001652static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001653PyCurses_InitScr(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001654{
Guido van Rossum56bf2351994-08-31 22:06:24 +00001655 WINDOW *win;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001656 PyObject *lines, *cols;
1657
1658 if (!PyArg_NoArgs(args)) return NULL;
1659
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001660 if (initialised == TRUE) {
Guido van Rossumf6971e21994-08-30 12:25:20 +00001661 wrefresh(stdscr);
1662 return (PyObject *)PyCursesWindow_New(stdscr);
1663 }
Guido van Rossum56bf2351994-08-31 22:06:24 +00001664
1665 win = initscr();
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001666
Guido van Rossum85738471995-02-17 13:50:17 +00001667 if (win == NULL) {
1668 PyErr_SetString(PyCursesError, catchall_NULL);
1669 return NULL;
1670 }
1671
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001672 initialised = TRUE;
Guido van Rossum56bf2351994-08-31 22:06:24 +00001673
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001674/* This was moved from initcurses() because it core dumped on SGI,
1675 where they're not defined until you've called initscr() */
1676#define SetDictInt(string,ch) \
1677 PyDict_SetItemString(ModDict,string,PyInt_FromLong((long) (ch)));
1678
1679 /* Here are some graphic symbols you can use */
1680 SetDictInt("ACS_ULCORNER", (ACS_ULCORNER));
1681 SetDictInt("ACS_LLCORNER", (ACS_LLCORNER));
1682 SetDictInt("ACS_URCORNER", (ACS_URCORNER));
1683 SetDictInt("ACS_LRCORNER", (ACS_LRCORNER));
1684 SetDictInt("ACS_LTEE", (ACS_LTEE));
1685 SetDictInt("ACS_RTEE", (ACS_RTEE));
1686 SetDictInt("ACS_BTEE", (ACS_BTEE));
1687 SetDictInt("ACS_TTEE", (ACS_TTEE));
1688 SetDictInt("ACS_HLINE", (ACS_HLINE));
1689 SetDictInt("ACS_VLINE", (ACS_VLINE));
1690 SetDictInt("ACS_PLUS", (ACS_PLUS));
1691 SetDictInt("ACS_S1", (ACS_S1));
1692 SetDictInt("ACS_S9", (ACS_S9));
1693 SetDictInt("ACS_DIAMOND", (ACS_DIAMOND));
1694 SetDictInt("ACS_CKBOARD", (ACS_CKBOARD));
1695 SetDictInt("ACS_DEGREE", (ACS_DEGREE));
1696 SetDictInt("ACS_PLMINUS", (ACS_PLMINUS));
1697 SetDictInt("ACS_BULLET", (ACS_BULLET));
1698 SetDictInt("ACS_LARROW", (ACS_LARROW));
1699 SetDictInt("ACS_RARROW", (ACS_RARROW));
1700 SetDictInt("ACS_DARROW", (ACS_DARROW));
1701 SetDictInt("ACS_UARROW", (ACS_UARROW));
1702 SetDictInt("ACS_BOARD", (ACS_BOARD));
1703 SetDictInt("ACS_LANTERN", (ACS_LANTERN));
1704 SetDictInt("ACS_BLOCK", (ACS_BLOCK));
1705 SetDictInt("ACS_BSSB", (ACS_ULCORNER));
1706 SetDictInt("ACS_SSBB", (ACS_LLCORNER));
1707 SetDictInt("ACS_BBSS", (ACS_URCORNER));
1708 SetDictInt("ACS_SBBS", (ACS_LRCORNER));
1709 SetDictInt("ACS_SBSS", (ACS_RTEE));
1710 SetDictInt("ACS_SSSB", (ACS_LTEE));
1711 SetDictInt("ACS_SSBS", (ACS_BTEE));
1712 SetDictInt("ACS_BSSS", (ACS_TTEE));
1713 SetDictInt("ACS_BSBS", (ACS_HLINE));
1714 SetDictInt("ACS_SBSB", (ACS_VLINE));
1715 SetDictInt("ACS_SSSS", (ACS_PLUS));
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00001716#ifndef STRICT_SYSV_CURSES
1717 /* The following are never available with strict SYSV curses */
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001718 SetDictInt("ACS_S3", (ACS_S3));
1719 SetDictInt("ACS_LEQUAL", (ACS_LEQUAL));
1720 SetDictInt("ACS_GEQUAL", (ACS_GEQUAL));
1721 SetDictInt("ACS_PI", (ACS_PI));
1722 SetDictInt("ACS_NEQUAL", (ACS_NEQUAL));
1723 SetDictInt("ACS_STERLING", (ACS_STERLING));
1724#endif
1725
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001726 lines = PyInt_FromLong((long) LINES);
1727 PyDict_SetItemString(ModDict, "LINES", lines);
1728 Py_DECREF(lines);
1729 cols = PyInt_FromLong((long) COLS);
1730 PyDict_SetItemString(ModDict, "COLS", cols);
1731 Py_DECREF(cols);
Guido van Rossum56bf2351994-08-31 22:06:24 +00001732
1733 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001734}
1735
Guido van Rossumf6971e21994-08-30 12:25:20 +00001736
1737static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001738PyCurses_IntrFlush(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001739{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001740 int ch;
1741
1742 PyCursesInitialised
1743
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001744 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001745 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001746 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001747 break;
1748 default:
1749 PyErr_SetString(PyExc_TypeError, "intrflush requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00001750 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001751 }
1752
1753 return PyCursesCheckERR(intrflush(NULL,ch), "intrflush");
1754}
1755
1756static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001757PyCurses_KeyName(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001758{
1759 const char *knp;
1760 int ch;
1761
1762 PyCursesInitialised
1763
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001764 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001765
1766 knp = keyname(ch);
1767
1768 return PyString_FromString((knp == NULL) ? "" : (char *)knp);
1769}
1770
1771static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001772PyCurses_KillChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001773{
1774 char ch;
1775
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001776 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001777
1778 ch = killchar();
1779
1780 return PyString_FromString(&ch);
1781}
1782
1783static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001784PyCurses_Meta(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001785{
1786 int ch;
1787
1788 PyCursesInitialised
1789
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001790 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001791 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001792 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001793 break;
1794 default:
1795 PyErr_SetString(PyExc_TypeError, "meta requires 1 argument");
1796 return NULL;
1797 }
1798
1799 return PyCursesCheckERR(meta(stdscr, ch), "meta");
1800}
1801
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001802#ifdef NCURSES_MOUSE_VERSION
1803static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001804PyCurses_MouseInterval(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001805{
1806 int interval;
1807 PyCursesInitialised
1808
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001809 if (!PyArg_Parse(args,"i;interval",&interval))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001810 return NULL;
1811 return PyCursesCheckERR(mouseinterval(interval), "mouseinterval");
1812}
1813
1814static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001815PyCurses_MouseMask(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001816{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00001817 int newmask;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001818 mmask_t oldmask, availmask;
1819
1820 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001821 if (!PyArg_Parse(args,"i;mousemask",&newmask))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001822 return NULL;
1823 availmask = mousemask(newmask, &oldmask);
1824 return Py_BuildValue("(ll)", (long)availmask, (long)oldmask);
1825}
1826#endif
1827
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001828static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001829PyCurses_NewPad(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001830{
1831 WINDOW *win;
1832 int nlines, ncols;
1833
1834 PyCursesInitialised
1835
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001836 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001837
1838 win = newpad(nlines, ncols);
1839
1840 if (win == NULL) {
1841 PyErr_SetString(PyCursesError, catchall_NULL);
1842 return NULL;
1843 }
1844
1845 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001846}
1847
1848static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001849PyCurses_NewWindow(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001850{
1851 WINDOW *win;
1852 int nlines, ncols, begin_y, begin_x;
Guido van Rossum85738471995-02-17 13:50:17 +00001853
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001854 PyCursesInitialised
1855
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001856 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +00001857 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001858 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols))
Guido van Rossum85738471995-02-17 13:50:17 +00001859 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001860 win = newpad(nlines, ncols);
Guido van Rossum85738471995-02-17 13:50:17 +00001861 break;
1862 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001863 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Guido van Rossumf6971e21994-08-30 12:25:20 +00001864 &nlines,&ncols,&begin_y,&begin_x))
Guido van Rossum85738471995-02-17 13:50:17 +00001865 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001866 win = newwin(nlines,ncols,begin_y,begin_x);
Guido van Rossum85738471995-02-17 13:50:17 +00001867 break;
1868 default:
1869 PyErr_SetString(PyExc_TypeError, "newwin requires 2 or 4 arguments");
1870 return NULL;
1871 }
1872
Guido van Rossumf6971e21994-08-30 12:25:20 +00001873 if (win == NULL) {
Guido van Rossum85738471995-02-17 13:50:17 +00001874 PyErr_SetString(PyCursesError, catchall_NULL);
1875 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +00001876 }
Guido van Rossum85738471995-02-17 13:50:17 +00001877
Guido van Rossumf6971e21994-08-30 12:25:20 +00001878 return (PyObject *)PyCursesWindow_New(win);
1879}
1880
1881static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001882PyCurses_Pair_Content(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001883{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001884 short pair,f,b;
1885
1886 PyCursesInitialised
1887 PyCursesInitialisedColor
1888
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001889 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001890 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001891 if (!PyArg_Parse(args, "h;pair", &pair)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001892 break;
1893 default:
1894 PyErr_SetString(PyExc_TypeError, "pair_content requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00001895 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001896 }
1897
1898 if (!pair_content(pair, &f, &b)) {
1899 PyErr_SetString(PyCursesError,
1900 "Argument 1 was out of range. (1..COLOR_PAIRS-1)");
1901 return NULL;
1902 }
1903
1904 return Py_BuildValue("(ii)", f, b);
1905}
1906
1907static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001908PyCurses_pair_number(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001909{
1910 int n;
1911
1912 PyCursesInitialised
1913 PyCursesInitialisedColor
1914
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001915 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001916 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001917 if (!PyArg_Parse(args, "i;pairvalue", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001918 break;
1919 default:
1920 PyErr_SetString(PyExc_TypeError,
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001921 "pair_number requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001922 return NULL;
1923 }
1924
1925 return PyInt_FromLong((long) ((n & A_COLOR) >> 8));
1926}
1927
1928static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001929PyCurses_Putp(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001930{
1931 char *str;
1932
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001933 if (!PyArg_Parse(args,"s;str", &str)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001934 return PyCursesCheckERR(putp(str), "putp");
1935}
1936
1937static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001938PyCurses_QiFlush(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001939{
1940 int flag = 0;
1941
1942 PyCursesInitialised
1943
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001944 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001945 case 0:
1946 qiflush();
1947 Py_INCREF(Py_None);
1948 return Py_None;
1949 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001950 if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001951 if (flag) qiflush();
1952 else noqiflush();
1953 Py_INCREF(Py_None);
1954 return Py_None;
1955 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001956 PyErr_SetString(PyExc_TypeError, "qiflush requires 0 or 1 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001957 return NULL;
1958 }
1959}
1960
1961static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001962PyCurses_setsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001963{
1964 int y,x;
1965
1966 PyCursesInitialised
1967
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001968 if (ARG_COUNT(args)!=2) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001969 PyErr_SetString(PyExc_TypeError, "setsyx requires 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001970 return NULL;
1971 }
1972
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001973 if (!PyArg_Parse(args, "(ii);y, x", &y, &x)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001974
1975 setsyx(y,x);
1976
Guido van Rossumf6971e21994-08-30 12:25:20 +00001977 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00001978 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00001979}
1980
1981static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001982PyCurses_Start_Color(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001983{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001984 int code;
1985 PyObject *c, *cp;
1986
1987 PyCursesInitialised
1988
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001989 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001990
1991 code = start_color();
1992 if (code != ERR) {
1993 initialisedcolors = TRUE;
1994 c = PyInt_FromLong((long) COLORS);
1995 PyDict_SetItemString(ModDict, "COLORS", c);
1996 Py_DECREF(c);
1997 cp = PyInt_FromLong((long) COLOR_PAIRS);
1998 PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp);
1999 Py_DECREF(cp);
2000 Py_INCREF(Py_None);
2001 return Py_None;
2002 } else {
2003 PyErr_SetString(PyCursesError, "start_color() returned ERR");
Guido van Rossum85738471995-02-17 13:50:17 +00002004 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002005 }
2006}
2007
2008static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002009PyCurses_TypeAhead(PyObject *self, PyObject *args)
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002010{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002011 int fd;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002012
2013 PyCursesInitialised
2014
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002015 if (!PyArg_Parse(args,"i;fd",&fd)) return NULL;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002016
2017 PyCursesCheckERR(typeahead( fd ), "typeahead");
2018 Py_INCREF(Py_None);
2019 return Py_None;
2020}
2021
2022static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002023PyCurses_UnCtrl(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002024{
2025 PyObject *temp;
2026 chtype ch;
2027
2028 PyCursesInitialised
2029
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002030 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002031
2032 if (PyInt_Check(temp))
2033 ch = (chtype) PyInt_AsLong(temp);
2034 else if (PyString_Check(temp))
2035 ch = (chtype) *PyString_AsString(temp);
2036 else {
2037 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
2038 return NULL;
2039 }
2040
2041 return PyString_FromString(unctrl(ch));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002042}
2043
2044static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002045PyCurses_UngetCh(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002046{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002047 PyObject *temp;
2048 chtype ch;
2049
2050 PyCursesInitialised
2051
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002052 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002053
2054 if (PyInt_Check(temp))
2055 ch = (chtype) PyInt_AsLong(temp);
2056 else if (PyString_Check(temp))
2057 ch = (chtype) *PyString_AsString(temp);
2058 else {
2059 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +00002060 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002061 }
2062
Guido van Rossum85738471995-02-17 13:50:17 +00002063 return PyCursesCheckERR(ungetch(ch), "ungetch");
Guido van Rossumf6971e21994-08-30 12:25:20 +00002064}
2065
2066static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002067PyCurses_Use_Env(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002068{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002069 int flag;
2070
2071 PyCursesInitialised
2072
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002073 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002074 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002075 if (!PyArg_Parse(args,"i;True(1), False(0)",&flag))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002076 return NULL;
2077 break;
2078 default:
2079 PyErr_SetString(PyExc_TypeError, "use_env requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00002080 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002081 }
2082 use_env(flag);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002083 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00002084 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002085}
2086
Guido van Rossumf6971e21994-08-30 12:25:20 +00002087/* List of functions defined in the module */
2088
2089static PyMethodDef PyCurses_methods[] = {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002090 {"baudrate", (PyCFunction)PyCurses_baudrate},
2091 {"beep", (PyCFunction)PyCurses_beep},
2092 {"can_change_color", (PyCFunction)PyCurses_can_change_color},
2093 {"cbreak", (PyCFunction)PyCurses_cbreak},
2094 {"color_content", (PyCFunction)PyCurses_Color_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002095 {"color_pair", (PyCFunction)PyCurses_color_pair},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002096 {"curs_set", (PyCFunction)PyCurses_Curs_Set},
2097 {"def_prog_mode", (PyCFunction)PyCurses_def_prog_mode},
2098 {"def_shell_mode", (PyCFunction)PyCurses_def_shell_mode},
2099 {"delay_output", (PyCFunction)PyCurses_Delay_Output},
2100 {"doupdate", (PyCFunction)PyCurses_doupdate},
2101 {"echo", (PyCFunction)PyCurses_echo},
2102 {"endwin", (PyCFunction)PyCurses_endwin},
2103 {"erasechar", (PyCFunction)PyCurses_EraseChar},
2104 {"filter", (PyCFunction)PyCurses_filter},
2105 {"flash", (PyCFunction)PyCurses_flash},
2106 {"flushinp", (PyCFunction)PyCurses_flushinp},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002107#ifdef NCURSES_MOUSE_VERSION
2108 {"getmouse", (PyCFunction)PyCurses_GetMouse},
2109 {"ungetmouse", (PyCFunction)PyCurses_UngetMouse, METH_VARARGS},
2110#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002111 {"getsyx", (PyCFunction)PyCurses_getsyx},
2112 {"getwin", (PyCFunction)PyCurses_GetWin},
2113 {"has_colors", (PyCFunction)PyCurses_has_colors},
2114 {"has_ic", (PyCFunction)PyCurses_has_ic},
2115 {"has_il", (PyCFunction)PyCurses_has_il},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002116#if !defined(__sgi__) && !defined(__sun__)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002117 {"has_key", (PyCFunction)PyCurses_has_key},
Guido van Rossumf6971e21994-08-30 12:25:20 +00002118#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002119 {"halfdelay", (PyCFunction)PyCurses_HalfDelay},
2120 {"init_color", (PyCFunction)PyCurses_Init_Color},
2121 {"init_pair", (PyCFunction)PyCurses_Init_Pair},
2122 {"initscr", (PyCFunction)PyCurses_InitScr},
2123 {"intrflush", (PyCFunction)PyCurses_IntrFlush},
2124 {"isendwin", (PyCFunction)PyCurses_isendwin},
2125 {"keyname", (PyCFunction)PyCurses_KeyName},
2126 {"killchar", (PyCFunction)PyCurses_KillChar},
2127 {"longname", (PyCFunction)PyCurses_longname},
2128 {"meta", (PyCFunction)PyCurses_Meta},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002129#ifdef NCURSES_MOUSE_VERSION
2130 {"mouseinterval", (PyCFunction)PyCurses_MouseInterval},
2131 {"mousemask", (PyCFunction)PyCurses_MouseMask},
2132#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002133 {"newpad", (PyCFunction)PyCurses_NewPad},
2134 {"newwin", (PyCFunction)PyCurses_NewWindow},
2135 {"nl", (PyCFunction)PyCurses_nl},
2136 {"nocbreak", (PyCFunction)PyCurses_nocbreak},
2137 {"noecho", (PyCFunction)PyCurses_noecho},
2138 {"nonl", (PyCFunction)PyCurses_nonl},
2139 {"noqiflush", (PyCFunction)PyCurses_noqiflush},
2140 {"noraw", (PyCFunction)PyCurses_noraw},
2141 {"pair_content", (PyCFunction)PyCurses_Pair_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002142 {"pair_number", (PyCFunction)PyCurses_pair_number},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002143 {"putp", (PyCFunction)PyCurses_Putp},
2144 {"qiflush", (PyCFunction)PyCurses_QiFlush},
2145 {"raw", (PyCFunction)PyCurses_raw},
2146 {"reset_prog_mode", (PyCFunction)PyCurses_reset_prog_mode},
2147 {"reset_shell_mode", (PyCFunction)PyCurses_reset_shell_mode},
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002148 {"resetty", (PyCFunction)PyCurses_resetty},
2149 {"savetty", (PyCFunction)PyCurses_savetty},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002150 {"setsyx", (PyCFunction)PyCurses_setsyx},
2151 {"start_color", (PyCFunction)PyCurses_Start_Color},
2152 {"termattrs", (PyCFunction)PyCurses_termattrs},
2153 {"termname", (PyCFunction)PyCurses_termname},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002154 {"typeahead", (PyCFunction)PyCurses_TypeAhead},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002155 {"unctrl", (PyCFunction)PyCurses_UnCtrl},
2156 {"ungetch", (PyCFunction)PyCurses_UngetCh},
2157 {"use_env", (PyCFunction)PyCurses_Use_Env},
2158 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00002159};
2160
2161/* Initialization function for the module */
2162
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002163void
Andrew M. Kuchlingb7f198e2000-06-10 23:12:32 +00002164init_curses()
Guido van Rossumf6971e21994-08-30 12:25:20 +00002165{
Guido van Rossum8fbf82b1995-02-17 13:54:04 +00002166 PyObject *m, *d, *v;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002167
2168 /* Create the module and add the functions */
Andrew M. Kuchlingb7f198e2000-06-10 23:12:32 +00002169 m = Py_InitModule("_curses", PyCurses_methods);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002170
Guido van Rossumf6971e21994-08-30 12:25:20 +00002171 /* Add some symbolic constants to the module */
2172 d = PyModule_GetDict(m);
Guido van Rossume4485b01994-09-07 14:32:49 +00002173 ModDict = d; /* For PyCurses_InitScr */
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002174
Guido van Rossum85738471995-02-17 13:50:17 +00002175 /* For exception curses.error */
Fred Drake589c35b2000-07-06 19:38:49 +00002176 PyCursesError = PyErr_NewException("_curses.error", NULL, NULL);
Guido van Rossum85738471995-02-17 13:50:17 +00002177 PyDict_SetItemString(d, "error", PyCursesError);
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002178
Guido van Rossum85738471995-02-17 13:50:17 +00002179 /* Make the version available */
Guido van Rossum8fbf82b1995-02-17 13:54:04 +00002180 v = PyString_FromString(PyCursesVersion);
2181 PyDict_SetItemString(d, "version", v);
2182 PyDict_SetItemString(d, "__version__", v);
2183 Py_DECREF(v);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002184
Guido van Rossumf6971e21994-08-30 12:25:20 +00002185 /* Here are some attributes you can add to chars to print */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002186
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002187 SetDictInt("A_ATTRIBUTES", A_ATTRIBUTES);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002188 SetDictInt("A_NORMAL", A_NORMAL);
2189 SetDictInt("A_STANDOUT", A_STANDOUT);
2190 SetDictInt("A_UNDERLINE", A_UNDERLINE);
2191 SetDictInt("A_REVERSE", A_REVERSE);
2192 SetDictInt("A_BLINK", A_BLINK);
2193 SetDictInt("A_DIM", A_DIM);
2194 SetDictInt("A_BOLD", A_BOLD);
2195 SetDictInt("A_ALTCHARSET", A_ALTCHARSET);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002196 SetDictInt("A_INVIS", A_INVIS);
2197 SetDictInt("A_PROTECT", A_PROTECT);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002198 SetDictInt("A_CHARTEXT", A_CHARTEXT);
2199 SetDictInt("A_COLOR", A_COLOR);
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00002200#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002201 SetDictInt("A_HORIZONTAL", A_HORIZONTAL);
2202 SetDictInt("A_LEFT", A_LEFT);
2203 SetDictInt("A_LOW", A_LOW);
2204 SetDictInt("A_RIGHT", A_RIGHT);
2205 SetDictInt("A_TOP", A_TOP);
2206 SetDictInt("A_VERTICAL", A_VERTICAL);
2207#endif
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002208
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002209 SetDictInt("COLOR_BLACK", COLOR_BLACK);
2210 SetDictInt("COLOR_RED", COLOR_RED);
2211 SetDictInt("COLOR_GREEN", COLOR_GREEN);
2212 SetDictInt("COLOR_YELLOW", COLOR_YELLOW);
2213 SetDictInt("COLOR_BLUE", COLOR_BLUE);
2214 SetDictInt("COLOR_MAGENTA", COLOR_MAGENTA);
2215 SetDictInt("COLOR_CYAN", COLOR_CYAN);
2216 SetDictInt("COLOR_WHITE", COLOR_WHITE);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002217
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002218#ifdef NCURSES_MOUSE_VERSION
2219 /* Mouse-related constants */
2220 SetDictInt("BUTTON1_PRESSED", BUTTON1_PRESSED);
2221 SetDictInt("BUTTON1_RELEASED", BUTTON1_RELEASED);
2222 SetDictInt("BUTTON1_CLICKED", BUTTON1_CLICKED);
2223 SetDictInt("BUTTON1_DOUBLE_CLICKED", BUTTON1_DOUBLE_CLICKED);
2224 SetDictInt("BUTTON1_TRIPLE_CLICKED", BUTTON1_TRIPLE_CLICKED);
2225
2226 SetDictInt("BUTTON2_PRESSED", BUTTON2_PRESSED);
2227 SetDictInt("BUTTON2_RELEASED", BUTTON2_RELEASED);
2228 SetDictInt("BUTTON2_CLICKED", BUTTON2_CLICKED);
2229 SetDictInt("BUTTON2_DOUBLE_CLICKED", BUTTON2_DOUBLE_CLICKED);
2230 SetDictInt("BUTTON2_TRIPLE_CLICKED", BUTTON2_TRIPLE_CLICKED);
2231
2232 SetDictInt("BUTTON3_PRESSED", BUTTON3_PRESSED);
2233 SetDictInt("BUTTON3_RELEASED", BUTTON3_RELEASED);
2234 SetDictInt("BUTTON3_CLICKED", BUTTON3_CLICKED);
2235 SetDictInt("BUTTON3_DOUBLE_CLICKED", BUTTON3_DOUBLE_CLICKED);
2236 SetDictInt("BUTTON3_TRIPLE_CLICKED", BUTTON3_TRIPLE_CLICKED);
2237
2238 SetDictInt("BUTTON4_PRESSED", BUTTON4_PRESSED);
2239 SetDictInt("BUTTON4_RELEASED", BUTTON4_RELEASED);
2240 SetDictInt("BUTTON4_CLICKED", BUTTON4_CLICKED);
2241 SetDictInt("BUTTON4_DOUBLE_CLICKED", BUTTON4_DOUBLE_CLICKED);
2242 SetDictInt("BUTTON4_TRIPLE_CLICKED", BUTTON4_TRIPLE_CLICKED);
2243
2244 SetDictInt("BUTTON_SHIFT", BUTTON_SHIFT);
2245 SetDictInt("BUTTON_CTRL", BUTTON_CTRL);
2246 SetDictInt("BUTTON_ALT", BUTTON_ALT);
2247
2248 SetDictInt("ALL_MOUSE_EVENTS", ALL_MOUSE_EVENTS);
2249 SetDictInt("REPORT_MOUSE_POSITION", REPORT_MOUSE_POSITION);
2250#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +00002251 /* Now set everything up for KEY_ variables */
2252 {
2253 int key;
2254 char *key_n;
2255 char *key_n2;
2256 for (key=KEY_MIN;key < KEY_MAX; key++) {
2257 key_n = (char *)keyname(key);
Guido van Rossumf5c6d471995-02-07 15:38:32 +00002258 if (key_n == NULL || strcmp(key_n,"UNKNOWN KEY")==0)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002259 continue;
2260 if (strncmp(key_n,"KEY_F(",6)==0) {
2261 char *p1, *p2;
2262 key_n2 = malloc(strlen(key_n)+1);
2263 p1 = key_n;
2264 p2 = key_n2;
2265 while (*p1) {
2266 if (*p1 != '(' && *p1 != ')') {
2267 *p2 = *p1;
2268 p2++;
2269 }
2270 p1++;
2271 }
2272 *p2 = (char)0;
2273 } else
2274 key_n2 = key_n;
Guido van Rossum85738471995-02-17 13:50:17 +00002275 PyDict_SetItemString(d,key_n2,PyInt_FromLong((long) key));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002276 if (key_n2 != key_n)
2277 free(key_n2);
2278 }
Guido van Rossum85738471995-02-17 13:50:17 +00002279 SetDictInt("KEY_MIN", KEY_MIN);
2280 SetDictInt("KEY_MAX", KEY_MAX);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002281 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002282
2283 /* Check for errors */
2284 if (PyErr_Occurred())
Andrew M. Kuchlingb7f198e2000-06-10 23:12:32 +00002285 Py_FatalError("can't initialize module _curses");
Guido van Rossumf6971e21994-08-30 12:25:20 +00002286}