blob: 12e2084e6401381341c88a2993f960876a1d56c8 [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
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +000081#ifdef sgi
82/* This prototype is in <term.h>, but including this header #defines
83 many common symbols (such as "lines") which breaks the curses
84 module in other ways. So the code will just specify an explicit
85 prototype here. */
86extern char *tigetstr(char *);
87#endif
88
89#if defined(sgi) || defined(__sun__)
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +000090#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000091typedef chtype attr_t; /* No attr_t type is available */
Guido van Rossum1266a011996-02-25 04:50:31 +000092#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +000093
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000094/* Definition of exception curses.error */
Guido van Rossumf6971e21994-08-30 12:25:20 +000095
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000096static PyObject *PyCursesError;
Guido van Rossumf6971e21994-08-30 12:25:20 +000097
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000098/* general error messages */
Guido van Rossum85738471995-02-17 13:50:17 +000099static char *catchall_ERR = "curses function returned ERR";
100static char *catchall_NULL = "curses function returned NULL";
101
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000102/* Tells whether initscr() has been called to initialise curses. */
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000103static int initialised = FALSE;
104
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000105/* Tells whether start_color() has been called to initialise colorusage. */
106static int initialisedcolors = FALSE;
107
108/* Utility Macros */
Guido van Rossum85738471995-02-17 13:50:17 +0000109#define ARG_COUNT(X) \
110 (((X) == NULL) ? 0 : (PyTuple_Check(X) ? PyTuple_Size(X) : 1))
Guido van Rossumf6971e21994-08-30 12:25:20 +0000111
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000112#define PyCursesInitialised \
113 if (initialised != TRUE) { \
114 PyErr_SetString(PyCursesError, \
115 "must call initscr() first"); \
116 return NULL; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000117
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000118#define PyCursesInitialisedColor \
119 if (initialisedcolors != TRUE) { \
120 PyErr_SetString(PyCursesError, \
121 "must call start_color() first"); \
122 return NULL; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000123
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000124/* Utility Functions */
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000125
Guido van Rossum85738471995-02-17 13:50:17 +0000126/*
127 * Check the return code from a curses function and return None
128 * or raise an exception as appropriate.
129 */
130
131static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000132PyCursesCheckERR(int code, char *fname)
Guido van Rossum85738471995-02-17 13:50:17 +0000133{
Guido van Rossum85738471995-02-17 13:50:17 +0000134 if (code != ERR) {
135 Py_INCREF(Py_None);
136 return Py_None;
137 } else {
138 if (fname == NULL) {
139 PyErr_SetString(PyCursesError, catchall_ERR);
140 } else {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000141 PyErr_Format(PyCursesError, "%s() returned ERR", fname);
Guido van Rossum85738471995-02-17 13:50:17 +0000142 }
143 return NULL;
144 }
145}
146
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000147static int
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000148PyCurses_ConvertToChtype(PyObject *obj, chtype *ch)
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000149{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000150 if (PyInt_Check(obj)) {
151 *ch = (chtype) PyInt_AsLong(obj);
152 } else if(PyString_Check(obj) &
153 (PyString_Size(obj) == 1)) {
154 *ch = (chtype) *PyString_AsString(obj);
155 } else {
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000156 return 0;
157 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000158 return 1;
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000159}
160
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000161/*****************************************************************************
162 The Window Object
163******************************************************************************/
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000164
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000165/* Definition of the window object and window type */
Guido van Rossum85738471995-02-17 13:50:17 +0000166
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000167typedef struct {
168 PyObject_HEAD
169 WINDOW *win;
170} PyCursesWindowObject;
Guido van Rossum85738471995-02-17 13:50:17 +0000171
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000172PyTypeObject PyCursesWindow_Type;
173
174#define PyCursesWindow_Check(v) ((v)->ob_type == &PyCursesWindow_Type)
175
176/* Function Prototype Macros - They are ugly but very, very useful. ;-)
177
178 X - function name
179 TYPE - parameter Type
180 ERGSTR - format string for construction of the return value
181 PARSESTR - format string for argument parsing
182 */
183
184#define Window_NoArgNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000185static PyObject *PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
186{ if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000187 return PyCursesCheckERR(X(self->win), # X); }
188
189#define Window_NoArgTrueFalseFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000190static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000191{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000192 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000193 if (X (self->win) == FALSE) { Py_INCREF(Py_False); return Py_False; } \
194 else { Py_INCREF(Py_True); return Py_True; } }
195
196#define Window_NoArgNoReturnVoidFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000197static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000198{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000199 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000200 X(self->win); Py_INCREF(Py_None); return Py_None; }
201
202#define Window_NoArg2TupleReturnFunction(X, TYPE, ERGSTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000203static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000204{ \
205 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000206 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000207 X(self->win,arg1,arg2); return Py_BuildValue(ERGSTR, arg1, arg2); }
208
209#define Window_OneArgNoReturnVoidFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000210static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000211{ \
212 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000213 if (!PyArg_Parse(args, PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000214 X(self->win,arg1); Py_INCREF(Py_None); return Py_None; }
215
216#define Window_OneArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000217static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000218{ \
219 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000220 if (!PyArg_Parse(args,PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000221 return PyCursesCheckERR(X(self->win, arg1), # X); }
222
223#define Window_TwoArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000224static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000225{ \
226 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000227 if (!PyArg_Parse(args,PARSESTR, &arg1, &arg2)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000228 return PyCursesCheckERR(X(self->win, arg1, arg2), # X); }
Guido van Rossum85738471995-02-17 13:50:17 +0000229
Guido van Rossumf6971e21994-08-30 12:25:20 +0000230/* ------------- WINDOW routines --------------- */
Guido van Rossum85738471995-02-17 13:50:17 +0000231
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000232Window_NoArgNoReturnFunction(untouchwin)
233Window_NoArgNoReturnFunction(touchwin)
234Window_NoArgNoReturnFunction(redrawwin)
235Window_NoArgNoReturnFunction(winsertln)
236Window_NoArgNoReturnFunction(werase)
237Window_NoArgNoReturnFunction(wdeleteln)
238
239Window_NoArgTrueFalseFunction(is_wintouched)
240
241Window_NoArgNoReturnVoidFunction(wsyncup)
242Window_NoArgNoReturnVoidFunction(wsyncdown)
243Window_NoArgNoReturnVoidFunction(wstandend)
244Window_NoArgNoReturnVoidFunction(wstandout)
245Window_NoArgNoReturnVoidFunction(wcursyncup)
246Window_NoArgNoReturnVoidFunction(wclrtoeol)
247Window_NoArgNoReturnVoidFunction(wclrtobot)
248Window_NoArgNoReturnVoidFunction(wclear)
249
250Window_OneArgNoReturnVoidFunction(idcok, int, "i;True(1) or False(0)")
251Window_OneArgNoReturnVoidFunction(immedok, int, "i;True(1) or False(0)")
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +0000252Window_OneArgNoReturnVoidFunction(wtimeout, int, "i;delay")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000253
254Window_NoArg2TupleReturnFunction(getyx, int, "(ii)")
255Window_NoArg2TupleReturnFunction(getbegyx, int, "(ii)")
256Window_NoArg2TupleReturnFunction(getmaxyx, int, "(ii)")
257Window_NoArg2TupleReturnFunction(getparyx, int, "(ii)")
258
259Window_OneArgNoReturnFunction(wattron, attr_t, "l;attr")
260Window_OneArgNoReturnFunction(wattroff, attr_t, "l;attr")
261Window_OneArgNoReturnFunction(wattrset, attr_t, "l;attr")
262Window_OneArgNoReturnFunction(clearok, int, "i;True(1) or False(0)")
263Window_OneArgNoReturnFunction(idlok, int, "i;True(1) or False(0)")
264Window_OneArgNoReturnFunction(keypad, int, "i;True(1) or False(0)")
265Window_OneArgNoReturnFunction(leaveok, int, "i;True(1) or False(0)")
266Window_OneArgNoReturnFunction(nodelay, int, "i;True(1) or False(0)")
267Window_OneArgNoReturnFunction(notimeout, int, "i;True(1) or False(0)")
268Window_OneArgNoReturnFunction(scrollok, int, "i;True(1) or False(0)")
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000269Window_OneArgNoReturnFunction(winsdelln, int, "i;nlines")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000270Window_OneArgNoReturnFunction(syncok, int, "i;True(1) or False(0)")
271
272Window_TwoArgNoReturnFunction(mvwin, int, "(ii);y,x")
273Window_TwoArgNoReturnFunction(mvderwin, int, "(ii);y,x")
274Window_TwoArgNoReturnFunction(wmove, int, "(ii);y,x")
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000275#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000276Window_TwoArgNoReturnFunction(wresize, int, "(ii);lines,columns")
277#endif
278
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000279/* Allocation and deallocation of Window Objects */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000280
Guido van Rossumf6971e21994-08-30 12:25:20 +0000281static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000282PyCursesWindow_New(WINDOW *win)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000283{
284 PyCursesWindowObject *wo;
Guido van Rossum85738471995-02-17 13:50:17 +0000285
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000286 wo = PyObject_NEW(PyCursesWindowObject, &PyCursesWindow_Type);
287 if (wo == NULL) return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000288 wo->win = win;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000289 return (PyObject *)wo;
290}
291
292static void
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000293PyCursesWindow_Dealloc(PyCursesWindowObject *wo)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000294{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000295 if (wo->win != stdscr) delwin(wo->win);
296 PyMem_DEL(wo);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000297}
298
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000299/* Addch, Addstr, Addnstr */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000300
301static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000302PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000303{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000304 int rtn, x, y, use_xy = FALSE;
305 PyObject *temp;
306 chtype ch = 0;
307 attr_t attr = A_NORMAL;
308
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000309 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000310 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000311 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000312 return NULL;
313 break;
314 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000315 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000316 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000317 break;
318 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000319 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000320 return NULL;
321 use_xy = TRUE;
322 break;
323 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000324 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000325 &y, &x, &temp, &attr))
326 return NULL;
327 use_xy = TRUE;
328 break;
329 default:
330 PyErr_SetString(PyExc_TypeError, "addch requires 1 or 4 arguments");
331 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000332 }
Guido van Rossum85738471995-02-17 13:50:17 +0000333
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000334 if (!PyCurses_ConvertToChtype(temp, &ch)) {
335 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
336 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000337 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000338
Guido van Rossumf6971e21994-08-30 12:25:20 +0000339 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000340 rtn = mvwaddch(self->win,y,x, ch | attr);
341 else {
342 rtn = waddch(self->win, ch | attr);
343 }
344 return PyCursesCheckERR(rtn, "addch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000345}
346
347static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000348PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000349{
350 int rtn;
351 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000352 char *str;
353 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
354 int use_xy = FALSE, use_attr = FALSE;
Guido van Rossum85738471995-02-17 13:50:17 +0000355
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000356 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000357 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000358 if (!PyArg_Parse(args,"s;str", &str))
Guido van Rossum85738471995-02-17 13:50:17 +0000359 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000360 break;
361 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000362 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000363 return NULL;
364 use_attr = TRUE;
365 break;
366 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000367 if (!PyArg_Parse(args,"(iis);int,int,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000368 return NULL;
369 use_xy = TRUE;
370 break;
371 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000372 if (!PyArg_Parse(args,"(iisl);int,int,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000373 return NULL;
374 use_xy = use_attr = TRUE;
375 break;
376 default:
377 PyErr_SetString(PyExc_TypeError, "addstr requires 1 to 4 arguments");
378 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000379 }
Guido van Rossum85738471995-02-17 13:50:17 +0000380
Guido van Rossumf6971e21994-08-30 12:25:20 +0000381 if (use_attr == TRUE) {
382 attr_old = getattrs(self->win);
383 wattrset(self->win,attr);
384 }
385 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000386 rtn = mvwaddstr(self->win,y,x,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000387 else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000388 rtn = waddstr(self->win,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000389 if (use_attr == TRUE)
390 wattrset(self->win,attr_old);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000391 return PyCursesCheckERR(rtn, "addstr");
392}
Guido van Rossum85738471995-02-17 13:50:17 +0000393
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000394static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000395PyCursesWindow_AddNStr(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000396{
397 int rtn, x, y, n;
398 char *str;
399 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
400 int use_xy = FALSE, use_attr = FALSE;
401
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000402 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000403 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000404 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000405 return NULL;
406 break;
407 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000408 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000409 return NULL;
410 use_attr = TRUE;
411 break;
412 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000413 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000414 return NULL;
415 use_xy = TRUE;
416 break;
417 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000418 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000419 return NULL;
420 use_xy = use_attr = TRUE;
421 break;
422 default:
423 PyErr_SetString(PyExc_TypeError, "addnstr requires 2 to 5 arguments");
424 return NULL;
425 }
426
427 if (use_attr == TRUE) {
428 attr_old = getattrs(self->win);
429 wattrset(self->win,attr);
430 }
431 if (use_xy == TRUE)
432 rtn = mvwaddnstr(self->win,y,x,str,n);
433 else
434 rtn = waddnstr(self->win,str,n);
435 if (use_attr == TRUE)
436 wattrset(self->win,attr_old);
437 return PyCursesCheckERR(rtn, "addnstr");
438}
439
440static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000441PyCursesWindow_Bkgd(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000442{
443 PyObject *temp;
444 chtype bkgd;
445 attr_t attr = A_NORMAL;
446
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000447 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000448 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000449 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000450 return NULL;
451 break;
452 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000453 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000454 return NULL;
455 break;
456 default:
457 PyErr_SetString(PyExc_TypeError, "bkgd requires 1 or 2 arguments");
458 return NULL;
459 }
460
461 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
462 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
463 return NULL;
464 }
465
466 return PyCursesCheckERR(wbkgd(self->win, bkgd | A_NORMAL), "bkgd");
467}
468
469static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000470PyCursesWindow_BkgdSet(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000471{
472 PyObject *temp;
473 chtype bkgd;
474 attr_t attr = A_NORMAL;
475
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000476 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000477 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000478 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000479 return NULL;
480 break;
481 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000482 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000483 return NULL;
484 break;
485 default:
486 PyErr_SetString(PyExc_TypeError, "bkgdset requires 1 or 2 arguments");
487 return NULL;
488 }
489
490 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000491 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000492 return NULL;
493 }
494
495 wbkgdset(self->win, bkgd | attr);
496 return PyCursesCheckERR(0, "bkgdset");
497}
498
499static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000500PyCursesWindow_Border(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000501{
502 chtype ls, rs, ts, bs, tl, tr, bl, br;
503 ls = rs = ts = bs = tl = tr = bl = br = 0;
504 if (!PyArg_Parse(args,"|llllllll;ls,rs,ts,bs,tl,tr,bl,br",
505 &ls, &rs, &ts, &bs, &tl, &tr, &bl, &br))
506 return NULL;
507 wborder(self->win, ls, rs, ts, bs, tl, tr, bl, br);
508 Py_INCREF(Py_None);
509 return Py_None;
510}
511
512static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000513PyCursesWindow_Box(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000514{
515 chtype ch1=0,ch2=0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000516 if (!PyArg_NoArgs(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000517 PyErr_Clear();
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000518 if (!PyArg_Parse(args,"(ll);vertint,horint", &ch1, &ch2))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000519 return NULL;
520 }
521 box(self->win,ch1,ch2);
522 Py_INCREF(Py_None);
523 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000524}
525
526static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000527PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000528{
529 int rtn;
530 int x, y;
Guido van Rossum85738471995-02-17 13:50:17 +0000531
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000532 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000533 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000534 rtn = wdelch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000535 break;
536 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000537 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Guido van Rossum85738471995-02-17 13:50:17 +0000538 return NULL;
539 rtn = mvwdelch(self->win,y,x);
540 break;
541 default:
542 PyErr_SetString(PyExc_TypeError, "delch requires 0 or 2 arguments");
543 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000544 }
Guido van Rossum85738471995-02-17 13:50:17 +0000545 return PyCursesCheckERR(rtn, "[mv]wdelch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000546}
547
548static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000549PyCursesWindow_DerWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000550{
551 WINDOW *win;
552 int nlines, ncols, begin_y, begin_x;
553
554 nlines = 0;
555 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000556 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000557 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000558 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000559 return NULL;
560 break;
561 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000562 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000563 &nlines,&ncols,&begin_y,&begin_x))
564 return NULL;
565 break;
566 default:
567 PyErr_SetString(PyExc_TypeError, "derwin requires 2 or 4 arguments");
568 return NULL;
569 }
570
571 win = derwin(self->win,nlines,ncols,begin_y,begin_x);
572
573 if (win == NULL) {
574 PyErr_SetString(PyCursesError, catchall_NULL);
575 return NULL;
576 }
577
578 return (PyObject *)PyCursesWindow_New(win);
579}
580
581static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000582PyCursesWindow_EchoChar(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000583{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000584 PyObject *temp;
585 chtype ch;
586 attr_t attr = A_NORMAL;
Guido van Rossum85738471995-02-17 13:50:17 +0000587
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000588 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000589 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000590 if (!PyArg_Parse(args,"O;ch or int", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +0000591 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000592 break;
593 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000594 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000595 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000596 break;
597 default:
598 PyErr_SetString(PyExc_TypeError, "echochar requires 1 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000599
600
Guido van Rossum85738471995-02-17 13:50:17 +0000601 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000602 }
Guido van Rossum85738471995-02-17 13:50:17 +0000603
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000604 if (!PyCurses_ConvertToChtype(temp, &ch)) {
605 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +0000606 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000607 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000608
609 if (self->win->_flags & _ISPAD)
610 return PyCursesCheckERR(pechochar(self->win, ch | attr),
611 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000612 else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000613 return PyCursesCheckERR(wechochar(self->win, ch | attr),
614 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000615}
616
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000617#ifdef NCURSES_MOUSE_VERSION
618static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000619PyCursesWindow_Enclose(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000620{
621 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000622 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000623 return NULL;
624
625 return PyInt_FromLong( wenclose(self->win,y,x) );
626}
627#endif
628
Guido van Rossumf6971e21994-08-30 12:25:20 +0000629static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000630PyCursesWindow_GetBkgd(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000631{
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000632 if (!PyArg_NoArgs(args))
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000633 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000634 return PyInt_FromLong((long) getbkgd(self->win));
Guido van Rossumf6971e21994-08-30 12:25:20 +0000635}
636
637static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000638PyCursesWindow_GetCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000639{
640 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000641 chtype rtn;
Guido van Rossum85738471995-02-17 13:50:17 +0000642
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000643 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000644 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000645 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000646 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000647 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000648 break;
649 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000650 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000651 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000652 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000653 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000654 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000655 break;
656 default:
657 PyErr_SetString(PyExc_TypeError, "getch requires 0 or 2 arguments");
658 return NULL;
659 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000660 return PyInt_FromLong(rtn);
661}
Guido van Rossum85738471995-02-17 13:50:17 +0000662
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000663static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000664PyCursesWindow_GetKey(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000665{
666 int x, y;
667 chtype rtn;
668
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000669 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000670 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000671 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000672 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000673 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000674 break;
675 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000676 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000677 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000678 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000679 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000680 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000681 break;
682 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000683 PyErr_SetString(PyExc_TypeError, "getkey requires 0 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000684 return NULL;
685 }
686 if (rtn<=255)
687 return Py_BuildValue("c", rtn);
688 else
689 return PyString_FromString((char *)keyname(rtn));
Guido van Rossumf6971e21994-08-30 12:25:20 +0000690}
691
692static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000693PyCursesWindow_GetStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000694{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000695 int x, y, n;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000696 char rtn[1024]; /* This should be big enough.. I hope */
697 int rtn2;
Guido van Rossum85738471995-02-17 13:50:17 +0000698
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000699 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000700 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000701 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000702 rtn2 = wgetstr(self->win,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000703 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000704 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000705 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000706 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000707 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000708 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000709 rtn2 = wgetnstr(self->win,rtn,n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000710 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000711 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000712 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000713 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000714 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000715 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000716 rtn2 = mvwgetstr(self->win,y,x,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000717 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000718 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000719 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000720 if (!PyArg_Parse(args,"(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000721 return NULL;
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000722#ifdef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000723 /* Untested */
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000724 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000725 rtn2 = wmove(self->win,y,x)==ERR ? ERR :
726 wgetnstr(self->win, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000727 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000728#else
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000729 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000730 rtn2 = mvwgetnstr(self->win, y, x, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000731 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000732#endif
733 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000734 default:
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000735 PyErr_SetString(PyExc_TypeError, "getstr requires 0 to 2 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000736 return NULL;
737 }
Guido van Rossumf6971e21994-08-30 12:25:20 +0000738 if (rtn2 == ERR)
739 rtn[0] = 0;
Guido van Rossum85738471995-02-17 13:50:17 +0000740 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000741}
742
743static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000744PyCursesWindow_Hline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000745{
746 PyObject *temp;
747 chtype ch;
748 int n, x, y, code = OK;
749 attr_t attr = A_NORMAL;
750
751 switch (ARG_COUNT(args)) {
752 case 2:
753 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
754 return NULL;
755 break;
756 case 3:
757 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
758 return NULL;
759 break;
760 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000761 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000762 return NULL;
763 code = wmove(self->win, y, x);
764 break;
765 case 5:
766 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
767 &y, &x, &temp, &n, &attr))
768 return NULL;
769 code = wmove(self->win, y, x);
770 default:
771 PyErr_SetString(PyExc_TypeError, "hline requires 2 or 5 arguments");
772 return NULL;
773 }
774
775 if (code != ERR) {
776 if (!PyCurses_ConvertToChtype(temp, &ch)) {
777 PyErr_SetString(PyExc_TypeError,
778 "argument 1 or 3 must be a ch or an int");
779 return NULL;
780 }
781 return PyCursesCheckERR(whline(self->win, ch | attr, n), "hline");
782 } else
783 return PyCursesCheckERR(code, "wmove");
784}
785
786static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000787PyCursesWindow_InsCh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000788{
789 int rtn, x, y, use_xy = FALSE;
790 PyObject *temp;
791 chtype ch = 0;
792 attr_t attr = A_NORMAL;
793
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000794 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000795 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000796 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000797 return NULL;
798 break;
799 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000800 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000801 return NULL;
802 break;
803 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000804 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000805 return NULL;
806 use_xy = TRUE;
807 break;
808 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000809 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr", &y, &x, &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000810 return NULL;
811 use_xy = TRUE;
812 break;
813 default:
814 PyErr_SetString(PyExc_TypeError, "insch requires 1 or 4 arguments");
815 return NULL;
816 }
817
818 if (!PyCurses_ConvertToChtype(temp, &ch)) {
819 PyErr_SetString(PyExc_TypeError,
820 "argument 1 or 3 must be a ch or an int");
821 return NULL;
822 }
823
824 if (use_xy == TRUE)
825 rtn = mvwinsch(self->win,y,x, ch | attr);
826 else {
827 rtn = winsch(self->win, ch | attr);
828 }
829 return PyCursesCheckERR(rtn, "insch");
830}
831
832static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000833PyCursesWindow_InCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000834{
Guido van Rossum85738471995-02-17 13:50:17 +0000835 int x, y, rtn;
836
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000837 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000838 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000839 rtn = winch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000840 break;
841 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000842 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000843 return NULL;
844 rtn = mvwinch(self->win,y,x);
845 break;
846 default:
847 PyErr_SetString(PyExc_TypeError, "inch requires 0 or 2 arguments");
848 return NULL;
849 }
Guido van Rossum85738471995-02-17 13:50:17 +0000850 return PyInt_FromLong((long) rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000851}
852
853static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000854PyCursesWindow_InStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000855{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000856 int x, y, n;
857 char rtn[1024]; /* This should be big enough.. I hope */
858 int rtn2;
859
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000860 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000861 case 0:
862 rtn2 = winstr(self->win,rtn);
863 break;
864 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000865 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000866 return NULL;
867 rtn2 = winnstr(self->win,rtn,n);
868 break;
869 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000870 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000871 return NULL;
872 rtn2 = mvwinstr(self->win,y,x,rtn);
873 break;
874 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000875 if (!PyArg_Parse(args, "(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000876 return NULL;
877 rtn2 = mvwinnstr(self->win, y, x, rtn, n);
878 break;
879 default:
880 PyErr_SetString(PyExc_TypeError, "instr requires 0 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000881 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000882 }
883 if (rtn2 == ERR)
884 rtn[0] = 0;
885 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000886}
887
888static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000889PyCursesWindow_InsStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000890{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000891 int rtn;
892 int x, y;
893 char *str;
894 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
895 int use_xy = FALSE, use_attr = FALSE;
896
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000897 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000898 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000899 if (!PyArg_Parse(args,"s;str", &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000900 return NULL;
901 break;
902 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000903 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000904 return NULL;
905 use_attr = TRUE;
906 break;
907 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000908 if (!PyArg_Parse(args,"(iis);y,x,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000909 return NULL;
910 use_xy = TRUE;
911 break;
912 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000913 if (!PyArg_Parse(args,"(iisl);y,x,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000914 return NULL;
915 use_xy = use_attr = TRUE;
916 break;
917 default:
918 PyErr_SetString(PyExc_TypeError, "insstr requires 1 to 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000919 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000920 }
921
922 if (use_attr == TRUE) {
923 attr_old = getattrs(self->win);
924 wattrset(self->win,attr);
925 }
926 if (use_xy == TRUE)
927 rtn = mvwinsstr(self->win,y,x,str);
928 else
929 rtn = winsstr(self->win,str);
930 if (use_attr == TRUE)
931 wattrset(self->win,attr_old);
932 return PyCursesCheckERR(rtn, "insstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000933}
934
935static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000936PyCursesWindow_InsNStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000937{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000938 int rtn, x, y, n;
939 char *str;
940 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
941 int use_xy = FALSE, use_attr = FALSE;
942
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000943 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000944 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000945 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000946 return NULL;
947 break;
948 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000949 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000950 return NULL;
951 use_attr = TRUE;
952 break;
953 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000954 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000955 return NULL;
956 use_xy = TRUE;
957 break;
958 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000959 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000960 return NULL;
961 use_xy = use_attr = TRUE;
962 break;
963 default:
964 PyErr_SetString(PyExc_TypeError, "insnstr requires 2 to 5 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000965 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000966 }
967
968 if (use_attr == TRUE) {
969 attr_old = getattrs(self->win);
970 wattrset(self->win,attr);
971 }
972 if (use_xy == TRUE)
973 rtn = mvwinsnstr(self->win,y,x,str,n);
974 else
975 rtn = winsnstr(self->win,str,n);
976 if (use_attr == TRUE)
977 wattrset(self->win,attr_old);
978 return PyCursesCheckERR(rtn, "insnstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000979}
980
981static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000982PyCursesWindow_Is_LineTouched(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000983{
984 int line, erg;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000985 if (!PyArg_Parse(args,"i;line", &line))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000986 return NULL;
987 erg = is_linetouched(self->win, line);
988 if (erg == ERR) {
989 PyErr_SetString(PyExc_TypeError,
990 "is_linetouched: line number outside of boundaries");
991 return NULL;
992 } else
993 if (erg == FALSE) {
994 Py_INCREF(Py_False);
995 return Py_False;
996 } else {
997 Py_INCREF(Py_True);
998 return Py_True;
999 }
1000}
1001
1002static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001003PyCursesWindow_NoOutRefresh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001004{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001005 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001006 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001007
1008 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001009 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001010 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001011 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001012 "(iiiiii);" \
1013 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
1014 &pminrow, &pmincol, &sminrow,
1015 &smincol, &smaxrow, &smaxcol))
1016 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001017 Py_BEGIN_ALLOW_THREADS
1018 rtn = pnoutrefresh(self->win,
1019 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +00001020 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001021 Py_END_ALLOW_THREADS
1022 return PyCursesCheckERR(rtn, "pnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001023 default:
1024 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001025 "noutrefresh() called for a pad "
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001026 "requires 6 arguments");
1027 return NULL;
1028 }
1029 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001030 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001031 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001032
1033 Py_BEGIN_ALLOW_THREADS
1034 rtn = wnoutrefresh(self->win);
1035 Py_END_ALLOW_THREADS
1036 return PyCursesCheckERR(rtn, "wnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001037 }
1038}
1039
1040static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001041PyCursesWindow_PutWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001042{
1043 PyObject *temp;
1044
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001045 if (!PyArg_Parse(args, "O;fileobj", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +00001046 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001047 if (!PyFile_Check(temp)) {
1048 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1049 return NULL;
1050 }
1051 return PyCursesCheckERR(putwin(self->win, PyFile_AsFile(temp)),
1052 "putwin");
1053}
1054
1055static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001056PyCursesWindow_RedrawLine(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001057{
1058 int beg, num;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001059 if (!PyArg_Parse(args,"(ii);beg,num", &beg, &num))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001060 return NULL;
1061 return PyCursesCheckERR(wredrawln(self->win,beg,num), "redrawln");
1062}
1063
1064static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001065PyCursesWindow_Refresh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001066{
1067 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001068 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001069
1070 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001071 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001072 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001073 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001074 "(iiiiii);" \
1075 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
1076 &pminrow, &pmincol, &sminrow,
1077 &smincol, &smaxrow, &smaxcol))
1078 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001079
1080 Py_BEGIN_ALLOW_THREADS
1081 rtn = prefresh(self->win,
1082 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +00001083 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001084 Py_END_ALLOW_THREADS
1085 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001086 default:
1087 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001088 "refresh() for a pad requires 6 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001089 return NULL;
1090 }
1091 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001092 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001093 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001094 Py_BEGIN_ALLOW_THREADS
1095 rtn = wrefresh(self->win);
1096 Py_END_ALLOW_THREADS
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001097 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001098 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001099}
1100
1101static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001102PyCursesWindow_SetScrollRegion(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001103{
1104 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001105 if (!PyArg_Parse(args,"(ii);top, bottom",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +00001106 return NULL;
1107 return PyCursesCheckERR(wsetscrreg(self->win,y,x), "wsetscrreg");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001108}
1109
1110static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001111PyCursesWindow_SubWin(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001112{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001113 WINDOW *win;
1114 int nlines, ncols, begin_y, begin_x;
1115
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001116 nlines = 0;
1117 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001118 switch (ARG_COUNT(args)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001119 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001120 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001121 return NULL;
1122 break;
1123 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001124 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001125 &nlines,&ncols,&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001126 return NULL;
1127 break;
1128 default:
1129 PyErr_SetString(PyExc_TypeError, "subwin requires 2 or 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001130 return NULL;
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001131 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001132
Andrew M. Kuchling8353f622000-07-26 18:36:27 +00001133 /* printf("Subwin: %i %i %i %i \n", nlines, ncols, begin_y, begin_x); */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001134 if (self->win->_flags & _ISPAD)
1135 win = subpad(self->win, nlines, ncols, begin_y, begin_x);
1136 else
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001137 win = subwin(self->win, nlines, ncols, begin_y, begin_x);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001138
1139 if (win == NULL) {
1140 PyErr_SetString(PyCursesError, catchall_NULL);
1141 return NULL;
1142 }
1143
1144 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001145}
1146
1147static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001148PyCursesWindow_Scroll(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001149{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001150 int lines;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001151 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001152 case 0:
1153 return PyCursesCheckERR(scroll(self->win), "scroll");
1154 break;
1155 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001156 if (!PyArg_Parse(args, "i;lines", &lines))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001157 return NULL;
1158 return PyCursesCheckERR(wscrl(self->win, lines), "scroll");
1159 default:
1160 PyErr_SetString(PyExc_TypeError, "scroll requires 0 or 1 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001161 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001162 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001163}
1164
1165static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001166PyCursesWindow_TouchLine(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001167{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001168 int st, cnt, val;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001169 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001170 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001171 if (!PyArg_Parse(args,"(ii);start,count",&st,&cnt))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001172 return NULL;
1173 return PyCursesCheckERR(touchline(self->win,st,cnt), "touchline");
1174 break;
1175 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001176 if (!PyArg_Parse(args, "(iii);start,count,val", &st, &cnt, &val))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001177 return NULL;
1178 return PyCursesCheckERR(wtouchln(self->win, st, cnt, val), "touchline");
1179 default:
1180 PyErr_SetString(PyExc_TypeError, "touchline requires 2 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001181 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001182 }
1183}
1184
1185static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001186PyCursesWindow_Vline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001187{
1188 PyObject *temp;
1189 chtype ch;
1190 int n, x, y, code = OK;
1191 attr_t attr = A_NORMAL;
1192
1193 switch (ARG_COUNT(args)) {
1194 case 2:
1195 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
1196 return NULL;
1197 break;
1198 case 3:
1199 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
1200 return NULL;
1201 break;
1202 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001203 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001204 return NULL;
1205 code = wmove(self->win, y, x);
1206 break;
1207 case 5:
1208 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
1209 &y, &x, &temp, &n, &attr))
1210 return NULL;
1211 code = wmove(self->win, y, x);
1212 default:
1213 PyErr_SetString(PyExc_TypeError, "vline requires 2 or 5 arguments");
1214 return NULL;
1215 }
1216
1217 if (code != ERR) {
1218 if (!PyCurses_ConvertToChtype(temp, &ch)) {
1219 PyErr_SetString(PyExc_TypeError,
1220 "argument 1 or 3 must be a ch or an int");
1221 return NULL;
1222 }
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001223 return PyCursesCheckERR(wvline(self->win, ch | attr, n), "vline");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001224 } else
1225 return PyCursesCheckERR(code, "wmove");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001226}
1227
1228static PyMethodDef PyCursesWindow_Methods[] = {
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001229 {"addch", (PyCFunction)PyCursesWindow_AddCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001230 {"addnstr", (PyCFunction)PyCursesWindow_AddNStr},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001231 {"addstr", (PyCFunction)PyCursesWindow_AddStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001232 {"attroff", (PyCFunction)PyCursesWindow_wattroff},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001233 {"attron", (PyCFunction)PyCursesWindow_wattron},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001234 {"attrset", (PyCFunction)PyCursesWindow_wattrset},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001235 {"bkgd", (PyCFunction)PyCursesWindow_Bkgd},
1236 {"bkgdset", (PyCFunction)PyCursesWindow_BkgdSet},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001237 {"border", (PyCFunction)PyCursesWindow_Border, METH_VARARGS},
1238 {"box", (PyCFunction)PyCursesWindow_Box},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001239 {"clear", (PyCFunction)PyCursesWindow_wclear},
1240 {"clearok", (PyCFunction)PyCursesWindow_clearok},
1241 {"clrtobot", (PyCFunction)PyCursesWindow_wclrtobot},
1242 {"clrtoeol", (PyCFunction)PyCursesWindow_wclrtoeol},
1243 {"cursyncup", (PyCFunction)PyCursesWindow_wcursyncup},
1244 {"delch", (PyCFunction)PyCursesWindow_DelCh},
1245 {"deleteln", (PyCFunction)PyCursesWindow_wdeleteln},
1246 {"derwin", (PyCFunction)PyCursesWindow_DerWin},
1247 {"echochar", (PyCFunction)PyCursesWindow_EchoChar},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001248#ifdef NCURSES_MOUSE_VERSION
1249 {"enclose", (PyCFunction)PyCursesWindow_Enclose},
1250#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001251 {"erase", (PyCFunction)PyCursesWindow_werase},
1252 {"getbegyx", (PyCFunction)PyCursesWindow_getbegyx},
1253 {"getbkgd", (PyCFunction)PyCursesWindow_GetBkgd},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001254 {"getch", (PyCFunction)PyCursesWindow_GetCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001255 {"getkey", (PyCFunction)PyCursesWindow_GetKey},
1256 {"getmaxyx", (PyCFunction)PyCursesWindow_getmaxyx},
1257 {"getparyx", (PyCFunction)PyCursesWindow_getparyx},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001258 {"getstr", (PyCFunction)PyCursesWindow_GetStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001259 {"getyx", (PyCFunction)PyCursesWindow_getyx},
1260 {"hline", (PyCFunction)PyCursesWindow_Hline},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001261 {"idcok", (PyCFunction)PyCursesWindow_idcok},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001262 {"idlok", (PyCFunction)PyCursesWindow_idlok},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001263 {"immedok", (PyCFunction)PyCursesWindow_immedok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001264 {"inch", (PyCFunction)PyCursesWindow_InCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001265 {"insch", (PyCFunction)PyCursesWindow_InsCh},
1266 {"insdelln", (PyCFunction)PyCursesWindow_winsdelln},
1267 {"insertln", (PyCFunction)PyCursesWindow_winsertln},
1268 {"insnstr", (PyCFunction)PyCursesWindow_InsNStr},
1269 {"insstr", (PyCFunction)PyCursesWindow_InsStr},
1270 {"instr", (PyCFunction)PyCursesWindow_InStr},
1271 {"is_linetouched", (PyCFunction)PyCursesWindow_Is_LineTouched},
1272 {"is_wintouched", (PyCFunction)PyCursesWindow_is_wintouched},
1273 {"keypad", (PyCFunction)PyCursesWindow_keypad},
1274 {"leaveok", (PyCFunction)PyCursesWindow_leaveok},
1275 {"move", (PyCFunction)PyCursesWindow_wmove},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001276 {"mvderwin", (PyCFunction)PyCursesWindow_mvderwin},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001277 {"mvwin", (PyCFunction)PyCursesWindow_mvwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001278 {"nodelay", (PyCFunction)PyCursesWindow_nodelay},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001279 {"notimeout", (PyCFunction)PyCursesWindow_notimeout},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001280 {"noutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh},
Andrew M. Kuchlinga98e92b2000-08-20 23:37:02 +00001281 /* Backward compatibility alias -- remove in Python 2.1 */
1282 {"nooutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001283 {"putwin", (PyCFunction)PyCursesWindow_PutWin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001284 {"redrawln", (PyCFunction)PyCursesWindow_RedrawLine},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001285 {"redrawwin", (PyCFunction)PyCursesWindow_redrawwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001286 {"refresh", (PyCFunction)PyCursesWindow_Refresh},
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00001287#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001288 {"resize", (PyCFunction)PyCursesWindow_wresize},
1289#endif
1290 {"scroll", (PyCFunction)PyCursesWindow_Scroll},
1291 {"scrollok", (PyCFunction)PyCursesWindow_scrollok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001292 {"setscrreg", (PyCFunction)PyCursesWindow_SetScrollRegion},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001293 {"standend", (PyCFunction)PyCursesWindow_wstandend},
1294 {"standout", (PyCFunction)PyCursesWindow_wstandout},
1295 {"subpad", (PyCFunction)PyCursesWindow_SubWin},
1296 {"subwin", (PyCFunction)PyCursesWindow_SubWin},
1297 {"syncdown", (PyCFunction)PyCursesWindow_wsyncdown},
1298 {"syncok", (PyCFunction)PyCursesWindow_syncok},
1299 {"syncup", (PyCFunction)PyCursesWindow_wsyncup},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00001300 {"timeout", (PyCFunction)PyCursesWindow_wtimeout},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001301 {"touchline", (PyCFunction)PyCursesWindow_TouchLine},
1302 {"touchwin", (PyCFunction)PyCursesWindow_touchwin},
1303 {"untouchwin", (PyCFunction)PyCursesWindow_untouchwin},
1304 {"vline", (PyCFunction)PyCursesWindow_Vline},
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001305 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00001306};
1307
1308static PyObject *
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00001309PyCursesWindow_GetAttr(PyCursesWindowObject *self, char *name)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001310{
Guido van Rossuma597dde1995-01-10 20:56:29 +00001311 return Py_FindMethod(PyCursesWindow_Methods, (PyObject *)self, name);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001312}
1313
Guido van Rossumf6971e21994-08-30 12:25:20 +00001314/* -------------------------------------------------------*/
Guido van Rossum85738471995-02-17 13:50:17 +00001315
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001316PyTypeObject PyCursesWindow_Type = {
Guido van Rossumf6971e21994-08-30 12:25:20 +00001317 PyObject_HEAD_INIT(&PyType_Type)
1318 0, /*ob_size*/
1319 "curses window", /*tp_name*/
1320 sizeof(PyCursesWindowObject), /*tp_basicsize*/
1321 0, /*tp_itemsize*/
1322 /* methods */
1323 (destructor)PyCursesWindow_Dealloc, /*tp_dealloc*/
1324 0, /*tp_print*/
1325 (getattrfunc)PyCursesWindow_GetAttr, /*tp_getattr*/
1326 (setattrfunc)0, /*tp_setattr*/
1327 0, /*tp_compare*/
1328 0, /*tp_repr*/
1329 0, /*tp_as_number*/
1330 0, /*tp_as_sequence*/
1331 0, /*tp_as_mapping*/
1332 0, /*tp_hash*/
1333};
1334
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001335/*********************************************************************
1336 Global Functions
1337**********************************************************************/
Guido van Rossumf6971e21994-08-30 12:25:20 +00001338
Guido van Rossume4485b01994-09-07 14:32:49 +00001339static PyObject *ModDict;
1340
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001341/* Function Prototype Macros - They are ugly but very, very useful. ;-)
1342
1343 X - function name
1344 TYPE - parameter Type
1345 ERGSTR - format string for construction of the return value
1346 PARSESTR - format string for argument parsing
1347 */
1348
1349#define NoArgNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001350static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001351{ \
1352 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001353 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001354 return PyCursesCheckERR(X(), # X); }
1355
1356#define NoArgOrFlagNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001357static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001358{ \
1359 int flag = 0; \
1360 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001361 switch(ARG_COUNT(args)) { \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001362 case 0: \
1363 return PyCursesCheckERR(X(), # X); \
1364 case 1: \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001365 if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001366 if (flag) return PyCursesCheckERR(X(), # X); \
1367 else return PyCursesCheckERR(no ## X (), # X); \
1368 default: \
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001369 PyErr_SetString(PyExc_TypeError, # X " requires 0 or 1 arguments"); \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001370 return NULL; } }
1371
1372#define NoArgReturnIntFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001373static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001374{ \
1375 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001376 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001377 return PyInt_FromLong((long) X()); }
1378
1379
1380#define NoArgReturnStringFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001381static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001382{ \
1383 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001384 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001385 return PyString_FromString(X()); }
1386
1387#define NoArgTrueFalseFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001388static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001389{ \
1390 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001391 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001392 if (X () == FALSE) { \
1393 Py_INCREF(Py_False); \
1394 return Py_False; \
1395 } \
1396 Py_INCREF(Py_True); \
1397 return Py_True; }
1398
1399#define NoArgNoReturnVoidFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001400static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001401{ \
1402 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001403 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001404 X(); \
1405 Py_INCREF(Py_None); \
1406 return Py_None; }
1407
1408NoArgNoReturnFunction(beep)
1409NoArgNoReturnFunction(def_prog_mode)
1410NoArgNoReturnFunction(def_shell_mode)
1411NoArgNoReturnFunction(doupdate)
1412NoArgNoReturnFunction(endwin)
1413NoArgNoReturnFunction(flash)
1414NoArgNoReturnFunction(nocbreak)
1415NoArgNoReturnFunction(noecho)
1416NoArgNoReturnFunction(nonl)
1417NoArgNoReturnFunction(noraw)
1418NoArgNoReturnFunction(reset_prog_mode)
1419NoArgNoReturnFunction(reset_shell_mode)
1420NoArgNoReturnFunction(resetty)
1421NoArgNoReturnFunction(savetty)
1422
1423NoArgOrFlagNoReturnFunction(cbreak)
1424NoArgOrFlagNoReturnFunction(echo)
1425NoArgOrFlagNoReturnFunction(nl)
1426NoArgOrFlagNoReturnFunction(raw)
1427
1428NoArgReturnIntFunction(baudrate)
1429NoArgReturnIntFunction(termattrs)
1430
1431NoArgReturnStringFunction(termname)
1432NoArgReturnStringFunction(longname)
1433
1434NoArgTrueFalseFunction(can_change_color)
1435NoArgTrueFalseFunction(has_colors)
1436NoArgTrueFalseFunction(has_ic)
1437NoArgTrueFalseFunction(has_il)
1438NoArgTrueFalseFunction(isendwin)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001439NoArgNoReturnVoidFunction(filter)
1440NoArgNoReturnVoidFunction(flushinp)
1441NoArgNoReturnVoidFunction(noqiflush)
1442
1443static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001444PyCurses_Color_Content(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001445{
1446 short color,r,g,b;
1447
1448 PyCursesInitialised
1449 PyCursesInitialisedColor
1450
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001451 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001452 PyErr_SetString(PyExc_TypeError,
1453 "color_content requires 1 argument");
1454 return NULL;
1455 }
1456
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001457 if (!PyArg_Parse(args, "h;color", &color)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001458
1459 if (color_content(color, &r, &g, &b) != ERR)
1460 return Py_BuildValue("(iii)", r, g, b);
1461 else {
1462 PyErr_SetString(PyCursesError,
1463 "Argument 1 was out of range. Check value of COLORS.");
1464 return NULL;
1465 }
1466}
1467
1468static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001469PyCurses_color_pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001470{
1471 int n;
1472
1473 PyCursesInitialised
1474 PyCursesInitialisedColor
1475
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001476 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001477 PyErr_SetString(PyExc_TypeError, "color_pair requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001478 return NULL;
1479 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001480 if (!PyArg_Parse(args, "i;number", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001481 return PyInt_FromLong((long) (n << 8));
1482}
1483
1484static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001485PyCurses_Curs_Set(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001486{
1487 int vis,erg;
1488
1489 PyCursesInitialised
1490
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001491 if (ARG_COUNT(args)!=1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001492 PyErr_SetString(PyExc_TypeError, "curs_set requires 1 argument");
1493 return NULL;
1494 }
1495
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001496 if (!PyArg_Parse(args, "i;int", &vis)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001497
1498 erg = curs_set(vis);
1499 if (erg == ERR) return PyCursesCheckERR(erg, "curs_set");
1500
1501 return PyInt_FromLong((long) erg);
1502}
1503
1504static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001505PyCurses_Delay_Output(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001506{
1507 int ms;
1508
1509 PyCursesInitialised
1510
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001511 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001512 PyErr_SetString(PyExc_TypeError, "delay_output requires 1 argument");
1513 return NULL;
1514 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001515 if (!PyArg_Parse(args, "i;ms", &ms)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001516
1517 return PyCursesCheckERR(delay_output(ms), "delay_output");
1518}
1519
1520static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001521PyCurses_EraseChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001522{
1523 char ch;
1524
1525 PyCursesInitialised
1526
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001527 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001528
1529 ch = erasechar();
1530
1531 return PyString_FromString(&ch);
1532}
1533
1534static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001535PyCurses_getsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001536{
1537 int x,y;
1538
1539 PyCursesInitialised
1540
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001541 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001542
1543 getsyx(y, x);
1544
1545 return Py_BuildValue("(ii)", y, x);
1546}
1547
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001548#ifdef NCURSES_MOUSE_VERSION
1549static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001550PyCurses_GetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001551{
1552 int rtn;
1553 MEVENT event;
1554
1555 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001556 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001557
1558 rtn = getmouse( &event );
1559 if (rtn == ERR) {
1560 PyErr_SetString(PyCursesError, "getmouse() returned ERR");
1561 return NULL;
1562 }
1563 return Py_BuildValue("(hiiil)",
1564 (short)event.id,
1565 event.x, event.y, event.z,
1566 (long) event.bstate);
1567}
1568
1569static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001570PyCurses_UngetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001571{
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001572 MEVENT event;
1573
1574 PyCursesInitialised
1575 if (!PyArg_ParseTuple(args, "(hiiil)",
1576 &event.id,
1577 &event.x, &event.y, &event.z,
1578 (int *) &event.bstate))
1579 return NULL;
1580
1581 return PyCursesCheckERR(ungetmouse(&event), "ungetmouse");
1582}
1583#endif
1584
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001585static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001586PyCurses_GetWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001587{
1588 WINDOW *win;
1589 PyObject *temp;
1590
1591 PyCursesInitialised
1592
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001593 if (!PyArg_Parse(args, "O;fileobj", &temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001594
1595 if (!PyFile_Check(temp)) {
1596 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1597 return NULL;
1598 }
1599
1600 win = getwin(PyFile_AsFile(temp));
1601
1602 if (win == NULL) {
1603 PyErr_SetString(PyCursesError, catchall_NULL);
1604 return NULL;
1605 }
1606
1607 return PyCursesWindow_New(win);
1608}
1609
1610static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001611PyCurses_HalfDelay(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001612{
1613 unsigned char tenths;
1614
1615 PyCursesInitialised
1616
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001617 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001618 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001619 if (!PyArg_Parse(args, "b;tenths", &tenths)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001620 break;
1621 default:
1622 PyErr_SetString(PyExc_TypeError, "halfdelay requires 1 argument");
1623 return NULL;
1624 }
1625
1626 return PyCursesCheckERR(halfdelay(tenths), "halfdelay");
1627}
1628
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00001629#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001630 /* No has_key! */
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001631static PyObject * PyCurses_has_key(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001632{
1633 int ch;
1634
1635 PyCursesInitialised
1636
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001637 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001638
1639 if (has_key(ch) == FALSE) {
1640 Py_INCREF(Py_False);
1641 return Py_False;
1642 }
1643 Py_INCREF(Py_True);
1644 return Py_True;
1645}
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00001646#endif /* STRICT_SYSV_CURSES */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001647
1648static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001649PyCurses_Init_Color(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001650{
1651 short color, r, g, b;
1652
1653 PyCursesInitialised
1654 PyCursesInitialisedColor
1655
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001656 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001657 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001658 if (!PyArg_Parse(args, "(hhhh);color,r,g,b", &color, &r, &g, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001659 break;
1660 default:
1661 PyErr_SetString(PyExc_TypeError, "init_color requires 4 arguments");
1662 return NULL;
1663 }
1664
1665 return PyCursesCheckERR(init_color(color, r, g, b), "init_color");
1666}
1667
1668static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001669PyCurses_Init_Pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001670{
1671 short pair, f, b;
1672
1673 PyCursesInitialised
1674 PyCursesInitialisedColor
1675
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001676 if (ARG_COUNT(args) != 3) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001677 PyErr_SetString(PyExc_TypeError, "init_pair requires 3 arguments");
1678 return NULL;
1679 }
1680
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001681 if (!PyArg_Parse(args, "(hhh);pair, f, b", &pair, &f, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001682
1683 return PyCursesCheckERR(init_pair(pair, f, b), "init_pair");
1684}
1685
Guido van Rossumf6971e21994-08-30 12:25:20 +00001686static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001687PyCurses_InitScr(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001688{
Guido van Rossum56bf2351994-08-31 22:06:24 +00001689 WINDOW *win;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001690 PyObject *lines, *cols;
1691
1692 if (!PyArg_NoArgs(args)) return NULL;
1693
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001694 if (initialised == TRUE) {
Guido van Rossumf6971e21994-08-30 12:25:20 +00001695 wrefresh(stdscr);
1696 return (PyObject *)PyCursesWindow_New(stdscr);
1697 }
Guido van Rossum56bf2351994-08-31 22:06:24 +00001698
1699 win = initscr();
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001700
Guido van Rossum85738471995-02-17 13:50:17 +00001701 if (win == NULL) {
1702 PyErr_SetString(PyCursesError, catchall_NULL);
1703 return NULL;
1704 }
1705
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001706 initialised = TRUE;
Guido van Rossum56bf2351994-08-31 22:06:24 +00001707
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001708/* This was moved from initcurses() because it core dumped on SGI,
1709 where they're not defined until you've called initscr() */
1710#define SetDictInt(string,ch) \
1711 PyDict_SetItemString(ModDict,string,PyInt_FromLong((long) (ch)));
1712
1713 /* Here are some graphic symbols you can use */
1714 SetDictInt("ACS_ULCORNER", (ACS_ULCORNER));
1715 SetDictInt("ACS_LLCORNER", (ACS_LLCORNER));
1716 SetDictInt("ACS_URCORNER", (ACS_URCORNER));
1717 SetDictInt("ACS_LRCORNER", (ACS_LRCORNER));
1718 SetDictInt("ACS_LTEE", (ACS_LTEE));
1719 SetDictInt("ACS_RTEE", (ACS_RTEE));
1720 SetDictInt("ACS_BTEE", (ACS_BTEE));
1721 SetDictInt("ACS_TTEE", (ACS_TTEE));
1722 SetDictInt("ACS_HLINE", (ACS_HLINE));
1723 SetDictInt("ACS_VLINE", (ACS_VLINE));
1724 SetDictInt("ACS_PLUS", (ACS_PLUS));
1725 SetDictInt("ACS_S1", (ACS_S1));
1726 SetDictInt("ACS_S9", (ACS_S9));
1727 SetDictInt("ACS_DIAMOND", (ACS_DIAMOND));
1728 SetDictInt("ACS_CKBOARD", (ACS_CKBOARD));
1729 SetDictInt("ACS_DEGREE", (ACS_DEGREE));
1730 SetDictInt("ACS_PLMINUS", (ACS_PLMINUS));
1731 SetDictInt("ACS_BULLET", (ACS_BULLET));
1732 SetDictInt("ACS_LARROW", (ACS_LARROW));
1733 SetDictInt("ACS_RARROW", (ACS_RARROW));
1734 SetDictInt("ACS_DARROW", (ACS_DARROW));
1735 SetDictInt("ACS_UARROW", (ACS_UARROW));
1736 SetDictInt("ACS_BOARD", (ACS_BOARD));
1737 SetDictInt("ACS_LANTERN", (ACS_LANTERN));
1738 SetDictInt("ACS_BLOCK", (ACS_BLOCK));
1739 SetDictInt("ACS_BSSB", (ACS_ULCORNER));
1740 SetDictInt("ACS_SSBB", (ACS_LLCORNER));
1741 SetDictInt("ACS_BBSS", (ACS_URCORNER));
1742 SetDictInt("ACS_SBBS", (ACS_LRCORNER));
1743 SetDictInt("ACS_SBSS", (ACS_RTEE));
1744 SetDictInt("ACS_SSSB", (ACS_LTEE));
1745 SetDictInt("ACS_SSBS", (ACS_BTEE));
1746 SetDictInt("ACS_BSSS", (ACS_TTEE));
1747 SetDictInt("ACS_BSBS", (ACS_HLINE));
1748 SetDictInt("ACS_SBSB", (ACS_VLINE));
1749 SetDictInt("ACS_SSSS", (ACS_PLUS));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001750
1751 /* The following are never available with strict SYSV curses */
1752#ifdef ACS_S3
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001753 SetDictInt("ACS_S3", (ACS_S3));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001754#endif
1755#ifdef ACS_S7
1756 SetDictInt("ACS_S7", (ACS_S7));
1757#endif
1758#ifdef ACS_LEQUAL
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001759 SetDictInt("ACS_LEQUAL", (ACS_LEQUAL));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001760#endif
1761#ifdef ACS_GEQUAL
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001762 SetDictInt("ACS_GEQUAL", (ACS_GEQUAL));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001763#endif
1764#ifdef ACS_PI
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001765 SetDictInt("ACS_PI", (ACS_PI));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001766#endif
1767#ifdef ACS_NEQUAL
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001768 SetDictInt("ACS_NEQUAL", (ACS_NEQUAL));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001769#endif
1770#ifdef ACS_STERLING
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001771 SetDictInt("ACS_STERLING", (ACS_STERLING));
1772#endif
1773
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001774 lines = PyInt_FromLong((long) LINES);
1775 PyDict_SetItemString(ModDict, "LINES", lines);
1776 Py_DECREF(lines);
1777 cols = PyInt_FromLong((long) COLS);
1778 PyDict_SetItemString(ModDict, "COLS", cols);
1779 Py_DECREF(cols);
Guido van Rossum56bf2351994-08-31 22:06:24 +00001780
1781 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001782}
1783
Guido van Rossumf6971e21994-08-30 12:25:20 +00001784
1785static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001786PyCurses_IntrFlush(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001787{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001788 int ch;
1789
1790 PyCursesInitialised
1791
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001792 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001793 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001794 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001795 break;
1796 default:
1797 PyErr_SetString(PyExc_TypeError, "intrflush requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00001798 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001799 }
1800
1801 return PyCursesCheckERR(intrflush(NULL,ch), "intrflush");
1802}
1803
1804static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001805PyCurses_KeyName(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001806{
1807 const char *knp;
1808 int ch;
1809
1810 PyCursesInitialised
1811
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001812 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001813
1814 knp = keyname(ch);
1815
1816 return PyString_FromString((knp == NULL) ? "" : (char *)knp);
1817}
1818
1819static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001820PyCurses_KillChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001821{
1822 char ch;
1823
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001824 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001825
1826 ch = killchar();
1827
1828 return PyString_FromString(&ch);
1829}
1830
1831static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001832PyCurses_Meta(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001833{
1834 int ch;
1835
1836 PyCursesInitialised
1837
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001838 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001839 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001840 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001841 break;
1842 default:
1843 PyErr_SetString(PyExc_TypeError, "meta requires 1 argument");
1844 return NULL;
1845 }
1846
1847 return PyCursesCheckERR(meta(stdscr, ch), "meta");
1848}
1849
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001850#ifdef NCURSES_MOUSE_VERSION
1851static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001852PyCurses_MouseInterval(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001853{
1854 int interval;
1855 PyCursesInitialised
1856
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001857 if (!PyArg_Parse(args,"i;interval",&interval))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001858 return NULL;
1859 return PyCursesCheckERR(mouseinterval(interval), "mouseinterval");
1860}
1861
1862static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001863PyCurses_MouseMask(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001864{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00001865 int newmask;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001866 mmask_t oldmask, availmask;
1867
1868 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001869 if (!PyArg_Parse(args,"i;mousemask",&newmask))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001870 return NULL;
1871 availmask = mousemask(newmask, &oldmask);
1872 return Py_BuildValue("(ll)", (long)availmask, (long)oldmask);
1873}
1874#endif
1875
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001876static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001877PyCurses_NewPad(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001878{
1879 WINDOW *win;
1880 int nlines, ncols;
1881
1882 PyCursesInitialised
1883
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001884 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001885
1886 win = newpad(nlines, ncols);
1887
1888 if (win == NULL) {
1889 PyErr_SetString(PyCursesError, catchall_NULL);
1890 return NULL;
1891 }
1892
1893 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001894}
1895
1896static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001897PyCurses_NewWindow(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001898{
1899 WINDOW *win;
1900 int nlines, ncols, begin_y, begin_x;
Guido van Rossum85738471995-02-17 13:50:17 +00001901
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001902 PyCursesInitialised
1903
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001904 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +00001905 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001906 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols))
Guido van Rossum85738471995-02-17 13:50:17 +00001907 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001908 win = newpad(nlines, ncols);
Guido van Rossum85738471995-02-17 13:50:17 +00001909 break;
1910 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001911 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Guido van Rossumf6971e21994-08-30 12:25:20 +00001912 &nlines,&ncols,&begin_y,&begin_x))
Guido van Rossum85738471995-02-17 13:50:17 +00001913 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001914 win = newwin(nlines,ncols,begin_y,begin_x);
Guido van Rossum85738471995-02-17 13:50:17 +00001915 break;
1916 default:
1917 PyErr_SetString(PyExc_TypeError, "newwin requires 2 or 4 arguments");
1918 return NULL;
1919 }
1920
Guido van Rossumf6971e21994-08-30 12:25:20 +00001921 if (win == NULL) {
Guido van Rossum85738471995-02-17 13:50:17 +00001922 PyErr_SetString(PyCursesError, catchall_NULL);
1923 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +00001924 }
Guido van Rossum85738471995-02-17 13:50:17 +00001925
Guido van Rossumf6971e21994-08-30 12:25:20 +00001926 return (PyObject *)PyCursesWindow_New(win);
1927}
1928
1929static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001930PyCurses_Pair_Content(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001931{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001932 short pair,f,b;
1933
1934 PyCursesInitialised
1935 PyCursesInitialisedColor
1936
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001937 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001938 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001939 if (!PyArg_Parse(args, "h;pair", &pair)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001940 break;
1941 default:
1942 PyErr_SetString(PyExc_TypeError, "pair_content requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00001943 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001944 }
1945
1946 if (!pair_content(pair, &f, &b)) {
1947 PyErr_SetString(PyCursesError,
1948 "Argument 1 was out of range. (1..COLOR_PAIRS-1)");
1949 return NULL;
1950 }
1951
1952 return Py_BuildValue("(ii)", f, b);
1953}
1954
1955static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001956PyCurses_pair_number(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001957{
1958 int n;
1959
1960 PyCursesInitialised
1961 PyCursesInitialisedColor
1962
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001963 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001964 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001965 if (!PyArg_Parse(args, "i;pairvalue", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001966 break;
1967 default:
1968 PyErr_SetString(PyExc_TypeError,
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001969 "pair_number requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001970 return NULL;
1971 }
1972
1973 return PyInt_FromLong((long) ((n & A_COLOR) >> 8));
1974}
1975
1976static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001977PyCurses_Putp(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001978{
1979 char *str;
1980
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001981 if (!PyArg_Parse(args,"s;str", &str)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001982 return PyCursesCheckERR(putp(str), "putp");
1983}
1984
1985static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001986PyCurses_QiFlush(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001987{
1988 int flag = 0;
1989
1990 PyCursesInitialised
1991
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001992 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001993 case 0:
1994 qiflush();
1995 Py_INCREF(Py_None);
1996 return Py_None;
1997 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001998 if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001999 if (flag) qiflush();
2000 else noqiflush();
2001 Py_INCREF(Py_None);
2002 return Py_None;
2003 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002004 PyErr_SetString(PyExc_TypeError, "qiflush requires 0 or 1 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002005 return NULL;
2006 }
2007}
2008
2009static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002010PyCurses_setsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002011{
2012 int y,x;
2013
2014 PyCursesInitialised
2015
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002016 if (ARG_COUNT(args)!=2) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002017 PyErr_SetString(PyExc_TypeError, "setsyx requires 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002018 return NULL;
2019 }
2020
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002021 if (!PyArg_Parse(args, "(ii);y, x", &y, &x)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002022
2023 setsyx(y,x);
2024
Guido van Rossumf6971e21994-08-30 12:25:20 +00002025 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00002026 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002027}
2028
2029static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002030PyCurses_Start_Color(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002031{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002032 int code;
2033 PyObject *c, *cp;
2034
2035 PyCursesInitialised
2036
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002037 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002038
2039 code = start_color();
2040 if (code != ERR) {
2041 initialisedcolors = TRUE;
2042 c = PyInt_FromLong((long) COLORS);
2043 PyDict_SetItemString(ModDict, "COLORS", c);
2044 Py_DECREF(c);
2045 cp = PyInt_FromLong((long) COLOR_PAIRS);
2046 PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp);
2047 Py_DECREF(cp);
2048 Py_INCREF(Py_None);
2049 return Py_None;
2050 } else {
2051 PyErr_SetString(PyCursesError, "start_color() returned ERR");
Guido van Rossum85738471995-02-17 13:50:17 +00002052 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002053 }
2054}
2055
2056static PyObject *
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002057PyCurses_tigetflag(PyObject *self, PyObject *args)
2058{
2059 char *capname;
2060
2061 PyCursesInitialised;
2062
2063 if (!PyArg_ParseTuple(args, "z", &capname))
2064 return NULL;
2065
2066 return PyInt_FromLong( (long) tigetflag( capname ) );
2067}
2068
2069static PyObject *
2070PyCurses_tigetnum(PyObject *self, PyObject *args)
2071{
2072 char *capname;
2073
2074 PyCursesInitialised;
2075
2076 if (!PyArg_ParseTuple(args, "z", &capname))
2077 return NULL;
2078
2079 return PyInt_FromLong( (long) tigetnum( capname ) );
2080}
2081
2082static PyObject *
2083PyCurses_tigetstr(PyObject *self, PyObject *args)
2084{
2085 char *capname;
2086
2087 PyCursesInitialised;
2088
2089 if (!PyArg_ParseTuple(args, "z", &capname))
2090 return NULL;
2091
2092 capname = tigetstr( capname );
2093 if (capname == 0 || capname == (char*) -1) {
2094 Py_INCREF(Py_None);
2095 return Py_None;
2096 }
2097 return PyString_FromString( capname );
2098}
2099
2100static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002101PyCurses_TypeAhead(PyObject *self, PyObject *args)
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002102{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002103 int fd;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002104
2105 PyCursesInitialised
2106
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002107 if (!PyArg_Parse(args,"i;fd",&fd)) return NULL;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002108
2109 PyCursesCheckERR(typeahead( fd ), "typeahead");
2110 Py_INCREF(Py_None);
2111 return Py_None;
2112}
2113
2114static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002115PyCurses_UnCtrl(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002116{
2117 PyObject *temp;
2118 chtype ch;
2119
2120 PyCursesInitialised
2121
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002122 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002123
2124 if (PyInt_Check(temp))
2125 ch = (chtype) PyInt_AsLong(temp);
2126 else if (PyString_Check(temp))
2127 ch = (chtype) *PyString_AsString(temp);
2128 else {
2129 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
2130 return NULL;
2131 }
2132
2133 return PyString_FromString(unctrl(ch));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002134}
2135
2136static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002137PyCurses_UngetCh(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002138{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002139 PyObject *temp;
2140 chtype ch;
2141
2142 PyCursesInitialised
2143
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002144 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002145
2146 if (PyInt_Check(temp))
2147 ch = (chtype) PyInt_AsLong(temp);
2148 else if (PyString_Check(temp))
2149 ch = (chtype) *PyString_AsString(temp);
2150 else {
2151 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +00002152 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002153 }
2154
Guido van Rossum85738471995-02-17 13:50:17 +00002155 return PyCursesCheckERR(ungetch(ch), "ungetch");
Guido van Rossumf6971e21994-08-30 12:25:20 +00002156}
2157
2158static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002159PyCurses_Use_Env(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002160{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002161 int flag;
2162
2163 PyCursesInitialised
2164
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002165 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002166 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002167 if (!PyArg_Parse(args,"i;True(1), False(0)",&flag))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002168 return NULL;
2169 break;
2170 default:
2171 PyErr_SetString(PyExc_TypeError, "use_env requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00002172 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002173 }
2174 use_env(flag);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002175 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00002176 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002177}
2178
Guido van Rossumf6971e21994-08-30 12:25:20 +00002179/* List of functions defined in the module */
2180
2181static PyMethodDef PyCurses_methods[] = {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002182 {"baudrate", (PyCFunction)PyCurses_baudrate},
2183 {"beep", (PyCFunction)PyCurses_beep},
2184 {"can_change_color", (PyCFunction)PyCurses_can_change_color},
2185 {"cbreak", (PyCFunction)PyCurses_cbreak},
2186 {"color_content", (PyCFunction)PyCurses_Color_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002187 {"color_pair", (PyCFunction)PyCurses_color_pair},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002188 {"curs_set", (PyCFunction)PyCurses_Curs_Set},
2189 {"def_prog_mode", (PyCFunction)PyCurses_def_prog_mode},
2190 {"def_shell_mode", (PyCFunction)PyCurses_def_shell_mode},
2191 {"delay_output", (PyCFunction)PyCurses_Delay_Output},
2192 {"doupdate", (PyCFunction)PyCurses_doupdate},
2193 {"echo", (PyCFunction)PyCurses_echo},
2194 {"endwin", (PyCFunction)PyCurses_endwin},
2195 {"erasechar", (PyCFunction)PyCurses_EraseChar},
2196 {"filter", (PyCFunction)PyCurses_filter},
2197 {"flash", (PyCFunction)PyCurses_flash},
2198 {"flushinp", (PyCFunction)PyCurses_flushinp},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002199#ifdef NCURSES_MOUSE_VERSION
2200 {"getmouse", (PyCFunction)PyCurses_GetMouse},
2201 {"ungetmouse", (PyCFunction)PyCurses_UngetMouse, METH_VARARGS},
2202#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002203 {"getsyx", (PyCFunction)PyCurses_getsyx},
2204 {"getwin", (PyCFunction)PyCurses_GetWin},
2205 {"has_colors", (PyCFunction)PyCurses_has_colors},
2206 {"has_ic", (PyCFunction)PyCurses_has_ic},
2207 {"has_il", (PyCFunction)PyCurses_has_il},
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00002208#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002209 {"has_key", (PyCFunction)PyCurses_has_key},
Guido van Rossumf6971e21994-08-30 12:25:20 +00002210#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002211 {"halfdelay", (PyCFunction)PyCurses_HalfDelay},
2212 {"init_color", (PyCFunction)PyCurses_Init_Color},
2213 {"init_pair", (PyCFunction)PyCurses_Init_Pair},
2214 {"initscr", (PyCFunction)PyCurses_InitScr},
2215 {"intrflush", (PyCFunction)PyCurses_IntrFlush},
2216 {"isendwin", (PyCFunction)PyCurses_isendwin},
2217 {"keyname", (PyCFunction)PyCurses_KeyName},
2218 {"killchar", (PyCFunction)PyCurses_KillChar},
2219 {"longname", (PyCFunction)PyCurses_longname},
2220 {"meta", (PyCFunction)PyCurses_Meta},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002221#ifdef NCURSES_MOUSE_VERSION
2222 {"mouseinterval", (PyCFunction)PyCurses_MouseInterval},
2223 {"mousemask", (PyCFunction)PyCurses_MouseMask},
2224#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002225 {"newpad", (PyCFunction)PyCurses_NewPad},
2226 {"newwin", (PyCFunction)PyCurses_NewWindow},
2227 {"nl", (PyCFunction)PyCurses_nl},
2228 {"nocbreak", (PyCFunction)PyCurses_nocbreak},
2229 {"noecho", (PyCFunction)PyCurses_noecho},
2230 {"nonl", (PyCFunction)PyCurses_nonl},
2231 {"noqiflush", (PyCFunction)PyCurses_noqiflush},
2232 {"noraw", (PyCFunction)PyCurses_noraw},
2233 {"pair_content", (PyCFunction)PyCurses_Pair_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002234 {"pair_number", (PyCFunction)PyCurses_pair_number},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002235 {"putp", (PyCFunction)PyCurses_Putp},
2236 {"qiflush", (PyCFunction)PyCurses_QiFlush},
2237 {"raw", (PyCFunction)PyCurses_raw},
2238 {"reset_prog_mode", (PyCFunction)PyCurses_reset_prog_mode},
2239 {"reset_shell_mode", (PyCFunction)PyCurses_reset_shell_mode},
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002240 {"resetty", (PyCFunction)PyCurses_resetty},
2241 {"savetty", (PyCFunction)PyCurses_savetty},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002242 {"setsyx", (PyCFunction)PyCurses_setsyx},
2243 {"start_color", (PyCFunction)PyCurses_Start_Color},
2244 {"termattrs", (PyCFunction)PyCurses_termattrs},
2245 {"termname", (PyCFunction)PyCurses_termname},
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002246 {"tigetflag", (PyCFunction)PyCurses_tigetflag, METH_VARARGS},
2247 {"tigetnum", (PyCFunction)PyCurses_tigetnum, METH_VARARGS},
2248 {"tigetstr", (PyCFunction)PyCurses_tigetstr, METH_VARARGS},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002249 {"typeahead", (PyCFunction)PyCurses_TypeAhead},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002250 {"unctrl", (PyCFunction)PyCurses_UnCtrl},
2251 {"ungetch", (PyCFunction)PyCurses_UngetCh},
2252 {"use_env", (PyCFunction)PyCurses_Use_Env},
2253 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00002254};
2255
2256/* Initialization function for the module */
2257
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002258void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00002259init_curses(void)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002260{
Guido van Rossum8fbf82b1995-02-17 13:54:04 +00002261 PyObject *m, *d, *v;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002262
2263 /* Create the module and add the functions */
Andrew M. Kuchlingb7f198e2000-06-10 23:12:32 +00002264 m = Py_InitModule("_curses", PyCurses_methods);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002265
Guido van Rossumf6971e21994-08-30 12:25:20 +00002266 /* Add some symbolic constants to the module */
2267 d = PyModule_GetDict(m);
Guido van Rossume4485b01994-09-07 14:32:49 +00002268 ModDict = d; /* For PyCurses_InitScr */
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002269
Guido van Rossum85738471995-02-17 13:50:17 +00002270 /* For exception curses.error */
Fred Drake589c35b2000-07-06 19:38:49 +00002271 PyCursesError = PyErr_NewException("_curses.error", NULL, NULL);
Guido van Rossum85738471995-02-17 13:50:17 +00002272 PyDict_SetItemString(d, "error", PyCursesError);
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002273
Guido van Rossum85738471995-02-17 13:50:17 +00002274 /* Make the version available */
Guido van Rossum8fbf82b1995-02-17 13:54:04 +00002275 v = PyString_FromString(PyCursesVersion);
2276 PyDict_SetItemString(d, "version", v);
2277 PyDict_SetItemString(d, "__version__", v);
2278 Py_DECREF(v);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002279
Guido van Rossumf6971e21994-08-30 12:25:20 +00002280 /* Here are some attributes you can add to chars to print */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002281
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002282 SetDictInt("A_ATTRIBUTES", A_ATTRIBUTES);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002283 SetDictInt("A_NORMAL", A_NORMAL);
2284 SetDictInt("A_STANDOUT", A_STANDOUT);
2285 SetDictInt("A_UNDERLINE", A_UNDERLINE);
2286 SetDictInt("A_REVERSE", A_REVERSE);
2287 SetDictInt("A_BLINK", A_BLINK);
2288 SetDictInt("A_DIM", A_DIM);
2289 SetDictInt("A_BOLD", A_BOLD);
2290 SetDictInt("A_ALTCHARSET", A_ALTCHARSET);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002291 SetDictInt("A_INVIS", A_INVIS);
2292 SetDictInt("A_PROTECT", A_PROTECT);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002293 SetDictInt("A_CHARTEXT", A_CHARTEXT);
2294 SetDictInt("A_COLOR", A_COLOR);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002295
2296 /* The following are never available with strict SYSV curses */
2297#ifdef A_HORIZONTAL
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002298 SetDictInt("A_HORIZONTAL", A_HORIZONTAL);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002299#endif
2300#ifdef A_LEFT
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002301 SetDictInt("A_LEFT", A_LEFT);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002302#endif
2303#ifdef A_LOW
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002304 SetDictInt("A_LOW", A_LOW);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002305#endif
2306#ifdef A_RIGHT
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002307 SetDictInt("A_RIGHT", A_RIGHT);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002308#endif
2309#ifdef A_TOP
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002310 SetDictInt("A_TOP", A_TOP);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002311#endif
2312#ifdef A_VERTICAL
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002313 SetDictInt("A_VERTICAL", A_VERTICAL);
2314#endif
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002315
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002316 SetDictInt("COLOR_BLACK", COLOR_BLACK);
2317 SetDictInt("COLOR_RED", COLOR_RED);
2318 SetDictInt("COLOR_GREEN", COLOR_GREEN);
2319 SetDictInt("COLOR_YELLOW", COLOR_YELLOW);
2320 SetDictInt("COLOR_BLUE", COLOR_BLUE);
2321 SetDictInt("COLOR_MAGENTA", COLOR_MAGENTA);
2322 SetDictInt("COLOR_CYAN", COLOR_CYAN);
2323 SetDictInt("COLOR_WHITE", COLOR_WHITE);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002324
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002325#ifdef NCURSES_MOUSE_VERSION
2326 /* Mouse-related constants */
2327 SetDictInt("BUTTON1_PRESSED", BUTTON1_PRESSED);
2328 SetDictInt("BUTTON1_RELEASED", BUTTON1_RELEASED);
2329 SetDictInt("BUTTON1_CLICKED", BUTTON1_CLICKED);
2330 SetDictInt("BUTTON1_DOUBLE_CLICKED", BUTTON1_DOUBLE_CLICKED);
2331 SetDictInt("BUTTON1_TRIPLE_CLICKED", BUTTON1_TRIPLE_CLICKED);
2332
2333 SetDictInt("BUTTON2_PRESSED", BUTTON2_PRESSED);
2334 SetDictInt("BUTTON2_RELEASED", BUTTON2_RELEASED);
2335 SetDictInt("BUTTON2_CLICKED", BUTTON2_CLICKED);
2336 SetDictInt("BUTTON2_DOUBLE_CLICKED", BUTTON2_DOUBLE_CLICKED);
2337 SetDictInt("BUTTON2_TRIPLE_CLICKED", BUTTON2_TRIPLE_CLICKED);
2338
2339 SetDictInt("BUTTON3_PRESSED", BUTTON3_PRESSED);
2340 SetDictInt("BUTTON3_RELEASED", BUTTON3_RELEASED);
2341 SetDictInt("BUTTON3_CLICKED", BUTTON3_CLICKED);
2342 SetDictInt("BUTTON3_DOUBLE_CLICKED", BUTTON3_DOUBLE_CLICKED);
2343 SetDictInt("BUTTON3_TRIPLE_CLICKED", BUTTON3_TRIPLE_CLICKED);
2344
2345 SetDictInt("BUTTON4_PRESSED", BUTTON4_PRESSED);
2346 SetDictInt("BUTTON4_RELEASED", BUTTON4_RELEASED);
2347 SetDictInt("BUTTON4_CLICKED", BUTTON4_CLICKED);
2348 SetDictInt("BUTTON4_DOUBLE_CLICKED", BUTTON4_DOUBLE_CLICKED);
2349 SetDictInt("BUTTON4_TRIPLE_CLICKED", BUTTON4_TRIPLE_CLICKED);
2350
2351 SetDictInt("BUTTON_SHIFT", BUTTON_SHIFT);
2352 SetDictInt("BUTTON_CTRL", BUTTON_CTRL);
2353 SetDictInt("BUTTON_ALT", BUTTON_ALT);
2354
2355 SetDictInt("ALL_MOUSE_EVENTS", ALL_MOUSE_EVENTS);
2356 SetDictInt("REPORT_MOUSE_POSITION", REPORT_MOUSE_POSITION);
2357#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +00002358 /* Now set everything up for KEY_ variables */
2359 {
2360 int key;
2361 char *key_n;
2362 char *key_n2;
2363 for (key=KEY_MIN;key < KEY_MAX; key++) {
2364 key_n = (char *)keyname(key);
Guido van Rossumf5c6d471995-02-07 15:38:32 +00002365 if (key_n == NULL || strcmp(key_n,"UNKNOWN KEY")==0)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002366 continue;
2367 if (strncmp(key_n,"KEY_F(",6)==0) {
2368 char *p1, *p2;
2369 key_n2 = malloc(strlen(key_n)+1);
2370 p1 = key_n;
2371 p2 = key_n2;
2372 while (*p1) {
2373 if (*p1 != '(' && *p1 != ')') {
2374 *p2 = *p1;
2375 p2++;
2376 }
2377 p1++;
2378 }
2379 *p2 = (char)0;
2380 } else
2381 key_n2 = key_n;
Guido van Rossum85738471995-02-17 13:50:17 +00002382 PyDict_SetItemString(d,key_n2,PyInt_FromLong((long) key));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002383 if (key_n2 != key_n)
2384 free(key_n2);
2385 }
Guido van Rossum85738471995-02-17 13:50:17 +00002386 SetDictInt("KEY_MIN", KEY_MIN);
2387 SetDictInt("KEY_MAX", KEY_MAX);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002388 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00002389}