blob: 3aa3f312c108a98dd168746d366cb0f888636d69 [file] [log] [blame]
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001/*
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002 * This is a curses module for Python.
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00003 *
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00004 * Based on prior work by Lance Ellinghaus and Oliver Andrich
5 * Version 1.2 of this module: Copyright 1994 by Lance Ellinghouse,
6 * Cathedral City, California Republic, United States of America.
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00007 *
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00008 * Version 1.5b1, heavily extended for ncurses by Oliver Andrich:
9 * Copyright 1996,1997 by Oliver Andrich, Koblenz, Germany.
10 *
11 * Tidied for Python 1.6, and currently maintained by AMK (amk1@bigfoot.com)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000012 *
13 * Permission is hereby granted, free of charge, to any person obtaining
14 * a copy of this source file to use, copy, modify, merge, or publish it
15 * subject to the following conditions:
16 *
17 * The above copyright notice and this permission notice shall be included
18 * in all copies or in any new file that contains a substantial portion of
19 * this file.
20 *
21 * THE AUTHOR MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF
22 * THE SOFTWARE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT
23 * EXPRESS OR IMPLIED WARRANTY. THE AUTHOR DISCLAIMS ALL WARRANTIES
24 * WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
25 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 * NON-INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
27 * AUTHOR BE LIABLE TO YOU OR ANY OTHER PARTY FOR ANY SPECIAL,
28 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
29 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE, STRICT LIABILITY OR
30 * ANY OTHER ACTION ARISING OUT OF OR IN CONNECTION WITH THE USE OR
31 * PERFORMANCE OF THIS SOFTWARE.
32 */
Guido van Rossumf6971e21994-08-30 12:25:20 +000033
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000034/* CVS: $Id$ */
Guido van Rossumf6971e21994-08-30 12:25:20 +000035
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000036/* Release Number */
Guido van Rossumf6971e21994-08-30 12:25:20 +000037
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +000038char *PyCursesVersion = "1.6";
Guido van Rossumf6971e21994-08-30 12:25:20 +000039
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000040/* Includes */
Guido van Rossumf6971e21994-08-30 12:25:20 +000041
Guido van Rossum602099a1994-09-14 13:32:22 +000042#include "Python.h"
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000043
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000044#ifdef __osf__
45#define _XOPEN_SOURCE_EXTENDED /* Define macro for OSF/1 */
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +000046#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000047#endif
48
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +000049#ifdef HAVE_NCURSES_H
50#include <ncurses.h>
51#else
52#include <curses.h>
53#endif
54
55#if defined(__sgi__) || defined(__sun__)
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +000056#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +000057typedef chtype attr_t; /* No attr_t type is available */
Guido van Rossum1266a011996-02-25 04:50:31 +000058#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +000059
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000060/* Definition of exception curses.error */
Guido van Rossumf6971e21994-08-30 12:25:20 +000061
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000062static PyObject *PyCursesError;
Guido van Rossumf6971e21994-08-30 12:25:20 +000063
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000064/* general error messages */
Guido van Rossum85738471995-02-17 13:50:17 +000065static char *catchall_ERR = "curses function returned ERR";
66static char *catchall_NULL = "curses function returned NULL";
67
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000068/* Tells whether initscr() has been called to initialise curses. */
Guido van Rossum585c6dc1995-02-24 13:45:43 +000069static int initialised = FALSE;
70
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000071/* Tells whether start_color() has been called to initialise colorusage. */
72static int initialisedcolors = FALSE;
73
74/* Utility Macros */
Guido van Rossum85738471995-02-17 13:50:17 +000075#define ARG_COUNT(X) \
76 (((X) == NULL) ? 0 : (PyTuple_Check(X) ? PyTuple_Size(X) : 1))
Guido van Rossumf6971e21994-08-30 12:25:20 +000077
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000078#define PyCursesInitialised \
79 if (initialised != TRUE) { \
80 PyErr_SetString(PyCursesError, \
81 "must call initscr() first"); \
82 return NULL; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +000083
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000084#define PyCursesInitialisedColor \
85 if (initialisedcolors != TRUE) { \
86 PyErr_SetString(PyCursesError, \
87 "must call start_color() first"); \
88 return NULL; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +000089
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000090/* Utility Functions */
Guido van Rossumfbea2f31994-08-31 22:05:27 +000091
Guido van Rossum85738471995-02-17 13:50:17 +000092/*
93 * Check the return code from a curses function and return None
94 * or raise an exception as appropriate.
95 */
96
97static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +000098PyCursesCheckERR(int code, char *fname)
Guido van Rossum85738471995-02-17 13:50:17 +000099{
Guido van Rossum85738471995-02-17 13:50:17 +0000100 if (code != ERR) {
101 Py_INCREF(Py_None);
102 return Py_None;
103 } else {
104 if (fname == NULL) {
105 PyErr_SetString(PyCursesError, catchall_ERR);
106 } else {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000107 PyErr_Format(PyCursesError, "%s() returned ERR", fname);
Guido van Rossum85738471995-02-17 13:50:17 +0000108 }
109 return NULL;
110 }
111}
112
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000113static int
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000114PyCurses_ConvertToChtype(PyObject *obj, chtype *ch)
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000115{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000116 if (PyInt_Check(obj)) {
117 *ch = (chtype) PyInt_AsLong(obj);
118 } else if(PyString_Check(obj) &
119 (PyString_Size(obj) == 1)) {
120 *ch = (chtype) *PyString_AsString(obj);
121 } else {
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000122 return 0;
123 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000124 return 1;
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000125}
126
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000127/*****************************************************************************
128 The Window Object
129******************************************************************************/
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000130
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000131/* Definition of the window object and window type */
Guido van Rossum85738471995-02-17 13:50:17 +0000132
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000133typedef struct {
134 PyObject_HEAD
135 WINDOW *win;
136} PyCursesWindowObject;
Guido van Rossum85738471995-02-17 13:50:17 +0000137
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000138PyTypeObject PyCursesWindow_Type;
139
140#define PyCursesWindow_Check(v) ((v)->ob_type == &PyCursesWindow_Type)
141
142/* Function Prototype Macros - They are ugly but very, very useful. ;-)
143
144 X - function name
145 TYPE - parameter Type
146 ERGSTR - format string for construction of the return value
147 PARSESTR - format string for argument parsing
148 */
149
150#define Window_NoArgNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000151static PyObject *PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
152{ if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000153 return PyCursesCheckERR(X(self->win), # X); }
154
155#define Window_NoArgTrueFalseFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000156static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000157{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000158 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000159 if (X (self->win) == FALSE) { Py_INCREF(Py_False); return Py_False; } \
160 else { Py_INCREF(Py_True); return Py_True; } }
161
162#define Window_NoArgNoReturnVoidFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000163static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000164{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000165 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000166 X(self->win); Py_INCREF(Py_None); return Py_None; }
167
168#define Window_NoArg2TupleReturnFunction(X, TYPE, ERGSTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000169static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000170{ \
171 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000172 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000173 X(self->win,arg1,arg2); return Py_BuildValue(ERGSTR, arg1, arg2); }
174
175#define Window_OneArgNoReturnVoidFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000176static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000177{ \
178 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000179 if (!PyArg_Parse(args, PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000180 X(self->win,arg1); Py_INCREF(Py_None); return Py_None; }
181
182#define Window_OneArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000183static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000184{ \
185 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000186 if (!PyArg_Parse(args,PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000187 return PyCursesCheckERR(X(self->win, arg1), # X); }
188
189#define Window_TwoArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000190static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000191{ \
192 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000193 if (!PyArg_Parse(args,PARSESTR, &arg1, &arg2)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000194 return PyCursesCheckERR(X(self->win, arg1, arg2), # X); }
Guido van Rossum85738471995-02-17 13:50:17 +0000195
Guido van Rossumf6971e21994-08-30 12:25:20 +0000196/* ------------- WINDOW routines --------------- */
Guido van Rossum85738471995-02-17 13:50:17 +0000197
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000198Window_NoArgNoReturnFunction(untouchwin)
199Window_NoArgNoReturnFunction(touchwin)
200Window_NoArgNoReturnFunction(redrawwin)
201Window_NoArgNoReturnFunction(winsertln)
202Window_NoArgNoReturnFunction(werase)
203Window_NoArgNoReturnFunction(wdeleteln)
204
205Window_NoArgTrueFalseFunction(is_wintouched)
206
207Window_NoArgNoReturnVoidFunction(wsyncup)
208Window_NoArgNoReturnVoidFunction(wsyncdown)
209Window_NoArgNoReturnVoidFunction(wstandend)
210Window_NoArgNoReturnVoidFunction(wstandout)
211Window_NoArgNoReturnVoidFunction(wcursyncup)
212Window_NoArgNoReturnVoidFunction(wclrtoeol)
213Window_NoArgNoReturnVoidFunction(wclrtobot)
214Window_NoArgNoReturnVoidFunction(wclear)
215
216Window_OneArgNoReturnVoidFunction(idcok, int, "i;True(1) or False(0)")
217Window_OneArgNoReturnVoidFunction(immedok, int, "i;True(1) or False(0)")
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +0000218Window_OneArgNoReturnVoidFunction(wtimeout, int, "i;delay")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000219
220Window_NoArg2TupleReturnFunction(getyx, int, "(ii)")
221Window_NoArg2TupleReturnFunction(getbegyx, int, "(ii)")
222Window_NoArg2TupleReturnFunction(getmaxyx, int, "(ii)")
223Window_NoArg2TupleReturnFunction(getparyx, int, "(ii)")
224
225Window_OneArgNoReturnFunction(wattron, attr_t, "l;attr")
226Window_OneArgNoReturnFunction(wattroff, attr_t, "l;attr")
227Window_OneArgNoReturnFunction(wattrset, attr_t, "l;attr")
228Window_OneArgNoReturnFunction(clearok, int, "i;True(1) or False(0)")
229Window_OneArgNoReturnFunction(idlok, int, "i;True(1) or False(0)")
230Window_OneArgNoReturnFunction(keypad, int, "i;True(1) or False(0)")
231Window_OneArgNoReturnFunction(leaveok, int, "i;True(1) or False(0)")
232Window_OneArgNoReturnFunction(nodelay, int, "i;True(1) or False(0)")
233Window_OneArgNoReturnFunction(notimeout, int, "i;True(1) or False(0)")
234Window_OneArgNoReturnFunction(scrollok, int, "i;True(1) or False(0)")
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000235Window_OneArgNoReturnFunction(winsdelln, int, "i;nlines")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000236Window_OneArgNoReturnFunction(syncok, int, "i;True(1) or False(0)")
237
238Window_TwoArgNoReturnFunction(mvwin, int, "(ii);y,x")
239Window_TwoArgNoReturnFunction(mvderwin, int, "(ii);y,x")
240Window_TwoArgNoReturnFunction(wmove, int, "(ii);y,x")
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000241#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000242Window_TwoArgNoReturnFunction(wresize, int, "(ii);lines,columns")
243#endif
244
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000245/* Allocation and deallocation of Window Objects */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000246
Guido van Rossumf6971e21994-08-30 12:25:20 +0000247static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000248PyCursesWindow_New(WINDOW *win)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000249{
250 PyCursesWindowObject *wo;
Guido van Rossum85738471995-02-17 13:50:17 +0000251
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000252 wo = PyObject_NEW(PyCursesWindowObject, &PyCursesWindow_Type);
253 if (wo == NULL) return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000254 wo->win = win;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000255 return (PyObject *)wo;
256}
257
258static void
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000259PyCursesWindow_Dealloc(PyCursesWindowObject *wo)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000260{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000261 if (wo->win != stdscr) delwin(wo->win);
262 PyMem_DEL(wo);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000263}
264
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000265/* Addch, Addstr, Addnstr */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000266
267static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000268PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000269{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000270 int rtn, x, y, use_xy = FALSE;
271 PyObject *temp;
272 chtype ch = 0;
273 attr_t attr = A_NORMAL;
274
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000275 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000276 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000277 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000278 return NULL;
279 break;
280 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000281 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000282 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000283 break;
284 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000285 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000286 return NULL;
287 use_xy = TRUE;
288 break;
289 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000290 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000291 &y, &x, &temp, &attr))
292 return NULL;
293 use_xy = TRUE;
294 break;
295 default:
296 PyErr_SetString(PyExc_TypeError, "addch requires 1 or 4 arguments");
297 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000298 }
Guido van Rossum85738471995-02-17 13:50:17 +0000299
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000300 if (!PyCurses_ConvertToChtype(temp, &ch)) {
301 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
302 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000303 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000304
Guido van Rossumf6971e21994-08-30 12:25:20 +0000305 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000306 rtn = mvwaddch(self->win,y,x, ch | attr);
307 else {
308 rtn = waddch(self->win, ch | attr);
309 }
310 return PyCursesCheckERR(rtn, "addch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000311}
312
313static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000314PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000315{
316 int rtn;
317 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000318 char *str;
319 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
320 int use_xy = FALSE, use_attr = FALSE;
Guido van Rossum85738471995-02-17 13:50:17 +0000321
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000322 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000323 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000324 if (!PyArg_Parse(args,"s;str", &str))
Guido van Rossum85738471995-02-17 13:50:17 +0000325 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000326 break;
327 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000328 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000329 return NULL;
330 use_attr = TRUE;
331 break;
332 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000333 if (!PyArg_Parse(args,"(iis);int,int,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000334 return NULL;
335 use_xy = TRUE;
336 break;
337 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000338 if (!PyArg_Parse(args,"(iisl);int,int,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000339 return NULL;
340 use_xy = use_attr = TRUE;
341 break;
342 default:
343 PyErr_SetString(PyExc_TypeError, "addstr requires 1 to 4 arguments");
344 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000345 }
Guido van Rossum85738471995-02-17 13:50:17 +0000346
Guido van Rossumf6971e21994-08-30 12:25:20 +0000347 if (use_attr == TRUE) {
348 attr_old = getattrs(self->win);
349 wattrset(self->win,attr);
350 }
351 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000352 rtn = mvwaddstr(self->win,y,x,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000353 else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000354 rtn = waddstr(self->win,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000355 if (use_attr == TRUE)
356 wattrset(self->win,attr_old);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000357 return PyCursesCheckERR(rtn, "addstr");
358}
Guido van Rossum85738471995-02-17 13:50:17 +0000359
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000360static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000361PyCursesWindow_AddNStr(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000362{
363 int rtn, x, y, n;
364 char *str;
365 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
366 int use_xy = FALSE, use_attr = FALSE;
367
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000368 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000369 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000370 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000371 return NULL;
372 break;
373 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000374 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000375 return NULL;
376 use_attr = TRUE;
377 break;
378 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000379 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000380 return NULL;
381 use_xy = TRUE;
382 break;
383 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000384 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000385 return NULL;
386 use_xy = use_attr = TRUE;
387 break;
388 default:
389 PyErr_SetString(PyExc_TypeError, "addnstr requires 2 to 5 arguments");
390 return NULL;
391 }
392
393 if (use_attr == TRUE) {
394 attr_old = getattrs(self->win);
395 wattrset(self->win,attr);
396 }
397 if (use_xy == TRUE)
398 rtn = mvwaddnstr(self->win,y,x,str,n);
399 else
400 rtn = waddnstr(self->win,str,n);
401 if (use_attr == TRUE)
402 wattrset(self->win,attr_old);
403 return PyCursesCheckERR(rtn, "addnstr");
404}
405
406static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000407PyCursesWindow_Bkgd(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000408{
409 PyObject *temp;
410 chtype bkgd;
411 attr_t attr = A_NORMAL;
412
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000413 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000414 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000415 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000416 return NULL;
417 break;
418 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000419 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000420 return NULL;
421 break;
422 default:
423 PyErr_SetString(PyExc_TypeError, "bkgd requires 1 or 2 arguments");
424 return NULL;
425 }
426
427 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
428 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
429 return NULL;
430 }
431
432 return PyCursesCheckERR(wbkgd(self->win, bkgd | A_NORMAL), "bkgd");
433}
434
435static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000436PyCursesWindow_BkgdSet(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000437{
438 PyObject *temp;
439 chtype bkgd;
440 attr_t attr = A_NORMAL;
441
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000442 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000443 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000444 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000445 return NULL;
446 break;
447 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000448 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000449 return NULL;
450 break;
451 default:
452 PyErr_SetString(PyExc_TypeError, "bkgdset requires 1 or 2 arguments");
453 return NULL;
454 }
455
456 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000457 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000458 return NULL;
459 }
460
461 wbkgdset(self->win, bkgd | attr);
462 return PyCursesCheckERR(0, "bkgdset");
463}
464
465static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000466PyCursesWindow_Border(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000467{
468 chtype ls, rs, ts, bs, tl, tr, bl, br;
469 ls = rs = ts = bs = tl = tr = bl = br = 0;
470 if (!PyArg_Parse(args,"|llllllll;ls,rs,ts,bs,tl,tr,bl,br",
471 &ls, &rs, &ts, &bs, &tl, &tr, &bl, &br))
472 return NULL;
473 wborder(self->win, ls, rs, ts, bs, tl, tr, bl, br);
474 Py_INCREF(Py_None);
475 return Py_None;
476}
477
478static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000479PyCursesWindow_Box(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000480{
481 chtype ch1=0,ch2=0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000482 if (!PyArg_NoArgs(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000483 PyErr_Clear();
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000484 if (!PyArg_Parse(args,"(ll);vertint,horint", &ch1, &ch2))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000485 return NULL;
486 }
487 box(self->win,ch1,ch2);
488 Py_INCREF(Py_None);
489 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000490}
491
492static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000493PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000494{
495 int rtn;
496 int x, y;
Guido van Rossum85738471995-02-17 13:50:17 +0000497
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000498 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000499 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000500 rtn = wdelch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000501 break;
502 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000503 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Guido van Rossum85738471995-02-17 13:50:17 +0000504 return NULL;
505 rtn = mvwdelch(self->win,y,x);
506 break;
507 default:
508 PyErr_SetString(PyExc_TypeError, "delch requires 0 or 2 arguments");
509 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000510 }
Guido van Rossum85738471995-02-17 13:50:17 +0000511 return PyCursesCheckERR(rtn, "[mv]wdelch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000512}
513
514static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000515PyCursesWindow_DerWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000516{
517 WINDOW *win;
518 int nlines, ncols, begin_y, begin_x;
519
520 nlines = 0;
521 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000522 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000523 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000524 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000525 return NULL;
526 break;
527 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000528 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000529 &nlines,&ncols,&begin_y,&begin_x))
530 return NULL;
531 break;
532 default:
533 PyErr_SetString(PyExc_TypeError, "derwin requires 2 or 4 arguments");
534 return NULL;
535 }
536
537 win = derwin(self->win,nlines,ncols,begin_y,begin_x);
538
539 if (win == NULL) {
540 PyErr_SetString(PyCursesError, catchall_NULL);
541 return NULL;
542 }
543
544 return (PyObject *)PyCursesWindow_New(win);
545}
546
547static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000548PyCursesWindow_EchoChar(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000549{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000550 PyObject *temp;
551 chtype ch;
552 attr_t attr = A_NORMAL;
Guido van Rossum85738471995-02-17 13:50:17 +0000553
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000554 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000555 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000556 if (!PyArg_Parse(args,"O;ch or int", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +0000557 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000558 break;
559 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000560 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000561 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000562 break;
563 default:
564 PyErr_SetString(PyExc_TypeError, "echochar requires 1 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000565
566
Guido van Rossum85738471995-02-17 13:50:17 +0000567 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000568 }
Guido van Rossum85738471995-02-17 13:50:17 +0000569
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000570 if (!PyCurses_ConvertToChtype(temp, &ch)) {
571 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +0000572 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000573 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000574
575 if (self->win->_flags & _ISPAD)
576 return PyCursesCheckERR(pechochar(self->win, ch | attr),
577 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000578 else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000579 return PyCursesCheckERR(wechochar(self->win, ch | attr),
580 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000581}
582
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000583#ifdef NCURSES_MOUSE_VERSION
584static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000585PyCursesWindow_Enclose(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000586{
587 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000588 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000589 return NULL;
590
591 return PyInt_FromLong( wenclose(self->win,y,x) );
592}
593#endif
594
Guido van Rossumf6971e21994-08-30 12:25:20 +0000595static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000596PyCursesWindow_GetBkgd(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000597{
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000598 if (!PyArg_NoArgs(args))
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000599 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000600 return PyInt_FromLong((long) getbkgd(self->win));
Guido van Rossumf6971e21994-08-30 12:25:20 +0000601}
602
603static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000604PyCursesWindow_GetCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000605{
606 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000607 chtype rtn;
Guido van Rossum85738471995-02-17 13:50:17 +0000608
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000609 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000610 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000611 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000612 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000613 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000614 break;
615 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000616 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000617 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000618 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000619 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000620 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000621 break;
622 default:
623 PyErr_SetString(PyExc_TypeError, "getch requires 0 or 2 arguments");
624 return NULL;
625 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000626 return PyInt_FromLong(rtn);
627}
Guido van Rossum85738471995-02-17 13:50:17 +0000628
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000629static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000630PyCursesWindow_GetKey(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000631{
632 int x, y;
633 chtype rtn;
634
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000635 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000636 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000637 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000638 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000639 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000640 break;
641 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000642 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000643 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000644 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000645 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000646 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000647 break;
648 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000649 PyErr_SetString(PyExc_TypeError, "getkey requires 0 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000650 return NULL;
651 }
652 if (rtn<=255)
653 return Py_BuildValue("c", rtn);
654 else
655 return PyString_FromString((char *)keyname(rtn));
Guido van Rossumf6971e21994-08-30 12:25:20 +0000656}
657
658static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000659PyCursesWindow_GetStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000660{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000661 int x, y, n;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000662 char rtn[1024]; /* This should be big enough.. I hope */
663 int rtn2;
Guido van Rossum85738471995-02-17 13:50:17 +0000664
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000665 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000666 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000667 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000668 rtn2 = wgetstr(self->win,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000669 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000670 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000671 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000672 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000673 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000674 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000675 rtn2 = wgetnstr(self->win,rtn,n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000676 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000677 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000678 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000679 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000680 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000681 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000682 rtn2 = mvwgetstr(self->win,y,x,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000683 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000684 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000685 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000686 if (!PyArg_Parse(args,"(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000687 return NULL;
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000688#ifdef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000689 /* Untested */
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000690 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000691 rtn2 = wmove(self->win,y,x)==ERR ? ERR :
692 wgetnstr(self->win, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000693 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000694#else
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000695 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000696 rtn2 = mvwgetnstr(self->win, y, x, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000697 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000698#endif
699 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000700 default:
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000701 PyErr_SetString(PyExc_TypeError, "getstr requires 0 to 2 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000702 return NULL;
703 }
Guido van Rossumf6971e21994-08-30 12:25:20 +0000704 if (rtn2 == ERR)
705 rtn[0] = 0;
Guido van Rossum85738471995-02-17 13:50:17 +0000706 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000707}
708
709static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000710PyCursesWindow_Hline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000711{
712 PyObject *temp;
713 chtype ch;
714 int n, x, y, code = OK;
715 attr_t attr = A_NORMAL;
716
717 switch (ARG_COUNT(args)) {
718 case 2:
719 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
720 return NULL;
721 break;
722 case 3:
723 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
724 return NULL;
725 break;
726 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000727 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000728 return NULL;
729 code = wmove(self->win, y, x);
730 break;
731 case 5:
732 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
733 &y, &x, &temp, &n, &attr))
734 return NULL;
735 code = wmove(self->win, y, x);
736 default:
737 PyErr_SetString(PyExc_TypeError, "hline requires 2 or 5 arguments");
738 return NULL;
739 }
740
741 if (code != ERR) {
742 if (!PyCurses_ConvertToChtype(temp, &ch)) {
743 PyErr_SetString(PyExc_TypeError,
744 "argument 1 or 3 must be a ch or an int");
745 return NULL;
746 }
747 return PyCursesCheckERR(whline(self->win, ch | attr, n), "hline");
748 } else
749 return PyCursesCheckERR(code, "wmove");
750}
751
752static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000753PyCursesWindow_InsCh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000754{
755 int rtn, x, y, use_xy = FALSE;
756 PyObject *temp;
757 chtype ch = 0;
758 attr_t attr = A_NORMAL;
759
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000760 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000761 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000762 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000763 return NULL;
764 break;
765 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000766 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000767 return NULL;
768 break;
769 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000770 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000771 return NULL;
772 use_xy = TRUE;
773 break;
774 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000775 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr", &y, &x, &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000776 return NULL;
777 use_xy = TRUE;
778 break;
779 default:
780 PyErr_SetString(PyExc_TypeError, "insch requires 1 or 4 arguments");
781 return NULL;
782 }
783
784 if (!PyCurses_ConvertToChtype(temp, &ch)) {
785 PyErr_SetString(PyExc_TypeError,
786 "argument 1 or 3 must be a ch or an int");
787 return NULL;
788 }
789
790 if (use_xy == TRUE)
791 rtn = mvwinsch(self->win,y,x, ch | attr);
792 else {
793 rtn = winsch(self->win, ch | attr);
794 }
795 return PyCursesCheckERR(rtn, "insch");
796}
797
798static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000799PyCursesWindow_InCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000800{
Guido van Rossum85738471995-02-17 13:50:17 +0000801 int x, y, rtn;
802
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000803 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000804 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000805 rtn = winch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000806 break;
807 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000808 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000809 return NULL;
810 rtn = mvwinch(self->win,y,x);
811 break;
812 default:
813 PyErr_SetString(PyExc_TypeError, "inch requires 0 or 2 arguments");
814 return NULL;
815 }
Guido van Rossum85738471995-02-17 13:50:17 +0000816 return PyInt_FromLong((long) rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000817}
818
819static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000820PyCursesWindow_InStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000821{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000822 int x, y, n;
823 char rtn[1024]; /* This should be big enough.. I hope */
824 int rtn2;
825
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000826 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000827 case 0:
828 rtn2 = winstr(self->win,rtn);
829 break;
830 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000831 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000832 return NULL;
833 rtn2 = winnstr(self->win,rtn,n);
834 break;
835 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000836 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000837 return NULL;
838 rtn2 = mvwinstr(self->win,y,x,rtn);
839 break;
840 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000841 if (!PyArg_Parse(args, "(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000842 return NULL;
843 rtn2 = mvwinnstr(self->win, y, x, rtn, n);
844 break;
845 default:
846 PyErr_SetString(PyExc_TypeError, "instr requires 0 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000847 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000848 }
849 if (rtn2 == ERR)
850 rtn[0] = 0;
851 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000852}
853
854static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000855PyCursesWindow_InsStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000856{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000857 int rtn;
858 int x, y;
859 char *str;
860 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
861 int use_xy = FALSE, use_attr = FALSE;
862
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000863 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000864 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000865 if (!PyArg_Parse(args,"s;str", &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000866 return NULL;
867 break;
868 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000869 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000870 return NULL;
871 use_attr = TRUE;
872 break;
873 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000874 if (!PyArg_Parse(args,"(iis);y,x,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000875 return NULL;
876 use_xy = TRUE;
877 break;
878 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000879 if (!PyArg_Parse(args,"(iisl);y,x,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000880 return NULL;
881 use_xy = use_attr = TRUE;
882 break;
883 default:
884 PyErr_SetString(PyExc_TypeError, "insstr requires 1 to 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000885 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000886 }
887
888 if (use_attr == TRUE) {
889 attr_old = getattrs(self->win);
890 wattrset(self->win,attr);
891 }
892 if (use_xy == TRUE)
893 rtn = mvwinsstr(self->win,y,x,str);
894 else
895 rtn = winsstr(self->win,str);
896 if (use_attr == TRUE)
897 wattrset(self->win,attr_old);
898 return PyCursesCheckERR(rtn, "insstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000899}
900
901static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000902PyCursesWindow_InsNStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000903{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000904 int rtn, x, y, n;
905 char *str;
906 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
907 int use_xy = FALSE, use_attr = FALSE;
908
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000909 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000910 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000911 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000912 return NULL;
913 break;
914 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000915 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000916 return NULL;
917 use_attr = TRUE;
918 break;
919 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000920 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000921 return NULL;
922 use_xy = TRUE;
923 break;
924 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000925 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000926 return NULL;
927 use_xy = use_attr = TRUE;
928 break;
929 default:
930 PyErr_SetString(PyExc_TypeError, "insnstr requires 2 to 5 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000931 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000932 }
933
934 if (use_attr == TRUE) {
935 attr_old = getattrs(self->win);
936 wattrset(self->win,attr);
937 }
938 if (use_xy == TRUE)
939 rtn = mvwinsnstr(self->win,y,x,str,n);
940 else
941 rtn = winsnstr(self->win,str,n);
942 if (use_attr == TRUE)
943 wattrset(self->win,attr_old);
944 return PyCursesCheckERR(rtn, "insnstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000945}
946
947static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000948PyCursesWindow_Is_LineTouched(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000949{
950 int line, erg;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000951 if (!PyArg_Parse(args,"i;line", &line))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000952 return NULL;
953 erg = is_linetouched(self->win, line);
954 if (erg == ERR) {
955 PyErr_SetString(PyExc_TypeError,
956 "is_linetouched: line number outside of boundaries");
957 return NULL;
958 } else
959 if (erg == FALSE) {
960 Py_INCREF(Py_False);
961 return Py_False;
962 } else {
963 Py_INCREF(Py_True);
964 return Py_True;
965 }
966}
967
968static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000969PyCursesWindow_NoOutRefresh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000970{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000971 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000972 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000973
974 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000975 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000976 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000977 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000978 "(iiiiii);" \
979 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
980 &pminrow, &pmincol, &sminrow,
981 &smincol, &smaxrow, &smaxcol))
982 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000983 Py_BEGIN_ALLOW_THREADS
984 rtn = pnoutrefresh(self->win,
985 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +0000986 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000987 Py_END_ALLOW_THREADS
988 return PyCursesCheckERR(rtn, "pnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000989 default:
990 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000991 "noutrefresh() called for a pad "
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000992 "requires 6 arguments");
993 return NULL;
994 }
995 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000996 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000997 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000998
999 Py_BEGIN_ALLOW_THREADS
1000 rtn = wnoutrefresh(self->win);
1001 Py_END_ALLOW_THREADS
1002 return PyCursesCheckERR(rtn, "wnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001003 }
1004}
1005
1006static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001007PyCursesWindow_PutWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001008{
1009 PyObject *temp;
1010
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001011 if (!PyArg_Parse(args, "O;fileobj", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +00001012 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001013 if (!PyFile_Check(temp)) {
1014 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1015 return NULL;
1016 }
1017 return PyCursesCheckERR(putwin(self->win, PyFile_AsFile(temp)),
1018 "putwin");
1019}
1020
1021static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001022PyCursesWindow_RedrawLine(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001023{
1024 int beg, num;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001025 if (!PyArg_Parse(args,"(ii);beg,num", &beg, &num))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001026 return NULL;
1027 return PyCursesCheckERR(wredrawln(self->win,beg,num), "redrawln");
1028}
1029
1030static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001031PyCursesWindow_Refresh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001032{
1033 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001034 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001035
1036 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001037 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001038 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001039 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001040 "(iiiiii);" \
1041 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
1042 &pminrow, &pmincol, &sminrow,
1043 &smincol, &smaxrow, &smaxcol))
1044 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001045
1046 Py_BEGIN_ALLOW_THREADS
1047 rtn = prefresh(self->win,
1048 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +00001049 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001050 Py_END_ALLOW_THREADS
1051 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001052 default:
1053 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001054 "refresh() for a pad requires 6 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001055 return NULL;
1056 }
1057 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001058 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001059 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001060 Py_BEGIN_ALLOW_THREADS
1061 rtn = wrefresh(self->win);
1062 Py_END_ALLOW_THREADS
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001063 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001064 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001065}
1066
1067static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001068PyCursesWindow_SetScrollRegion(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001069{
1070 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001071 if (!PyArg_Parse(args,"(ii);top, bottom",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +00001072 return NULL;
1073 return PyCursesCheckERR(wsetscrreg(self->win,y,x), "wsetscrreg");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001074}
1075
1076static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001077PyCursesWindow_SubWin(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001078{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001079 WINDOW *win;
1080 int nlines, ncols, begin_y, begin_x;
1081
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001082 nlines = 0;
1083 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001084 switch (ARG_COUNT(args)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001085 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001086 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001087 return NULL;
1088 break;
1089 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001090 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001091 &nlines,&ncols,&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001092 return NULL;
1093 break;
1094 default:
1095 PyErr_SetString(PyExc_TypeError, "subwin requires 2 or 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001096 return NULL;
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001097 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001098
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001099 printf("Subwin: %i %i %i %i \n", nlines, ncols, begin_y, begin_x);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001100 if (self->win->_flags & _ISPAD)
1101 win = subpad(self->win, nlines, ncols, begin_y, begin_x);
1102 else
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001103 win = subwin(self->win, nlines, ncols, begin_y, begin_x);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001104
1105 if (win == NULL) {
1106 PyErr_SetString(PyCursesError, catchall_NULL);
1107 return NULL;
1108 }
1109
1110 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001111}
1112
1113static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001114PyCursesWindow_Scroll(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001115{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001116 int lines;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001117 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001118 case 0:
1119 return PyCursesCheckERR(scroll(self->win), "scroll");
1120 break;
1121 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001122 if (!PyArg_Parse(args, "i;lines", &lines))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001123 return NULL;
1124 return PyCursesCheckERR(wscrl(self->win, lines), "scroll");
1125 default:
1126 PyErr_SetString(PyExc_TypeError, "scroll requires 0 or 1 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001127 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001128 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001129}
1130
1131static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001132PyCursesWindow_TouchLine(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001133{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001134 int st, cnt, val;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001135 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001136 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001137 if (!PyArg_Parse(args,"(ii);start,count",&st,&cnt))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001138 return NULL;
1139 return PyCursesCheckERR(touchline(self->win,st,cnt), "touchline");
1140 break;
1141 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001142 if (!PyArg_Parse(args, "(iii);start,count,val", &st, &cnt, &val))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001143 return NULL;
1144 return PyCursesCheckERR(wtouchln(self->win, st, cnt, val), "touchline");
1145 default:
1146 PyErr_SetString(PyExc_TypeError, "touchline requires 2 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001147 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001148 }
1149}
1150
1151static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001152PyCursesWindow_Vline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001153{
1154 PyObject *temp;
1155 chtype ch;
1156 int n, x, y, code = OK;
1157 attr_t attr = A_NORMAL;
1158
1159 switch (ARG_COUNT(args)) {
1160 case 2:
1161 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
1162 return NULL;
1163 break;
1164 case 3:
1165 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
1166 return NULL;
1167 break;
1168 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001169 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001170 return NULL;
1171 code = wmove(self->win, y, x);
1172 break;
1173 case 5:
1174 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
1175 &y, &x, &temp, &n, &attr))
1176 return NULL;
1177 code = wmove(self->win, y, x);
1178 default:
1179 PyErr_SetString(PyExc_TypeError, "vline requires 2 or 5 arguments");
1180 return NULL;
1181 }
1182
1183 if (code != ERR) {
1184 if (!PyCurses_ConvertToChtype(temp, &ch)) {
1185 PyErr_SetString(PyExc_TypeError,
1186 "argument 1 or 3 must be a ch or an int");
1187 return NULL;
1188 }
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001189 return PyCursesCheckERR(wvline(self->win, ch | attr, n), "vline");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001190 } else
1191 return PyCursesCheckERR(code, "wmove");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001192}
1193
1194static PyMethodDef PyCursesWindow_Methods[] = {
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001195 {"addch", (PyCFunction)PyCursesWindow_AddCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001196 {"addnstr", (PyCFunction)PyCursesWindow_AddNStr},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001197 {"addstr", (PyCFunction)PyCursesWindow_AddStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001198 {"attroff", (PyCFunction)PyCursesWindow_wattroff},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001199 {"attron", (PyCFunction)PyCursesWindow_wattron},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001200 {"attrset", (PyCFunction)PyCursesWindow_wattrset},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001201 {"bkgd", (PyCFunction)PyCursesWindow_Bkgd},
1202 {"bkgdset", (PyCFunction)PyCursesWindow_BkgdSet},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001203 {"border", (PyCFunction)PyCursesWindow_Border, METH_VARARGS},
1204 {"box", (PyCFunction)PyCursesWindow_Box},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001205 {"clear", (PyCFunction)PyCursesWindow_wclear},
1206 {"clearok", (PyCFunction)PyCursesWindow_clearok},
1207 {"clrtobot", (PyCFunction)PyCursesWindow_wclrtobot},
1208 {"clrtoeol", (PyCFunction)PyCursesWindow_wclrtoeol},
1209 {"cursyncup", (PyCFunction)PyCursesWindow_wcursyncup},
1210 {"delch", (PyCFunction)PyCursesWindow_DelCh},
1211 {"deleteln", (PyCFunction)PyCursesWindow_wdeleteln},
1212 {"derwin", (PyCFunction)PyCursesWindow_DerWin},
1213 {"echochar", (PyCFunction)PyCursesWindow_EchoChar},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001214#ifdef NCURSES_MOUSE_VERSION
1215 {"enclose", (PyCFunction)PyCursesWindow_Enclose},
1216#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001217 {"erase", (PyCFunction)PyCursesWindow_werase},
1218 {"getbegyx", (PyCFunction)PyCursesWindow_getbegyx},
1219 {"getbkgd", (PyCFunction)PyCursesWindow_GetBkgd},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001220 {"getch", (PyCFunction)PyCursesWindow_GetCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001221 {"getkey", (PyCFunction)PyCursesWindow_GetKey},
1222 {"getmaxyx", (PyCFunction)PyCursesWindow_getmaxyx},
1223 {"getparyx", (PyCFunction)PyCursesWindow_getparyx},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001224 {"getstr", (PyCFunction)PyCursesWindow_GetStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001225 {"getyx", (PyCFunction)PyCursesWindow_getyx},
1226 {"hline", (PyCFunction)PyCursesWindow_Hline},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001227 {"idcok", (PyCFunction)PyCursesWindow_idcok},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001228 {"idlok", (PyCFunction)PyCursesWindow_idlok},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001229 {"immedok", (PyCFunction)PyCursesWindow_immedok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001230 {"inch", (PyCFunction)PyCursesWindow_InCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001231 {"insch", (PyCFunction)PyCursesWindow_InsCh},
1232 {"insdelln", (PyCFunction)PyCursesWindow_winsdelln},
1233 {"insertln", (PyCFunction)PyCursesWindow_winsertln},
1234 {"insnstr", (PyCFunction)PyCursesWindow_InsNStr},
1235 {"insstr", (PyCFunction)PyCursesWindow_InsStr},
1236 {"instr", (PyCFunction)PyCursesWindow_InStr},
1237 {"is_linetouched", (PyCFunction)PyCursesWindow_Is_LineTouched},
1238 {"is_wintouched", (PyCFunction)PyCursesWindow_is_wintouched},
1239 {"keypad", (PyCFunction)PyCursesWindow_keypad},
1240 {"leaveok", (PyCFunction)PyCursesWindow_leaveok},
1241 {"move", (PyCFunction)PyCursesWindow_wmove},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001242 {"mvderwin", (PyCFunction)PyCursesWindow_mvderwin},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001243 {"mvwin", (PyCFunction)PyCursesWindow_mvwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001244 {"nodelay", (PyCFunction)PyCursesWindow_nodelay},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001245 {"notimeout", (PyCFunction)PyCursesWindow_notimeout},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001246 {"noutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001247 {"putwin", (PyCFunction)PyCursesWindow_PutWin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001248 {"redrawln", (PyCFunction)PyCursesWindow_RedrawLine},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001249 {"redrawwin", (PyCFunction)PyCursesWindow_redrawwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001250 {"refresh", (PyCFunction)PyCursesWindow_Refresh},
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00001251#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001252 {"resize", (PyCFunction)PyCursesWindow_wresize},
1253#endif
1254 {"scroll", (PyCFunction)PyCursesWindow_Scroll},
1255 {"scrollok", (PyCFunction)PyCursesWindow_scrollok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001256 {"setscrreg", (PyCFunction)PyCursesWindow_SetScrollRegion},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001257 {"standend", (PyCFunction)PyCursesWindow_wstandend},
1258 {"standout", (PyCFunction)PyCursesWindow_wstandout},
1259 {"subpad", (PyCFunction)PyCursesWindow_SubWin},
1260 {"subwin", (PyCFunction)PyCursesWindow_SubWin},
1261 {"syncdown", (PyCFunction)PyCursesWindow_wsyncdown},
1262 {"syncok", (PyCFunction)PyCursesWindow_syncok},
1263 {"syncup", (PyCFunction)PyCursesWindow_wsyncup},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00001264 {"timeout", (PyCFunction)PyCursesWindow_wtimeout},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001265 {"touchline", (PyCFunction)PyCursesWindow_TouchLine},
1266 {"touchwin", (PyCFunction)PyCursesWindow_touchwin},
1267 {"untouchwin", (PyCFunction)PyCursesWindow_untouchwin},
1268 {"vline", (PyCFunction)PyCursesWindow_Vline},
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001269 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00001270};
1271
1272static PyObject *
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00001273PyCursesWindow_GetAttr(PyCursesWindowObject *self, char *name)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001274{
Guido van Rossuma597dde1995-01-10 20:56:29 +00001275 return Py_FindMethod(PyCursesWindow_Methods, (PyObject *)self, name);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001276}
1277
Guido van Rossumf6971e21994-08-30 12:25:20 +00001278/* -------------------------------------------------------*/
Guido van Rossum85738471995-02-17 13:50:17 +00001279
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001280PyTypeObject PyCursesWindow_Type = {
Guido van Rossumf6971e21994-08-30 12:25:20 +00001281 PyObject_HEAD_INIT(&PyType_Type)
1282 0, /*ob_size*/
1283 "curses window", /*tp_name*/
1284 sizeof(PyCursesWindowObject), /*tp_basicsize*/
1285 0, /*tp_itemsize*/
1286 /* methods */
1287 (destructor)PyCursesWindow_Dealloc, /*tp_dealloc*/
1288 0, /*tp_print*/
1289 (getattrfunc)PyCursesWindow_GetAttr, /*tp_getattr*/
1290 (setattrfunc)0, /*tp_setattr*/
1291 0, /*tp_compare*/
1292 0, /*tp_repr*/
1293 0, /*tp_as_number*/
1294 0, /*tp_as_sequence*/
1295 0, /*tp_as_mapping*/
1296 0, /*tp_hash*/
1297};
1298
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001299/*********************************************************************
1300 Global Functions
1301**********************************************************************/
Guido van Rossumf6971e21994-08-30 12:25:20 +00001302
Guido van Rossume4485b01994-09-07 14:32:49 +00001303static PyObject *ModDict;
1304
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001305/* Function Prototype Macros - They are ugly but very, very useful. ;-)
1306
1307 X - function name
1308 TYPE - parameter Type
1309 ERGSTR - format string for construction of the return value
1310 PARSESTR - format string for argument parsing
1311 */
1312
1313#define NoArgNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001314static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001315{ \
1316 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001317 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001318 return PyCursesCheckERR(X(), # X); }
1319
1320#define NoArgOrFlagNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001321static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001322{ \
1323 int flag = 0; \
1324 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001325 switch(ARG_COUNT(args)) { \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001326 case 0: \
1327 return PyCursesCheckERR(X(), # X); \
1328 case 1: \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001329 if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001330 if (flag) return PyCursesCheckERR(X(), # X); \
1331 else return PyCursesCheckERR(no ## X (), # X); \
1332 default: \
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001333 PyErr_SetString(PyExc_TypeError, # X " requires 0 or 1 arguments"); \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001334 return NULL; } }
1335
1336#define NoArgReturnIntFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001337static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001338{ \
1339 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001340 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001341 return PyInt_FromLong((long) X()); }
1342
1343
1344#define NoArgReturnStringFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001345static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001346{ \
1347 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001348 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001349 return PyString_FromString(X()); }
1350
1351#define NoArgTrueFalseFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001352static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001353{ \
1354 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001355 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001356 if (X () == FALSE) { \
1357 Py_INCREF(Py_False); \
1358 return Py_False; \
1359 } \
1360 Py_INCREF(Py_True); \
1361 return Py_True; }
1362
1363#define NoArgNoReturnVoidFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001364static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001365{ \
1366 PyCursesInitialised \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001367 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001368 X(); \
1369 Py_INCREF(Py_None); \
1370 return Py_None; }
1371
1372NoArgNoReturnFunction(beep)
1373NoArgNoReturnFunction(def_prog_mode)
1374NoArgNoReturnFunction(def_shell_mode)
1375NoArgNoReturnFunction(doupdate)
1376NoArgNoReturnFunction(endwin)
1377NoArgNoReturnFunction(flash)
1378NoArgNoReturnFunction(nocbreak)
1379NoArgNoReturnFunction(noecho)
1380NoArgNoReturnFunction(nonl)
1381NoArgNoReturnFunction(noraw)
1382NoArgNoReturnFunction(reset_prog_mode)
1383NoArgNoReturnFunction(reset_shell_mode)
1384NoArgNoReturnFunction(resetty)
1385NoArgNoReturnFunction(savetty)
1386
1387NoArgOrFlagNoReturnFunction(cbreak)
1388NoArgOrFlagNoReturnFunction(echo)
1389NoArgOrFlagNoReturnFunction(nl)
1390NoArgOrFlagNoReturnFunction(raw)
1391
1392NoArgReturnIntFunction(baudrate)
1393NoArgReturnIntFunction(termattrs)
1394
1395NoArgReturnStringFunction(termname)
1396NoArgReturnStringFunction(longname)
1397
1398NoArgTrueFalseFunction(can_change_color)
1399NoArgTrueFalseFunction(has_colors)
1400NoArgTrueFalseFunction(has_ic)
1401NoArgTrueFalseFunction(has_il)
1402NoArgTrueFalseFunction(isendwin)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001403NoArgNoReturnVoidFunction(filter)
1404NoArgNoReturnVoidFunction(flushinp)
1405NoArgNoReturnVoidFunction(noqiflush)
1406
1407static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001408PyCurses_Color_Content(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001409{
1410 short color,r,g,b;
1411
1412 PyCursesInitialised
1413 PyCursesInitialisedColor
1414
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001415 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001416 PyErr_SetString(PyExc_TypeError,
1417 "color_content requires 1 argument");
1418 return NULL;
1419 }
1420
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001421 if (!PyArg_Parse(args, "h;color", &color)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001422
1423 if (color_content(color, &r, &g, &b) != ERR)
1424 return Py_BuildValue("(iii)", r, g, b);
1425 else {
1426 PyErr_SetString(PyCursesError,
1427 "Argument 1 was out of range. Check value of COLORS.");
1428 return NULL;
1429 }
1430}
1431
1432static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001433PyCurses_color_pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001434{
1435 int n;
1436
1437 PyCursesInitialised
1438 PyCursesInitialisedColor
1439
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001440 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001441 PyErr_SetString(PyExc_TypeError, "color_pair requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001442 return NULL;
1443 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001444 if (!PyArg_Parse(args, "i;number", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001445 return PyInt_FromLong((long) (n << 8));
1446}
1447
1448static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001449PyCurses_Curs_Set(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001450{
1451 int vis,erg;
1452
1453 PyCursesInitialised
1454
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001455 if (ARG_COUNT(args)!=1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001456 PyErr_SetString(PyExc_TypeError, "curs_set requires 1 argument");
1457 return NULL;
1458 }
1459
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001460 if (!PyArg_Parse(args, "i;int", &vis)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001461
1462 erg = curs_set(vis);
1463 if (erg == ERR) return PyCursesCheckERR(erg, "curs_set");
1464
1465 return PyInt_FromLong((long) erg);
1466}
1467
1468static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001469PyCurses_Delay_Output(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001470{
1471 int ms;
1472
1473 PyCursesInitialised
1474
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001475 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001476 PyErr_SetString(PyExc_TypeError, "delay_output requires 1 argument");
1477 return NULL;
1478 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001479 if (!PyArg_Parse(args, "i;ms", &ms)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001480
1481 return PyCursesCheckERR(delay_output(ms), "delay_output");
1482}
1483
1484static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001485PyCurses_EraseChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001486{
1487 char ch;
1488
1489 PyCursesInitialised
1490
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001491 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001492
1493 ch = erasechar();
1494
1495 return PyString_FromString(&ch);
1496}
1497
1498static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001499PyCurses_getsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001500{
1501 int x,y;
1502
1503 PyCursesInitialised
1504
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001505 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001506
1507 getsyx(y, x);
1508
1509 return Py_BuildValue("(ii)", y, x);
1510}
1511
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001512#ifdef NCURSES_MOUSE_VERSION
1513static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001514PyCurses_GetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001515{
1516 int rtn;
1517 MEVENT event;
1518
1519 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001520 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001521
1522 rtn = getmouse( &event );
1523 if (rtn == ERR) {
1524 PyErr_SetString(PyCursesError, "getmouse() returned ERR");
1525 return NULL;
1526 }
1527 return Py_BuildValue("(hiiil)",
1528 (short)event.id,
1529 event.x, event.y, event.z,
1530 (long) event.bstate);
1531}
1532
1533static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001534PyCurses_UngetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001535{
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001536 MEVENT event;
1537
1538 PyCursesInitialised
1539 if (!PyArg_ParseTuple(args, "(hiiil)",
1540 &event.id,
1541 &event.x, &event.y, &event.z,
1542 (int *) &event.bstate))
1543 return NULL;
1544
1545 return PyCursesCheckERR(ungetmouse(&event), "ungetmouse");
1546}
1547#endif
1548
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001549static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001550PyCurses_GetWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001551{
1552 WINDOW *win;
1553 PyObject *temp;
1554
1555 PyCursesInitialised
1556
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001557 if (!PyArg_Parse(args, "O;fileobj", &temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001558
1559 if (!PyFile_Check(temp)) {
1560 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1561 return NULL;
1562 }
1563
1564 win = getwin(PyFile_AsFile(temp));
1565
1566 if (win == NULL) {
1567 PyErr_SetString(PyCursesError, catchall_NULL);
1568 return NULL;
1569 }
1570
1571 return PyCursesWindow_New(win);
1572}
1573
1574static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001575PyCurses_HalfDelay(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001576{
1577 unsigned char tenths;
1578
1579 PyCursesInitialised
1580
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001581 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001582 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001583 if (!PyArg_Parse(args, "b;tenths", &tenths)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001584 break;
1585 default:
1586 PyErr_SetString(PyExc_TypeError, "halfdelay requires 1 argument");
1587 return NULL;
1588 }
1589
1590 return PyCursesCheckERR(halfdelay(tenths), "halfdelay");
1591}
1592
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00001593#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001594 /* No has_key! */
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001595static PyObject * PyCurses_has_key(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001596{
1597 int ch;
1598
1599 PyCursesInitialised
1600
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001601 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001602
1603 if (has_key(ch) == FALSE) {
1604 Py_INCREF(Py_False);
1605 return Py_False;
1606 }
1607 Py_INCREF(Py_True);
1608 return Py_True;
1609}
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00001610#endif /* STRICT_SYSV_CURSES */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001611
1612static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001613PyCurses_Init_Color(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001614{
1615 short color, r, g, b;
1616
1617 PyCursesInitialised
1618 PyCursesInitialisedColor
1619
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001620 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001621 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001622 if (!PyArg_Parse(args, "(hhhh);color,r,g,b", &color, &r, &g, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001623 break;
1624 default:
1625 PyErr_SetString(PyExc_TypeError, "init_color requires 4 arguments");
1626 return NULL;
1627 }
1628
1629 return PyCursesCheckERR(init_color(color, r, g, b), "init_color");
1630}
1631
1632static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001633PyCurses_Init_Pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001634{
1635 short pair, f, b;
1636
1637 PyCursesInitialised
1638 PyCursesInitialisedColor
1639
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001640 if (ARG_COUNT(args) != 3) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001641 PyErr_SetString(PyExc_TypeError, "init_pair requires 3 arguments");
1642 return NULL;
1643 }
1644
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001645 if (!PyArg_Parse(args, "(hhh);pair, f, b", &pair, &f, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001646
1647 return PyCursesCheckERR(init_pair(pair, f, b), "init_pair");
1648}
1649
Guido van Rossumf6971e21994-08-30 12:25:20 +00001650static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001651PyCurses_InitScr(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001652{
Guido van Rossum56bf2351994-08-31 22:06:24 +00001653 WINDOW *win;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001654 PyObject *lines, *cols;
1655
1656 if (!PyArg_NoArgs(args)) return NULL;
1657
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001658 if (initialised == TRUE) {
Guido van Rossumf6971e21994-08-30 12:25:20 +00001659 wrefresh(stdscr);
1660 return (PyObject *)PyCursesWindow_New(stdscr);
1661 }
Guido van Rossum56bf2351994-08-31 22:06:24 +00001662
1663 win = initscr();
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001664
Guido van Rossum85738471995-02-17 13:50:17 +00001665 if (win == NULL) {
1666 PyErr_SetString(PyCursesError, catchall_NULL);
1667 return NULL;
1668 }
1669
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001670 initialised = TRUE;
Guido van Rossum56bf2351994-08-31 22:06:24 +00001671
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001672/* This was moved from initcurses() because it core dumped on SGI,
1673 where they're not defined until you've called initscr() */
1674#define SetDictInt(string,ch) \
1675 PyDict_SetItemString(ModDict,string,PyInt_FromLong((long) (ch)));
1676
1677 /* Here are some graphic symbols you can use */
1678 SetDictInt("ACS_ULCORNER", (ACS_ULCORNER));
1679 SetDictInt("ACS_LLCORNER", (ACS_LLCORNER));
1680 SetDictInt("ACS_URCORNER", (ACS_URCORNER));
1681 SetDictInt("ACS_LRCORNER", (ACS_LRCORNER));
1682 SetDictInt("ACS_LTEE", (ACS_LTEE));
1683 SetDictInt("ACS_RTEE", (ACS_RTEE));
1684 SetDictInt("ACS_BTEE", (ACS_BTEE));
1685 SetDictInt("ACS_TTEE", (ACS_TTEE));
1686 SetDictInt("ACS_HLINE", (ACS_HLINE));
1687 SetDictInt("ACS_VLINE", (ACS_VLINE));
1688 SetDictInt("ACS_PLUS", (ACS_PLUS));
1689 SetDictInt("ACS_S1", (ACS_S1));
1690 SetDictInt("ACS_S9", (ACS_S9));
1691 SetDictInt("ACS_DIAMOND", (ACS_DIAMOND));
1692 SetDictInt("ACS_CKBOARD", (ACS_CKBOARD));
1693 SetDictInt("ACS_DEGREE", (ACS_DEGREE));
1694 SetDictInt("ACS_PLMINUS", (ACS_PLMINUS));
1695 SetDictInt("ACS_BULLET", (ACS_BULLET));
1696 SetDictInt("ACS_LARROW", (ACS_LARROW));
1697 SetDictInt("ACS_RARROW", (ACS_RARROW));
1698 SetDictInt("ACS_DARROW", (ACS_DARROW));
1699 SetDictInt("ACS_UARROW", (ACS_UARROW));
1700 SetDictInt("ACS_BOARD", (ACS_BOARD));
1701 SetDictInt("ACS_LANTERN", (ACS_LANTERN));
1702 SetDictInt("ACS_BLOCK", (ACS_BLOCK));
1703 SetDictInt("ACS_BSSB", (ACS_ULCORNER));
1704 SetDictInt("ACS_SSBB", (ACS_LLCORNER));
1705 SetDictInt("ACS_BBSS", (ACS_URCORNER));
1706 SetDictInt("ACS_SBBS", (ACS_LRCORNER));
1707 SetDictInt("ACS_SBSS", (ACS_RTEE));
1708 SetDictInt("ACS_SSSB", (ACS_LTEE));
1709 SetDictInt("ACS_SSBS", (ACS_BTEE));
1710 SetDictInt("ACS_BSSS", (ACS_TTEE));
1711 SetDictInt("ACS_BSBS", (ACS_HLINE));
1712 SetDictInt("ACS_SBSB", (ACS_VLINE));
1713 SetDictInt("ACS_SSSS", (ACS_PLUS));
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00001714#ifndef STRICT_SYSV_CURSES
1715 /* The following are never available with strict SYSV curses */
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001716 SetDictInt("ACS_S3", (ACS_S3));
1717 SetDictInt("ACS_LEQUAL", (ACS_LEQUAL));
1718 SetDictInt("ACS_GEQUAL", (ACS_GEQUAL));
1719 SetDictInt("ACS_PI", (ACS_PI));
1720 SetDictInt("ACS_NEQUAL", (ACS_NEQUAL));
1721 SetDictInt("ACS_STERLING", (ACS_STERLING));
1722#endif
1723
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001724 lines = PyInt_FromLong((long) LINES);
1725 PyDict_SetItemString(ModDict, "LINES", lines);
1726 Py_DECREF(lines);
1727 cols = PyInt_FromLong((long) COLS);
1728 PyDict_SetItemString(ModDict, "COLS", cols);
1729 Py_DECREF(cols);
Guido van Rossum56bf2351994-08-31 22:06:24 +00001730
1731 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001732}
1733
Guido van Rossumf6971e21994-08-30 12:25:20 +00001734
1735static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001736PyCurses_IntrFlush(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001737{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001738 int ch;
1739
1740 PyCursesInitialised
1741
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001742 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001743 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001744 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001745 break;
1746 default:
1747 PyErr_SetString(PyExc_TypeError, "intrflush requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00001748 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001749 }
1750
1751 return PyCursesCheckERR(intrflush(NULL,ch), "intrflush");
1752}
1753
1754static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001755PyCurses_KeyName(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001756{
1757 const char *knp;
1758 int ch;
1759
1760 PyCursesInitialised
1761
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001762 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001763
1764 knp = keyname(ch);
1765
1766 return PyString_FromString((knp == NULL) ? "" : (char *)knp);
1767}
1768
1769static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001770PyCurses_KillChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001771{
1772 char ch;
1773
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001774 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001775
1776 ch = killchar();
1777
1778 return PyString_FromString(&ch);
1779}
1780
1781static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001782PyCurses_Meta(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001783{
1784 int ch;
1785
1786 PyCursesInitialised
1787
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001788 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001789 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001790 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001791 break;
1792 default:
1793 PyErr_SetString(PyExc_TypeError, "meta requires 1 argument");
1794 return NULL;
1795 }
1796
1797 return PyCursesCheckERR(meta(stdscr, ch), "meta");
1798}
1799
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001800#ifdef NCURSES_MOUSE_VERSION
1801static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001802PyCurses_MouseInterval(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001803{
1804 int interval;
1805 PyCursesInitialised
1806
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001807 if (!PyArg_Parse(args,"i;interval",&interval))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001808 return NULL;
1809 return PyCursesCheckERR(mouseinterval(interval), "mouseinterval");
1810}
1811
1812static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001813PyCurses_MouseMask(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001814{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00001815 int newmask;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001816 mmask_t oldmask, availmask;
1817
1818 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001819 if (!PyArg_Parse(args,"i;mousemask",&newmask))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001820 return NULL;
1821 availmask = mousemask(newmask, &oldmask);
1822 return Py_BuildValue("(ll)", (long)availmask, (long)oldmask);
1823}
1824#endif
1825
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001826static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001827PyCurses_NewPad(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001828{
1829 WINDOW *win;
1830 int nlines, ncols;
1831
1832 PyCursesInitialised
1833
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001834 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001835
1836 win = newpad(nlines, ncols);
1837
1838 if (win == NULL) {
1839 PyErr_SetString(PyCursesError, catchall_NULL);
1840 return NULL;
1841 }
1842
1843 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001844}
1845
1846static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001847PyCurses_NewWindow(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001848{
1849 WINDOW *win;
1850 int nlines, ncols, begin_y, begin_x;
Guido van Rossum85738471995-02-17 13:50:17 +00001851
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001852 PyCursesInitialised
1853
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001854 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +00001855 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001856 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols))
Guido van Rossum85738471995-02-17 13:50:17 +00001857 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001858 win = newpad(nlines, ncols);
Guido van Rossum85738471995-02-17 13:50:17 +00001859 break;
1860 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001861 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Guido van Rossumf6971e21994-08-30 12:25:20 +00001862 &nlines,&ncols,&begin_y,&begin_x))
Guido van Rossum85738471995-02-17 13:50:17 +00001863 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001864 win = newwin(nlines,ncols,begin_y,begin_x);
Guido van Rossum85738471995-02-17 13:50:17 +00001865 break;
1866 default:
1867 PyErr_SetString(PyExc_TypeError, "newwin requires 2 or 4 arguments");
1868 return NULL;
1869 }
1870
Guido van Rossumf6971e21994-08-30 12:25:20 +00001871 if (win == NULL) {
Guido van Rossum85738471995-02-17 13:50:17 +00001872 PyErr_SetString(PyCursesError, catchall_NULL);
1873 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +00001874 }
Guido van Rossum85738471995-02-17 13:50:17 +00001875
Guido van Rossumf6971e21994-08-30 12:25:20 +00001876 return (PyObject *)PyCursesWindow_New(win);
1877}
1878
1879static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001880PyCurses_Pair_Content(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001881{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001882 short pair,f,b;
1883
1884 PyCursesInitialised
1885 PyCursesInitialisedColor
1886
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001887 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001888 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001889 if (!PyArg_Parse(args, "h;pair", &pair)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001890 break;
1891 default:
1892 PyErr_SetString(PyExc_TypeError, "pair_content requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00001893 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001894 }
1895
1896 if (!pair_content(pair, &f, &b)) {
1897 PyErr_SetString(PyCursesError,
1898 "Argument 1 was out of range. (1..COLOR_PAIRS-1)");
1899 return NULL;
1900 }
1901
1902 return Py_BuildValue("(ii)", f, b);
1903}
1904
1905static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001906PyCurses_pair_number(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001907{
1908 int n;
1909
1910 PyCursesInitialised
1911 PyCursesInitialisedColor
1912
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001913 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001914 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001915 if (!PyArg_Parse(args, "i;pairvalue", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001916 break;
1917 default:
1918 PyErr_SetString(PyExc_TypeError,
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001919 "pair_number requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001920 return NULL;
1921 }
1922
1923 return PyInt_FromLong((long) ((n & A_COLOR) >> 8));
1924}
1925
1926static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001927PyCurses_Putp(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001928{
1929 char *str;
1930
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001931 if (!PyArg_Parse(args,"s;str", &str)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001932 return PyCursesCheckERR(putp(str), "putp");
1933}
1934
1935static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001936PyCurses_QiFlush(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001937{
1938 int flag = 0;
1939
1940 PyCursesInitialised
1941
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001942 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001943 case 0:
1944 qiflush();
1945 Py_INCREF(Py_None);
1946 return Py_None;
1947 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001948 if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001949 if (flag) qiflush();
1950 else noqiflush();
1951 Py_INCREF(Py_None);
1952 return Py_None;
1953 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001954 PyErr_SetString(PyExc_TypeError, "qiflush requires 0 or 1 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001955 return NULL;
1956 }
1957}
1958
1959static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001960PyCurses_setsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001961{
1962 int y,x;
1963
1964 PyCursesInitialised
1965
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001966 if (ARG_COUNT(args)!=2) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001967 PyErr_SetString(PyExc_TypeError, "setsyx requires 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001968 return NULL;
1969 }
1970
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001971 if (!PyArg_Parse(args, "(ii);y, x", &y, &x)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001972
1973 setsyx(y,x);
1974
Guido van Rossumf6971e21994-08-30 12:25:20 +00001975 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00001976 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00001977}
1978
1979static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001980PyCurses_Start_Color(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001981{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001982 int code;
1983 PyObject *c, *cp;
1984
1985 PyCursesInitialised
1986
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001987 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001988
1989 code = start_color();
1990 if (code != ERR) {
1991 initialisedcolors = TRUE;
1992 c = PyInt_FromLong((long) COLORS);
1993 PyDict_SetItemString(ModDict, "COLORS", c);
1994 Py_DECREF(c);
1995 cp = PyInt_FromLong((long) COLOR_PAIRS);
1996 PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp);
1997 Py_DECREF(cp);
1998 Py_INCREF(Py_None);
1999 return Py_None;
2000 } else {
2001 PyErr_SetString(PyCursesError, "start_color() returned ERR");
Guido van Rossum85738471995-02-17 13:50:17 +00002002 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002003 }
2004}
2005
2006static PyObject *
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002007PyCurses_tigetflag(PyObject *self, PyObject *args)
2008{
2009 char *capname;
2010
2011 PyCursesInitialised;
2012
2013 if (!PyArg_ParseTuple(args, "z", &capname))
2014 return NULL;
2015
2016 return PyInt_FromLong( (long) tigetflag( capname ) );
2017}
2018
2019static PyObject *
2020PyCurses_tigetnum(PyObject *self, PyObject *args)
2021{
2022 char *capname;
2023
2024 PyCursesInitialised;
2025
2026 if (!PyArg_ParseTuple(args, "z", &capname))
2027 return NULL;
2028
2029 return PyInt_FromLong( (long) tigetnum( capname ) );
2030}
2031
2032static PyObject *
2033PyCurses_tigetstr(PyObject *self, PyObject *args)
2034{
2035 char *capname;
2036
2037 PyCursesInitialised;
2038
2039 if (!PyArg_ParseTuple(args, "z", &capname))
2040 return NULL;
2041
2042 capname = tigetstr( capname );
2043 if (capname == 0 || capname == (char*) -1) {
2044 Py_INCREF(Py_None);
2045 return Py_None;
2046 }
2047 return PyString_FromString( capname );
2048}
2049
2050static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002051PyCurses_TypeAhead(PyObject *self, PyObject *args)
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002052{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002053 int fd;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002054
2055 PyCursesInitialised
2056
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002057 if (!PyArg_Parse(args,"i;fd",&fd)) return NULL;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002058
2059 PyCursesCheckERR(typeahead( fd ), "typeahead");
2060 Py_INCREF(Py_None);
2061 return Py_None;
2062}
2063
2064static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002065PyCurses_UnCtrl(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002066{
2067 PyObject *temp;
2068 chtype ch;
2069
2070 PyCursesInitialised
2071
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002072 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002073
2074 if (PyInt_Check(temp))
2075 ch = (chtype) PyInt_AsLong(temp);
2076 else if (PyString_Check(temp))
2077 ch = (chtype) *PyString_AsString(temp);
2078 else {
2079 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
2080 return NULL;
2081 }
2082
2083 return PyString_FromString(unctrl(ch));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002084}
2085
2086static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002087PyCurses_UngetCh(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002088{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002089 PyObject *temp;
2090 chtype ch;
2091
2092 PyCursesInitialised
2093
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002094 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002095
2096 if (PyInt_Check(temp))
2097 ch = (chtype) PyInt_AsLong(temp);
2098 else if (PyString_Check(temp))
2099 ch = (chtype) *PyString_AsString(temp);
2100 else {
2101 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +00002102 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002103 }
2104
Guido van Rossum85738471995-02-17 13:50:17 +00002105 return PyCursesCheckERR(ungetch(ch), "ungetch");
Guido van Rossumf6971e21994-08-30 12:25:20 +00002106}
2107
2108static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002109PyCurses_Use_Env(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002110{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002111 int flag;
2112
2113 PyCursesInitialised
2114
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002115 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002116 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002117 if (!PyArg_Parse(args,"i;True(1), False(0)",&flag))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002118 return NULL;
2119 break;
2120 default:
2121 PyErr_SetString(PyExc_TypeError, "use_env requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00002122 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002123 }
2124 use_env(flag);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002125 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00002126 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002127}
2128
Guido van Rossumf6971e21994-08-30 12:25:20 +00002129/* List of functions defined in the module */
2130
2131static PyMethodDef PyCurses_methods[] = {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002132 {"baudrate", (PyCFunction)PyCurses_baudrate},
2133 {"beep", (PyCFunction)PyCurses_beep},
2134 {"can_change_color", (PyCFunction)PyCurses_can_change_color},
2135 {"cbreak", (PyCFunction)PyCurses_cbreak},
2136 {"color_content", (PyCFunction)PyCurses_Color_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002137 {"color_pair", (PyCFunction)PyCurses_color_pair},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002138 {"curs_set", (PyCFunction)PyCurses_Curs_Set},
2139 {"def_prog_mode", (PyCFunction)PyCurses_def_prog_mode},
2140 {"def_shell_mode", (PyCFunction)PyCurses_def_shell_mode},
2141 {"delay_output", (PyCFunction)PyCurses_Delay_Output},
2142 {"doupdate", (PyCFunction)PyCurses_doupdate},
2143 {"echo", (PyCFunction)PyCurses_echo},
2144 {"endwin", (PyCFunction)PyCurses_endwin},
2145 {"erasechar", (PyCFunction)PyCurses_EraseChar},
2146 {"filter", (PyCFunction)PyCurses_filter},
2147 {"flash", (PyCFunction)PyCurses_flash},
2148 {"flushinp", (PyCFunction)PyCurses_flushinp},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002149#ifdef NCURSES_MOUSE_VERSION
2150 {"getmouse", (PyCFunction)PyCurses_GetMouse},
2151 {"ungetmouse", (PyCFunction)PyCurses_UngetMouse, METH_VARARGS},
2152#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002153 {"getsyx", (PyCFunction)PyCurses_getsyx},
2154 {"getwin", (PyCFunction)PyCurses_GetWin},
2155 {"has_colors", (PyCFunction)PyCurses_has_colors},
2156 {"has_ic", (PyCFunction)PyCurses_has_ic},
2157 {"has_il", (PyCFunction)PyCurses_has_il},
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00002158#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002159 {"has_key", (PyCFunction)PyCurses_has_key},
Guido van Rossumf6971e21994-08-30 12:25:20 +00002160#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002161 {"halfdelay", (PyCFunction)PyCurses_HalfDelay},
2162 {"init_color", (PyCFunction)PyCurses_Init_Color},
2163 {"init_pair", (PyCFunction)PyCurses_Init_Pair},
2164 {"initscr", (PyCFunction)PyCurses_InitScr},
2165 {"intrflush", (PyCFunction)PyCurses_IntrFlush},
2166 {"isendwin", (PyCFunction)PyCurses_isendwin},
2167 {"keyname", (PyCFunction)PyCurses_KeyName},
2168 {"killchar", (PyCFunction)PyCurses_KillChar},
2169 {"longname", (PyCFunction)PyCurses_longname},
2170 {"meta", (PyCFunction)PyCurses_Meta},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002171#ifdef NCURSES_MOUSE_VERSION
2172 {"mouseinterval", (PyCFunction)PyCurses_MouseInterval},
2173 {"mousemask", (PyCFunction)PyCurses_MouseMask},
2174#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002175 {"newpad", (PyCFunction)PyCurses_NewPad},
2176 {"newwin", (PyCFunction)PyCurses_NewWindow},
2177 {"nl", (PyCFunction)PyCurses_nl},
2178 {"nocbreak", (PyCFunction)PyCurses_nocbreak},
2179 {"noecho", (PyCFunction)PyCurses_noecho},
2180 {"nonl", (PyCFunction)PyCurses_nonl},
2181 {"noqiflush", (PyCFunction)PyCurses_noqiflush},
2182 {"noraw", (PyCFunction)PyCurses_noraw},
2183 {"pair_content", (PyCFunction)PyCurses_Pair_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002184 {"pair_number", (PyCFunction)PyCurses_pair_number},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002185 {"putp", (PyCFunction)PyCurses_Putp},
2186 {"qiflush", (PyCFunction)PyCurses_QiFlush},
2187 {"raw", (PyCFunction)PyCurses_raw},
2188 {"reset_prog_mode", (PyCFunction)PyCurses_reset_prog_mode},
2189 {"reset_shell_mode", (PyCFunction)PyCurses_reset_shell_mode},
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002190 {"resetty", (PyCFunction)PyCurses_resetty},
2191 {"savetty", (PyCFunction)PyCurses_savetty},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002192 {"setsyx", (PyCFunction)PyCurses_setsyx},
2193 {"start_color", (PyCFunction)PyCurses_Start_Color},
2194 {"termattrs", (PyCFunction)PyCurses_termattrs},
2195 {"termname", (PyCFunction)PyCurses_termname},
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002196 {"tigetflag", (PyCFunction)PyCurses_tigetflag, METH_VARARGS},
2197 {"tigetnum", (PyCFunction)PyCurses_tigetnum, METH_VARARGS},
2198 {"tigetstr", (PyCFunction)PyCurses_tigetstr, METH_VARARGS},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002199 {"typeahead", (PyCFunction)PyCurses_TypeAhead},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002200 {"unctrl", (PyCFunction)PyCurses_UnCtrl},
2201 {"ungetch", (PyCFunction)PyCurses_UngetCh},
2202 {"use_env", (PyCFunction)PyCurses_Use_Env},
2203 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00002204};
2205
2206/* Initialization function for the module */
2207
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002208void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00002209init_curses(void)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002210{
Guido van Rossum8fbf82b1995-02-17 13:54:04 +00002211 PyObject *m, *d, *v;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002212
2213 /* Create the module and add the functions */
Andrew M. Kuchlingb7f198e2000-06-10 23:12:32 +00002214 m = Py_InitModule("_curses", PyCurses_methods);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002215
Guido van Rossumf6971e21994-08-30 12:25:20 +00002216 /* Add some symbolic constants to the module */
2217 d = PyModule_GetDict(m);
Guido van Rossume4485b01994-09-07 14:32:49 +00002218 ModDict = d; /* For PyCurses_InitScr */
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002219
Guido van Rossum85738471995-02-17 13:50:17 +00002220 /* For exception curses.error */
Fred Drake589c35b2000-07-06 19:38:49 +00002221 PyCursesError = PyErr_NewException("_curses.error", NULL, NULL);
Guido van Rossum85738471995-02-17 13:50:17 +00002222 PyDict_SetItemString(d, "error", PyCursesError);
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002223
Guido van Rossum85738471995-02-17 13:50:17 +00002224 /* Make the version available */
Guido van Rossum8fbf82b1995-02-17 13:54:04 +00002225 v = PyString_FromString(PyCursesVersion);
2226 PyDict_SetItemString(d, "version", v);
2227 PyDict_SetItemString(d, "__version__", v);
2228 Py_DECREF(v);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002229
Guido van Rossumf6971e21994-08-30 12:25:20 +00002230 /* Here are some attributes you can add to chars to print */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002231
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002232 SetDictInt("A_ATTRIBUTES", A_ATTRIBUTES);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002233 SetDictInt("A_NORMAL", A_NORMAL);
2234 SetDictInt("A_STANDOUT", A_STANDOUT);
2235 SetDictInt("A_UNDERLINE", A_UNDERLINE);
2236 SetDictInt("A_REVERSE", A_REVERSE);
2237 SetDictInt("A_BLINK", A_BLINK);
2238 SetDictInt("A_DIM", A_DIM);
2239 SetDictInt("A_BOLD", A_BOLD);
2240 SetDictInt("A_ALTCHARSET", A_ALTCHARSET);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002241 SetDictInt("A_INVIS", A_INVIS);
2242 SetDictInt("A_PROTECT", A_PROTECT);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002243 SetDictInt("A_CHARTEXT", A_CHARTEXT);
2244 SetDictInt("A_COLOR", A_COLOR);
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00002245#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002246 SetDictInt("A_HORIZONTAL", A_HORIZONTAL);
2247 SetDictInt("A_LEFT", A_LEFT);
2248 SetDictInt("A_LOW", A_LOW);
2249 SetDictInt("A_RIGHT", A_RIGHT);
2250 SetDictInt("A_TOP", A_TOP);
2251 SetDictInt("A_VERTICAL", A_VERTICAL);
2252#endif
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002253
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002254 SetDictInt("COLOR_BLACK", COLOR_BLACK);
2255 SetDictInt("COLOR_RED", COLOR_RED);
2256 SetDictInt("COLOR_GREEN", COLOR_GREEN);
2257 SetDictInt("COLOR_YELLOW", COLOR_YELLOW);
2258 SetDictInt("COLOR_BLUE", COLOR_BLUE);
2259 SetDictInt("COLOR_MAGENTA", COLOR_MAGENTA);
2260 SetDictInt("COLOR_CYAN", COLOR_CYAN);
2261 SetDictInt("COLOR_WHITE", COLOR_WHITE);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002262
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002263#ifdef NCURSES_MOUSE_VERSION
2264 /* Mouse-related constants */
2265 SetDictInt("BUTTON1_PRESSED", BUTTON1_PRESSED);
2266 SetDictInt("BUTTON1_RELEASED", BUTTON1_RELEASED);
2267 SetDictInt("BUTTON1_CLICKED", BUTTON1_CLICKED);
2268 SetDictInt("BUTTON1_DOUBLE_CLICKED", BUTTON1_DOUBLE_CLICKED);
2269 SetDictInt("BUTTON1_TRIPLE_CLICKED", BUTTON1_TRIPLE_CLICKED);
2270
2271 SetDictInt("BUTTON2_PRESSED", BUTTON2_PRESSED);
2272 SetDictInt("BUTTON2_RELEASED", BUTTON2_RELEASED);
2273 SetDictInt("BUTTON2_CLICKED", BUTTON2_CLICKED);
2274 SetDictInt("BUTTON2_DOUBLE_CLICKED", BUTTON2_DOUBLE_CLICKED);
2275 SetDictInt("BUTTON2_TRIPLE_CLICKED", BUTTON2_TRIPLE_CLICKED);
2276
2277 SetDictInt("BUTTON3_PRESSED", BUTTON3_PRESSED);
2278 SetDictInt("BUTTON3_RELEASED", BUTTON3_RELEASED);
2279 SetDictInt("BUTTON3_CLICKED", BUTTON3_CLICKED);
2280 SetDictInt("BUTTON3_DOUBLE_CLICKED", BUTTON3_DOUBLE_CLICKED);
2281 SetDictInt("BUTTON3_TRIPLE_CLICKED", BUTTON3_TRIPLE_CLICKED);
2282
2283 SetDictInt("BUTTON4_PRESSED", BUTTON4_PRESSED);
2284 SetDictInt("BUTTON4_RELEASED", BUTTON4_RELEASED);
2285 SetDictInt("BUTTON4_CLICKED", BUTTON4_CLICKED);
2286 SetDictInt("BUTTON4_DOUBLE_CLICKED", BUTTON4_DOUBLE_CLICKED);
2287 SetDictInt("BUTTON4_TRIPLE_CLICKED", BUTTON4_TRIPLE_CLICKED);
2288
2289 SetDictInt("BUTTON_SHIFT", BUTTON_SHIFT);
2290 SetDictInt("BUTTON_CTRL", BUTTON_CTRL);
2291 SetDictInt("BUTTON_ALT", BUTTON_ALT);
2292
2293 SetDictInt("ALL_MOUSE_EVENTS", ALL_MOUSE_EVENTS);
2294 SetDictInt("REPORT_MOUSE_POSITION", REPORT_MOUSE_POSITION);
2295#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +00002296 /* Now set everything up for KEY_ variables */
2297 {
2298 int key;
2299 char *key_n;
2300 char *key_n2;
2301 for (key=KEY_MIN;key < KEY_MAX; key++) {
2302 key_n = (char *)keyname(key);
Guido van Rossumf5c6d471995-02-07 15:38:32 +00002303 if (key_n == NULL || strcmp(key_n,"UNKNOWN KEY")==0)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002304 continue;
2305 if (strncmp(key_n,"KEY_F(",6)==0) {
2306 char *p1, *p2;
2307 key_n2 = malloc(strlen(key_n)+1);
2308 p1 = key_n;
2309 p2 = key_n2;
2310 while (*p1) {
2311 if (*p1 != '(' && *p1 != ')') {
2312 *p2 = *p1;
2313 p2++;
2314 }
2315 p1++;
2316 }
2317 *p2 = (char)0;
2318 } else
2319 key_n2 = key_n;
Guido van Rossum85738471995-02-17 13:50:17 +00002320 PyDict_SetItemString(d,key_n2,PyInt_FromLong((long) key));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002321 if (key_n2 != key_n)
2322 free(key_n2);
2323 }
Guido van Rossum85738471995-02-17 13:50:17 +00002324 SetDictInt("KEY_MIN", KEY_MIN);
2325 SetDictInt("KEY_MAX", KEY_MAX);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002326 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002327
2328 /* Check for errors */
2329 if (PyErr_Occurred())
Andrew M. Kuchlingb7f198e2000-06-10 23:12:32 +00002330 Py_FatalError("can't initialize module _curses");
Guido van Rossumf6971e21994-08-30 12:25:20 +00002331}