blob: 3b171d5245df8769d492ebbbc9018593e785c7cb [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. Kuchlingfb6bbf52000-07-27 11:58:01 +000036/*
37
38A number of SysV or ncurses functions don't have wrappers yet; if you need
39a given function, add it and send a patch. Here's a list of currently
40unsupported functions:
41
42 addchnstr addchstr chgat color_set copywin define_key
43 del_curterm delscreen dupwin inchnstr inchstr innstr keyok
44 mcprint mvaddchnstr mvaddchstr mvchgat mvcur mvinchnstr
45 mvinchstr mvinnstr mmvwaddchnstr mvwaddchstr mvwchgat
46 mvwgetnstr mvwinchnstr mvwinchstr mvwinnstr napms newterm
47 overlay overwrite resetty resizeterm restartterm ripoffline
48 savetty scr_dump scr_init scr_restore scr_set scrl set_curterm
49 set_term setterm setupterm tgetent tgetflag tgetnum tgetstr
50 tgoto timeout tparm tputs tputs typeahead use_default_colors
51 vidattr vidputs waddchnstr waddchstr wchgat wcolor_set
52 winchnstr winchstr winnstr wmouse_trafo wredrawln wscrl
53 wtimeout
54
55Low-priority:
56 slk_attr slk_attr_off slk_attr_on slk_attr_set slk_attroff
57 slk_attron slk_attrset slk_clear slk_color slk_init slk_label
58 slk_noutrefresh slk_refresh slk_restore slk_set slk_touch
59
60 */
61
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000062/* Release Number */
Guido van Rossumf6971e21994-08-30 12:25:20 +000063
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +000064char *PyCursesVersion = "1.6";
Guido van Rossumf6971e21994-08-30 12:25:20 +000065
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000066/* Includes */
Guido van Rossumf6971e21994-08-30 12:25:20 +000067
Guido van Rossum602099a1994-09-14 13:32:22 +000068#include "Python.h"
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000069
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000070#ifdef __osf__
71#define _XOPEN_SOURCE_EXTENDED /* Define macro for OSF/1 */
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +000072#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000073#endif
74
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +000075#ifdef HAVE_NCURSES_H
76#include <ncurses.h>
77#else
78#include <curses.h>
79#endif
80
81#if defined(__sgi__) || defined(__sun__)
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +000082#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000083typedef chtype attr_t; /* No attr_t type is available */
Guido van Rossum1266a011996-02-25 04:50:31 +000084#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +000085
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000086/* Definition of exception curses.error */
Guido van Rossumf6971e21994-08-30 12:25:20 +000087
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000088static PyObject *PyCursesError;
Guido van Rossumf6971e21994-08-30 12:25:20 +000089
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000090/* general error messages */
Guido van Rossum85738471995-02-17 13:50:17 +000091static char *catchall_ERR = "curses function returned ERR";
92static char *catchall_NULL = "curses function returned NULL";
93
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000094/* Tells whether initscr() has been called to initialise curses. */
Guido van Rossum585c6dc1995-02-24 13:45:43 +000095static int initialised = FALSE;
96
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000097/* Tells whether start_color() has been called to initialise colorusage. */
98static int initialisedcolors = FALSE;
99
100/* Utility Macros */
Guido van Rossum85738471995-02-17 13:50:17 +0000101#define ARG_COUNT(X) \
102 (((X) == NULL) ? 0 : (PyTuple_Check(X) ? PyTuple_Size(X) : 1))
Guido van Rossumf6971e21994-08-30 12:25:20 +0000103
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000104#define PyCursesInitialised \
105 if (initialised != TRUE) { \
106 PyErr_SetString(PyCursesError, \
107 "must call initscr() first"); \
108 return NULL; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000109
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000110#define PyCursesInitialisedColor \
111 if (initialisedcolors != TRUE) { \
112 PyErr_SetString(PyCursesError, \
113 "must call start_color() first"); \
114 return NULL; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000115
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000116/* Utility Functions */
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000117
Guido van Rossum85738471995-02-17 13:50:17 +0000118/*
119 * Check the return code from a curses function and return None
120 * or raise an exception as appropriate.
121 */
122
123static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000124PyCursesCheckERR(int code, char *fname)
Guido van Rossum85738471995-02-17 13:50:17 +0000125{
Guido van Rossum85738471995-02-17 13:50:17 +0000126 if (code != ERR) {
127 Py_INCREF(Py_None);
128 return Py_None;
129 } else {
130 if (fname == NULL) {
131 PyErr_SetString(PyCursesError, catchall_ERR);
132 } else {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000133 PyErr_Format(PyCursesError, "%s() returned ERR", fname);
Guido van Rossum85738471995-02-17 13:50:17 +0000134 }
135 return NULL;
136 }
137}
138
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000139static int
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000140PyCurses_ConvertToChtype(PyObject *obj, chtype *ch)
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000141{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000142 if (PyInt_Check(obj)) {
143 *ch = (chtype) PyInt_AsLong(obj);
144 } else if(PyString_Check(obj) &
145 (PyString_Size(obj) == 1)) {
146 *ch = (chtype) *PyString_AsString(obj);
147 } else {
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000148 return 0;
149 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000150 return 1;
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000151}
152
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000153/*****************************************************************************
154 The Window Object
155******************************************************************************/
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000156
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000157/* Definition of the window object and window type */
Guido van Rossum85738471995-02-17 13:50:17 +0000158
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000159typedef struct {
160 PyObject_HEAD
161 WINDOW *win;
162} PyCursesWindowObject;
Guido van Rossum85738471995-02-17 13:50:17 +0000163
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000164PyTypeObject PyCursesWindow_Type;
165
166#define PyCursesWindow_Check(v) ((v)->ob_type == &PyCursesWindow_Type)
167
168/* Function Prototype Macros - They are ugly but very, very useful. ;-)
169
170 X - function name
171 TYPE - parameter Type
172 ERGSTR - format string for construction of the return value
173 PARSESTR - format string for argument parsing
174 */
175
176#define Window_NoArgNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000177static PyObject *PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
178{ if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000179 return PyCursesCheckERR(X(self->win), # X); }
180
181#define Window_NoArgTrueFalseFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000182static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000183{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000184 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000185 if (X (self->win) == FALSE) { Py_INCREF(Py_False); return Py_False; } \
186 else { Py_INCREF(Py_True); return Py_True; } }
187
188#define Window_NoArgNoReturnVoidFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000189static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000190{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000191 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000192 X(self->win); Py_INCREF(Py_None); return Py_None; }
193
194#define Window_NoArg2TupleReturnFunction(X, TYPE, ERGSTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000195static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000196{ \
197 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000198 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000199 X(self->win,arg1,arg2); return Py_BuildValue(ERGSTR, arg1, arg2); }
200
201#define Window_OneArgNoReturnVoidFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000202static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000203{ \
204 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000205 if (!PyArg_Parse(args, PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000206 X(self->win,arg1); Py_INCREF(Py_None); return Py_None; }
207
208#define Window_OneArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000209static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000210{ \
211 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000212 if (!PyArg_Parse(args,PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000213 return PyCursesCheckERR(X(self->win, arg1), # X); }
214
215#define Window_TwoArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000216static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000217{ \
218 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000219 if (!PyArg_Parse(args,PARSESTR, &arg1, &arg2)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000220 return PyCursesCheckERR(X(self->win, arg1, arg2), # X); }
Guido van Rossum85738471995-02-17 13:50:17 +0000221
Guido van Rossumf6971e21994-08-30 12:25:20 +0000222/* ------------- WINDOW routines --------------- */
Guido van Rossum85738471995-02-17 13:50:17 +0000223
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000224Window_NoArgNoReturnFunction(untouchwin)
225Window_NoArgNoReturnFunction(touchwin)
226Window_NoArgNoReturnFunction(redrawwin)
227Window_NoArgNoReturnFunction(winsertln)
228Window_NoArgNoReturnFunction(werase)
229Window_NoArgNoReturnFunction(wdeleteln)
230
231Window_NoArgTrueFalseFunction(is_wintouched)
232
233Window_NoArgNoReturnVoidFunction(wsyncup)
234Window_NoArgNoReturnVoidFunction(wsyncdown)
235Window_NoArgNoReturnVoidFunction(wstandend)
236Window_NoArgNoReturnVoidFunction(wstandout)
237Window_NoArgNoReturnVoidFunction(wcursyncup)
238Window_NoArgNoReturnVoidFunction(wclrtoeol)
239Window_NoArgNoReturnVoidFunction(wclrtobot)
240Window_NoArgNoReturnVoidFunction(wclear)
241
242Window_OneArgNoReturnVoidFunction(idcok, int, "i;True(1) or False(0)")
243Window_OneArgNoReturnVoidFunction(immedok, int, "i;True(1) or False(0)")
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +0000244Window_OneArgNoReturnVoidFunction(wtimeout, int, "i;delay")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000245
246Window_NoArg2TupleReturnFunction(getyx, int, "(ii)")
247Window_NoArg2TupleReturnFunction(getbegyx, int, "(ii)")
248Window_NoArg2TupleReturnFunction(getmaxyx, int, "(ii)")
249Window_NoArg2TupleReturnFunction(getparyx, int, "(ii)")
250
251Window_OneArgNoReturnFunction(wattron, attr_t, "l;attr")
252Window_OneArgNoReturnFunction(wattroff, attr_t, "l;attr")
253Window_OneArgNoReturnFunction(wattrset, attr_t, "l;attr")
254Window_OneArgNoReturnFunction(clearok, int, "i;True(1) or False(0)")
255Window_OneArgNoReturnFunction(idlok, int, "i;True(1) or False(0)")
256Window_OneArgNoReturnFunction(keypad, int, "i;True(1) or False(0)")
257Window_OneArgNoReturnFunction(leaveok, int, "i;True(1) or False(0)")
258Window_OneArgNoReturnFunction(nodelay, int, "i;True(1) or False(0)")
259Window_OneArgNoReturnFunction(notimeout, int, "i;True(1) or False(0)")
260Window_OneArgNoReturnFunction(scrollok, int, "i;True(1) or False(0)")
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000261Window_OneArgNoReturnFunction(winsdelln, int, "i;nlines")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000262Window_OneArgNoReturnFunction(syncok, int, "i;True(1) or False(0)")
263
264Window_TwoArgNoReturnFunction(mvwin, int, "(ii);y,x")
265Window_TwoArgNoReturnFunction(mvderwin, int, "(ii);y,x")
266Window_TwoArgNoReturnFunction(wmove, int, "(ii);y,x")
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000267#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000268Window_TwoArgNoReturnFunction(wresize, int, "(ii);lines,columns")
269#endif
270
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000271/* Allocation and deallocation of Window Objects */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000272
Guido van Rossumf6971e21994-08-30 12:25:20 +0000273static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000274PyCursesWindow_New(WINDOW *win)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000275{
276 PyCursesWindowObject *wo;
Guido van Rossum85738471995-02-17 13:50:17 +0000277
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000278 wo = PyObject_NEW(PyCursesWindowObject, &PyCursesWindow_Type);
279 if (wo == NULL) return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000280 wo->win = win;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000281 return (PyObject *)wo;
282}
283
284static void
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000285PyCursesWindow_Dealloc(PyCursesWindowObject *wo)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000286{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000287 if (wo->win != stdscr) delwin(wo->win);
288 PyMem_DEL(wo);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000289}
290
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000291/* Addch, Addstr, Addnstr */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000292
293static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000294PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000295{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000296 int rtn, x, y, use_xy = FALSE;
297 PyObject *temp;
298 chtype ch = 0;
299 attr_t attr = A_NORMAL;
300
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000301 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000302 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000303 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000304 return NULL;
305 break;
306 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000307 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000308 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000309 break;
310 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000311 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000312 return NULL;
313 use_xy = TRUE;
314 break;
315 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000316 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000317 &y, &x, &temp, &attr))
318 return NULL;
319 use_xy = TRUE;
320 break;
321 default:
322 PyErr_SetString(PyExc_TypeError, "addch requires 1 or 4 arguments");
323 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000324 }
Guido van Rossum85738471995-02-17 13:50:17 +0000325
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000326 if (!PyCurses_ConvertToChtype(temp, &ch)) {
327 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
328 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000329 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000330
Guido van Rossumf6971e21994-08-30 12:25:20 +0000331 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000332 rtn = mvwaddch(self->win,y,x, ch | attr);
333 else {
334 rtn = waddch(self->win, ch | attr);
335 }
336 return PyCursesCheckERR(rtn, "addch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000337}
338
339static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000340PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000341{
342 int rtn;
343 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000344 char *str;
345 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
346 int use_xy = FALSE, use_attr = FALSE;
Guido van Rossum85738471995-02-17 13:50:17 +0000347
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000348 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000349 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000350 if (!PyArg_Parse(args,"s;str", &str))
Guido van Rossum85738471995-02-17 13:50:17 +0000351 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000352 break;
353 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000354 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000355 return NULL;
356 use_attr = TRUE;
357 break;
358 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000359 if (!PyArg_Parse(args,"(iis);int,int,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000360 return NULL;
361 use_xy = TRUE;
362 break;
363 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000364 if (!PyArg_Parse(args,"(iisl);int,int,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000365 return NULL;
366 use_xy = use_attr = TRUE;
367 break;
368 default:
369 PyErr_SetString(PyExc_TypeError, "addstr requires 1 to 4 arguments");
370 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000371 }
Guido van Rossum85738471995-02-17 13:50:17 +0000372
Guido van Rossumf6971e21994-08-30 12:25:20 +0000373 if (use_attr == TRUE) {
374 attr_old = getattrs(self->win);
375 wattrset(self->win,attr);
376 }
377 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000378 rtn = mvwaddstr(self->win,y,x,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000379 else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000380 rtn = waddstr(self->win,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000381 if (use_attr == TRUE)
382 wattrset(self->win,attr_old);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000383 return PyCursesCheckERR(rtn, "addstr");
384}
Guido van Rossum85738471995-02-17 13:50:17 +0000385
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000386static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000387PyCursesWindow_AddNStr(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000388{
389 int rtn, x, y, n;
390 char *str;
391 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
392 int use_xy = FALSE, use_attr = FALSE;
393
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000394 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000395 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000396 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000397 return NULL;
398 break;
399 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000400 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000401 return NULL;
402 use_attr = TRUE;
403 break;
404 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000405 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000406 return NULL;
407 use_xy = TRUE;
408 break;
409 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000410 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000411 return NULL;
412 use_xy = use_attr = TRUE;
413 break;
414 default:
415 PyErr_SetString(PyExc_TypeError, "addnstr requires 2 to 5 arguments");
416 return NULL;
417 }
418
419 if (use_attr == TRUE) {
420 attr_old = getattrs(self->win);
421 wattrset(self->win,attr);
422 }
423 if (use_xy == TRUE)
424 rtn = mvwaddnstr(self->win,y,x,str,n);
425 else
426 rtn = waddnstr(self->win,str,n);
427 if (use_attr == TRUE)
428 wattrset(self->win,attr_old);
429 return PyCursesCheckERR(rtn, "addnstr");
430}
431
432static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000433PyCursesWindow_Bkgd(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000434{
435 PyObject *temp;
436 chtype bkgd;
437 attr_t attr = A_NORMAL;
438
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000439 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000440 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000441 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000442 return NULL;
443 break;
444 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000445 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000446 return NULL;
447 break;
448 default:
449 PyErr_SetString(PyExc_TypeError, "bkgd requires 1 or 2 arguments");
450 return NULL;
451 }
452
453 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
454 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
455 return NULL;
456 }
457
458 return PyCursesCheckERR(wbkgd(self->win, bkgd | A_NORMAL), "bkgd");
459}
460
461static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000462PyCursesWindow_BkgdSet(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000463{
464 PyObject *temp;
465 chtype bkgd;
466 attr_t attr = A_NORMAL;
467
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000468 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000469 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000470 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000471 return NULL;
472 break;
473 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000474 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000475 return NULL;
476 break;
477 default:
478 PyErr_SetString(PyExc_TypeError, "bkgdset requires 1 or 2 arguments");
479 return NULL;
480 }
481
482 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000483 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000484 return NULL;
485 }
486
487 wbkgdset(self->win, bkgd | attr);
488 return PyCursesCheckERR(0, "bkgdset");
489}
490
491static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000492PyCursesWindow_Border(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000493{
494 chtype ls, rs, ts, bs, tl, tr, bl, br;
495 ls = rs = ts = bs = tl = tr = bl = br = 0;
496 if (!PyArg_Parse(args,"|llllllll;ls,rs,ts,bs,tl,tr,bl,br",
497 &ls, &rs, &ts, &bs, &tl, &tr, &bl, &br))
498 return NULL;
499 wborder(self->win, ls, rs, ts, bs, tl, tr, bl, br);
500 Py_INCREF(Py_None);
501 return Py_None;
502}
503
504static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000505PyCursesWindow_Box(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000506{
507 chtype ch1=0,ch2=0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000508 if (!PyArg_NoArgs(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000509 PyErr_Clear();
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000510 if (!PyArg_Parse(args,"(ll);vertint,horint", &ch1, &ch2))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000511 return NULL;
512 }
513 box(self->win,ch1,ch2);
514 Py_INCREF(Py_None);
515 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000516}
517
518static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000519PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000520{
521 int rtn;
522 int x, y;
Guido van Rossum85738471995-02-17 13:50:17 +0000523
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000524 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000525 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000526 rtn = wdelch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000527 break;
528 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000529 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Guido van Rossum85738471995-02-17 13:50:17 +0000530 return NULL;
531 rtn = mvwdelch(self->win,y,x);
532 break;
533 default:
534 PyErr_SetString(PyExc_TypeError, "delch requires 0 or 2 arguments");
535 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000536 }
Guido van Rossum85738471995-02-17 13:50:17 +0000537 return PyCursesCheckERR(rtn, "[mv]wdelch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000538}
539
540static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000541PyCursesWindow_DerWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000542{
543 WINDOW *win;
544 int nlines, ncols, begin_y, begin_x;
545
546 nlines = 0;
547 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000548 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000549 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000550 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000551 return NULL;
552 break;
553 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000554 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000555 &nlines,&ncols,&begin_y,&begin_x))
556 return NULL;
557 break;
558 default:
559 PyErr_SetString(PyExc_TypeError, "derwin requires 2 or 4 arguments");
560 return NULL;
561 }
562
563 win = derwin(self->win,nlines,ncols,begin_y,begin_x);
564
565 if (win == NULL) {
566 PyErr_SetString(PyCursesError, catchall_NULL);
567 return NULL;
568 }
569
570 return (PyObject *)PyCursesWindow_New(win);
571}
572
573static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000574PyCursesWindow_EchoChar(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000575{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000576 PyObject *temp;
577 chtype ch;
578 attr_t attr = A_NORMAL;
Guido van Rossum85738471995-02-17 13:50:17 +0000579
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000580 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000581 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000582 if (!PyArg_Parse(args,"O;ch or int", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +0000583 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000584 break;
585 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000586 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000587 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000588 break;
589 default:
590 PyErr_SetString(PyExc_TypeError, "echochar requires 1 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000591
592
Guido van Rossum85738471995-02-17 13:50:17 +0000593 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000594 }
Guido van Rossum85738471995-02-17 13:50:17 +0000595
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000596 if (!PyCurses_ConvertToChtype(temp, &ch)) {
597 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +0000598 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000599 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000600
601 if (self->win->_flags & _ISPAD)
602 return PyCursesCheckERR(pechochar(self->win, ch | attr),
603 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000604 else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000605 return PyCursesCheckERR(wechochar(self->win, ch | attr),
606 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000607}
608
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000609#ifdef NCURSES_MOUSE_VERSION
610static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000611PyCursesWindow_Enclose(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000612{
613 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000614 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000615 return NULL;
616
617 return PyInt_FromLong( wenclose(self->win,y,x) );
618}
619#endif
620
Guido van Rossumf6971e21994-08-30 12:25:20 +0000621static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000622PyCursesWindow_GetBkgd(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000623{
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000624 if (!PyArg_NoArgs(args))
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000625 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000626 return PyInt_FromLong((long) getbkgd(self->win));
Guido van Rossumf6971e21994-08-30 12:25:20 +0000627}
628
629static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000630PyCursesWindow_GetCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000631{
632 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000633 chtype rtn;
Guido van Rossum85738471995-02-17 13:50:17 +0000634
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000635 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000636 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000637 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000638 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000639 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000640 break;
641 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000642 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000643 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000644 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000645 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000646 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000647 break;
648 default:
649 PyErr_SetString(PyExc_TypeError, "getch requires 0 or 2 arguments");
650 return NULL;
651 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000652 return PyInt_FromLong(rtn);
653}
Guido van Rossum85738471995-02-17 13:50:17 +0000654
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000655static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000656PyCursesWindow_GetKey(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000657{
658 int x, y;
659 chtype rtn;
660
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000661 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000662 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000663 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000664 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000665 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000666 break;
667 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000668 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000669 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000670 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000671 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000672 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000673 break;
674 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000675 PyErr_SetString(PyExc_TypeError, "getkey requires 0 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000676 return NULL;
677 }
678 if (rtn<=255)
679 return Py_BuildValue("c", rtn);
680 else
681 return PyString_FromString((char *)keyname(rtn));
Guido van Rossumf6971e21994-08-30 12:25:20 +0000682}
683
684static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000685PyCursesWindow_GetStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000686{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000687 int x, y, n;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000688 char rtn[1024]; /* This should be big enough.. I hope */
689 int rtn2;
Guido van Rossum85738471995-02-17 13:50:17 +0000690
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000691 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000692 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000693 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000694 rtn2 = wgetstr(self->win,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000695 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000696 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000697 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000698 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000699 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000700 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000701 rtn2 = wgetnstr(self->win,rtn,n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000702 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000703 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000704 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000705 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000706 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000707 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000708 rtn2 = mvwgetstr(self->win,y,x,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000709 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000710 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000711 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000712 if (!PyArg_Parse(args,"(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000713 return NULL;
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000714#ifdef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000715 /* Untested */
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000716 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000717 rtn2 = wmove(self->win,y,x)==ERR ? ERR :
718 wgetnstr(self->win, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000719 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000720#else
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000721 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000722 rtn2 = mvwgetnstr(self->win, y, x, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000723 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000724#endif
725 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000726 default:
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000727 PyErr_SetString(PyExc_TypeError, "getstr requires 0 to 2 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000728 return NULL;
729 }
Guido van Rossumf6971e21994-08-30 12:25:20 +0000730 if (rtn2 == ERR)
731 rtn[0] = 0;
Guido van Rossum85738471995-02-17 13:50:17 +0000732 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000733}
734
735static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000736PyCursesWindow_Hline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000737{
738 PyObject *temp;
739 chtype ch;
740 int n, x, y, code = OK;
741 attr_t attr = A_NORMAL;
742
743 switch (ARG_COUNT(args)) {
744 case 2:
745 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
746 return NULL;
747 break;
748 case 3:
749 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
750 return NULL;
751 break;
752 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000753 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000754 return NULL;
755 code = wmove(self->win, y, x);
756 break;
757 case 5:
758 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
759 &y, &x, &temp, &n, &attr))
760 return NULL;
761 code = wmove(self->win, y, x);
762 default:
763 PyErr_SetString(PyExc_TypeError, "hline requires 2 or 5 arguments");
764 return NULL;
765 }
766
767 if (code != ERR) {
768 if (!PyCurses_ConvertToChtype(temp, &ch)) {
769 PyErr_SetString(PyExc_TypeError,
770 "argument 1 or 3 must be a ch or an int");
771 return NULL;
772 }
773 return PyCursesCheckERR(whline(self->win, ch | attr, n), "hline");
774 } else
775 return PyCursesCheckERR(code, "wmove");
776}
777
778static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000779PyCursesWindow_InsCh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000780{
781 int rtn, x, y, use_xy = FALSE;
782 PyObject *temp;
783 chtype ch = 0;
784 attr_t attr = A_NORMAL;
785
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000786 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000787 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000788 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000789 return NULL;
790 break;
791 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000792 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000793 return NULL;
794 break;
795 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000796 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000797 return NULL;
798 use_xy = TRUE;
799 break;
800 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000801 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr", &y, &x, &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000802 return NULL;
803 use_xy = TRUE;
804 break;
805 default:
806 PyErr_SetString(PyExc_TypeError, "insch requires 1 or 4 arguments");
807 return NULL;
808 }
809
810 if (!PyCurses_ConvertToChtype(temp, &ch)) {
811 PyErr_SetString(PyExc_TypeError,
812 "argument 1 or 3 must be a ch or an int");
813 return NULL;
814 }
815
816 if (use_xy == TRUE)
817 rtn = mvwinsch(self->win,y,x, ch | attr);
818 else {
819 rtn = winsch(self->win, ch | attr);
820 }
821 return PyCursesCheckERR(rtn, "insch");
822}
823
824static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000825PyCursesWindow_InCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000826{
Guido van Rossum85738471995-02-17 13:50:17 +0000827 int x, y, rtn;
828
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000829 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000830 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000831 rtn = winch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000832 break;
833 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000834 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000835 return NULL;
836 rtn = mvwinch(self->win,y,x);
837 break;
838 default:
839 PyErr_SetString(PyExc_TypeError, "inch requires 0 or 2 arguments");
840 return NULL;
841 }
Guido van Rossum85738471995-02-17 13:50:17 +0000842 return PyInt_FromLong((long) rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000843}
844
845static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000846PyCursesWindow_InStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000847{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000848 int x, y, n;
849 char rtn[1024]; /* This should be big enough.. I hope */
850 int rtn2;
851
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000852 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000853 case 0:
854 rtn2 = winstr(self->win,rtn);
855 break;
856 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000857 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000858 return NULL;
859 rtn2 = winnstr(self->win,rtn,n);
860 break;
861 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000862 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000863 return NULL;
864 rtn2 = mvwinstr(self->win,y,x,rtn);
865 break;
866 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000867 if (!PyArg_Parse(args, "(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000868 return NULL;
869 rtn2 = mvwinnstr(self->win, y, x, rtn, n);
870 break;
871 default:
872 PyErr_SetString(PyExc_TypeError, "instr requires 0 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000873 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000874 }
875 if (rtn2 == ERR)
876 rtn[0] = 0;
877 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000878}
879
880static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000881PyCursesWindow_InsStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000882{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000883 int rtn;
884 int x, y;
885 char *str;
886 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
887 int use_xy = FALSE, use_attr = FALSE;
888
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000889 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000890 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000891 if (!PyArg_Parse(args,"s;str", &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000892 return NULL;
893 break;
894 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000895 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000896 return NULL;
897 use_attr = TRUE;
898 break;
899 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000900 if (!PyArg_Parse(args,"(iis);y,x,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000901 return NULL;
902 use_xy = TRUE;
903 break;
904 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000905 if (!PyArg_Parse(args,"(iisl);y,x,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000906 return NULL;
907 use_xy = use_attr = TRUE;
908 break;
909 default:
910 PyErr_SetString(PyExc_TypeError, "insstr requires 1 to 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000911 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000912 }
913
914 if (use_attr == TRUE) {
915 attr_old = getattrs(self->win);
916 wattrset(self->win,attr);
917 }
918 if (use_xy == TRUE)
919 rtn = mvwinsstr(self->win,y,x,str);
920 else
921 rtn = winsstr(self->win,str);
922 if (use_attr == TRUE)
923 wattrset(self->win,attr_old);
924 return PyCursesCheckERR(rtn, "insstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000925}
926
927static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000928PyCursesWindow_InsNStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000929{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000930 int rtn, x, y, n;
931 char *str;
932 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
933 int use_xy = FALSE, use_attr = FALSE;
934
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000935 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000936 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000937 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000938 return NULL;
939 break;
940 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000941 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000942 return NULL;
943 use_attr = TRUE;
944 break;
945 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000946 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000947 return NULL;
948 use_xy = TRUE;
949 break;
950 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000951 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000952 return NULL;
953 use_xy = use_attr = TRUE;
954 break;
955 default:
956 PyErr_SetString(PyExc_TypeError, "insnstr requires 2 to 5 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000957 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000958 }
959
960 if (use_attr == TRUE) {
961 attr_old = getattrs(self->win);
962 wattrset(self->win,attr);
963 }
964 if (use_xy == TRUE)
965 rtn = mvwinsnstr(self->win,y,x,str,n);
966 else
967 rtn = winsnstr(self->win,str,n);
968 if (use_attr == TRUE)
969 wattrset(self->win,attr_old);
970 return PyCursesCheckERR(rtn, "insnstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000971}
972
973static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000974PyCursesWindow_Is_LineTouched(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000975{
976 int line, erg;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000977 if (!PyArg_Parse(args,"i;line", &line))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000978 return NULL;
979 erg = is_linetouched(self->win, line);
980 if (erg == ERR) {
981 PyErr_SetString(PyExc_TypeError,
982 "is_linetouched: line number outside of boundaries");
983 return NULL;
984 } else
985 if (erg == FALSE) {
986 Py_INCREF(Py_False);
987 return Py_False;
988 } else {
989 Py_INCREF(Py_True);
990 return Py_True;
991 }
992}
993
994static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000995PyCursesWindow_NoOutRefresh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000996{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000997 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000998 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000999
1000 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001001 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001002 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001003 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001004 "(iiiiii);" \
1005 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
1006 &pminrow, &pmincol, &sminrow,
1007 &smincol, &smaxrow, &smaxcol))
1008 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001009 Py_BEGIN_ALLOW_THREADS
1010 rtn = pnoutrefresh(self->win,
1011 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +00001012 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001013 Py_END_ALLOW_THREADS
1014 return PyCursesCheckERR(rtn, "pnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001015 default:
1016 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001017 "noutrefresh() called for a pad "
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001018 "requires 6 arguments");
1019 return NULL;
1020 }
1021 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001022 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001023 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001024
1025 Py_BEGIN_ALLOW_THREADS
1026 rtn = wnoutrefresh(self->win);
1027 Py_END_ALLOW_THREADS
1028 return PyCursesCheckERR(rtn, "wnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001029 }
1030}
1031
1032static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001033PyCursesWindow_PutWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001034{
1035 PyObject *temp;
1036
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001037 if (!PyArg_Parse(args, "O;fileobj", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +00001038 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001039 if (!PyFile_Check(temp)) {
1040 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1041 return NULL;
1042 }
1043 return PyCursesCheckERR(putwin(self->win, PyFile_AsFile(temp)),
1044 "putwin");
1045}
1046
1047static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001048PyCursesWindow_RedrawLine(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001049{
1050 int beg, num;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001051 if (!PyArg_Parse(args,"(ii);beg,num", &beg, &num))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001052 return NULL;
1053 return PyCursesCheckERR(wredrawln(self->win,beg,num), "redrawln");
1054}
1055
1056static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001057PyCursesWindow_Refresh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001058{
1059 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001060 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001061
1062 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001063 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001064 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001065 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001066 "(iiiiii);" \
1067 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
1068 &pminrow, &pmincol, &sminrow,
1069 &smincol, &smaxrow, &smaxcol))
1070 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001071
1072 Py_BEGIN_ALLOW_THREADS
1073 rtn = prefresh(self->win,
1074 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +00001075 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001076 Py_END_ALLOW_THREADS
1077 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001078 default:
1079 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001080 "refresh() for a pad requires 6 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001081 return NULL;
1082 }
1083 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001084 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001085 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001086 Py_BEGIN_ALLOW_THREADS
1087 rtn = wrefresh(self->win);
1088 Py_END_ALLOW_THREADS
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001089 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001090 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001091}
1092
1093static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001094PyCursesWindow_SetScrollRegion(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001095{
1096 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001097 if (!PyArg_Parse(args,"(ii);top, bottom",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +00001098 return NULL;
1099 return PyCursesCheckERR(wsetscrreg(self->win,y,x), "wsetscrreg");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001100}
1101
1102static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001103PyCursesWindow_SubWin(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001104{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001105 WINDOW *win;
1106 int nlines, ncols, begin_y, begin_x;
1107
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001108 nlines = 0;
1109 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001110 switch (ARG_COUNT(args)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001111 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001112 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001113 return NULL;
1114 break;
1115 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001116 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001117 &nlines,&ncols,&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001118 return NULL;
1119 break;
1120 default:
1121 PyErr_SetString(PyExc_TypeError, "subwin requires 2 or 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001122 return NULL;
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001123 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001124
Andrew M. Kuchling8353f622000-07-26 18:36:27 +00001125 /* printf("Subwin: %i %i %i %i \n", nlines, ncols, begin_y, begin_x); */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001126 if (self->win->_flags & _ISPAD)
1127 win = subpad(self->win, nlines, ncols, begin_y, begin_x);
1128 else
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001129 win = subwin(self->win, nlines, ncols, begin_y, begin_x);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001130
1131 if (win == NULL) {
1132 PyErr_SetString(PyCursesError, catchall_NULL);
1133 return NULL;
1134 }
1135
1136 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001137}
1138
1139static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001140PyCursesWindow_Scroll(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001141{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001142 int lines;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001143 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001144 case 0:
1145 return PyCursesCheckERR(scroll(self->win), "scroll");
1146 break;
1147 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001148 if (!PyArg_Parse(args, "i;lines", &lines))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001149 return NULL;
1150 return PyCursesCheckERR(wscrl(self->win, lines), "scroll");
1151 default:
1152 PyErr_SetString(PyExc_TypeError, "scroll requires 0 or 1 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001153 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001154 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001155}
1156
1157static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001158PyCursesWindow_TouchLine(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001159{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001160 int st, cnt, val;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001161 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001162 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001163 if (!PyArg_Parse(args,"(ii);start,count",&st,&cnt))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001164 return NULL;
1165 return PyCursesCheckERR(touchline(self->win,st,cnt), "touchline");
1166 break;
1167 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001168 if (!PyArg_Parse(args, "(iii);start,count,val", &st, &cnt, &val))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001169 return NULL;
1170 return PyCursesCheckERR(wtouchln(self->win, st, cnt, val), "touchline");
1171 default:
1172 PyErr_SetString(PyExc_TypeError, "touchline requires 2 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001173 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001174 }
1175}
1176
1177static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001178PyCursesWindow_Vline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001179{
1180 PyObject *temp;
1181 chtype ch;
1182 int n, x, y, code = OK;
1183 attr_t attr = A_NORMAL;
1184
1185 switch (ARG_COUNT(args)) {
1186 case 2:
1187 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
1188 return NULL;
1189 break;
1190 case 3:
1191 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
1192 return NULL;
1193 break;
1194 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001195 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001196 return NULL;
1197 code = wmove(self->win, y, x);
1198 break;
1199 case 5:
1200 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
1201 &y, &x, &temp, &n, &attr))
1202 return NULL;
1203 code = wmove(self->win, y, x);
1204 default:
1205 PyErr_SetString(PyExc_TypeError, "vline requires 2 or 5 arguments");
1206 return NULL;
1207 }
1208
1209 if (code != ERR) {
1210 if (!PyCurses_ConvertToChtype(temp, &ch)) {
1211 PyErr_SetString(PyExc_TypeError,
1212 "argument 1 or 3 must be a ch or an int");
1213 return NULL;
1214 }
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001215 return PyCursesCheckERR(wvline(self->win, ch | attr, n), "vline");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001216 } else
1217 return PyCursesCheckERR(code, "wmove");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001218}
1219
1220static PyMethodDef PyCursesWindow_Methods[] = {
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001221 {"addch", (PyCFunction)PyCursesWindow_AddCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001222 {"addnstr", (PyCFunction)PyCursesWindow_AddNStr},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001223 {"addstr", (PyCFunction)PyCursesWindow_AddStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001224 {"attroff", (PyCFunction)PyCursesWindow_wattroff},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001225 {"attron", (PyCFunction)PyCursesWindow_wattron},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001226 {"attrset", (PyCFunction)PyCursesWindow_wattrset},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001227 {"bkgd", (PyCFunction)PyCursesWindow_Bkgd},
1228 {"bkgdset", (PyCFunction)PyCursesWindow_BkgdSet},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001229 {"border", (PyCFunction)PyCursesWindow_Border, METH_VARARGS},
1230 {"box", (PyCFunction)PyCursesWindow_Box},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001231 {"clear", (PyCFunction)PyCursesWindow_wclear},
1232 {"clearok", (PyCFunction)PyCursesWindow_clearok},
1233 {"clrtobot", (PyCFunction)PyCursesWindow_wclrtobot},
1234 {"clrtoeol", (PyCFunction)PyCursesWindow_wclrtoeol},
1235 {"cursyncup", (PyCFunction)PyCursesWindow_wcursyncup},
1236 {"delch", (PyCFunction)PyCursesWindow_DelCh},
1237 {"deleteln", (PyCFunction)PyCursesWindow_wdeleteln},
1238 {"derwin", (PyCFunction)PyCursesWindow_DerWin},
1239 {"echochar", (PyCFunction)PyCursesWindow_EchoChar},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001240#ifdef NCURSES_MOUSE_VERSION
1241 {"enclose", (PyCFunction)PyCursesWindow_Enclose},
1242#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001243 {"erase", (PyCFunction)PyCursesWindow_werase},
1244 {"getbegyx", (PyCFunction)PyCursesWindow_getbegyx},
1245 {"getbkgd", (PyCFunction)PyCursesWindow_GetBkgd},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001246 {"getch", (PyCFunction)PyCursesWindow_GetCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001247 {"getkey", (PyCFunction)PyCursesWindow_GetKey},
1248 {"getmaxyx", (PyCFunction)PyCursesWindow_getmaxyx},
1249 {"getparyx", (PyCFunction)PyCursesWindow_getparyx},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001250 {"getstr", (PyCFunction)PyCursesWindow_GetStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001251 {"getyx", (PyCFunction)PyCursesWindow_getyx},
1252 {"hline", (PyCFunction)PyCursesWindow_Hline},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001253 {"idcok", (PyCFunction)PyCursesWindow_idcok},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001254 {"idlok", (PyCFunction)PyCursesWindow_idlok},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001255 {"immedok", (PyCFunction)PyCursesWindow_immedok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001256 {"inch", (PyCFunction)PyCursesWindow_InCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001257 {"insch", (PyCFunction)PyCursesWindow_InsCh},
1258 {"insdelln", (PyCFunction)PyCursesWindow_winsdelln},
1259 {"insertln", (PyCFunction)PyCursesWindow_winsertln},
1260 {"insnstr", (PyCFunction)PyCursesWindow_InsNStr},
1261 {"insstr", (PyCFunction)PyCursesWindow_InsStr},
1262 {"instr", (PyCFunction)PyCursesWindow_InStr},
1263 {"is_linetouched", (PyCFunction)PyCursesWindow_Is_LineTouched},
1264 {"is_wintouched", (PyCFunction)PyCursesWindow_is_wintouched},
1265 {"keypad", (PyCFunction)PyCursesWindow_keypad},
1266 {"leaveok", (PyCFunction)PyCursesWindow_leaveok},
1267 {"move", (PyCFunction)PyCursesWindow_wmove},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001268 {"mvderwin", (PyCFunction)PyCursesWindow_mvderwin},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001269 {"mvwin", (PyCFunction)PyCursesWindow_mvwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001270 {"nodelay", (PyCFunction)PyCursesWindow_nodelay},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001271 {"notimeout", (PyCFunction)PyCursesWindow_notimeout},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001272 {"noutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001273 {"putwin", (PyCFunction)PyCursesWindow_PutWin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001274 {"redrawln", (PyCFunction)PyCursesWindow_RedrawLine},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001275 {"redrawwin", (PyCFunction)PyCursesWindow_redrawwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001276 {"refresh", (PyCFunction)PyCursesWindow_Refresh},
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00001277#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001278 {"resize", (PyCFunction)PyCursesWindow_wresize},
1279#endif
1280 {"scroll", (PyCFunction)PyCursesWindow_Scroll},
1281 {"scrollok", (PyCFunction)PyCursesWindow_scrollok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001282 {"setscrreg", (PyCFunction)PyCursesWindow_SetScrollRegion},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001283 {"standend", (PyCFunction)PyCursesWindow_wstandend},
1284 {"standout", (PyCFunction)PyCursesWindow_wstandout},
1285 {"subpad", (PyCFunction)PyCursesWindow_SubWin},
1286 {"subwin", (PyCFunction)PyCursesWindow_SubWin},
1287 {"syncdown", (PyCFunction)PyCursesWindow_wsyncdown},
1288 {"syncok", (PyCFunction)PyCursesWindow_syncok},
1289 {"syncup", (PyCFunction)PyCursesWindow_wsyncup},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00001290 {"timeout", (PyCFunction)PyCursesWindow_wtimeout},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001291 {"touchline", (PyCFunction)PyCursesWindow_TouchLine},
1292 {"touchwin", (PyCFunction)PyCursesWindow_touchwin},
1293 {"untouchwin", (PyCFunction)PyCursesWindow_untouchwin},
1294 {"vline", (PyCFunction)PyCursesWindow_Vline},
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001295 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00001296};
1297
1298static PyObject *
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00001299PyCursesWindow_GetAttr(PyCursesWindowObject *self, char *name)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001300{
Guido van Rossuma597dde1995-01-10 20:56:29 +00001301 return Py_FindMethod(PyCursesWindow_Methods, (PyObject *)self, name);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001302}
1303
Guido van Rossumf6971e21994-08-30 12:25:20 +00001304/* -------------------------------------------------------*/
Guido van Rossum85738471995-02-17 13:50:17 +00001305
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001306PyTypeObject PyCursesWindow_Type = {
Guido van Rossumf6971e21994-08-30 12:25:20 +00001307 PyObject_HEAD_INIT(&PyType_Type)
1308 0, /*ob_size*/
1309 "curses window", /*tp_name*/
1310 sizeof(PyCursesWindowObject), /*tp_basicsize*/
1311 0, /*tp_itemsize*/
1312 /* methods */
1313 (destructor)PyCursesWindow_Dealloc, /*tp_dealloc*/
1314 0, /*tp_print*/
1315 (getattrfunc)PyCursesWindow_GetAttr, /*tp_getattr*/
1316 (setattrfunc)0, /*tp_setattr*/
1317 0, /*tp_compare*/
1318 0, /*tp_repr*/
1319 0, /*tp_as_number*/
1320 0, /*tp_as_sequence*/
1321 0, /*tp_as_mapping*/
1322 0, /*tp_hash*/
1323};
1324
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001325/*********************************************************************
1326 Global Functions
1327**********************************************************************/
Guido van Rossumf6971e21994-08-30 12:25:20 +00001328
Guido van Rossume4485b01994-09-07 14:32:49 +00001329static PyObject *ModDict;
1330
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001331/* Function Prototype Macros - They are ugly but very, very useful. ;-)
1332
1333 X - function name
1334 TYPE - parameter Type
1335 ERGSTR - format string for construction of the return value
1336 PARSESTR - format string for argument parsing
1337 */
1338
1339#define NoArgNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001340static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001341{ \
1342 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001343 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001344 return PyCursesCheckERR(X(), # X); }
1345
1346#define NoArgOrFlagNoReturnFunction(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 int flag = 0; \
1350 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001351 switch(ARG_COUNT(args)) { \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001352 case 0: \
1353 return PyCursesCheckERR(X(), # X); \
1354 case 1: \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001355 if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001356 if (flag) return PyCursesCheckERR(X(), # X); \
1357 else return PyCursesCheckERR(no ## X (), # X); \
1358 default: \
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001359 PyErr_SetString(PyExc_TypeError, # X " requires 0 or 1 arguments"); \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001360 return NULL; } }
1361
1362#define NoArgReturnIntFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001363static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001364{ \
1365 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001366 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001367 return PyInt_FromLong((long) X()); }
1368
1369
1370#define NoArgReturnStringFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001371static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001372{ \
1373 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001374 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001375 return PyString_FromString(X()); }
1376
1377#define NoArgTrueFalseFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001378static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001379{ \
1380 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001381 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001382 if (X () == FALSE) { \
1383 Py_INCREF(Py_False); \
1384 return Py_False; \
1385 } \
1386 Py_INCREF(Py_True); \
1387 return Py_True; }
1388
1389#define NoArgNoReturnVoidFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001390static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001391{ \
1392 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001393 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001394 X(); \
1395 Py_INCREF(Py_None); \
1396 return Py_None; }
1397
1398NoArgNoReturnFunction(beep)
1399NoArgNoReturnFunction(def_prog_mode)
1400NoArgNoReturnFunction(def_shell_mode)
1401NoArgNoReturnFunction(doupdate)
1402NoArgNoReturnFunction(endwin)
1403NoArgNoReturnFunction(flash)
1404NoArgNoReturnFunction(nocbreak)
1405NoArgNoReturnFunction(noecho)
1406NoArgNoReturnFunction(nonl)
1407NoArgNoReturnFunction(noraw)
1408NoArgNoReturnFunction(reset_prog_mode)
1409NoArgNoReturnFunction(reset_shell_mode)
1410NoArgNoReturnFunction(resetty)
1411NoArgNoReturnFunction(savetty)
1412
1413NoArgOrFlagNoReturnFunction(cbreak)
1414NoArgOrFlagNoReturnFunction(echo)
1415NoArgOrFlagNoReturnFunction(nl)
1416NoArgOrFlagNoReturnFunction(raw)
1417
1418NoArgReturnIntFunction(baudrate)
1419NoArgReturnIntFunction(termattrs)
1420
1421NoArgReturnStringFunction(termname)
1422NoArgReturnStringFunction(longname)
1423
1424NoArgTrueFalseFunction(can_change_color)
1425NoArgTrueFalseFunction(has_colors)
1426NoArgTrueFalseFunction(has_ic)
1427NoArgTrueFalseFunction(has_il)
1428NoArgTrueFalseFunction(isendwin)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001429NoArgNoReturnVoidFunction(filter)
1430NoArgNoReturnVoidFunction(flushinp)
1431NoArgNoReturnVoidFunction(noqiflush)
1432
1433static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001434PyCurses_Color_Content(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001435{
1436 short color,r,g,b;
1437
1438 PyCursesInitialised
1439 PyCursesInitialisedColor
1440
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001441 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001442 PyErr_SetString(PyExc_TypeError,
1443 "color_content requires 1 argument");
1444 return NULL;
1445 }
1446
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001447 if (!PyArg_Parse(args, "h;color", &color)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001448
1449 if (color_content(color, &r, &g, &b) != ERR)
1450 return Py_BuildValue("(iii)", r, g, b);
1451 else {
1452 PyErr_SetString(PyCursesError,
1453 "Argument 1 was out of range. Check value of COLORS.");
1454 return NULL;
1455 }
1456}
1457
1458static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001459PyCurses_color_pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001460{
1461 int n;
1462
1463 PyCursesInitialised
1464 PyCursesInitialisedColor
1465
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001466 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001467 PyErr_SetString(PyExc_TypeError, "color_pair requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001468 return NULL;
1469 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001470 if (!PyArg_Parse(args, "i;number", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001471 return PyInt_FromLong((long) (n << 8));
1472}
1473
1474static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001475PyCurses_Curs_Set(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001476{
1477 int vis,erg;
1478
1479 PyCursesInitialised
1480
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001481 if (ARG_COUNT(args)!=1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001482 PyErr_SetString(PyExc_TypeError, "curs_set requires 1 argument");
1483 return NULL;
1484 }
1485
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001486 if (!PyArg_Parse(args, "i;int", &vis)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001487
1488 erg = curs_set(vis);
1489 if (erg == ERR) return PyCursesCheckERR(erg, "curs_set");
1490
1491 return PyInt_FromLong((long) erg);
1492}
1493
1494static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001495PyCurses_Delay_Output(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001496{
1497 int ms;
1498
1499 PyCursesInitialised
1500
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001501 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001502 PyErr_SetString(PyExc_TypeError, "delay_output requires 1 argument");
1503 return NULL;
1504 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001505 if (!PyArg_Parse(args, "i;ms", &ms)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001506
1507 return PyCursesCheckERR(delay_output(ms), "delay_output");
1508}
1509
1510static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001511PyCurses_EraseChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001512{
1513 char ch;
1514
1515 PyCursesInitialised
1516
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001517 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001518
1519 ch = erasechar();
1520
1521 return PyString_FromString(&ch);
1522}
1523
1524static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001525PyCurses_getsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001526{
1527 int x,y;
1528
1529 PyCursesInitialised
1530
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001531 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001532
1533 getsyx(y, x);
1534
1535 return Py_BuildValue("(ii)", y, x);
1536}
1537
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001538#ifdef NCURSES_MOUSE_VERSION
1539static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001540PyCurses_GetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001541{
1542 int rtn;
1543 MEVENT event;
1544
1545 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001546 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001547
1548 rtn = getmouse( &event );
1549 if (rtn == ERR) {
1550 PyErr_SetString(PyCursesError, "getmouse() returned ERR");
1551 return NULL;
1552 }
1553 return Py_BuildValue("(hiiil)",
1554 (short)event.id,
1555 event.x, event.y, event.z,
1556 (long) event.bstate);
1557}
1558
1559static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001560PyCurses_UngetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001561{
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001562 MEVENT event;
1563
1564 PyCursesInitialised
1565 if (!PyArg_ParseTuple(args, "(hiiil)",
1566 &event.id,
1567 &event.x, &event.y, &event.z,
1568 (int *) &event.bstate))
1569 return NULL;
1570
1571 return PyCursesCheckERR(ungetmouse(&event), "ungetmouse");
1572}
1573#endif
1574
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001575static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001576PyCurses_GetWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001577{
1578 WINDOW *win;
1579 PyObject *temp;
1580
1581 PyCursesInitialised
1582
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001583 if (!PyArg_Parse(args, "O;fileobj", &temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001584
1585 if (!PyFile_Check(temp)) {
1586 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1587 return NULL;
1588 }
1589
1590 win = getwin(PyFile_AsFile(temp));
1591
1592 if (win == NULL) {
1593 PyErr_SetString(PyCursesError, catchall_NULL);
1594 return NULL;
1595 }
1596
1597 return PyCursesWindow_New(win);
1598}
1599
1600static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001601PyCurses_HalfDelay(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001602{
1603 unsigned char tenths;
1604
1605 PyCursesInitialised
1606
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001607 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001608 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001609 if (!PyArg_Parse(args, "b;tenths", &tenths)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001610 break;
1611 default:
1612 PyErr_SetString(PyExc_TypeError, "halfdelay requires 1 argument");
1613 return NULL;
1614 }
1615
1616 return PyCursesCheckERR(halfdelay(tenths), "halfdelay");
1617}
1618
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00001619#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001620 /* No has_key! */
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001621static PyObject * PyCurses_has_key(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001622{
1623 int ch;
1624
1625 PyCursesInitialised
1626
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001627 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001628
1629 if (has_key(ch) == FALSE) {
1630 Py_INCREF(Py_False);
1631 return Py_False;
1632 }
1633 Py_INCREF(Py_True);
1634 return Py_True;
1635}
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00001636#endif /* STRICT_SYSV_CURSES */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001637
1638static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001639PyCurses_Init_Color(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001640{
1641 short color, r, g, b;
1642
1643 PyCursesInitialised
1644 PyCursesInitialisedColor
1645
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001646 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001647 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001648 if (!PyArg_Parse(args, "(hhhh);color,r,g,b", &color, &r, &g, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001649 break;
1650 default:
1651 PyErr_SetString(PyExc_TypeError, "init_color requires 4 arguments");
1652 return NULL;
1653 }
1654
1655 return PyCursesCheckERR(init_color(color, r, g, b), "init_color");
1656}
1657
1658static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001659PyCurses_Init_Pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001660{
1661 short pair, f, b;
1662
1663 PyCursesInitialised
1664 PyCursesInitialisedColor
1665
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001666 if (ARG_COUNT(args) != 3) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001667 PyErr_SetString(PyExc_TypeError, "init_pair requires 3 arguments");
1668 return NULL;
1669 }
1670
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001671 if (!PyArg_Parse(args, "(hhh);pair, f, b", &pair, &f, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001672
1673 return PyCursesCheckERR(init_pair(pair, f, b), "init_pair");
1674}
1675
Guido van Rossumf6971e21994-08-30 12:25:20 +00001676static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001677PyCurses_InitScr(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001678{
Guido van Rossum56bf2351994-08-31 22:06:24 +00001679 WINDOW *win;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001680 PyObject *lines, *cols;
1681
1682 if (!PyArg_NoArgs(args)) return NULL;
1683
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001684 if (initialised == TRUE) {
Guido van Rossumf6971e21994-08-30 12:25:20 +00001685 wrefresh(stdscr);
1686 return (PyObject *)PyCursesWindow_New(stdscr);
1687 }
Guido van Rossum56bf2351994-08-31 22:06:24 +00001688
1689 win = initscr();
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001690
Guido van Rossum85738471995-02-17 13:50:17 +00001691 if (win == NULL) {
1692 PyErr_SetString(PyCursesError, catchall_NULL);
1693 return NULL;
1694 }
1695
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001696 initialised = TRUE;
Guido van Rossum56bf2351994-08-31 22:06:24 +00001697
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001698/* This was moved from initcurses() because it core dumped on SGI,
1699 where they're not defined until you've called initscr() */
1700#define SetDictInt(string,ch) \
1701 PyDict_SetItemString(ModDict,string,PyInt_FromLong((long) (ch)));
1702
1703 /* Here are some graphic symbols you can use */
1704 SetDictInt("ACS_ULCORNER", (ACS_ULCORNER));
1705 SetDictInt("ACS_LLCORNER", (ACS_LLCORNER));
1706 SetDictInt("ACS_URCORNER", (ACS_URCORNER));
1707 SetDictInt("ACS_LRCORNER", (ACS_LRCORNER));
1708 SetDictInt("ACS_LTEE", (ACS_LTEE));
1709 SetDictInt("ACS_RTEE", (ACS_RTEE));
1710 SetDictInt("ACS_BTEE", (ACS_BTEE));
1711 SetDictInt("ACS_TTEE", (ACS_TTEE));
1712 SetDictInt("ACS_HLINE", (ACS_HLINE));
1713 SetDictInt("ACS_VLINE", (ACS_VLINE));
1714 SetDictInt("ACS_PLUS", (ACS_PLUS));
1715 SetDictInt("ACS_S1", (ACS_S1));
1716 SetDictInt("ACS_S9", (ACS_S9));
1717 SetDictInt("ACS_DIAMOND", (ACS_DIAMOND));
1718 SetDictInt("ACS_CKBOARD", (ACS_CKBOARD));
1719 SetDictInt("ACS_DEGREE", (ACS_DEGREE));
1720 SetDictInt("ACS_PLMINUS", (ACS_PLMINUS));
1721 SetDictInt("ACS_BULLET", (ACS_BULLET));
1722 SetDictInt("ACS_LARROW", (ACS_LARROW));
1723 SetDictInt("ACS_RARROW", (ACS_RARROW));
1724 SetDictInt("ACS_DARROW", (ACS_DARROW));
1725 SetDictInt("ACS_UARROW", (ACS_UARROW));
1726 SetDictInt("ACS_BOARD", (ACS_BOARD));
1727 SetDictInt("ACS_LANTERN", (ACS_LANTERN));
1728 SetDictInt("ACS_BLOCK", (ACS_BLOCK));
1729 SetDictInt("ACS_BSSB", (ACS_ULCORNER));
1730 SetDictInt("ACS_SSBB", (ACS_LLCORNER));
1731 SetDictInt("ACS_BBSS", (ACS_URCORNER));
1732 SetDictInt("ACS_SBBS", (ACS_LRCORNER));
1733 SetDictInt("ACS_SBSS", (ACS_RTEE));
1734 SetDictInt("ACS_SSSB", (ACS_LTEE));
1735 SetDictInt("ACS_SSBS", (ACS_BTEE));
1736 SetDictInt("ACS_BSSS", (ACS_TTEE));
1737 SetDictInt("ACS_BSBS", (ACS_HLINE));
1738 SetDictInt("ACS_SBSB", (ACS_VLINE));
1739 SetDictInt("ACS_SSSS", (ACS_PLUS));
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00001740#ifndef STRICT_SYSV_CURSES
1741 /* The following are never available with strict SYSV curses */
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001742 SetDictInt("ACS_S3", (ACS_S3));
1743 SetDictInt("ACS_LEQUAL", (ACS_LEQUAL));
1744 SetDictInt("ACS_GEQUAL", (ACS_GEQUAL));
1745 SetDictInt("ACS_PI", (ACS_PI));
1746 SetDictInt("ACS_NEQUAL", (ACS_NEQUAL));
1747 SetDictInt("ACS_STERLING", (ACS_STERLING));
1748#endif
1749
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001750 lines = PyInt_FromLong((long) LINES);
1751 PyDict_SetItemString(ModDict, "LINES", lines);
1752 Py_DECREF(lines);
1753 cols = PyInt_FromLong((long) COLS);
1754 PyDict_SetItemString(ModDict, "COLS", cols);
1755 Py_DECREF(cols);
Guido van Rossum56bf2351994-08-31 22:06:24 +00001756
1757 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001758}
1759
Guido van Rossumf6971e21994-08-30 12:25:20 +00001760
1761static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001762PyCurses_IntrFlush(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001763{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001764 int ch;
1765
1766 PyCursesInitialised
1767
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001768 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001769 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001770 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001771 break;
1772 default:
1773 PyErr_SetString(PyExc_TypeError, "intrflush requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00001774 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001775 }
1776
1777 return PyCursesCheckERR(intrflush(NULL,ch), "intrflush");
1778}
1779
1780static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001781PyCurses_KeyName(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001782{
1783 const char *knp;
1784 int ch;
1785
1786 PyCursesInitialised
1787
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001788 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001789
1790 knp = keyname(ch);
1791
1792 return PyString_FromString((knp == NULL) ? "" : (char *)knp);
1793}
1794
1795static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001796PyCurses_KillChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001797{
1798 char ch;
1799
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001800 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001801
1802 ch = killchar();
1803
1804 return PyString_FromString(&ch);
1805}
1806
1807static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001808PyCurses_Meta(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001809{
1810 int ch;
1811
1812 PyCursesInitialised
1813
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001814 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001815 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001816 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001817 break;
1818 default:
1819 PyErr_SetString(PyExc_TypeError, "meta requires 1 argument");
1820 return NULL;
1821 }
1822
1823 return PyCursesCheckERR(meta(stdscr, ch), "meta");
1824}
1825
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001826#ifdef NCURSES_MOUSE_VERSION
1827static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001828PyCurses_MouseInterval(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001829{
1830 int interval;
1831 PyCursesInitialised
1832
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001833 if (!PyArg_Parse(args,"i;interval",&interval))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001834 return NULL;
1835 return PyCursesCheckERR(mouseinterval(interval), "mouseinterval");
1836}
1837
1838static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001839PyCurses_MouseMask(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001840{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00001841 int newmask;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001842 mmask_t oldmask, availmask;
1843
1844 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001845 if (!PyArg_Parse(args,"i;mousemask",&newmask))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001846 return NULL;
1847 availmask = mousemask(newmask, &oldmask);
1848 return Py_BuildValue("(ll)", (long)availmask, (long)oldmask);
1849}
1850#endif
1851
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001852static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001853PyCurses_NewPad(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001854{
1855 WINDOW *win;
1856 int nlines, ncols;
1857
1858 PyCursesInitialised
1859
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001860 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001861
1862 win = newpad(nlines, ncols);
1863
1864 if (win == NULL) {
1865 PyErr_SetString(PyCursesError, catchall_NULL);
1866 return NULL;
1867 }
1868
1869 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001870}
1871
1872static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001873PyCurses_NewWindow(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001874{
1875 WINDOW *win;
1876 int nlines, ncols, begin_y, begin_x;
Guido van Rossum85738471995-02-17 13:50:17 +00001877
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001878 PyCursesInitialised
1879
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001880 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +00001881 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001882 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols))
Guido van Rossum85738471995-02-17 13:50:17 +00001883 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001884 win = newpad(nlines, ncols);
Guido van Rossum85738471995-02-17 13:50:17 +00001885 break;
1886 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001887 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Guido van Rossumf6971e21994-08-30 12:25:20 +00001888 &nlines,&ncols,&begin_y,&begin_x))
Guido van Rossum85738471995-02-17 13:50:17 +00001889 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001890 win = newwin(nlines,ncols,begin_y,begin_x);
Guido van Rossum85738471995-02-17 13:50:17 +00001891 break;
1892 default:
1893 PyErr_SetString(PyExc_TypeError, "newwin requires 2 or 4 arguments");
1894 return NULL;
1895 }
1896
Guido van Rossumf6971e21994-08-30 12:25:20 +00001897 if (win == NULL) {
Guido van Rossum85738471995-02-17 13:50:17 +00001898 PyErr_SetString(PyCursesError, catchall_NULL);
1899 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +00001900 }
Guido van Rossum85738471995-02-17 13:50:17 +00001901
Guido van Rossumf6971e21994-08-30 12:25:20 +00001902 return (PyObject *)PyCursesWindow_New(win);
1903}
1904
1905static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001906PyCurses_Pair_Content(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001907{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001908 short pair,f,b;
1909
1910 PyCursesInitialised
1911 PyCursesInitialisedColor
1912
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001913 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001914 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001915 if (!PyArg_Parse(args, "h;pair", &pair)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001916 break;
1917 default:
1918 PyErr_SetString(PyExc_TypeError, "pair_content requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00001919 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001920 }
1921
1922 if (!pair_content(pair, &f, &b)) {
1923 PyErr_SetString(PyCursesError,
1924 "Argument 1 was out of range. (1..COLOR_PAIRS-1)");
1925 return NULL;
1926 }
1927
1928 return Py_BuildValue("(ii)", f, b);
1929}
1930
1931static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001932PyCurses_pair_number(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001933{
1934 int n;
1935
1936 PyCursesInitialised
1937 PyCursesInitialisedColor
1938
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001939 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001940 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001941 if (!PyArg_Parse(args, "i;pairvalue", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001942 break;
1943 default:
1944 PyErr_SetString(PyExc_TypeError,
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001945 "pair_number requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001946 return NULL;
1947 }
1948
1949 return PyInt_FromLong((long) ((n & A_COLOR) >> 8));
1950}
1951
1952static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001953PyCurses_Putp(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001954{
1955 char *str;
1956
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001957 if (!PyArg_Parse(args,"s;str", &str)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001958 return PyCursesCheckERR(putp(str), "putp");
1959}
1960
1961static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001962PyCurses_QiFlush(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001963{
1964 int flag = 0;
1965
1966 PyCursesInitialised
1967
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001968 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001969 case 0:
1970 qiflush();
1971 Py_INCREF(Py_None);
1972 return Py_None;
1973 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001974 if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001975 if (flag) qiflush();
1976 else noqiflush();
1977 Py_INCREF(Py_None);
1978 return Py_None;
1979 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001980 PyErr_SetString(PyExc_TypeError, "qiflush requires 0 or 1 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001981 return NULL;
1982 }
1983}
1984
1985static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001986PyCurses_setsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001987{
1988 int y,x;
1989
1990 PyCursesInitialised
1991
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001992 if (ARG_COUNT(args)!=2) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001993 PyErr_SetString(PyExc_TypeError, "setsyx requires 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001994 return NULL;
1995 }
1996
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001997 if (!PyArg_Parse(args, "(ii);y, x", &y, &x)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001998
1999 setsyx(y,x);
2000
Guido van Rossumf6971e21994-08-30 12:25:20 +00002001 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00002002 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002003}
2004
2005static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002006PyCurses_Start_Color(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002007{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002008 int code;
2009 PyObject *c, *cp;
2010
2011 PyCursesInitialised
2012
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002013 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002014
2015 code = start_color();
2016 if (code != ERR) {
2017 initialisedcolors = TRUE;
2018 c = PyInt_FromLong((long) COLORS);
2019 PyDict_SetItemString(ModDict, "COLORS", c);
2020 Py_DECREF(c);
2021 cp = PyInt_FromLong((long) COLOR_PAIRS);
2022 PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp);
2023 Py_DECREF(cp);
2024 Py_INCREF(Py_None);
2025 return Py_None;
2026 } else {
2027 PyErr_SetString(PyCursesError, "start_color() returned ERR");
Guido van Rossum85738471995-02-17 13:50:17 +00002028 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002029 }
2030}
2031
2032static PyObject *
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002033PyCurses_tigetflag(PyObject *self, PyObject *args)
2034{
2035 char *capname;
2036
2037 PyCursesInitialised;
2038
2039 if (!PyArg_ParseTuple(args, "z", &capname))
2040 return NULL;
2041
2042 return PyInt_FromLong( (long) tigetflag( capname ) );
2043}
2044
2045static PyObject *
2046PyCurses_tigetnum(PyObject *self, PyObject *args)
2047{
2048 char *capname;
2049
2050 PyCursesInitialised;
2051
2052 if (!PyArg_ParseTuple(args, "z", &capname))
2053 return NULL;
2054
2055 return PyInt_FromLong( (long) tigetnum( capname ) );
2056}
2057
2058static PyObject *
2059PyCurses_tigetstr(PyObject *self, PyObject *args)
2060{
2061 char *capname;
2062
2063 PyCursesInitialised;
2064
2065 if (!PyArg_ParseTuple(args, "z", &capname))
2066 return NULL;
2067
2068 capname = tigetstr( capname );
2069 if (capname == 0 || capname == (char*) -1) {
2070 Py_INCREF(Py_None);
2071 return Py_None;
2072 }
2073 return PyString_FromString( capname );
2074}
2075
2076static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002077PyCurses_TypeAhead(PyObject *self, PyObject *args)
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002078{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002079 int fd;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002080
2081 PyCursesInitialised
2082
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002083 if (!PyArg_Parse(args,"i;fd",&fd)) return NULL;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002084
2085 PyCursesCheckERR(typeahead( fd ), "typeahead");
2086 Py_INCREF(Py_None);
2087 return Py_None;
2088}
2089
2090static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002091PyCurses_UnCtrl(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002092{
2093 PyObject *temp;
2094 chtype ch;
2095
2096 PyCursesInitialised
2097
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002098 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002099
2100 if (PyInt_Check(temp))
2101 ch = (chtype) PyInt_AsLong(temp);
2102 else if (PyString_Check(temp))
2103 ch = (chtype) *PyString_AsString(temp);
2104 else {
2105 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
2106 return NULL;
2107 }
2108
2109 return PyString_FromString(unctrl(ch));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002110}
2111
2112static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002113PyCurses_UngetCh(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002114{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002115 PyObject *temp;
2116 chtype ch;
2117
2118 PyCursesInitialised
2119
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002120 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002121
2122 if (PyInt_Check(temp))
2123 ch = (chtype) PyInt_AsLong(temp);
2124 else if (PyString_Check(temp))
2125 ch = (chtype) *PyString_AsString(temp);
2126 else {
2127 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +00002128 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002129 }
2130
Guido van Rossum85738471995-02-17 13:50:17 +00002131 return PyCursesCheckERR(ungetch(ch), "ungetch");
Guido van Rossumf6971e21994-08-30 12:25:20 +00002132}
2133
2134static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002135PyCurses_Use_Env(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002136{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002137 int flag;
2138
2139 PyCursesInitialised
2140
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002141 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002142 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002143 if (!PyArg_Parse(args,"i;True(1), False(0)",&flag))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002144 return NULL;
2145 break;
2146 default:
2147 PyErr_SetString(PyExc_TypeError, "use_env requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00002148 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002149 }
2150 use_env(flag);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002151 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00002152 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002153}
2154
Guido van Rossumf6971e21994-08-30 12:25:20 +00002155/* List of functions defined in the module */
2156
2157static PyMethodDef PyCurses_methods[] = {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002158 {"baudrate", (PyCFunction)PyCurses_baudrate},
2159 {"beep", (PyCFunction)PyCurses_beep},
2160 {"can_change_color", (PyCFunction)PyCurses_can_change_color},
2161 {"cbreak", (PyCFunction)PyCurses_cbreak},
2162 {"color_content", (PyCFunction)PyCurses_Color_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002163 {"color_pair", (PyCFunction)PyCurses_color_pair},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002164 {"curs_set", (PyCFunction)PyCurses_Curs_Set},
2165 {"def_prog_mode", (PyCFunction)PyCurses_def_prog_mode},
2166 {"def_shell_mode", (PyCFunction)PyCurses_def_shell_mode},
2167 {"delay_output", (PyCFunction)PyCurses_Delay_Output},
2168 {"doupdate", (PyCFunction)PyCurses_doupdate},
2169 {"echo", (PyCFunction)PyCurses_echo},
2170 {"endwin", (PyCFunction)PyCurses_endwin},
2171 {"erasechar", (PyCFunction)PyCurses_EraseChar},
2172 {"filter", (PyCFunction)PyCurses_filter},
2173 {"flash", (PyCFunction)PyCurses_flash},
2174 {"flushinp", (PyCFunction)PyCurses_flushinp},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002175#ifdef NCURSES_MOUSE_VERSION
2176 {"getmouse", (PyCFunction)PyCurses_GetMouse},
2177 {"ungetmouse", (PyCFunction)PyCurses_UngetMouse, METH_VARARGS},
2178#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002179 {"getsyx", (PyCFunction)PyCurses_getsyx},
2180 {"getwin", (PyCFunction)PyCurses_GetWin},
2181 {"has_colors", (PyCFunction)PyCurses_has_colors},
2182 {"has_ic", (PyCFunction)PyCurses_has_ic},
2183 {"has_il", (PyCFunction)PyCurses_has_il},
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00002184#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002185 {"has_key", (PyCFunction)PyCurses_has_key},
Guido van Rossumf6971e21994-08-30 12:25:20 +00002186#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002187 {"halfdelay", (PyCFunction)PyCurses_HalfDelay},
2188 {"init_color", (PyCFunction)PyCurses_Init_Color},
2189 {"init_pair", (PyCFunction)PyCurses_Init_Pair},
2190 {"initscr", (PyCFunction)PyCurses_InitScr},
2191 {"intrflush", (PyCFunction)PyCurses_IntrFlush},
2192 {"isendwin", (PyCFunction)PyCurses_isendwin},
2193 {"keyname", (PyCFunction)PyCurses_KeyName},
2194 {"killchar", (PyCFunction)PyCurses_KillChar},
2195 {"longname", (PyCFunction)PyCurses_longname},
2196 {"meta", (PyCFunction)PyCurses_Meta},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002197#ifdef NCURSES_MOUSE_VERSION
2198 {"mouseinterval", (PyCFunction)PyCurses_MouseInterval},
2199 {"mousemask", (PyCFunction)PyCurses_MouseMask},
2200#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002201 {"newpad", (PyCFunction)PyCurses_NewPad},
2202 {"newwin", (PyCFunction)PyCurses_NewWindow},
2203 {"nl", (PyCFunction)PyCurses_nl},
2204 {"nocbreak", (PyCFunction)PyCurses_nocbreak},
2205 {"noecho", (PyCFunction)PyCurses_noecho},
2206 {"nonl", (PyCFunction)PyCurses_nonl},
2207 {"noqiflush", (PyCFunction)PyCurses_noqiflush},
2208 {"noraw", (PyCFunction)PyCurses_noraw},
2209 {"pair_content", (PyCFunction)PyCurses_Pair_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002210 {"pair_number", (PyCFunction)PyCurses_pair_number},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002211 {"putp", (PyCFunction)PyCurses_Putp},
2212 {"qiflush", (PyCFunction)PyCurses_QiFlush},
2213 {"raw", (PyCFunction)PyCurses_raw},
2214 {"reset_prog_mode", (PyCFunction)PyCurses_reset_prog_mode},
2215 {"reset_shell_mode", (PyCFunction)PyCurses_reset_shell_mode},
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002216 {"resetty", (PyCFunction)PyCurses_resetty},
2217 {"savetty", (PyCFunction)PyCurses_savetty},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002218 {"setsyx", (PyCFunction)PyCurses_setsyx},
2219 {"start_color", (PyCFunction)PyCurses_Start_Color},
2220 {"termattrs", (PyCFunction)PyCurses_termattrs},
2221 {"termname", (PyCFunction)PyCurses_termname},
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002222 {"tigetflag", (PyCFunction)PyCurses_tigetflag, METH_VARARGS},
2223 {"tigetnum", (PyCFunction)PyCurses_tigetnum, METH_VARARGS},
2224 {"tigetstr", (PyCFunction)PyCurses_tigetstr, METH_VARARGS},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002225 {"typeahead", (PyCFunction)PyCurses_TypeAhead},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002226 {"unctrl", (PyCFunction)PyCurses_UnCtrl},
2227 {"ungetch", (PyCFunction)PyCurses_UngetCh},
2228 {"use_env", (PyCFunction)PyCurses_Use_Env},
2229 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00002230};
2231
2232/* Initialization function for the module */
2233
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002234void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00002235init_curses(void)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002236{
Guido van Rossum8fbf82b1995-02-17 13:54:04 +00002237 PyObject *m, *d, *v;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002238
2239 /* Create the module and add the functions */
Andrew M. Kuchlingb7f198e2000-06-10 23:12:32 +00002240 m = Py_InitModule("_curses", PyCurses_methods);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002241
Guido van Rossumf6971e21994-08-30 12:25:20 +00002242 /* Add some symbolic constants to the module */
2243 d = PyModule_GetDict(m);
Guido van Rossume4485b01994-09-07 14:32:49 +00002244 ModDict = d; /* For PyCurses_InitScr */
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002245
Guido van Rossum85738471995-02-17 13:50:17 +00002246 /* For exception curses.error */
Fred Drake589c35b2000-07-06 19:38:49 +00002247 PyCursesError = PyErr_NewException("_curses.error", NULL, NULL);
Guido van Rossum85738471995-02-17 13:50:17 +00002248 PyDict_SetItemString(d, "error", PyCursesError);
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002249
Guido van Rossum85738471995-02-17 13:50:17 +00002250 /* Make the version available */
Guido van Rossum8fbf82b1995-02-17 13:54:04 +00002251 v = PyString_FromString(PyCursesVersion);
2252 PyDict_SetItemString(d, "version", v);
2253 PyDict_SetItemString(d, "__version__", v);
2254 Py_DECREF(v);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002255
Guido van Rossumf6971e21994-08-30 12:25:20 +00002256 /* Here are some attributes you can add to chars to print */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002257
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002258 SetDictInt("A_ATTRIBUTES", A_ATTRIBUTES);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002259 SetDictInt("A_NORMAL", A_NORMAL);
2260 SetDictInt("A_STANDOUT", A_STANDOUT);
2261 SetDictInt("A_UNDERLINE", A_UNDERLINE);
2262 SetDictInt("A_REVERSE", A_REVERSE);
2263 SetDictInt("A_BLINK", A_BLINK);
2264 SetDictInt("A_DIM", A_DIM);
2265 SetDictInt("A_BOLD", A_BOLD);
2266 SetDictInt("A_ALTCHARSET", A_ALTCHARSET);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002267 SetDictInt("A_INVIS", A_INVIS);
2268 SetDictInt("A_PROTECT", A_PROTECT);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002269 SetDictInt("A_CHARTEXT", A_CHARTEXT);
2270 SetDictInt("A_COLOR", A_COLOR);
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00002271#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002272 SetDictInt("A_HORIZONTAL", A_HORIZONTAL);
2273 SetDictInt("A_LEFT", A_LEFT);
2274 SetDictInt("A_LOW", A_LOW);
2275 SetDictInt("A_RIGHT", A_RIGHT);
2276 SetDictInt("A_TOP", A_TOP);
2277 SetDictInt("A_VERTICAL", A_VERTICAL);
2278#endif
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002279
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002280 SetDictInt("COLOR_BLACK", COLOR_BLACK);
2281 SetDictInt("COLOR_RED", COLOR_RED);
2282 SetDictInt("COLOR_GREEN", COLOR_GREEN);
2283 SetDictInt("COLOR_YELLOW", COLOR_YELLOW);
2284 SetDictInt("COLOR_BLUE", COLOR_BLUE);
2285 SetDictInt("COLOR_MAGENTA", COLOR_MAGENTA);
2286 SetDictInt("COLOR_CYAN", COLOR_CYAN);
2287 SetDictInt("COLOR_WHITE", COLOR_WHITE);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002288
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002289#ifdef NCURSES_MOUSE_VERSION
2290 /* Mouse-related constants */
2291 SetDictInt("BUTTON1_PRESSED", BUTTON1_PRESSED);
2292 SetDictInt("BUTTON1_RELEASED", BUTTON1_RELEASED);
2293 SetDictInt("BUTTON1_CLICKED", BUTTON1_CLICKED);
2294 SetDictInt("BUTTON1_DOUBLE_CLICKED", BUTTON1_DOUBLE_CLICKED);
2295 SetDictInt("BUTTON1_TRIPLE_CLICKED", BUTTON1_TRIPLE_CLICKED);
2296
2297 SetDictInt("BUTTON2_PRESSED", BUTTON2_PRESSED);
2298 SetDictInt("BUTTON2_RELEASED", BUTTON2_RELEASED);
2299 SetDictInt("BUTTON2_CLICKED", BUTTON2_CLICKED);
2300 SetDictInt("BUTTON2_DOUBLE_CLICKED", BUTTON2_DOUBLE_CLICKED);
2301 SetDictInt("BUTTON2_TRIPLE_CLICKED", BUTTON2_TRIPLE_CLICKED);
2302
2303 SetDictInt("BUTTON3_PRESSED", BUTTON3_PRESSED);
2304 SetDictInt("BUTTON3_RELEASED", BUTTON3_RELEASED);
2305 SetDictInt("BUTTON3_CLICKED", BUTTON3_CLICKED);
2306 SetDictInt("BUTTON3_DOUBLE_CLICKED", BUTTON3_DOUBLE_CLICKED);
2307 SetDictInt("BUTTON3_TRIPLE_CLICKED", BUTTON3_TRIPLE_CLICKED);
2308
2309 SetDictInt("BUTTON4_PRESSED", BUTTON4_PRESSED);
2310 SetDictInt("BUTTON4_RELEASED", BUTTON4_RELEASED);
2311 SetDictInt("BUTTON4_CLICKED", BUTTON4_CLICKED);
2312 SetDictInt("BUTTON4_DOUBLE_CLICKED", BUTTON4_DOUBLE_CLICKED);
2313 SetDictInt("BUTTON4_TRIPLE_CLICKED", BUTTON4_TRIPLE_CLICKED);
2314
2315 SetDictInt("BUTTON_SHIFT", BUTTON_SHIFT);
2316 SetDictInt("BUTTON_CTRL", BUTTON_CTRL);
2317 SetDictInt("BUTTON_ALT", BUTTON_ALT);
2318
2319 SetDictInt("ALL_MOUSE_EVENTS", ALL_MOUSE_EVENTS);
2320 SetDictInt("REPORT_MOUSE_POSITION", REPORT_MOUSE_POSITION);
2321#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +00002322 /* Now set everything up for KEY_ variables */
2323 {
2324 int key;
2325 char *key_n;
2326 char *key_n2;
2327 for (key=KEY_MIN;key < KEY_MAX; key++) {
2328 key_n = (char *)keyname(key);
Guido van Rossumf5c6d471995-02-07 15:38:32 +00002329 if (key_n == NULL || strcmp(key_n,"UNKNOWN KEY")==0)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002330 continue;
2331 if (strncmp(key_n,"KEY_F(",6)==0) {
2332 char *p1, *p2;
2333 key_n2 = malloc(strlen(key_n)+1);
2334 p1 = key_n;
2335 p2 = key_n2;
2336 while (*p1) {
2337 if (*p1 != '(' && *p1 != ')') {
2338 *p2 = *p1;
2339 p2++;
2340 }
2341 p1++;
2342 }
2343 *p2 = (char)0;
2344 } else
2345 key_n2 = key_n;
Guido van Rossum85738471995-02-17 13:50:17 +00002346 PyDict_SetItemString(d,key_n2,PyInt_FromLong((long) key));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002347 if (key_n2 != key_n)
2348 free(key_n2);
2349 }
Guido van Rossum85738471995-02-17 13:50:17 +00002350 SetDictInt("KEY_MIN", KEY_MIN);
2351 SetDictInt("KEY_MAX", KEY_MAX);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002352 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002353
2354 /* Check for errors */
2355 if (PyErr_Occurred())
Andrew M. Kuchlingb7f198e2000-06-10 23:12:32 +00002356 Py_FatalError("can't initialize module _curses");
Guido van Rossumf6971e21994-08-30 12:25:20 +00002357}