blob: 7f297df234d5b1769eedf2d6e5bbfc1f1007bf48 [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
Andrew M. Kuchlingf16e0ed2000-11-07 03:35:24 +000050 tgoto timeout tputs typeahead use_default_colors vidattr
51 vidputs waddchnstr waddchstr wchgat wcolor_set winchnstr
52 winchstr winnstr wmouse_trafo wredrawln wscrl wtimeout
Andrew M. Kuchlingfb6bbf52000-07-27 11:58:01 +000053
54Low-priority:
55 slk_attr slk_attr_off slk_attr_on slk_attr_set slk_attroff
56 slk_attron slk_attrset slk_clear slk_color slk_init slk_label
57 slk_noutrefresh slk_refresh slk_restore slk_set slk_touch
58
59 */
60
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000061/* Release Number */
Guido van Rossumf6971e21994-08-30 12:25:20 +000062
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +000063char *PyCursesVersion = "1.6";
Guido van Rossumf6971e21994-08-30 12:25:20 +000064
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000065/* Includes */
Guido van Rossumf6971e21994-08-30 12:25:20 +000066
Guido van Rossum602099a1994-09-14 13:32:22 +000067#include "Python.h"
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000068
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000069#ifdef __osf__
70#define _XOPEN_SOURCE_EXTENDED /* Define macro for OSF/1 */
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +000071#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000072#endif
73
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +000074#ifdef HAVE_NCURSES_H
75#include <ncurses.h>
76#else
77#include <curses.h>
78#endif
79
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +000080#ifdef sgi
81/* This prototype is in <term.h>, but including this header #defines
82 many common symbols (such as "lines") which breaks the curses
83 module in other ways. So the code will just specify an explicit
84 prototype here. */
85extern char *tigetstr(char *);
86#endif
87
88#if defined(sgi) || defined(__sun__)
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +000089#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000090typedef chtype attr_t; /* No attr_t type is available */
Guido van Rossum1266a011996-02-25 04:50:31 +000091#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +000092
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000093/* Definition of exception curses.error */
Guido van Rossumf6971e21994-08-30 12:25:20 +000094
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000095static PyObject *PyCursesError;
Guido van Rossumf6971e21994-08-30 12:25:20 +000096
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000097/* general error messages */
Guido van Rossum85738471995-02-17 13:50:17 +000098static char *catchall_ERR = "curses function returned ERR";
99static char *catchall_NULL = "curses function returned NULL";
100
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000101/* Tells whether initscr() has been called to initialise curses. */
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000102static int initialised = FALSE;
103
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000104/* Tells whether start_color() has been called to initialise colorusage. */
105static int initialisedcolors = FALSE;
106
107/* Utility Macros */
Guido van Rossum85738471995-02-17 13:50:17 +0000108#define ARG_COUNT(X) \
109 (((X) == NULL) ? 0 : (PyTuple_Check(X) ? PyTuple_Size(X) : 1))
Guido van Rossumf6971e21994-08-30 12:25:20 +0000110
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000111#define PyCursesInitialised \
112 if (initialised != TRUE) { \
113 PyErr_SetString(PyCursesError, \
114 "must call initscr() first"); \
115 return NULL; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000116
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000117#define PyCursesInitialisedColor \
118 if (initialisedcolors != TRUE) { \
119 PyErr_SetString(PyCursesError, \
120 "must call start_color() first"); \
121 return NULL; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000122
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000123/* Utility Functions */
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000124
Guido van Rossum85738471995-02-17 13:50:17 +0000125/*
126 * Check the return code from a curses function and return None
127 * or raise an exception as appropriate.
128 */
129
130static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000131PyCursesCheckERR(int code, char *fname)
Guido van Rossum85738471995-02-17 13:50:17 +0000132{
Guido van Rossum85738471995-02-17 13:50:17 +0000133 if (code != ERR) {
134 Py_INCREF(Py_None);
135 return Py_None;
136 } else {
137 if (fname == NULL) {
138 PyErr_SetString(PyCursesError, catchall_ERR);
139 } else {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000140 PyErr_Format(PyCursesError, "%s() returned ERR", fname);
Guido van Rossum85738471995-02-17 13:50:17 +0000141 }
142 return NULL;
143 }
144}
145
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000146static int
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000147PyCurses_ConvertToChtype(PyObject *obj, chtype *ch)
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000148{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000149 if (PyInt_Check(obj)) {
150 *ch = (chtype) PyInt_AsLong(obj);
151 } else if(PyString_Check(obj) &
152 (PyString_Size(obj) == 1)) {
153 *ch = (chtype) *PyString_AsString(obj);
154 } else {
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000155 return 0;
156 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000157 return 1;
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000158}
159
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000160/*****************************************************************************
161 The Window Object
162******************************************************************************/
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000163
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000164/* Definition of the window object and window type */
Guido van Rossum85738471995-02-17 13:50:17 +0000165
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000166typedef struct {
167 PyObject_HEAD
168 WINDOW *win;
169} PyCursesWindowObject;
Guido van Rossum85738471995-02-17 13:50:17 +0000170
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000171PyTypeObject PyCursesWindow_Type;
172
173#define PyCursesWindow_Check(v) ((v)->ob_type == &PyCursesWindow_Type)
174
175/* Function Prototype Macros - They are ugly but very, very useful. ;-)
176
177 X - function name
178 TYPE - parameter Type
179 ERGSTR - format string for construction of the return value
180 PARSESTR - format string for argument parsing
181 */
182
183#define Window_NoArgNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000184static PyObject *PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
185{ if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000186 return PyCursesCheckERR(X(self->win), # X); }
187
188#define Window_NoArgTrueFalseFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000189static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000190{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000191 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000192 if (X (self->win) == FALSE) { Py_INCREF(Py_False); return Py_False; } \
193 else { Py_INCREF(Py_True); return Py_True; } }
194
195#define Window_NoArgNoReturnVoidFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000196static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000197{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000198 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000199 X(self->win); Py_INCREF(Py_None); return Py_None; }
200
201#define Window_NoArg2TupleReturnFunction(X, TYPE, ERGSTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000202static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000203{ \
204 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000205 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000206 X(self->win,arg1,arg2); return Py_BuildValue(ERGSTR, arg1, arg2); }
207
208#define Window_OneArgNoReturnVoidFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000209static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000210{ \
211 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000212 if (!PyArg_Parse(args, PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000213 X(self->win,arg1); Py_INCREF(Py_None); return Py_None; }
214
215#define Window_OneArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000216static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000217{ \
218 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000219 if (!PyArg_Parse(args,PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000220 return PyCursesCheckERR(X(self->win, arg1), # X); }
221
222#define Window_TwoArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000223static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000224{ \
225 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000226 if (!PyArg_Parse(args,PARSESTR, &arg1, &arg2)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000227 return PyCursesCheckERR(X(self->win, arg1, arg2), # X); }
Guido van Rossum85738471995-02-17 13:50:17 +0000228
Guido van Rossumf6971e21994-08-30 12:25:20 +0000229/* ------------- WINDOW routines --------------- */
Guido van Rossum85738471995-02-17 13:50:17 +0000230
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000231Window_NoArgNoReturnFunction(untouchwin)
232Window_NoArgNoReturnFunction(touchwin)
233Window_NoArgNoReturnFunction(redrawwin)
234Window_NoArgNoReturnFunction(winsertln)
235Window_NoArgNoReturnFunction(werase)
236Window_NoArgNoReturnFunction(wdeleteln)
237
238Window_NoArgTrueFalseFunction(is_wintouched)
239
240Window_NoArgNoReturnVoidFunction(wsyncup)
241Window_NoArgNoReturnVoidFunction(wsyncdown)
242Window_NoArgNoReturnVoidFunction(wstandend)
243Window_NoArgNoReturnVoidFunction(wstandout)
244Window_NoArgNoReturnVoidFunction(wcursyncup)
245Window_NoArgNoReturnVoidFunction(wclrtoeol)
246Window_NoArgNoReturnVoidFunction(wclrtobot)
247Window_NoArgNoReturnVoidFunction(wclear)
248
249Window_OneArgNoReturnVoidFunction(idcok, int, "i;True(1) or False(0)")
250Window_OneArgNoReturnVoidFunction(immedok, int, "i;True(1) or False(0)")
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +0000251Window_OneArgNoReturnVoidFunction(wtimeout, int, "i;delay")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000252
253Window_NoArg2TupleReturnFunction(getyx, int, "(ii)")
254Window_NoArg2TupleReturnFunction(getbegyx, int, "(ii)")
255Window_NoArg2TupleReturnFunction(getmaxyx, int, "(ii)")
256Window_NoArg2TupleReturnFunction(getparyx, int, "(ii)")
257
258Window_OneArgNoReturnFunction(wattron, attr_t, "l;attr")
259Window_OneArgNoReturnFunction(wattroff, attr_t, "l;attr")
260Window_OneArgNoReturnFunction(wattrset, attr_t, "l;attr")
261Window_OneArgNoReturnFunction(clearok, int, "i;True(1) or False(0)")
262Window_OneArgNoReturnFunction(idlok, int, "i;True(1) or False(0)")
263Window_OneArgNoReturnFunction(keypad, int, "i;True(1) or False(0)")
264Window_OneArgNoReturnFunction(leaveok, int, "i;True(1) or False(0)")
265Window_OneArgNoReturnFunction(nodelay, int, "i;True(1) or False(0)")
266Window_OneArgNoReturnFunction(notimeout, int, "i;True(1) or False(0)")
267Window_OneArgNoReturnFunction(scrollok, int, "i;True(1) or False(0)")
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000268Window_OneArgNoReturnFunction(winsdelln, int, "i;nlines")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000269Window_OneArgNoReturnFunction(syncok, int, "i;True(1) or False(0)")
270
271Window_TwoArgNoReturnFunction(mvwin, int, "(ii);y,x")
272Window_TwoArgNoReturnFunction(mvderwin, int, "(ii);y,x")
273Window_TwoArgNoReturnFunction(wmove, int, "(ii);y,x")
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000274#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000275Window_TwoArgNoReturnFunction(wresize, int, "(ii);lines,columns")
276#endif
277
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000278/* Allocation and deallocation of Window Objects */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000279
Guido van Rossumf6971e21994-08-30 12:25:20 +0000280static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000281PyCursesWindow_New(WINDOW *win)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000282{
283 PyCursesWindowObject *wo;
Guido van Rossum85738471995-02-17 13:50:17 +0000284
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000285 wo = PyObject_NEW(PyCursesWindowObject, &PyCursesWindow_Type);
286 if (wo == NULL) return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000287 wo->win = win;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000288 return (PyObject *)wo;
289}
290
291static void
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000292PyCursesWindow_Dealloc(PyCursesWindowObject *wo)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000293{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000294 if (wo->win != stdscr) delwin(wo->win);
295 PyMem_DEL(wo);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000296}
297
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000298/* Addch, Addstr, Addnstr */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000299
300static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000301PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000302{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000303 int rtn, x, y, use_xy = FALSE;
304 PyObject *temp;
305 chtype ch = 0;
306 attr_t attr = A_NORMAL;
307
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000308 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000309 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000310 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000311 return NULL;
312 break;
313 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000314 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000315 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000316 break;
317 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000318 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000319 return NULL;
320 use_xy = TRUE;
321 break;
322 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000323 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000324 &y, &x, &temp, &attr))
325 return NULL;
326 use_xy = TRUE;
327 break;
328 default:
329 PyErr_SetString(PyExc_TypeError, "addch requires 1 or 4 arguments");
330 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000331 }
Guido van Rossum85738471995-02-17 13:50:17 +0000332
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000333 if (!PyCurses_ConvertToChtype(temp, &ch)) {
334 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
335 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000336 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000337
Guido van Rossumf6971e21994-08-30 12:25:20 +0000338 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000339 rtn = mvwaddch(self->win,y,x, ch | attr);
340 else {
341 rtn = waddch(self->win, ch | attr);
342 }
343 return PyCursesCheckERR(rtn, "addch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000344}
345
346static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000347PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000348{
349 int rtn;
350 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000351 char *str;
352 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
353 int use_xy = FALSE, use_attr = FALSE;
Guido van Rossum85738471995-02-17 13:50:17 +0000354
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000355 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000356 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000357 if (!PyArg_Parse(args,"s;str", &str))
Guido van Rossum85738471995-02-17 13:50:17 +0000358 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000359 break;
360 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000361 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000362 return NULL;
363 use_attr = TRUE;
364 break;
365 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000366 if (!PyArg_Parse(args,"(iis);int,int,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000367 return NULL;
368 use_xy = TRUE;
369 break;
370 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000371 if (!PyArg_Parse(args,"(iisl);int,int,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000372 return NULL;
373 use_xy = use_attr = TRUE;
374 break;
375 default:
376 PyErr_SetString(PyExc_TypeError, "addstr requires 1 to 4 arguments");
377 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000378 }
Guido van Rossum85738471995-02-17 13:50:17 +0000379
Guido van Rossumf6971e21994-08-30 12:25:20 +0000380 if (use_attr == TRUE) {
381 attr_old = getattrs(self->win);
382 wattrset(self->win,attr);
383 }
384 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000385 rtn = mvwaddstr(self->win,y,x,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000386 else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000387 rtn = waddstr(self->win,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000388 if (use_attr == TRUE)
389 wattrset(self->win,attr_old);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000390 return PyCursesCheckERR(rtn, "addstr");
391}
Guido van Rossum85738471995-02-17 13:50:17 +0000392
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000393static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000394PyCursesWindow_AddNStr(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000395{
396 int rtn, x, y, n;
397 char *str;
398 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
399 int use_xy = FALSE, use_attr = FALSE;
400
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000401 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000402 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000403 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000404 return NULL;
405 break;
406 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000407 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000408 return NULL;
409 use_attr = TRUE;
410 break;
411 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000412 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000413 return NULL;
414 use_xy = TRUE;
415 break;
416 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000417 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000418 return NULL;
419 use_xy = use_attr = TRUE;
420 break;
421 default:
422 PyErr_SetString(PyExc_TypeError, "addnstr requires 2 to 5 arguments");
423 return NULL;
424 }
425
426 if (use_attr == TRUE) {
427 attr_old = getattrs(self->win);
428 wattrset(self->win,attr);
429 }
430 if (use_xy == TRUE)
431 rtn = mvwaddnstr(self->win,y,x,str,n);
432 else
433 rtn = waddnstr(self->win,str,n);
434 if (use_attr == TRUE)
435 wattrset(self->win,attr_old);
436 return PyCursesCheckERR(rtn, "addnstr");
437}
438
439static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000440PyCursesWindow_Bkgd(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000441{
442 PyObject *temp;
443 chtype bkgd;
444 attr_t attr = A_NORMAL;
445
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000446 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000447 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000448 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000449 return NULL;
450 break;
451 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000452 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000453 return NULL;
454 break;
455 default:
456 PyErr_SetString(PyExc_TypeError, "bkgd requires 1 or 2 arguments");
457 return NULL;
458 }
459
460 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
461 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
462 return NULL;
463 }
464
465 return PyCursesCheckERR(wbkgd(self->win, bkgd | A_NORMAL), "bkgd");
466}
467
468static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000469PyCursesWindow_BkgdSet(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000470{
471 PyObject *temp;
472 chtype bkgd;
473 attr_t attr = A_NORMAL;
474
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000475 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000476 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000477 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000478 return NULL;
479 break;
480 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000481 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000482 return NULL;
483 break;
484 default:
485 PyErr_SetString(PyExc_TypeError, "bkgdset requires 1 or 2 arguments");
486 return NULL;
487 }
488
489 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000490 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000491 return NULL;
492 }
493
494 wbkgdset(self->win, bkgd | attr);
495 return PyCursesCheckERR(0, "bkgdset");
496}
497
498static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000499PyCursesWindow_Border(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000500{
501 chtype ls, rs, ts, bs, tl, tr, bl, br;
502 ls = rs = ts = bs = tl = tr = bl = br = 0;
503 if (!PyArg_Parse(args,"|llllllll;ls,rs,ts,bs,tl,tr,bl,br",
504 &ls, &rs, &ts, &bs, &tl, &tr, &bl, &br))
505 return NULL;
506 wborder(self->win, ls, rs, ts, bs, tl, tr, bl, br);
507 Py_INCREF(Py_None);
508 return Py_None;
509}
510
511static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000512PyCursesWindow_Box(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000513{
514 chtype ch1=0,ch2=0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000515 if (!PyArg_NoArgs(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000516 PyErr_Clear();
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000517 if (!PyArg_Parse(args,"(ll);vertint,horint", &ch1, &ch2))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000518 return NULL;
519 }
520 box(self->win,ch1,ch2);
521 Py_INCREF(Py_None);
522 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000523}
524
525static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000526PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000527{
528 int rtn;
529 int x, y;
Guido van Rossum85738471995-02-17 13:50:17 +0000530
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000531 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000532 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000533 rtn = wdelch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000534 break;
535 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000536 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Guido van Rossum85738471995-02-17 13:50:17 +0000537 return NULL;
538 rtn = mvwdelch(self->win,y,x);
539 break;
540 default:
541 PyErr_SetString(PyExc_TypeError, "delch requires 0 or 2 arguments");
542 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000543 }
Guido van Rossum85738471995-02-17 13:50:17 +0000544 return PyCursesCheckERR(rtn, "[mv]wdelch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000545}
546
547static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000548PyCursesWindow_DerWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000549{
550 WINDOW *win;
551 int nlines, ncols, begin_y, begin_x;
552
553 nlines = 0;
554 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000555 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000556 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000557 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000558 return NULL;
559 break;
560 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000561 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000562 &nlines,&ncols,&begin_y,&begin_x))
563 return NULL;
564 break;
565 default:
566 PyErr_SetString(PyExc_TypeError, "derwin requires 2 or 4 arguments");
567 return NULL;
568 }
569
570 win = derwin(self->win,nlines,ncols,begin_y,begin_x);
571
572 if (win == NULL) {
573 PyErr_SetString(PyCursesError, catchall_NULL);
574 return NULL;
575 }
576
577 return (PyObject *)PyCursesWindow_New(win);
578}
579
580static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000581PyCursesWindow_EchoChar(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000582{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000583 PyObject *temp;
584 chtype ch;
585 attr_t attr = A_NORMAL;
Guido van Rossum85738471995-02-17 13:50:17 +0000586
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000587 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000588 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000589 if (!PyArg_Parse(args,"O;ch or int", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +0000590 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000591 break;
592 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000593 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000594 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000595 break;
596 default:
597 PyErr_SetString(PyExc_TypeError, "echochar requires 1 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000598
599
Guido van Rossum85738471995-02-17 13:50:17 +0000600 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000601 }
Guido van Rossum85738471995-02-17 13:50:17 +0000602
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000603 if (!PyCurses_ConvertToChtype(temp, &ch)) {
604 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +0000605 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000606 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000607
608 if (self->win->_flags & _ISPAD)
609 return PyCursesCheckERR(pechochar(self->win, ch | attr),
610 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000611 else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000612 return PyCursesCheckERR(wechochar(self->win, ch | attr),
613 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000614}
615
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000616#ifdef NCURSES_MOUSE_VERSION
617static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000618PyCursesWindow_Enclose(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000619{
620 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000621 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000622 return NULL;
623
624 return PyInt_FromLong( wenclose(self->win,y,x) );
625}
626#endif
627
Guido van Rossumf6971e21994-08-30 12:25:20 +0000628static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000629PyCursesWindow_GetBkgd(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000630{
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000631 if (!PyArg_NoArgs(args))
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000632 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000633 return PyInt_FromLong((long) getbkgd(self->win));
Guido van Rossumf6971e21994-08-30 12:25:20 +0000634}
635
636static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000637PyCursesWindow_GetCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000638{
639 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000640 chtype rtn;
Guido van Rossum85738471995-02-17 13:50:17 +0000641
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000642 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000643 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000644 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000645 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000646 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000647 break;
648 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000649 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000650 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000651 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000652 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000653 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000654 break;
655 default:
656 PyErr_SetString(PyExc_TypeError, "getch requires 0 or 2 arguments");
657 return NULL;
658 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000659 return PyInt_FromLong(rtn);
660}
Guido van Rossum85738471995-02-17 13:50:17 +0000661
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000662static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000663PyCursesWindow_GetKey(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000664{
665 int x, y;
666 chtype rtn;
667
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000668 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000669 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000670 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000671 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000672 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000673 break;
674 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000675 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000676 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000677 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000678 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000679 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000680 break;
681 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000682 PyErr_SetString(PyExc_TypeError, "getkey requires 0 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000683 return NULL;
684 }
685 if (rtn<=255)
686 return Py_BuildValue("c", rtn);
687 else
688 return PyString_FromString((char *)keyname(rtn));
Guido van Rossumf6971e21994-08-30 12:25:20 +0000689}
690
691static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000692PyCursesWindow_GetStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000693{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000694 int x, y, n;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000695 char rtn[1024]; /* This should be big enough.. I hope */
696 int rtn2;
Guido van Rossum85738471995-02-17 13:50:17 +0000697
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000698 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000699 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000700 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000701 rtn2 = wgetstr(self->win,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000702 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000703 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000704 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000705 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000706 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000707 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000708 rtn2 = wgetnstr(self->win,rtn,n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000709 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000710 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000711 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000712 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000713 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000714 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000715 rtn2 = mvwgetstr(self->win,y,x,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000716 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000717 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000718 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000719 if (!PyArg_Parse(args,"(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000720 return NULL;
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000721#ifdef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000722 /* Untested */
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000723 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000724 rtn2 = wmove(self->win,y,x)==ERR ? ERR :
725 wgetnstr(self->win, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000726 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000727#else
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000728 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000729 rtn2 = mvwgetnstr(self->win, y, x, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000730 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000731#endif
732 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000733 default:
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000734 PyErr_SetString(PyExc_TypeError, "getstr requires 0 to 2 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000735 return NULL;
736 }
Guido van Rossumf6971e21994-08-30 12:25:20 +0000737 if (rtn2 == ERR)
738 rtn[0] = 0;
Guido van Rossum85738471995-02-17 13:50:17 +0000739 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000740}
741
742static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000743PyCursesWindow_Hline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000744{
745 PyObject *temp;
746 chtype ch;
747 int n, x, y, code = OK;
748 attr_t attr = A_NORMAL;
749
750 switch (ARG_COUNT(args)) {
751 case 2:
752 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
753 return NULL;
754 break;
755 case 3:
756 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
757 return NULL;
758 break;
759 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000760 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000761 return NULL;
762 code = wmove(self->win, y, x);
763 break;
764 case 5:
765 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
766 &y, &x, &temp, &n, &attr))
767 return NULL;
768 code = wmove(self->win, y, x);
769 default:
770 PyErr_SetString(PyExc_TypeError, "hline requires 2 or 5 arguments");
771 return NULL;
772 }
773
774 if (code != ERR) {
775 if (!PyCurses_ConvertToChtype(temp, &ch)) {
776 PyErr_SetString(PyExc_TypeError,
777 "argument 1 or 3 must be a ch or an int");
778 return NULL;
779 }
780 return PyCursesCheckERR(whline(self->win, ch | attr, n), "hline");
781 } else
782 return PyCursesCheckERR(code, "wmove");
783}
784
785static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000786PyCursesWindow_InsCh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000787{
788 int rtn, x, y, use_xy = FALSE;
789 PyObject *temp;
790 chtype ch = 0;
791 attr_t attr = A_NORMAL;
792
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000793 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000794 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000795 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000796 return NULL;
797 break;
798 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000799 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000800 return NULL;
801 break;
802 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000803 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000804 return NULL;
805 use_xy = TRUE;
806 break;
807 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000808 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr", &y, &x, &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000809 return NULL;
810 use_xy = TRUE;
811 break;
812 default:
813 PyErr_SetString(PyExc_TypeError, "insch requires 1 or 4 arguments");
814 return NULL;
815 }
816
817 if (!PyCurses_ConvertToChtype(temp, &ch)) {
818 PyErr_SetString(PyExc_TypeError,
819 "argument 1 or 3 must be a ch or an int");
820 return NULL;
821 }
822
823 if (use_xy == TRUE)
824 rtn = mvwinsch(self->win,y,x, ch | attr);
825 else {
826 rtn = winsch(self->win, ch | attr);
827 }
828 return PyCursesCheckERR(rtn, "insch");
829}
830
831static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000832PyCursesWindow_InCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000833{
Guido van Rossum85738471995-02-17 13:50:17 +0000834 int x, y, rtn;
835
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000836 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000837 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000838 rtn = winch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000839 break;
840 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000841 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000842 return NULL;
843 rtn = mvwinch(self->win,y,x);
844 break;
845 default:
846 PyErr_SetString(PyExc_TypeError, "inch requires 0 or 2 arguments");
847 return NULL;
848 }
Guido van Rossum85738471995-02-17 13:50:17 +0000849 return PyInt_FromLong((long) rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000850}
851
852static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000853PyCursesWindow_InStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000854{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000855 int x, y, n;
856 char rtn[1024]; /* This should be big enough.. I hope */
857 int rtn2;
858
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000859 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000860 case 0:
861 rtn2 = winstr(self->win,rtn);
862 break;
863 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000864 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000865 return NULL;
866 rtn2 = winnstr(self->win,rtn,n);
867 break;
868 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000869 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000870 return NULL;
871 rtn2 = mvwinstr(self->win,y,x,rtn);
872 break;
873 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000874 if (!PyArg_Parse(args, "(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000875 return NULL;
876 rtn2 = mvwinnstr(self->win, y, x, rtn, n);
877 break;
878 default:
879 PyErr_SetString(PyExc_TypeError, "instr requires 0 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000880 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000881 }
882 if (rtn2 == ERR)
883 rtn[0] = 0;
884 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000885}
886
887static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000888PyCursesWindow_InsStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000889{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000890 int rtn;
891 int x, y;
892 char *str;
893 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
894 int use_xy = FALSE, use_attr = FALSE;
895
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000896 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000897 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000898 if (!PyArg_Parse(args,"s;str", &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000899 return NULL;
900 break;
901 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000902 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000903 return NULL;
904 use_attr = TRUE;
905 break;
906 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000907 if (!PyArg_Parse(args,"(iis);y,x,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000908 return NULL;
909 use_xy = TRUE;
910 break;
911 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000912 if (!PyArg_Parse(args,"(iisl);y,x,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000913 return NULL;
914 use_xy = use_attr = TRUE;
915 break;
916 default:
917 PyErr_SetString(PyExc_TypeError, "insstr requires 1 to 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000918 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000919 }
920
921 if (use_attr == TRUE) {
922 attr_old = getattrs(self->win);
923 wattrset(self->win,attr);
924 }
925 if (use_xy == TRUE)
926 rtn = mvwinsstr(self->win,y,x,str);
927 else
928 rtn = winsstr(self->win,str);
929 if (use_attr == TRUE)
930 wattrset(self->win,attr_old);
931 return PyCursesCheckERR(rtn, "insstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000932}
933
934static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000935PyCursesWindow_InsNStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000936{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000937 int rtn, x, y, n;
938 char *str;
939 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
940 int use_xy = FALSE, use_attr = FALSE;
941
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000942 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000943 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000944 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000945 return NULL;
946 break;
947 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000948 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000949 return NULL;
950 use_attr = TRUE;
951 break;
952 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000953 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000954 return NULL;
955 use_xy = TRUE;
956 break;
957 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000958 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000959 return NULL;
960 use_xy = use_attr = TRUE;
961 break;
962 default:
963 PyErr_SetString(PyExc_TypeError, "insnstr requires 2 to 5 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000964 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000965 }
966
967 if (use_attr == TRUE) {
968 attr_old = getattrs(self->win);
969 wattrset(self->win,attr);
970 }
971 if (use_xy == TRUE)
972 rtn = mvwinsnstr(self->win,y,x,str,n);
973 else
974 rtn = winsnstr(self->win,str,n);
975 if (use_attr == TRUE)
976 wattrset(self->win,attr_old);
977 return PyCursesCheckERR(rtn, "insnstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000978}
979
980static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000981PyCursesWindow_Is_LineTouched(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000982{
983 int line, erg;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000984 if (!PyArg_Parse(args,"i;line", &line))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000985 return NULL;
986 erg = is_linetouched(self->win, line);
987 if (erg == ERR) {
988 PyErr_SetString(PyExc_TypeError,
989 "is_linetouched: line number outside of boundaries");
990 return NULL;
991 } else
992 if (erg == FALSE) {
993 Py_INCREF(Py_False);
994 return Py_False;
995 } else {
996 Py_INCREF(Py_True);
997 return Py_True;
998 }
999}
1000
1001static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001002PyCursesWindow_NoOutRefresh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001003{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001004 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001005 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001006
1007 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001008 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001009 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001010 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001011 "(iiiiii);" \
1012 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
1013 &pminrow, &pmincol, &sminrow,
1014 &smincol, &smaxrow, &smaxcol))
1015 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001016 Py_BEGIN_ALLOW_THREADS
1017 rtn = pnoutrefresh(self->win,
1018 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +00001019 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001020 Py_END_ALLOW_THREADS
1021 return PyCursesCheckERR(rtn, "pnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001022 default:
1023 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001024 "noutrefresh() called for a pad "
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001025 "requires 6 arguments");
1026 return NULL;
1027 }
1028 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001029 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001030 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001031
1032 Py_BEGIN_ALLOW_THREADS
1033 rtn = wnoutrefresh(self->win);
1034 Py_END_ALLOW_THREADS
1035 return PyCursesCheckERR(rtn, "wnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001036 }
1037}
1038
1039static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001040PyCursesWindow_PutWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001041{
1042 PyObject *temp;
1043
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001044 if (!PyArg_Parse(args, "O;fileobj", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +00001045 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001046 if (!PyFile_Check(temp)) {
1047 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1048 return NULL;
1049 }
1050 return PyCursesCheckERR(putwin(self->win, PyFile_AsFile(temp)),
1051 "putwin");
1052}
1053
1054static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001055PyCursesWindow_RedrawLine(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001056{
1057 int beg, num;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001058 if (!PyArg_Parse(args,"(ii);beg,num", &beg, &num))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001059 return NULL;
1060 return PyCursesCheckERR(wredrawln(self->win,beg,num), "redrawln");
1061}
1062
1063static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001064PyCursesWindow_Refresh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001065{
1066 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001067 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001068
1069 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001070 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001071 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001072 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001073 "(iiiiii);" \
1074 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
1075 &pminrow, &pmincol, &sminrow,
1076 &smincol, &smaxrow, &smaxcol))
1077 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001078
1079 Py_BEGIN_ALLOW_THREADS
1080 rtn = prefresh(self->win,
1081 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +00001082 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001083 Py_END_ALLOW_THREADS
1084 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001085 default:
1086 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001087 "refresh() for a pad requires 6 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001088 return NULL;
1089 }
1090 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001091 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001092 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001093 Py_BEGIN_ALLOW_THREADS
1094 rtn = wrefresh(self->win);
1095 Py_END_ALLOW_THREADS
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001096 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001097 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001098}
1099
1100static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001101PyCursesWindow_SetScrollRegion(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001102{
1103 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001104 if (!PyArg_Parse(args,"(ii);top, bottom",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +00001105 return NULL;
1106 return PyCursesCheckERR(wsetscrreg(self->win,y,x), "wsetscrreg");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001107}
1108
1109static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001110PyCursesWindow_SubWin(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001111{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001112 WINDOW *win;
1113 int nlines, ncols, begin_y, begin_x;
1114
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001115 nlines = 0;
1116 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001117 switch (ARG_COUNT(args)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001118 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001119 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001120 return NULL;
1121 break;
1122 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001123 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001124 &nlines,&ncols,&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001125 return NULL;
1126 break;
1127 default:
1128 PyErr_SetString(PyExc_TypeError, "subwin requires 2 or 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001129 return NULL;
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001130 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001131
Andrew M. Kuchling8353f622000-07-26 18:36:27 +00001132 /* printf("Subwin: %i %i %i %i \n", nlines, ncols, begin_y, begin_x); */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001133 if (self->win->_flags & _ISPAD)
1134 win = subpad(self->win, nlines, ncols, begin_y, begin_x);
1135 else
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001136 win = subwin(self->win, nlines, ncols, begin_y, begin_x);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001137
1138 if (win == NULL) {
1139 PyErr_SetString(PyCursesError, catchall_NULL);
1140 return NULL;
1141 }
1142
1143 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001144}
1145
1146static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001147PyCursesWindow_Scroll(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001148{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001149 int lines;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001150 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001151 case 0:
1152 return PyCursesCheckERR(scroll(self->win), "scroll");
1153 break;
1154 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001155 if (!PyArg_Parse(args, "i;lines", &lines))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001156 return NULL;
1157 return PyCursesCheckERR(wscrl(self->win, lines), "scroll");
1158 default:
1159 PyErr_SetString(PyExc_TypeError, "scroll requires 0 or 1 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001160 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001161 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001162}
1163
1164static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001165PyCursesWindow_TouchLine(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001166{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001167 int st, cnt, val;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001168 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001169 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001170 if (!PyArg_Parse(args,"(ii);start,count",&st,&cnt))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001171 return NULL;
1172 return PyCursesCheckERR(touchline(self->win,st,cnt), "touchline");
1173 break;
1174 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001175 if (!PyArg_Parse(args, "(iii);start,count,val", &st, &cnt, &val))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001176 return NULL;
1177 return PyCursesCheckERR(wtouchln(self->win, st, cnt, val), "touchline");
1178 default:
1179 PyErr_SetString(PyExc_TypeError, "touchline requires 2 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001180 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001181 }
1182}
1183
1184static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001185PyCursesWindow_Vline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001186{
1187 PyObject *temp;
1188 chtype ch;
1189 int n, x, y, code = OK;
1190 attr_t attr = A_NORMAL;
1191
1192 switch (ARG_COUNT(args)) {
1193 case 2:
1194 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
1195 return NULL;
1196 break;
1197 case 3:
1198 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
1199 return NULL;
1200 break;
1201 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001202 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001203 return NULL;
1204 code = wmove(self->win, y, x);
1205 break;
1206 case 5:
1207 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
1208 &y, &x, &temp, &n, &attr))
1209 return NULL;
1210 code = wmove(self->win, y, x);
1211 default:
1212 PyErr_SetString(PyExc_TypeError, "vline requires 2 or 5 arguments");
1213 return NULL;
1214 }
1215
1216 if (code != ERR) {
1217 if (!PyCurses_ConvertToChtype(temp, &ch)) {
1218 PyErr_SetString(PyExc_TypeError,
1219 "argument 1 or 3 must be a ch or an int");
1220 return NULL;
1221 }
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001222 return PyCursesCheckERR(wvline(self->win, ch | attr, n), "vline");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001223 } else
1224 return PyCursesCheckERR(code, "wmove");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001225}
1226
1227static PyMethodDef PyCursesWindow_Methods[] = {
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001228 {"addch", (PyCFunction)PyCursesWindow_AddCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001229 {"addnstr", (PyCFunction)PyCursesWindow_AddNStr},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001230 {"addstr", (PyCFunction)PyCursesWindow_AddStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001231 {"attroff", (PyCFunction)PyCursesWindow_wattroff},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001232 {"attron", (PyCFunction)PyCursesWindow_wattron},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001233 {"attrset", (PyCFunction)PyCursesWindow_wattrset},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001234 {"bkgd", (PyCFunction)PyCursesWindow_Bkgd},
1235 {"bkgdset", (PyCFunction)PyCursesWindow_BkgdSet},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001236 {"border", (PyCFunction)PyCursesWindow_Border, METH_VARARGS},
1237 {"box", (PyCFunction)PyCursesWindow_Box},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001238 {"clear", (PyCFunction)PyCursesWindow_wclear},
1239 {"clearok", (PyCFunction)PyCursesWindow_clearok},
1240 {"clrtobot", (PyCFunction)PyCursesWindow_wclrtobot},
1241 {"clrtoeol", (PyCFunction)PyCursesWindow_wclrtoeol},
1242 {"cursyncup", (PyCFunction)PyCursesWindow_wcursyncup},
1243 {"delch", (PyCFunction)PyCursesWindow_DelCh},
1244 {"deleteln", (PyCFunction)PyCursesWindow_wdeleteln},
1245 {"derwin", (PyCFunction)PyCursesWindow_DerWin},
1246 {"echochar", (PyCFunction)PyCursesWindow_EchoChar},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001247#ifdef NCURSES_MOUSE_VERSION
1248 {"enclose", (PyCFunction)PyCursesWindow_Enclose},
1249#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001250 {"erase", (PyCFunction)PyCursesWindow_werase},
1251 {"getbegyx", (PyCFunction)PyCursesWindow_getbegyx},
1252 {"getbkgd", (PyCFunction)PyCursesWindow_GetBkgd},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001253 {"getch", (PyCFunction)PyCursesWindow_GetCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001254 {"getkey", (PyCFunction)PyCursesWindow_GetKey},
1255 {"getmaxyx", (PyCFunction)PyCursesWindow_getmaxyx},
1256 {"getparyx", (PyCFunction)PyCursesWindow_getparyx},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001257 {"getstr", (PyCFunction)PyCursesWindow_GetStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001258 {"getyx", (PyCFunction)PyCursesWindow_getyx},
1259 {"hline", (PyCFunction)PyCursesWindow_Hline},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001260 {"idcok", (PyCFunction)PyCursesWindow_idcok},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001261 {"idlok", (PyCFunction)PyCursesWindow_idlok},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001262 {"immedok", (PyCFunction)PyCursesWindow_immedok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001263 {"inch", (PyCFunction)PyCursesWindow_InCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001264 {"insch", (PyCFunction)PyCursesWindow_InsCh},
1265 {"insdelln", (PyCFunction)PyCursesWindow_winsdelln},
1266 {"insertln", (PyCFunction)PyCursesWindow_winsertln},
1267 {"insnstr", (PyCFunction)PyCursesWindow_InsNStr},
1268 {"insstr", (PyCFunction)PyCursesWindow_InsStr},
1269 {"instr", (PyCFunction)PyCursesWindow_InStr},
1270 {"is_linetouched", (PyCFunction)PyCursesWindow_Is_LineTouched},
1271 {"is_wintouched", (PyCFunction)PyCursesWindow_is_wintouched},
1272 {"keypad", (PyCFunction)PyCursesWindow_keypad},
1273 {"leaveok", (PyCFunction)PyCursesWindow_leaveok},
1274 {"move", (PyCFunction)PyCursesWindow_wmove},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001275 {"mvderwin", (PyCFunction)PyCursesWindow_mvderwin},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001276 {"mvwin", (PyCFunction)PyCursesWindow_mvwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001277 {"nodelay", (PyCFunction)PyCursesWindow_nodelay},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001278 {"notimeout", (PyCFunction)PyCursesWindow_notimeout},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001279 {"noutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh},
Andrew M. Kuchlinga98e92b2000-08-20 23:37:02 +00001280 /* Backward compatibility alias -- remove in Python 2.1 */
1281 {"nooutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001282 {"putwin", (PyCFunction)PyCursesWindow_PutWin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001283 {"redrawln", (PyCFunction)PyCursesWindow_RedrawLine},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001284 {"redrawwin", (PyCFunction)PyCursesWindow_redrawwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001285 {"refresh", (PyCFunction)PyCursesWindow_Refresh},
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00001286#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001287 {"resize", (PyCFunction)PyCursesWindow_wresize},
1288#endif
1289 {"scroll", (PyCFunction)PyCursesWindow_Scroll},
1290 {"scrollok", (PyCFunction)PyCursesWindow_scrollok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001291 {"setscrreg", (PyCFunction)PyCursesWindow_SetScrollRegion},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001292 {"standend", (PyCFunction)PyCursesWindow_wstandend},
1293 {"standout", (PyCFunction)PyCursesWindow_wstandout},
1294 {"subpad", (PyCFunction)PyCursesWindow_SubWin},
1295 {"subwin", (PyCFunction)PyCursesWindow_SubWin},
1296 {"syncdown", (PyCFunction)PyCursesWindow_wsyncdown},
1297 {"syncok", (PyCFunction)PyCursesWindow_syncok},
1298 {"syncup", (PyCFunction)PyCursesWindow_wsyncup},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00001299 {"timeout", (PyCFunction)PyCursesWindow_wtimeout},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001300 {"touchline", (PyCFunction)PyCursesWindow_TouchLine},
1301 {"touchwin", (PyCFunction)PyCursesWindow_touchwin},
1302 {"untouchwin", (PyCFunction)PyCursesWindow_untouchwin},
1303 {"vline", (PyCFunction)PyCursesWindow_Vline},
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001304 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00001305};
1306
1307static PyObject *
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00001308PyCursesWindow_GetAttr(PyCursesWindowObject *self, char *name)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001309{
Guido van Rossuma597dde1995-01-10 20:56:29 +00001310 return Py_FindMethod(PyCursesWindow_Methods, (PyObject *)self, name);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001311}
1312
Guido van Rossumf6971e21994-08-30 12:25:20 +00001313/* -------------------------------------------------------*/
Guido van Rossum85738471995-02-17 13:50:17 +00001314
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001315PyTypeObject PyCursesWindow_Type = {
Guido van Rossumf6971e21994-08-30 12:25:20 +00001316 PyObject_HEAD_INIT(&PyType_Type)
1317 0, /*ob_size*/
1318 "curses window", /*tp_name*/
1319 sizeof(PyCursesWindowObject), /*tp_basicsize*/
1320 0, /*tp_itemsize*/
1321 /* methods */
1322 (destructor)PyCursesWindow_Dealloc, /*tp_dealloc*/
1323 0, /*tp_print*/
1324 (getattrfunc)PyCursesWindow_GetAttr, /*tp_getattr*/
1325 (setattrfunc)0, /*tp_setattr*/
1326 0, /*tp_compare*/
1327 0, /*tp_repr*/
1328 0, /*tp_as_number*/
1329 0, /*tp_as_sequence*/
1330 0, /*tp_as_mapping*/
1331 0, /*tp_hash*/
1332};
1333
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001334/*********************************************************************
1335 Global Functions
1336**********************************************************************/
Guido van Rossumf6971e21994-08-30 12:25:20 +00001337
Guido van Rossume4485b01994-09-07 14:32:49 +00001338static PyObject *ModDict;
1339
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001340/* Function Prototype Macros - They are ugly but very, very useful. ;-)
1341
1342 X - function name
1343 TYPE - parameter Type
1344 ERGSTR - format string for construction of the return value
1345 PARSESTR - format string for argument parsing
1346 */
1347
1348#define NoArgNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001349static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001350{ \
1351 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001352 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001353 return PyCursesCheckERR(X(), # X); }
1354
1355#define NoArgOrFlagNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001356static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001357{ \
1358 int flag = 0; \
1359 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001360 switch(ARG_COUNT(args)) { \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001361 case 0: \
1362 return PyCursesCheckERR(X(), # X); \
1363 case 1: \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001364 if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001365 if (flag) return PyCursesCheckERR(X(), # X); \
1366 else return PyCursesCheckERR(no ## X (), # X); \
1367 default: \
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001368 PyErr_SetString(PyExc_TypeError, # X " requires 0 or 1 arguments"); \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001369 return NULL; } }
1370
1371#define NoArgReturnIntFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001372static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001373{ \
1374 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001375 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001376 return PyInt_FromLong((long) X()); }
1377
1378
1379#define NoArgReturnStringFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001380static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001381{ \
1382 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001383 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001384 return PyString_FromString(X()); }
1385
1386#define NoArgTrueFalseFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001387static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001388{ \
1389 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001390 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001391 if (X () == FALSE) { \
1392 Py_INCREF(Py_False); \
1393 return Py_False; \
1394 } \
1395 Py_INCREF(Py_True); \
1396 return Py_True; }
1397
1398#define NoArgNoReturnVoidFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001399static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001400{ \
1401 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001402 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001403 X(); \
1404 Py_INCREF(Py_None); \
1405 return Py_None; }
1406
1407NoArgNoReturnFunction(beep)
1408NoArgNoReturnFunction(def_prog_mode)
1409NoArgNoReturnFunction(def_shell_mode)
1410NoArgNoReturnFunction(doupdate)
1411NoArgNoReturnFunction(endwin)
1412NoArgNoReturnFunction(flash)
1413NoArgNoReturnFunction(nocbreak)
1414NoArgNoReturnFunction(noecho)
1415NoArgNoReturnFunction(nonl)
1416NoArgNoReturnFunction(noraw)
1417NoArgNoReturnFunction(reset_prog_mode)
1418NoArgNoReturnFunction(reset_shell_mode)
1419NoArgNoReturnFunction(resetty)
1420NoArgNoReturnFunction(savetty)
1421
1422NoArgOrFlagNoReturnFunction(cbreak)
1423NoArgOrFlagNoReturnFunction(echo)
1424NoArgOrFlagNoReturnFunction(nl)
1425NoArgOrFlagNoReturnFunction(raw)
1426
1427NoArgReturnIntFunction(baudrate)
1428NoArgReturnIntFunction(termattrs)
1429
1430NoArgReturnStringFunction(termname)
1431NoArgReturnStringFunction(longname)
1432
1433NoArgTrueFalseFunction(can_change_color)
1434NoArgTrueFalseFunction(has_colors)
1435NoArgTrueFalseFunction(has_ic)
1436NoArgTrueFalseFunction(has_il)
1437NoArgTrueFalseFunction(isendwin)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001438NoArgNoReturnVoidFunction(filter)
1439NoArgNoReturnVoidFunction(flushinp)
1440NoArgNoReturnVoidFunction(noqiflush)
1441
1442static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001443PyCurses_Color_Content(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001444{
1445 short color,r,g,b;
1446
1447 PyCursesInitialised
1448 PyCursesInitialisedColor
1449
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001450 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001451 PyErr_SetString(PyExc_TypeError,
1452 "color_content requires 1 argument");
1453 return NULL;
1454 }
1455
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001456 if (!PyArg_Parse(args, "h;color", &color)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001457
1458 if (color_content(color, &r, &g, &b) != ERR)
1459 return Py_BuildValue("(iii)", r, g, b);
1460 else {
1461 PyErr_SetString(PyCursesError,
1462 "Argument 1 was out of range. Check value of COLORS.");
1463 return NULL;
1464 }
1465}
1466
1467static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001468PyCurses_color_pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001469{
1470 int n;
1471
1472 PyCursesInitialised
1473 PyCursesInitialisedColor
1474
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001475 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001476 PyErr_SetString(PyExc_TypeError, "color_pair requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001477 return NULL;
1478 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001479 if (!PyArg_Parse(args, "i;number", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001480 return PyInt_FromLong((long) (n << 8));
1481}
1482
1483static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001484PyCurses_Curs_Set(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001485{
1486 int vis,erg;
1487
1488 PyCursesInitialised
1489
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001490 if (ARG_COUNT(args)!=1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001491 PyErr_SetString(PyExc_TypeError, "curs_set requires 1 argument");
1492 return NULL;
1493 }
1494
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001495 if (!PyArg_Parse(args, "i;int", &vis)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001496
1497 erg = curs_set(vis);
1498 if (erg == ERR) return PyCursesCheckERR(erg, "curs_set");
1499
1500 return PyInt_FromLong((long) erg);
1501}
1502
1503static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001504PyCurses_Delay_Output(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001505{
1506 int ms;
1507
1508 PyCursesInitialised
1509
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001510 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001511 PyErr_SetString(PyExc_TypeError, "delay_output requires 1 argument");
1512 return NULL;
1513 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001514 if (!PyArg_Parse(args, "i;ms", &ms)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001515
1516 return PyCursesCheckERR(delay_output(ms), "delay_output");
1517}
1518
1519static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001520PyCurses_EraseChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001521{
1522 char ch;
1523
1524 PyCursesInitialised
1525
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001526 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001527
1528 ch = erasechar();
1529
1530 return PyString_FromString(&ch);
1531}
1532
1533static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001534PyCurses_getsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001535{
1536 int x,y;
1537
1538 PyCursesInitialised
1539
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001540 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001541
1542 getsyx(y, x);
1543
1544 return Py_BuildValue("(ii)", y, x);
1545}
1546
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001547#ifdef NCURSES_MOUSE_VERSION
1548static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001549PyCurses_GetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001550{
1551 int rtn;
1552 MEVENT event;
1553
1554 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001555 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001556
1557 rtn = getmouse( &event );
1558 if (rtn == ERR) {
1559 PyErr_SetString(PyCursesError, "getmouse() returned ERR");
1560 return NULL;
1561 }
1562 return Py_BuildValue("(hiiil)",
1563 (short)event.id,
1564 event.x, event.y, event.z,
1565 (long) event.bstate);
1566}
1567
1568static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001569PyCurses_UngetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001570{
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001571 MEVENT event;
1572
1573 PyCursesInitialised
1574 if (!PyArg_ParseTuple(args, "(hiiil)",
1575 &event.id,
1576 &event.x, &event.y, &event.z,
1577 (int *) &event.bstate))
1578 return NULL;
1579
1580 return PyCursesCheckERR(ungetmouse(&event), "ungetmouse");
1581}
1582#endif
1583
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001584static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001585PyCurses_GetWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001586{
1587 WINDOW *win;
1588 PyObject *temp;
1589
1590 PyCursesInitialised
1591
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001592 if (!PyArg_Parse(args, "O;fileobj", &temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001593
1594 if (!PyFile_Check(temp)) {
1595 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1596 return NULL;
1597 }
1598
1599 win = getwin(PyFile_AsFile(temp));
1600
1601 if (win == NULL) {
1602 PyErr_SetString(PyCursesError, catchall_NULL);
1603 return NULL;
1604 }
1605
1606 return PyCursesWindow_New(win);
1607}
1608
1609static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001610PyCurses_HalfDelay(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001611{
1612 unsigned char tenths;
1613
1614 PyCursesInitialised
1615
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001616 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001617 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001618 if (!PyArg_Parse(args, "b;tenths", &tenths)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001619 break;
1620 default:
1621 PyErr_SetString(PyExc_TypeError, "halfdelay requires 1 argument");
1622 return NULL;
1623 }
1624
1625 return PyCursesCheckERR(halfdelay(tenths), "halfdelay");
1626}
1627
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00001628#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001629 /* No has_key! */
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001630static PyObject * PyCurses_has_key(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001631{
1632 int ch;
1633
1634 PyCursesInitialised
1635
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001636 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001637
1638 if (has_key(ch) == FALSE) {
1639 Py_INCREF(Py_False);
1640 return Py_False;
1641 }
1642 Py_INCREF(Py_True);
1643 return Py_True;
1644}
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00001645#endif /* STRICT_SYSV_CURSES */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001646
1647static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001648PyCurses_Init_Color(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001649{
1650 short color, r, g, b;
1651
1652 PyCursesInitialised
1653 PyCursesInitialisedColor
1654
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001655 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001656 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001657 if (!PyArg_Parse(args, "(hhhh);color,r,g,b", &color, &r, &g, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001658 break;
1659 default:
1660 PyErr_SetString(PyExc_TypeError, "init_color requires 4 arguments");
1661 return NULL;
1662 }
1663
1664 return PyCursesCheckERR(init_color(color, r, g, b), "init_color");
1665}
1666
1667static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001668PyCurses_Init_Pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001669{
1670 short pair, f, b;
1671
1672 PyCursesInitialised
1673 PyCursesInitialisedColor
1674
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001675 if (ARG_COUNT(args) != 3) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001676 PyErr_SetString(PyExc_TypeError, "init_pair requires 3 arguments");
1677 return NULL;
1678 }
1679
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001680 if (!PyArg_Parse(args, "(hhh);pair, f, b", &pair, &f, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001681
1682 return PyCursesCheckERR(init_pair(pair, f, b), "init_pair");
1683}
1684
Guido van Rossumf6971e21994-08-30 12:25:20 +00001685static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001686PyCurses_InitScr(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001687{
Guido van Rossum56bf2351994-08-31 22:06:24 +00001688 WINDOW *win;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001689 PyObject *lines, *cols;
1690
1691 if (!PyArg_NoArgs(args)) return NULL;
1692
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001693 if (initialised == TRUE) {
Guido van Rossumf6971e21994-08-30 12:25:20 +00001694 wrefresh(stdscr);
1695 return (PyObject *)PyCursesWindow_New(stdscr);
1696 }
Guido van Rossum56bf2351994-08-31 22:06:24 +00001697
1698 win = initscr();
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001699
Guido van Rossum85738471995-02-17 13:50:17 +00001700 if (win == NULL) {
1701 PyErr_SetString(PyCursesError, catchall_NULL);
1702 return NULL;
1703 }
1704
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001705 initialised = TRUE;
Guido van Rossum56bf2351994-08-31 22:06:24 +00001706
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001707/* This was moved from initcurses() because it core dumped on SGI,
1708 where they're not defined until you've called initscr() */
1709#define SetDictInt(string,ch) \
1710 PyDict_SetItemString(ModDict,string,PyInt_FromLong((long) (ch)));
1711
1712 /* Here are some graphic symbols you can use */
1713 SetDictInt("ACS_ULCORNER", (ACS_ULCORNER));
1714 SetDictInt("ACS_LLCORNER", (ACS_LLCORNER));
1715 SetDictInt("ACS_URCORNER", (ACS_URCORNER));
1716 SetDictInt("ACS_LRCORNER", (ACS_LRCORNER));
1717 SetDictInt("ACS_LTEE", (ACS_LTEE));
1718 SetDictInt("ACS_RTEE", (ACS_RTEE));
1719 SetDictInt("ACS_BTEE", (ACS_BTEE));
1720 SetDictInt("ACS_TTEE", (ACS_TTEE));
1721 SetDictInt("ACS_HLINE", (ACS_HLINE));
1722 SetDictInt("ACS_VLINE", (ACS_VLINE));
1723 SetDictInt("ACS_PLUS", (ACS_PLUS));
1724 SetDictInt("ACS_S1", (ACS_S1));
1725 SetDictInt("ACS_S9", (ACS_S9));
1726 SetDictInt("ACS_DIAMOND", (ACS_DIAMOND));
1727 SetDictInt("ACS_CKBOARD", (ACS_CKBOARD));
1728 SetDictInt("ACS_DEGREE", (ACS_DEGREE));
1729 SetDictInt("ACS_PLMINUS", (ACS_PLMINUS));
1730 SetDictInt("ACS_BULLET", (ACS_BULLET));
1731 SetDictInt("ACS_LARROW", (ACS_LARROW));
1732 SetDictInt("ACS_RARROW", (ACS_RARROW));
1733 SetDictInt("ACS_DARROW", (ACS_DARROW));
1734 SetDictInt("ACS_UARROW", (ACS_UARROW));
1735 SetDictInt("ACS_BOARD", (ACS_BOARD));
1736 SetDictInt("ACS_LANTERN", (ACS_LANTERN));
1737 SetDictInt("ACS_BLOCK", (ACS_BLOCK));
1738 SetDictInt("ACS_BSSB", (ACS_ULCORNER));
1739 SetDictInt("ACS_SSBB", (ACS_LLCORNER));
1740 SetDictInt("ACS_BBSS", (ACS_URCORNER));
1741 SetDictInt("ACS_SBBS", (ACS_LRCORNER));
1742 SetDictInt("ACS_SBSS", (ACS_RTEE));
1743 SetDictInt("ACS_SSSB", (ACS_LTEE));
1744 SetDictInt("ACS_SSBS", (ACS_BTEE));
1745 SetDictInt("ACS_BSSS", (ACS_TTEE));
1746 SetDictInt("ACS_BSBS", (ACS_HLINE));
1747 SetDictInt("ACS_SBSB", (ACS_VLINE));
1748 SetDictInt("ACS_SSSS", (ACS_PLUS));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001749
1750 /* The following are never available with strict SYSV curses */
1751#ifdef ACS_S3
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001752 SetDictInt("ACS_S3", (ACS_S3));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001753#endif
1754#ifdef ACS_S7
1755 SetDictInt("ACS_S7", (ACS_S7));
1756#endif
1757#ifdef ACS_LEQUAL
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001758 SetDictInt("ACS_LEQUAL", (ACS_LEQUAL));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001759#endif
1760#ifdef ACS_GEQUAL
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001761 SetDictInt("ACS_GEQUAL", (ACS_GEQUAL));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001762#endif
1763#ifdef ACS_PI
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001764 SetDictInt("ACS_PI", (ACS_PI));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001765#endif
1766#ifdef ACS_NEQUAL
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001767 SetDictInt("ACS_NEQUAL", (ACS_NEQUAL));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001768#endif
1769#ifdef ACS_STERLING
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001770 SetDictInt("ACS_STERLING", (ACS_STERLING));
1771#endif
1772
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001773 lines = PyInt_FromLong((long) LINES);
1774 PyDict_SetItemString(ModDict, "LINES", lines);
1775 Py_DECREF(lines);
1776 cols = PyInt_FromLong((long) COLS);
1777 PyDict_SetItemString(ModDict, "COLS", cols);
1778 Py_DECREF(cols);
Guido van Rossum56bf2351994-08-31 22:06:24 +00001779
1780 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001781}
1782
Guido van Rossumf6971e21994-08-30 12:25:20 +00001783
1784static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001785PyCurses_IntrFlush(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001786{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001787 int ch;
1788
1789 PyCursesInitialised
1790
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001791 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001792 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001793 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001794 break;
1795 default:
1796 PyErr_SetString(PyExc_TypeError, "intrflush requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00001797 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001798 }
1799
1800 return PyCursesCheckERR(intrflush(NULL,ch), "intrflush");
1801}
1802
1803static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001804PyCurses_KeyName(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001805{
1806 const char *knp;
1807 int ch;
1808
1809 PyCursesInitialised
1810
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001811 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001812
1813 knp = keyname(ch);
1814
1815 return PyString_FromString((knp == NULL) ? "" : (char *)knp);
1816}
1817
1818static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001819PyCurses_KillChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001820{
1821 char ch;
1822
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001823 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001824
1825 ch = killchar();
1826
1827 return PyString_FromString(&ch);
1828}
1829
1830static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001831PyCurses_Meta(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001832{
1833 int ch;
1834
1835 PyCursesInitialised
1836
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001837 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001838 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001839 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001840 break;
1841 default:
1842 PyErr_SetString(PyExc_TypeError, "meta requires 1 argument");
1843 return NULL;
1844 }
1845
1846 return PyCursesCheckERR(meta(stdscr, ch), "meta");
1847}
1848
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001849#ifdef NCURSES_MOUSE_VERSION
1850static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001851PyCurses_MouseInterval(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001852{
1853 int interval;
1854 PyCursesInitialised
1855
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001856 if (!PyArg_Parse(args,"i;interval",&interval))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001857 return NULL;
1858 return PyCursesCheckERR(mouseinterval(interval), "mouseinterval");
1859}
1860
1861static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001862PyCurses_MouseMask(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001863{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00001864 int newmask;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001865 mmask_t oldmask, availmask;
1866
1867 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001868 if (!PyArg_Parse(args,"i;mousemask",&newmask))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001869 return NULL;
1870 availmask = mousemask(newmask, &oldmask);
1871 return Py_BuildValue("(ll)", (long)availmask, (long)oldmask);
1872}
1873#endif
1874
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001875static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001876PyCurses_NewPad(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001877{
1878 WINDOW *win;
1879 int nlines, ncols;
1880
1881 PyCursesInitialised
1882
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001883 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001884
1885 win = newpad(nlines, ncols);
1886
1887 if (win == NULL) {
1888 PyErr_SetString(PyCursesError, catchall_NULL);
1889 return NULL;
1890 }
1891
1892 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001893}
1894
1895static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001896PyCurses_NewWindow(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001897{
1898 WINDOW *win;
1899 int nlines, ncols, begin_y, begin_x;
Guido van Rossum85738471995-02-17 13:50:17 +00001900
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001901 PyCursesInitialised
1902
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001903 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +00001904 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001905 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols))
Guido van Rossum85738471995-02-17 13:50:17 +00001906 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001907 win = newpad(nlines, ncols);
Guido van Rossum85738471995-02-17 13:50:17 +00001908 break;
1909 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001910 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Guido van Rossumf6971e21994-08-30 12:25:20 +00001911 &nlines,&ncols,&begin_y,&begin_x))
Guido van Rossum85738471995-02-17 13:50:17 +00001912 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001913 win = newwin(nlines,ncols,begin_y,begin_x);
Guido van Rossum85738471995-02-17 13:50:17 +00001914 break;
1915 default:
1916 PyErr_SetString(PyExc_TypeError, "newwin requires 2 or 4 arguments");
1917 return NULL;
1918 }
1919
Guido van Rossumf6971e21994-08-30 12:25:20 +00001920 if (win == NULL) {
Guido van Rossum85738471995-02-17 13:50:17 +00001921 PyErr_SetString(PyCursesError, catchall_NULL);
1922 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +00001923 }
Guido van Rossum85738471995-02-17 13:50:17 +00001924
Guido van Rossumf6971e21994-08-30 12:25:20 +00001925 return (PyObject *)PyCursesWindow_New(win);
1926}
1927
1928static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001929PyCurses_Pair_Content(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001930{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001931 short pair,f,b;
1932
1933 PyCursesInitialised
1934 PyCursesInitialisedColor
1935
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001936 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001937 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001938 if (!PyArg_Parse(args, "h;pair", &pair)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001939 break;
1940 default:
1941 PyErr_SetString(PyExc_TypeError, "pair_content requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00001942 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001943 }
1944
1945 if (!pair_content(pair, &f, &b)) {
1946 PyErr_SetString(PyCursesError,
1947 "Argument 1 was out of range. (1..COLOR_PAIRS-1)");
1948 return NULL;
1949 }
1950
1951 return Py_BuildValue("(ii)", f, b);
1952}
1953
1954static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001955PyCurses_pair_number(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001956{
1957 int n;
1958
1959 PyCursesInitialised
1960 PyCursesInitialisedColor
1961
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001962 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001963 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001964 if (!PyArg_Parse(args, "i;pairvalue", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001965 break;
1966 default:
1967 PyErr_SetString(PyExc_TypeError,
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001968 "pair_number requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001969 return NULL;
1970 }
1971
1972 return PyInt_FromLong((long) ((n & A_COLOR) >> 8));
1973}
1974
1975static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001976PyCurses_Putp(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001977{
1978 char *str;
1979
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001980 if (!PyArg_Parse(args,"s;str", &str)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001981 return PyCursesCheckERR(putp(str), "putp");
1982}
1983
1984static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001985PyCurses_QiFlush(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001986{
1987 int flag = 0;
1988
1989 PyCursesInitialised
1990
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001991 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001992 case 0:
1993 qiflush();
1994 Py_INCREF(Py_None);
1995 return Py_None;
1996 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001997 if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001998 if (flag) qiflush();
1999 else noqiflush();
2000 Py_INCREF(Py_None);
2001 return Py_None;
2002 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002003 PyErr_SetString(PyExc_TypeError, "qiflush requires 0 or 1 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002004 return NULL;
2005 }
2006}
2007
2008static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002009PyCurses_setsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002010{
2011 int y,x;
2012
2013 PyCursesInitialised
2014
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002015 if (ARG_COUNT(args)!=2) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002016 PyErr_SetString(PyExc_TypeError, "setsyx requires 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002017 return NULL;
2018 }
2019
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002020 if (!PyArg_Parse(args, "(ii);y, x", &y, &x)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002021
2022 setsyx(y,x);
2023
Guido van Rossumf6971e21994-08-30 12:25:20 +00002024 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00002025 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002026}
2027
2028static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002029PyCurses_Start_Color(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002030{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002031 int code;
2032 PyObject *c, *cp;
2033
2034 PyCursesInitialised
2035
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002036 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002037
2038 code = start_color();
2039 if (code != ERR) {
2040 initialisedcolors = TRUE;
2041 c = PyInt_FromLong((long) COLORS);
2042 PyDict_SetItemString(ModDict, "COLORS", c);
2043 Py_DECREF(c);
2044 cp = PyInt_FromLong((long) COLOR_PAIRS);
2045 PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp);
2046 Py_DECREF(cp);
2047 Py_INCREF(Py_None);
2048 return Py_None;
2049 } else {
2050 PyErr_SetString(PyCursesError, "start_color() returned ERR");
Guido van Rossum85738471995-02-17 13:50:17 +00002051 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002052 }
2053}
2054
2055static PyObject *
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002056PyCurses_tigetflag(PyObject *self, PyObject *args)
2057{
2058 char *capname;
2059
2060 PyCursesInitialised;
2061
2062 if (!PyArg_ParseTuple(args, "z", &capname))
2063 return NULL;
2064
2065 return PyInt_FromLong( (long) tigetflag( capname ) );
2066}
2067
2068static PyObject *
2069PyCurses_tigetnum(PyObject *self, PyObject *args)
2070{
2071 char *capname;
2072
2073 PyCursesInitialised;
2074
2075 if (!PyArg_ParseTuple(args, "z", &capname))
2076 return NULL;
2077
2078 return PyInt_FromLong( (long) tigetnum( capname ) );
2079}
2080
2081static PyObject *
2082PyCurses_tigetstr(PyObject *self, PyObject *args)
2083{
2084 char *capname;
2085
2086 PyCursesInitialised;
2087
2088 if (!PyArg_ParseTuple(args, "z", &capname))
2089 return NULL;
2090
2091 capname = tigetstr( capname );
2092 if (capname == 0 || capname == (char*) -1) {
2093 Py_INCREF(Py_None);
2094 return Py_None;
2095 }
2096 return PyString_FromString( capname );
2097}
2098
2099static PyObject *
Andrew M. Kuchlingf16e0ed2000-11-07 03:35:24 +00002100PyCurses_tparm(PyObject *self, PyObject *args)
2101{
2102 char* fmt;
2103 char* result = NULL;
2104 int i1,i2,i3,i4,i5,i6,i7,i8,i9;
2105
2106 PyCursesInitialised;
2107
2108 if (!PyArg_ParseTuple(args, "s|iiiiiiiii:tparm",
2109 &fmt, &i1, &i2, &i3, &i4,
2110 &i5, &i6, &i7, &i8, &i9)) {
2111 return NULL;
2112 }
2113
2114 switch (PyTuple_GET_SIZE(args)) {
2115 case 1:
2116 result = tparm(fmt);
2117 break;
2118 case 2:
2119 result = tparm(fmt,i1);
2120 break;
2121 case 3:
2122 result = tparm(fmt,i1,i2);
2123 break;
2124 case 4:
2125 result = tparm(fmt,i1,i2,i3);
2126 break;
2127 case 5:
2128 result = tparm(fmt,i1,i2,i3,i4);
2129 break;
2130 case 6:
2131 result = tparm(fmt,i1,i2,i3,i4,i5);
2132 break;
2133 case 7:
2134 result = tparm(fmt,i1,i2,i3,i4,i5,i6);
2135 break;
2136 case 8:
2137 result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7);
2138 break;
2139 case 9:
2140 result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7,i8);
2141 break;
2142 case 10:
2143 result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7,i8,i9);
2144 break;
2145 }
2146
2147 return PyString_FromString(result);
2148}
2149
2150static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002151PyCurses_TypeAhead(PyObject *self, PyObject *args)
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002152{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002153 int fd;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002154
2155 PyCursesInitialised
2156
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002157 if (!PyArg_Parse(args,"i;fd",&fd)) return NULL;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002158
2159 PyCursesCheckERR(typeahead( fd ), "typeahead");
2160 Py_INCREF(Py_None);
2161 return Py_None;
2162}
2163
2164static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002165PyCurses_UnCtrl(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002166{
2167 PyObject *temp;
2168 chtype ch;
2169
2170 PyCursesInitialised
2171
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002172 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002173
2174 if (PyInt_Check(temp))
2175 ch = (chtype) PyInt_AsLong(temp);
2176 else if (PyString_Check(temp))
2177 ch = (chtype) *PyString_AsString(temp);
2178 else {
2179 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
2180 return NULL;
2181 }
2182
2183 return PyString_FromString(unctrl(ch));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002184}
2185
2186static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002187PyCurses_UngetCh(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002188{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002189 PyObject *temp;
2190 chtype ch;
2191
2192 PyCursesInitialised
2193
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002194 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002195
2196 if (PyInt_Check(temp))
2197 ch = (chtype) PyInt_AsLong(temp);
2198 else if (PyString_Check(temp))
2199 ch = (chtype) *PyString_AsString(temp);
2200 else {
2201 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +00002202 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002203 }
2204
Guido van Rossum85738471995-02-17 13:50:17 +00002205 return PyCursesCheckERR(ungetch(ch), "ungetch");
Guido van Rossumf6971e21994-08-30 12:25:20 +00002206}
2207
2208static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002209PyCurses_Use_Env(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002210{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002211 int flag;
2212
2213 PyCursesInitialised
2214
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002215 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002216 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002217 if (!PyArg_Parse(args,"i;True(1), False(0)",&flag))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002218 return NULL;
2219 break;
2220 default:
2221 PyErr_SetString(PyExc_TypeError, "use_env requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00002222 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002223 }
2224 use_env(flag);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002225 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00002226 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002227}
2228
Guido van Rossumf6971e21994-08-30 12:25:20 +00002229/* List of functions defined in the module */
2230
2231static PyMethodDef PyCurses_methods[] = {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002232 {"baudrate", (PyCFunction)PyCurses_baudrate},
2233 {"beep", (PyCFunction)PyCurses_beep},
2234 {"can_change_color", (PyCFunction)PyCurses_can_change_color},
2235 {"cbreak", (PyCFunction)PyCurses_cbreak},
2236 {"color_content", (PyCFunction)PyCurses_Color_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002237 {"color_pair", (PyCFunction)PyCurses_color_pair},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002238 {"curs_set", (PyCFunction)PyCurses_Curs_Set},
2239 {"def_prog_mode", (PyCFunction)PyCurses_def_prog_mode},
2240 {"def_shell_mode", (PyCFunction)PyCurses_def_shell_mode},
2241 {"delay_output", (PyCFunction)PyCurses_Delay_Output},
2242 {"doupdate", (PyCFunction)PyCurses_doupdate},
2243 {"echo", (PyCFunction)PyCurses_echo},
2244 {"endwin", (PyCFunction)PyCurses_endwin},
2245 {"erasechar", (PyCFunction)PyCurses_EraseChar},
2246 {"filter", (PyCFunction)PyCurses_filter},
2247 {"flash", (PyCFunction)PyCurses_flash},
2248 {"flushinp", (PyCFunction)PyCurses_flushinp},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002249#ifdef NCURSES_MOUSE_VERSION
2250 {"getmouse", (PyCFunction)PyCurses_GetMouse},
2251 {"ungetmouse", (PyCFunction)PyCurses_UngetMouse, METH_VARARGS},
2252#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002253 {"getsyx", (PyCFunction)PyCurses_getsyx},
2254 {"getwin", (PyCFunction)PyCurses_GetWin},
2255 {"has_colors", (PyCFunction)PyCurses_has_colors},
2256 {"has_ic", (PyCFunction)PyCurses_has_ic},
2257 {"has_il", (PyCFunction)PyCurses_has_il},
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00002258#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002259 {"has_key", (PyCFunction)PyCurses_has_key},
Guido van Rossumf6971e21994-08-30 12:25:20 +00002260#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002261 {"halfdelay", (PyCFunction)PyCurses_HalfDelay},
2262 {"init_color", (PyCFunction)PyCurses_Init_Color},
2263 {"init_pair", (PyCFunction)PyCurses_Init_Pair},
2264 {"initscr", (PyCFunction)PyCurses_InitScr},
2265 {"intrflush", (PyCFunction)PyCurses_IntrFlush},
2266 {"isendwin", (PyCFunction)PyCurses_isendwin},
2267 {"keyname", (PyCFunction)PyCurses_KeyName},
2268 {"killchar", (PyCFunction)PyCurses_KillChar},
2269 {"longname", (PyCFunction)PyCurses_longname},
2270 {"meta", (PyCFunction)PyCurses_Meta},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002271#ifdef NCURSES_MOUSE_VERSION
2272 {"mouseinterval", (PyCFunction)PyCurses_MouseInterval},
2273 {"mousemask", (PyCFunction)PyCurses_MouseMask},
2274#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002275 {"newpad", (PyCFunction)PyCurses_NewPad},
2276 {"newwin", (PyCFunction)PyCurses_NewWindow},
2277 {"nl", (PyCFunction)PyCurses_nl},
2278 {"nocbreak", (PyCFunction)PyCurses_nocbreak},
2279 {"noecho", (PyCFunction)PyCurses_noecho},
2280 {"nonl", (PyCFunction)PyCurses_nonl},
2281 {"noqiflush", (PyCFunction)PyCurses_noqiflush},
2282 {"noraw", (PyCFunction)PyCurses_noraw},
2283 {"pair_content", (PyCFunction)PyCurses_Pair_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002284 {"pair_number", (PyCFunction)PyCurses_pair_number},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002285 {"putp", (PyCFunction)PyCurses_Putp},
2286 {"qiflush", (PyCFunction)PyCurses_QiFlush},
2287 {"raw", (PyCFunction)PyCurses_raw},
2288 {"reset_prog_mode", (PyCFunction)PyCurses_reset_prog_mode},
2289 {"reset_shell_mode", (PyCFunction)PyCurses_reset_shell_mode},
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002290 {"resetty", (PyCFunction)PyCurses_resetty},
2291 {"savetty", (PyCFunction)PyCurses_savetty},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002292 {"setsyx", (PyCFunction)PyCurses_setsyx},
2293 {"start_color", (PyCFunction)PyCurses_Start_Color},
2294 {"termattrs", (PyCFunction)PyCurses_termattrs},
2295 {"termname", (PyCFunction)PyCurses_termname},
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002296 {"tigetflag", (PyCFunction)PyCurses_tigetflag, METH_VARARGS},
2297 {"tigetnum", (PyCFunction)PyCurses_tigetnum, METH_VARARGS},
2298 {"tigetstr", (PyCFunction)PyCurses_tigetstr, METH_VARARGS},
Andrew M. Kuchlingf16e0ed2000-11-07 03:35:24 +00002299 {"tparm", (PyCFunction)PyCurses_tparm, METH_VARARGS},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002300 {"typeahead", (PyCFunction)PyCurses_TypeAhead},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002301 {"unctrl", (PyCFunction)PyCurses_UnCtrl},
2302 {"ungetch", (PyCFunction)PyCurses_UngetCh},
2303 {"use_env", (PyCFunction)PyCurses_Use_Env},
2304 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00002305};
2306
2307/* Initialization function for the module */
2308
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002309void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00002310init_curses(void)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002311{
Guido van Rossum8fbf82b1995-02-17 13:54:04 +00002312 PyObject *m, *d, *v;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002313
2314 /* Create the module and add the functions */
Andrew M. Kuchlingb7f198e2000-06-10 23:12:32 +00002315 m = Py_InitModule("_curses", PyCurses_methods);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002316
Guido van Rossumf6971e21994-08-30 12:25:20 +00002317 /* Add some symbolic constants to the module */
2318 d = PyModule_GetDict(m);
Guido van Rossume4485b01994-09-07 14:32:49 +00002319 ModDict = d; /* For PyCurses_InitScr */
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002320
Guido van Rossum85738471995-02-17 13:50:17 +00002321 /* For exception curses.error */
Fred Drake589c35b2000-07-06 19:38:49 +00002322 PyCursesError = PyErr_NewException("_curses.error", NULL, NULL);
Guido van Rossum85738471995-02-17 13:50:17 +00002323 PyDict_SetItemString(d, "error", PyCursesError);
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002324
Guido van Rossum85738471995-02-17 13:50:17 +00002325 /* Make the version available */
Guido van Rossum8fbf82b1995-02-17 13:54:04 +00002326 v = PyString_FromString(PyCursesVersion);
2327 PyDict_SetItemString(d, "version", v);
2328 PyDict_SetItemString(d, "__version__", v);
2329 Py_DECREF(v);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002330
Guido van Rossumf6971e21994-08-30 12:25:20 +00002331 /* Here are some attributes you can add to chars to print */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002332
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002333 SetDictInt("A_ATTRIBUTES", A_ATTRIBUTES);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002334 SetDictInt("A_NORMAL", A_NORMAL);
2335 SetDictInt("A_STANDOUT", A_STANDOUT);
2336 SetDictInt("A_UNDERLINE", A_UNDERLINE);
2337 SetDictInt("A_REVERSE", A_REVERSE);
2338 SetDictInt("A_BLINK", A_BLINK);
2339 SetDictInt("A_DIM", A_DIM);
2340 SetDictInt("A_BOLD", A_BOLD);
2341 SetDictInt("A_ALTCHARSET", A_ALTCHARSET);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002342 SetDictInt("A_INVIS", A_INVIS);
2343 SetDictInt("A_PROTECT", A_PROTECT);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002344 SetDictInt("A_CHARTEXT", A_CHARTEXT);
2345 SetDictInt("A_COLOR", A_COLOR);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002346
2347 /* The following are never available with strict SYSV curses */
2348#ifdef A_HORIZONTAL
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002349 SetDictInt("A_HORIZONTAL", A_HORIZONTAL);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002350#endif
2351#ifdef A_LEFT
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002352 SetDictInt("A_LEFT", A_LEFT);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002353#endif
2354#ifdef A_LOW
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002355 SetDictInt("A_LOW", A_LOW);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002356#endif
2357#ifdef A_RIGHT
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002358 SetDictInt("A_RIGHT", A_RIGHT);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002359#endif
2360#ifdef A_TOP
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002361 SetDictInt("A_TOP", A_TOP);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002362#endif
2363#ifdef A_VERTICAL
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002364 SetDictInt("A_VERTICAL", A_VERTICAL);
2365#endif
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002366
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002367 SetDictInt("COLOR_BLACK", COLOR_BLACK);
2368 SetDictInt("COLOR_RED", COLOR_RED);
2369 SetDictInt("COLOR_GREEN", COLOR_GREEN);
2370 SetDictInt("COLOR_YELLOW", COLOR_YELLOW);
2371 SetDictInt("COLOR_BLUE", COLOR_BLUE);
2372 SetDictInt("COLOR_MAGENTA", COLOR_MAGENTA);
2373 SetDictInt("COLOR_CYAN", COLOR_CYAN);
2374 SetDictInt("COLOR_WHITE", COLOR_WHITE);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002375
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002376#ifdef NCURSES_MOUSE_VERSION
2377 /* Mouse-related constants */
2378 SetDictInt("BUTTON1_PRESSED", BUTTON1_PRESSED);
2379 SetDictInt("BUTTON1_RELEASED", BUTTON1_RELEASED);
2380 SetDictInt("BUTTON1_CLICKED", BUTTON1_CLICKED);
2381 SetDictInt("BUTTON1_DOUBLE_CLICKED", BUTTON1_DOUBLE_CLICKED);
2382 SetDictInt("BUTTON1_TRIPLE_CLICKED", BUTTON1_TRIPLE_CLICKED);
2383
2384 SetDictInt("BUTTON2_PRESSED", BUTTON2_PRESSED);
2385 SetDictInt("BUTTON2_RELEASED", BUTTON2_RELEASED);
2386 SetDictInt("BUTTON2_CLICKED", BUTTON2_CLICKED);
2387 SetDictInt("BUTTON2_DOUBLE_CLICKED", BUTTON2_DOUBLE_CLICKED);
2388 SetDictInt("BUTTON2_TRIPLE_CLICKED", BUTTON2_TRIPLE_CLICKED);
2389
2390 SetDictInt("BUTTON3_PRESSED", BUTTON3_PRESSED);
2391 SetDictInt("BUTTON3_RELEASED", BUTTON3_RELEASED);
2392 SetDictInt("BUTTON3_CLICKED", BUTTON3_CLICKED);
2393 SetDictInt("BUTTON3_DOUBLE_CLICKED", BUTTON3_DOUBLE_CLICKED);
2394 SetDictInt("BUTTON3_TRIPLE_CLICKED", BUTTON3_TRIPLE_CLICKED);
2395
2396 SetDictInt("BUTTON4_PRESSED", BUTTON4_PRESSED);
2397 SetDictInt("BUTTON4_RELEASED", BUTTON4_RELEASED);
2398 SetDictInt("BUTTON4_CLICKED", BUTTON4_CLICKED);
2399 SetDictInt("BUTTON4_DOUBLE_CLICKED", BUTTON4_DOUBLE_CLICKED);
2400 SetDictInt("BUTTON4_TRIPLE_CLICKED", BUTTON4_TRIPLE_CLICKED);
2401
2402 SetDictInt("BUTTON_SHIFT", BUTTON_SHIFT);
2403 SetDictInt("BUTTON_CTRL", BUTTON_CTRL);
2404 SetDictInt("BUTTON_ALT", BUTTON_ALT);
2405
2406 SetDictInt("ALL_MOUSE_EVENTS", ALL_MOUSE_EVENTS);
2407 SetDictInt("REPORT_MOUSE_POSITION", REPORT_MOUSE_POSITION);
2408#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +00002409 /* Now set everything up for KEY_ variables */
2410 {
2411 int key;
2412 char *key_n;
2413 char *key_n2;
2414 for (key=KEY_MIN;key < KEY_MAX; key++) {
2415 key_n = (char *)keyname(key);
Guido van Rossumf5c6d471995-02-07 15:38:32 +00002416 if (key_n == NULL || strcmp(key_n,"UNKNOWN KEY")==0)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002417 continue;
2418 if (strncmp(key_n,"KEY_F(",6)==0) {
2419 char *p1, *p2;
2420 key_n2 = malloc(strlen(key_n)+1);
2421 p1 = key_n;
2422 p2 = key_n2;
2423 while (*p1) {
2424 if (*p1 != '(' && *p1 != ')') {
2425 *p2 = *p1;
2426 p2++;
2427 }
2428 p1++;
2429 }
2430 *p2 = (char)0;
2431 } else
2432 key_n2 = key_n;
Guido van Rossum85738471995-02-17 13:50:17 +00002433 PyDict_SetItemString(d,key_n2,PyInt_FromLong((long) key));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002434 if (key_n2 != key_n)
2435 free(key_n2);
2436 }
Guido van Rossum85738471995-02-17 13:50:17 +00002437 SetDictInt("KEY_MIN", KEY_MIN);
2438 SetDictInt("KEY_MAX", KEY_MAX);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002439 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00002440}