blob: 092f658b62ca4beae9ede7f2e8d771e771e3e1f1 [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 *
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +000011 * Tidied for Python 1.6, and currently maintained by
12 * <akuchlin@mems-exchange.org>.
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000013 *
14 * Permission is hereby granted, free of charge, to any person obtaining
15 * a copy of this source file to use, copy, modify, merge, or publish it
16 * subject to the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be included
19 * in all copies or in any new file that contains a substantial portion of
20 * this file.
21 *
22 * THE AUTHOR MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF
23 * THE SOFTWARE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT
24 * EXPRESS OR IMPLIED WARRANTY. THE AUTHOR DISCLAIMS ALL WARRANTIES
25 * WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
26 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 * NON-INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
28 * AUTHOR BE LIABLE TO YOU OR ANY OTHER PARTY FOR ANY SPECIAL,
29 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
30 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE, STRICT LIABILITY OR
31 * ANY OTHER ACTION ARISING OUT OF OR IN CONNECTION WITH THE USE OR
32 * PERFORMANCE OF THIS SOFTWARE.
33 */
Guido van Rossumf6971e21994-08-30 12:25:20 +000034
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000035/* CVS: $Id$ */
Guido van Rossumf6971e21994-08-30 12:25:20 +000036
Andrew M. Kuchlingfb6bbf52000-07-27 11:58:01 +000037/*
38
39A number of SysV or ncurses functions don't have wrappers yet; if you need
40a given function, add it and send a patch. Here's a list of currently
41unsupported functions:
42
Andrew M. Kuchling9de6ffa2000-12-21 16:22:22 +000043 addchnstr addchstr chgat color_set define_key
Andrew M. Kuchlingfb6bbf52000-07-27 11:58:01 +000044 del_curterm delscreen dupwin inchnstr inchstr innstr keyok
45 mcprint mvaddchnstr mvaddchstr mvchgat mvcur mvinchnstr
46 mvinchstr mvinnstr mmvwaddchnstr mvwaddchstr mvwchgat
Andrew M. Kuchling2824d7f2000-12-15 00:44:02 +000047 mvwgetnstr mvwinchnstr mvwinchstr mvwinnstr newterm
Andrew M. Kuchling9de6ffa2000-12-21 16:22:22 +000048 resizeterm restartterm ripoffline scr_dump
Andrew M. Kuchling26cc66f2000-11-18 17:45:59 +000049 scr_init scr_restore scr_set scrl set_curterm set_term setterm
50 tgetent tgetflag tgetnum tgetstr tgoto timeout tputs
51 use_default_colors vidattr vidputs waddchnstr waddchstr wchgat
52 wcolor_set winchnstr winchstr winnstr wmouse_trafo wscrl
Andrew M. Kuchlingfb6bbf52000-07-27 11:58:01 +000053
54Low-priority:
55 slk_attr slk_attr_off slk_attr_on slk_attr_set slk_attroff
56 slk_attron slk_attrset slk_clear slk_color slk_init slk_label
57 slk_noutrefresh slk_refresh slk_restore slk_set slk_touch
58
Andrew M. Kuchling2824d7f2000-12-15 00:44:02 +000059Menu extension (ncurses and probably SYSV):
60 current_item free_item free_menu item_count item_description
61 item_index item_init item_name item_opts item_opts_off
62 item_opts_on item_term item_userptr item_value item_visible
63 menu_back menu_driver menu_fore menu_format menu_grey
64 menu_init menu_items menu_mark menu_opts menu_opts_off
65 menu_opts_on menu_pad menu_pattern menu_request_by_name
66 menu_request_name menu_spacing menu_sub menu_term menu_userptr
67 menu_win new_item new_menu pos_menu_cursor post_menu
68 scale_menu set_current_item set_item_init set_item_opts
69 set_item_term set_item_userptr set_item_value set_menu_back
70 set_menu_fore set_menu_format set_menu_grey set_menu_init
71 set_menu_items set_menu_mark set_menu_opts set_menu_pad
72 set_menu_pattern set_menu_spacing set_menu_sub set_menu_term
73 set_menu_userptr set_menu_win set_top_row top_row unpost_menu
74
75Form extension (ncurses and probably SYSV):
76 current_field data_ahead data_behind dup_field
77 dynamic_fieldinfo field_arg field_back field_buffer
78 field_count field_fore field_index field_info field_init
79 field_just field_opts field_opts_off field_opts_on field_pad
80 field_status field_term field_type field_userptr form_driver
81 form_fields form_init form_opts form_opts_off form_opts_on
82 form_page form_request_by_name form_request_name form_sub
83 form_term form_userptr form_win free_field free_form
84 link_field link_fieldtype move_field new_field new_form
85 new_page pos_form_cursor post_form scale_form
86 set_current_field set_field_back set_field_buffer
87 set_field_fore set_field_init set_field_just set_field_opts
88 set_field_pad set_field_status set_field_term set_field_type
89 set_field_userptr set_fieldtype_arg set_fieldtype_choice
90 set_form_fields set_form_init set_form_opts set_form_page
91 set_form_sub set_form_term set_form_userptr set_form_win
92 set_max_field set_new_page unpost_form
93
94
Andrew M. Kuchlingfb6bbf52000-07-27 11:58:01 +000095 */
96
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +000097/* Release Number */
Guido van Rossumf6971e21994-08-30 12:25:20 +000098
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +000099char *PyCursesVersion = "2.2";
Guido van Rossumf6971e21994-08-30 12:25:20 +0000100
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000101/* Includes */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000102
Guido van Rossum602099a1994-09-14 13:32:22 +0000103#include "Python.h"
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000104
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000105#ifdef __osf__
106#define _XOPEN_SOURCE_EXTENDED /* Define macro for OSF/1 */
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +0000107#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000108#endif
109
Guido van Rossum858ca0f2001-04-10 19:53:37 +0000110#define CURSES_MODULE
111#include "py_curses.h"
112
Andrew M. Kuchling26cc66f2000-11-18 17:45:59 +0000113/* These prototypes are in <term.h>, but including this header
114 #defines many common symbols (such as "lines") which breaks the
115 curses module in other ways. So the code will just specify
116 explicit prototypes here. */
117extern int setupterm(char *,int,int *);
Fred Drake0368bc42001-07-19 20:48:32 +0000118#ifdef __sgi
119#include <term.h>
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +0000120#endif
121
Martin v. Löwis1c07b4b2001-10-13 09:00:42 +0000122#if defined(sgi) || defined(__sun)
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +0000123#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000124typedef chtype attr_t; /* No attr_t type is available */
Guido van Rossum1266a011996-02-25 04:50:31 +0000125#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +0000126
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +0000127#if defined(_AIX)
128#define STRICT_SYSV_CURSES
129#endif
130
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000131/* Definition of exception curses.error */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000132
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000133static PyObject *PyCursesError;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000134
Andrew M. Kuchling26cc66f2000-11-18 17:45:59 +0000135/* Tells whether setupterm() has been called to initialise terminfo. */
136static int initialised_setupterm = FALSE;
137
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000138/* Tells whether initscr() has been called to initialise curses. */
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000139static int initialised = FALSE;
140
Andrew M. Kuchling32552682000-12-22 21:52:27 +0000141/* Tells whether start_color() has been called to initialise color usage. */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000142static int initialisedcolors = FALSE;
143
144/* Utility Macros */
Andrew M. Kuchling26cc66f2000-11-18 17:45:59 +0000145#define PyCursesSetupTermCalled \
146 if (initialised_setupterm != TRUE) { \
147 PyErr_SetString(PyCursesError, \
148 "must call (at least) setupterm() first"); \
Andrew M. Kuchling32552682000-12-22 21:52:27 +0000149 return 0; }
Andrew M. Kuchling26cc66f2000-11-18 17:45:59 +0000150
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000151#define PyCursesInitialised \
152 if (initialised != TRUE) { \
153 PyErr_SetString(PyCursesError, \
154 "must call initscr() first"); \
Andrew M. Kuchling32552682000-12-22 21:52:27 +0000155 return 0; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000156
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000157#define PyCursesInitialisedColor \
158 if (initialisedcolors != TRUE) { \
159 PyErr_SetString(PyCursesError, \
160 "must call start_color() first"); \
Andrew M. Kuchling32552682000-12-22 21:52:27 +0000161 return 0; }
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000162
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000163/* Utility Functions */
Guido van Rossumfbea2f31994-08-31 22:05:27 +0000164
Guido van Rossum85738471995-02-17 13:50:17 +0000165/*
166 * Check the return code from a curses function and return None
Andrew M. Kuchling32552682000-12-22 21:52:27 +0000167 * or raise an exception as appropriate. These are exported using the
168 * CObject API.
Guido van Rossum85738471995-02-17 13:50:17 +0000169 */
170
171static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000172PyCursesCheckERR(int code, char *fname)
Guido van Rossum85738471995-02-17 13:50:17 +0000173{
Guido van Rossum85738471995-02-17 13:50:17 +0000174 if (code != ERR) {
175 Py_INCREF(Py_None);
176 return Py_None;
177 } else {
178 if (fname == NULL) {
179 PyErr_SetString(PyCursesError, catchall_ERR);
180 } else {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000181 PyErr_Format(PyCursesError, "%s() returned ERR", fname);
Guido van Rossum85738471995-02-17 13:50:17 +0000182 }
183 return NULL;
184 }
185}
186
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000187static int
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000188PyCurses_ConvertToChtype(PyObject *obj, chtype *ch)
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000189{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000190 if (PyInt_Check(obj)) {
191 *ch = (chtype) PyInt_AsLong(obj);
Martin v. Löwisbfdf4ec2001-06-23 19:58:46 +0000192 } else if(PyString_Check(obj)
193 && (PyString_Size(obj) == 1)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000194 *ch = (chtype) *PyString_AsString(obj);
195 } else {
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000196 return 0;
197 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000198 return 1;
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000199}
200
Andrew M. Kuchling32552682000-12-22 21:52:27 +0000201/* Function versions of the 3 functions for tested whether curses has been
202 initialised or not. */
203
204static int func_PyCursesSetupTermCalled(void)
205{
206 PyCursesSetupTermCalled;
207 return 1;
208}
209
210static int func_PyCursesInitialised(void)
211{
212 PyCursesInitialised;
213 return 1;
214}
215
216static int func_PyCursesInitialisedColor(void)
217{
218 PyCursesInitialisedColor;
219 return 1;
220}
221
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000222/*****************************************************************************
223 The Window Object
224******************************************************************************/
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000225
Andrew M. Kuchling32552682000-12-22 21:52:27 +0000226/* Definition of the window type */
Guido van Rossum85738471995-02-17 13:50:17 +0000227
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000228PyTypeObject PyCursesWindow_Type;
229
Andrew M. Kuchling32552682000-12-22 21:52:27 +0000230/* Function prototype macros for Window object
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000231
232 X - function name
233 TYPE - parameter Type
234 ERGSTR - format string for construction of the return value
235 PARSESTR - format string for argument parsing
236 */
237
238#define Window_NoArgNoReturnFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000239static PyObject *PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
240{ if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000241 return PyCursesCheckERR(X(self->win), # X); }
242
243#define Window_NoArgTrueFalseFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000244static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000245{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000246 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000247 if (X (self->win) == FALSE) { Py_INCREF(Py_False); return Py_False; } \
248 else { Py_INCREF(Py_True); return Py_True; } }
249
250#define Window_NoArgNoReturnVoidFunction(X) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000251static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000252{ \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000253 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000254 X(self->win); Py_INCREF(Py_None); return Py_None; }
255
256#define Window_NoArg2TupleReturnFunction(X, TYPE, ERGSTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000257static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000258{ \
259 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000260 if (!PyArg_NoArgs(args)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000261 X(self->win,arg1,arg2); return Py_BuildValue(ERGSTR, arg1, arg2); }
262
263#define Window_OneArgNoReturnVoidFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000264static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000265{ \
266 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000267 if (!PyArg_Parse(args, PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000268 X(self->win,arg1); Py_INCREF(Py_None); return Py_None; }
269
270#define Window_OneArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000271static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000272{ \
273 TYPE arg1; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000274 if (!PyArg_Parse(args,PARSESTR, &arg1)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000275 return PyCursesCheckERR(X(self->win, arg1), # X); }
276
277#define Window_TwoArgNoReturnFunction(X, TYPE, PARSESTR) \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000278static PyObject * PyCursesWindow_ ## X (PyCursesWindowObject *self, PyObject *args) \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000279{ \
280 TYPE arg1, arg2; \
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000281 if (!PyArg_Parse(args,PARSESTR, &arg1, &arg2)) return NULL; \
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000282 return PyCursesCheckERR(X(self->win, arg1, arg2), # X); }
Guido van Rossum85738471995-02-17 13:50:17 +0000283
Guido van Rossumf6971e21994-08-30 12:25:20 +0000284/* ------------- WINDOW routines --------------- */
Guido van Rossum85738471995-02-17 13:50:17 +0000285
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000286Window_NoArgNoReturnFunction(untouchwin)
287Window_NoArgNoReturnFunction(touchwin)
288Window_NoArgNoReturnFunction(redrawwin)
289Window_NoArgNoReturnFunction(winsertln)
290Window_NoArgNoReturnFunction(werase)
291Window_NoArgNoReturnFunction(wdeleteln)
292
293Window_NoArgTrueFalseFunction(is_wintouched)
294
295Window_NoArgNoReturnVoidFunction(wsyncup)
296Window_NoArgNoReturnVoidFunction(wsyncdown)
297Window_NoArgNoReturnVoidFunction(wstandend)
298Window_NoArgNoReturnVoidFunction(wstandout)
299Window_NoArgNoReturnVoidFunction(wcursyncup)
300Window_NoArgNoReturnVoidFunction(wclrtoeol)
301Window_NoArgNoReturnVoidFunction(wclrtobot)
302Window_NoArgNoReturnVoidFunction(wclear)
303
304Window_OneArgNoReturnVoidFunction(idcok, int, "i;True(1) or False(0)")
305Window_OneArgNoReturnVoidFunction(immedok, int, "i;True(1) or False(0)")
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +0000306Window_OneArgNoReturnVoidFunction(wtimeout, int, "i;delay")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000307
308Window_NoArg2TupleReturnFunction(getyx, int, "(ii)")
309Window_NoArg2TupleReturnFunction(getbegyx, int, "(ii)")
310Window_NoArg2TupleReturnFunction(getmaxyx, int, "(ii)")
311Window_NoArg2TupleReturnFunction(getparyx, int, "(ii)")
312
313Window_OneArgNoReturnFunction(wattron, attr_t, "l;attr")
314Window_OneArgNoReturnFunction(wattroff, attr_t, "l;attr")
315Window_OneArgNoReturnFunction(wattrset, attr_t, "l;attr")
316Window_OneArgNoReturnFunction(clearok, int, "i;True(1) or False(0)")
317Window_OneArgNoReturnFunction(idlok, int, "i;True(1) or False(0)")
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +0000318#if defined(__NetBSD__)
319Window_OneArgNoReturnVoidFunction(keypad, int, "i;True(1) or False(0)")
320#else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000321Window_OneArgNoReturnFunction(keypad, int, "i;True(1) or False(0)")
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +0000322#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000323Window_OneArgNoReturnFunction(leaveok, int, "i;True(1) or False(0)")
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +0000324#if defined(__NetBSD__)
325Window_OneArgNoReturnVoidFunction(nodelay, int, "i;True(1) or False(0)")
326#else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000327Window_OneArgNoReturnFunction(nodelay, int, "i;True(1) or False(0)")
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +0000328#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000329Window_OneArgNoReturnFunction(notimeout, int, "i;True(1) or False(0)")
330Window_OneArgNoReturnFunction(scrollok, int, "i;True(1) or False(0)")
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000331Window_OneArgNoReturnFunction(winsdelln, int, "i;nlines")
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000332Window_OneArgNoReturnFunction(syncok, int, "i;True(1) or False(0)")
333
334Window_TwoArgNoReturnFunction(mvwin, int, "(ii);y,x")
335Window_TwoArgNoReturnFunction(mvderwin, int, "(ii);y,x")
336Window_TwoArgNoReturnFunction(wmove, int, "(ii);y,x")
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000337#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000338Window_TwoArgNoReturnFunction(wresize, int, "(ii);lines,columns")
339#endif
340
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000341/* Allocation and deallocation of Window Objects */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000342
Guido van Rossumf6971e21994-08-30 12:25:20 +0000343static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000344PyCursesWindow_New(WINDOW *win)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000345{
346 PyCursesWindowObject *wo;
Guido van Rossum85738471995-02-17 13:50:17 +0000347
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000348 wo = PyObject_NEW(PyCursesWindowObject, &PyCursesWindow_Type);
349 if (wo == NULL) return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000350 wo->win = win;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000351 return (PyObject *)wo;
352}
353
354static void
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000355PyCursesWindow_Dealloc(PyCursesWindowObject *wo)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000356{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000357 if (wo->win != stdscr) delwin(wo->win);
358 PyMem_DEL(wo);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000359}
360
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000361/* Addch, Addstr, Addnstr */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000362
363static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000364PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000365{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000366 int rtn, x, y, use_xy = FALSE;
367 PyObject *temp;
368 chtype ch = 0;
369 attr_t attr = A_NORMAL;
370
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000371 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000372 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000373 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000374 return NULL;
375 break;
376 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000377 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000378 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000379 break;
380 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000381 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000382 return NULL;
383 use_xy = TRUE;
384 break;
385 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000386 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000387 &y, &x, &temp, &attr))
388 return NULL;
389 use_xy = TRUE;
390 break;
391 default:
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +0000392 PyErr_SetString(PyExc_TypeError, "addch requires 1 to 4 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000393 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000394 }
Guido van Rossum85738471995-02-17 13:50:17 +0000395
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000396 if (!PyCurses_ConvertToChtype(temp, &ch)) {
397 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
398 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000399 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000400
Guido van Rossumf6971e21994-08-30 12:25:20 +0000401 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000402 rtn = mvwaddch(self->win,y,x, ch | attr);
403 else {
404 rtn = waddch(self->win, ch | attr);
405 }
406 return PyCursesCheckERR(rtn, "addch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000407}
408
409static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000410PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000411{
412 int rtn;
413 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000414 char *str;
415 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
416 int use_xy = FALSE, use_attr = FALSE;
Guido van Rossum85738471995-02-17 13:50:17 +0000417
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000418 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000419 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000420 if (!PyArg_Parse(args,"s;str", &str))
Guido van Rossum85738471995-02-17 13:50:17 +0000421 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000422 break;
423 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000424 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000425 return NULL;
426 use_attr = TRUE;
427 break;
428 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000429 if (!PyArg_Parse(args,"(iis);int,int,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000430 return NULL;
431 use_xy = TRUE;
432 break;
433 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000434 if (!PyArg_Parse(args,"(iisl);int,int,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000435 return NULL;
436 use_xy = use_attr = TRUE;
437 break;
438 default:
439 PyErr_SetString(PyExc_TypeError, "addstr requires 1 to 4 arguments");
440 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000441 }
Guido van Rossum85738471995-02-17 13:50:17 +0000442
Guido van Rossumf6971e21994-08-30 12:25:20 +0000443 if (use_attr == TRUE) {
444 attr_old = getattrs(self->win);
445 wattrset(self->win,attr);
446 }
447 if (use_xy == TRUE)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000448 rtn = mvwaddstr(self->win,y,x,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000449 else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000450 rtn = waddstr(self->win,str);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000451 if (use_attr == TRUE)
452 wattrset(self->win,attr_old);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000453 return PyCursesCheckERR(rtn, "addstr");
454}
Guido van Rossum85738471995-02-17 13:50:17 +0000455
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000456static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000457PyCursesWindow_AddNStr(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000458{
459 int rtn, x, y, n;
460 char *str;
461 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
462 int use_xy = FALSE, use_attr = FALSE;
463
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000464 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000465 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000466 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000467 return NULL;
468 break;
469 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000470 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000471 return NULL;
472 use_attr = TRUE;
473 break;
474 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000475 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000476 return NULL;
477 use_xy = TRUE;
478 break;
479 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000480 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000481 return NULL;
482 use_xy = use_attr = TRUE;
483 break;
484 default:
485 PyErr_SetString(PyExc_TypeError, "addnstr requires 2 to 5 arguments");
486 return NULL;
487 }
488
489 if (use_attr == TRUE) {
490 attr_old = getattrs(self->win);
491 wattrset(self->win,attr);
492 }
493 if (use_xy == TRUE)
494 rtn = mvwaddnstr(self->win,y,x,str,n);
495 else
496 rtn = waddnstr(self->win,str,n);
497 if (use_attr == TRUE)
498 wattrset(self->win,attr_old);
499 return PyCursesCheckERR(rtn, "addnstr");
500}
501
502static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000503PyCursesWindow_Bkgd(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000504{
505 PyObject *temp;
506 chtype bkgd;
507 attr_t attr = A_NORMAL;
508
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000509 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000510 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000511 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000512 return NULL;
513 break;
514 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000515 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000516 return NULL;
517 break;
518 default:
519 PyErr_SetString(PyExc_TypeError, "bkgd requires 1 or 2 arguments");
520 return NULL;
521 }
522
523 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
524 PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
525 return NULL;
526 }
527
Andrew M. Kuchling4a596e32001-09-04 19:34:32 +0000528 return PyCursesCheckERR(wbkgd(self->win, bkgd | attr), "bkgd");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000529}
530
531static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000532PyCursesWindow_BkgdSet(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000533{
534 PyObject *temp;
535 chtype bkgd;
536 attr_t attr = A_NORMAL;
537
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000538 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000539 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000540 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000541 return NULL;
542 break;
543 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000544 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000545 return NULL;
546 break;
547 default:
548 PyErr_SetString(PyExc_TypeError, "bkgdset requires 1 or 2 arguments");
549 return NULL;
550 }
551
552 if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000553 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000554 return NULL;
555 }
556
557 wbkgdset(self->win, bkgd | attr);
558 return PyCursesCheckERR(0, "bkgdset");
559}
560
561static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000562PyCursesWindow_Border(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000563{
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +0000564 PyObject *temp[8];
565 chtype ch[8];
566 int i;
567
568 /* Clear the array of parameters */
569 for(i=0; i<8; i++) {
570 temp[i] = NULL;
571 ch[i] = 0;
572 }
573
574 if (!PyArg_ParseTuple(args,"|OOOOOOOO;ls,rs,ts,bs,tl,tr,bl,br",
575 &temp[0], &temp[1], &temp[2], &temp[3],
576 &temp[4], &temp[5], &temp[6], &temp[7]))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000577 return NULL;
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +0000578
579 for(i=0; i<8; i++) {
580 if (temp[i] != NULL && !PyCurses_ConvertToChtype(temp[i], &ch[i])) {
581 PyErr_Format(PyExc_TypeError,
582 "argument %i must be a ch or an int", i+1);
583 return NULL;
584 }
585 }
586
587 wborder(self->win,
588 ch[0], ch[1], ch[2], ch[3],
589 ch[4], ch[5], ch[6], ch[7]);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000590 Py_INCREF(Py_None);
591 return Py_None;
592}
593
594static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000595PyCursesWindow_Box(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000596{
597 chtype ch1=0,ch2=0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000598 if (!PyArg_NoArgs(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000599 PyErr_Clear();
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000600 if (!PyArg_Parse(args,"(ll);vertint,horint", &ch1, &ch2))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000601 return NULL;
602 }
603 box(self->win,ch1,ch2);
604 Py_INCREF(Py_None);
605 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000606}
607
608static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000609PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000610{
611 int rtn;
612 int x, y;
Guido van Rossum85738471995-02-17 13:50:17 +0000613
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000614 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000615 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000616 rtn = wdelch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000617 break;
618 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000619 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Guido van Rossum85738471995-02-17 13:50:17 +0000620 return NULL;
621 rtn = mvwdelch(self->win,y,x);
622 break;
623 default:
624 PyErr_SetString(PyExc_TypeError, "delch requires 0 or 2 arguments");
625 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000626 }
Guido van Rossum85738471995-02-17 13:50:17 +0000627 return PyCursesCheckERR(rtn, "[mv]wdelch");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000628}
629
630static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000631PyCursesWindow_DerWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000632{
633 WINDOW *win;
634 int nlines, ncols, begin_y, begin_x;
635
636 nlines = 0;
637 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000638 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000639 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000640 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000641 return NULL;
642 break;
643 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000644 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000645 &nlines,&ncols,&begin_y,&begin_x))
646 return NULL;
647 break;
648 default:
649 PyErr_SetString(PyExc_TypeError, "derwin requires 2 or 4 arguments");
650 return NULL;
651 }
652
653 win = derwin(self->win,nlines,ncols,begin_y,begin_x);
654
655 if (win == NULL) {
656 PyErr_SetString(PyCursesError, catchall_NULL);
657 return NULL;
658 }
659
660 return (PyObject *)PyCursesWindow_New(win);
661}
662
663static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000664PyCursesWindow_EchoChar(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000665{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000666 PyObject *temp;
667 chtype ch;
668 attr_t attr = A_NORMAL;
Guido van Rossum85738471995-02-17 13:50:17 +0000669
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000670 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000671 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000672 if (!PyArg_Parse(args,"O;ch or int", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +0000673 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000674 break;
675 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000676 if (!PyArg_Parse(args,"(Ol);ch or int,attr", &temp, &attr))
Guido van Rossum85738471995-02-17 13:50:17 +0000677 return NULL;
Guido van Rossum85738471995-02-17 13:50:17 +0000678 break;
679 default:
680 PyErr_SetString(PyExc_TypeError, "echochar requires 1 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000681
682
Guido van Rossum85738471995-02-17 13:50:17 +0000683 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000684 }
Guido van Rossum85738471995-02-17 13:50:17 +0000685
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000686 if (!PyCurses_ConvertToChtype(temp, &ch)) {
687 PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +0000688 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000689 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000690
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +0000691#if !defined(__NetBSD__)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000692 if (self->win->_flags & _ISPAD)
693 return PyCursesCheckERR(pechochar(self->win, ch | attr),
694 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000695 else
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +0000696#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000697 return PyCursesCheckERR(wechochar(self->win, ch | attr),
698 "echochar");
Guido van Rossumf6971e21994-08-30 12:25:20 +0000699}
700
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000701#ifdef NCURSES_MOUSE_VERSION
702static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000703PyCursesWindow_Enclose(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000704{
705 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000706 if (!PyArg_Parse(args,"(ii);y,x", &y, &x))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +0000707 return NULL;
708
709 return PyInt_FromLong( wenclose(self->win,y,x) );
710}
711#endif
712
Guido van Rossumf6971e21994-08-30 12:25:20 +0000713static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000714PyCursesWindow_GetBkgd(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000715{
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000716 if (!PyArg_NoArgs(args))
Guido van Rossum585c6dc1995-02-24 13:45:43 +0000717 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000718 return PyInt_FromLong((long) getbkgd(self->win));
Guido van Rossumf6971e21994-08-30 12:25:20 +0000719}
720
721static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000722PyCursesWindow_GetCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000723{
724 int x, y;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000725 chtype rtn;
Guido van Rossum85738471995-02-17 13:50:17 +0000726
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000727 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000728 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000729 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000730 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000731 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000732 break;
733 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000734 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000735 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000736 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000737 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000738 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000739 break;
740 default:
741 PyErr_SetString(PyExc_TypeError, "getch requires 0 or 2 arguments");
742 return NULL;
743 }
Fred Drake0368bc42001-07-19 20:48:32 +0000744 return PyInt_FromLong((long)rtn);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000745}
Guido van Rossum85738471995-02-17 13:50:17 +0000746
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000747static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000748PyCursesWindow_GetKey(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000749{
750 int x, y;
751 chtype rtn;
752
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000753 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000754 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000755 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000756 rtn = wgetch(self->win);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000757 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000758 break;
759 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000760 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000761 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000762 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000763 rtn = mvwgetch(self->win,y,x);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000764 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000765 break;
766 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000767 PyErr_SetString(PyExc_TypeError, "getkey requires 0 or 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000768 return NULL;
769 }
770 if (rtn<=255)
771 return Py_BuildValue("c", rtn);
772 else
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +0000773#if defined(__NetBSD__)
774 return PyString_FromString(unctrl(rtn));
775#else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000776 return PyString_FromString((char *)keyname(rtn));
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +0000777#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +0000778}
779
780static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000781PyCursesWindow_GetStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000782{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000783 int x, y, n;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000784 char rtn[1024]; /* This should be big enough.. I hope */
785 int rtn2;
Guido van Rossum85738471995-02-17 13:50:17 +0000786
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000787 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000788 case 0:
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000789 Py_BEGIN_ALLOW_THREADS
Guido van Rossumf6971e21994-08-30 12:25:20 +0000790 rtn2 = wgetstr(self->win,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000791 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000792 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000793 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000794 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000795 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000796 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000797 rtn2 = wgetnstr(self->win,rtn,n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000798 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000799 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000800 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000801 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000802 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000803 Py_BEGIN_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000804 rtn2 = mvwgetstr(self->win,y,x,rtn);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000805 Py_END_ALLOW_THREADS
Guido van Rossum85738471995-02-17 13:50:17 +0000806 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000807 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000808 if (!PyArg_Parse(args,"(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000809 return NULL;
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +0000810#ifdef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000811 /* Untested */
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000812 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000813 rtn2 = wmove(self->win,y,x)==ERR ? ERR :
814 wgetnstr(self->win, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000815 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000816#else
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000817 Py_BEGIN_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000818 rtn2 = mvwgetnstr(self->win, y, x, rtn, n);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +0000819 Py_END_ALLOW_THREADS
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000820#endif
821 break;
Guido van Rossum85738471995-02-17 13:50:17 +0000822 default:
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000823 PyErr_SetString(PyExc_TypeError, "getstr requires 0 to 2 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000824 return NULL;
825 }
Guido van Rossumf6971e21994-08-30 12:25:20 +0000826 if (rtn2 == ERR)
827 rtn[0] = 0;
Guido van Rossum85738471995-02-17 13:50:17 +0000828 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000829}
830
831static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000832PyCursesWindow_Hline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000833{
834 PyObject *temp;
835 chtype ch;
836 int n, x, y, code = OK;
837 attr_t attr = A_NORMAL;
838
839 switch (ARG_COUNT(args)) {
840 case 2:
841 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
842 return NULL;
843 break;
844 case 3:
845 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
846 return NULL;
847 break;
848 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +0000849 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000850 return NULL;
851 code = wmove(self->win, y, x);
852 break;
853 case 5:
854 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
855 &y, &x, &temp, &n, &attr))
856 return NULL;
857 code = wmove(self->win, y, x);
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +0000858 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000859 default:
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +0000860 PyErr_SetString(PyExc_TypeError, "hline requires 2 to 5 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000861 return NULL;
862 }
863
864 if (code != ERR) {
865 if (!PyCurses_ConvertToChtype(temp, &ch)) {
866 PyErr_SetString(PyExc_TypeError,
867 "argument 1 or 3 must be a ch or an int");
868 return NULL;
869 }
870 return PyCursesCheckERR(whline(self->win, ch | attr, n), "hline");
871 } else
872 return PyCursesCheckERR(code, "wmove");
873}
874
875static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000876PyCursesWindow_InsCh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000877{
878 int rtn, x, y, use_xy = FALSE;
879 PyObject *temp;
880 chtype ch = 0;
881 attr_t attr = A_NORMAL;
882
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000883 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000884 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000885 if (!PyArg_Parse(args, "O;ch or int", &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000886 return NULL;
887 break;
888 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000889 if (!PyArg_Parse(args, "(Ol);ch or int,attr", &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000890 return NULL;
891 break;
892 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000893 if (!PyArg_Parse(args,"(iiO);y,x,ch or int", &y, &x, &temp))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000894 return NULL;
895 use_xy = TRUE;
896 break;
897 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000898 if (!PyArg_Parse(args,"(iiOl);y,x,ch or int, attr", &y, &x, &temp, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000899 return NULL;
900 use_xy = TRUE;
901 break;
902 default:
903 PyErr_SetString(PyExc_TypeError, "insch requires 1 or 4 arguments");
904 return NULL;
905 }
906
907 if (!PyCurses_ConvertToChtype(temp, &ch)) {
908 PyErr_SetString(PyExc_TypeError,
909 "argument 1 or 3 must be a ch or an int");
910 return NULL;
911 }
912
913 if (use_xy == TRUE)
914 rtn = mvwinsch(self->win,y,x, ch | attr);
915 else {
916 rtn = winsch(self->win, ch | attr);
917 }
918 return PyCursesCheckERR(rtn, "insch");
919}
920
921static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000922PyCursesWindow_InCh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000923{
Guido van Rossum85738471995-02-17 13:50:17 +0000924 int x, y, rtn;
925
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000926 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +0000927 case 0:
Guido van Rossumf6971e21994-08-30 12:25:20 +0000928 rtn = winch(self->win);
Guido van Rossum85738471995-02-17 13:50:17 +0000929 break;
930 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000931 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +0000932 return NULL;
933 rtn = mvwinch(self->win,y,x);
934 break;
935 default:
936 PyErr_SetString(PyExc_TypeError, "inch requires 0 or 2 arguments");
937 return NULL;
938 }
Guido van Rossum85738471995-02-17 13:50:17 +0000939 return PyInt_FromLong((long) rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000940}
941
942static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000943PyCursesWindow_InStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000944{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000945 int x, y, n;
946 char rtn[1024]; /* This should be big enough.. I hope */
947 int rtn2;
948
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000949 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000950 case 0:
951 rtn2 = winstr(self->win,rtn);
952 break;
953 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000954 if (!PyArg_Parse(args,"i;n", &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000955 return NULL;
956 rtn2 = winnstr(self->win,rtn,n);
957 break;
958 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000959 if (!PyArg_Parse(args,"(ii);y,x",&y,&x))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000960 return NULL;
961 rtn2 = mvwinstr(self->win,y,x,rtn);
962 break;
963 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000964 if (!PyArg_Parse(args, "(iii);y,x,n", &y, &x, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000965 return NULL;
966 rtn2 = mvwinnstr(self->win, y, x, rtn, n);
967 break;
968 default:
969 PyErr_SetString(PyExc_TypeError, "instr requires 0 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +0000970 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000971 }
972 if (rtn2 == ERR)
973 rtn[0] = 0;
974 return PyString_FromString(rtn);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000975}
976
977static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000978PyCursesWindow_InsStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000979{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000980 int rtn;
981 int x, y;
982 char *str;
983 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
984 int use_xy = FALSE, use_attr = FALSE;
985
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000986 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000987 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000988 if (!PyArg_Parse(args,"s;str", &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000989 return NULL;
990 break;
991 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000992 if (!PyArg_Parse(args,"(sl);str,attr", &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000993 return NULL;
994 use_attr = TRUE;
995 break;
996 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +0000997 if (!PyArg_Parse(args,"(iis);y,x,str", &y, &x, &str))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +0000998 return NULL;
999 use_xy = TRUE;
1000 break;
1001 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001002 if (!PyArg_Parse(args,"(iisl);y,x,str,attr", &y, &x, &str, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001003 return NULL;
1004 use_xy = use_attr = TRUE;
1005 break;
1006 default:
1007 PyErr_SetString(PyExc_TypeError, "insstr requires 1 to 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001008 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001009 }
1010
1011 if (use_attr == TRUE) {
1012 attr_old = getattrs(self->win);
1013 wattrset(self->win,attr);
1014 }
1015 if (use_xy == TRUE)
1016 rtn = mvwinsstr(self->win,y,x,str);
1017 else
1018 rtn = winsstr(self->win,str);
1019 if (use_attr == TRUE)
1020 wattrset(self->win,attr_old);
1021 return PyCursesCheckERR(rtn, "insstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001022}
1023
1024static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001025PyCursesWindow_InsNStr(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001026{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001027 int rtn, x, y, n;
1028 char *str;
1029 attr_t attr = A_NORMAL , attr_old = A_NORMAL;
1030 int use_xy = FALSE, use_attr = FALSE;
1031
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001032 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001033 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001034 if (!PyArg_Parse(args,"(si);str,n", &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001035 return NULL;
1036 break;
1037 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001038 if (!PyArg_Parse(args,"(sil);str,n,attr", &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001039 return NULL;
1040 use_attr = TRUE;
1041 break;
1042 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001043 if (!PyArg_Parse(args,"(iisi);y,x,str,n", &y, &x, &str, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001044 return NULL;
1045 use_xy = TRUE;
1046 break;
1047 case 5:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001048 if (!PyArg_Parse(args,"(iisil);y,x,str,n,attr", &y, &x, &str, &n, &attr))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001049 return NULL;
1050 use_xy = use_attr = TRUE;
1051 break;
1052 default:
1053 PyErr_SetString(PyExc_TypeError, "insnstr requires 2 to 5 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001054 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001055 }
1056
1057 if (use_attr == TRUE) {
1058 attr_old = getattrs(self->win);
1059 wattrset(self->win,attr);
1060 }
1061 if (use_xy == TRUE)
1062 rtn = mvwinsnstr(self->win,y,x,str,n);
1063 else
1064 rtn = winsnstr(self->win,str,n);
1065 if (use_attr == TRUE)
1066 wattrset(self->win,attr_old);
1067 return PyCursesCheckERR(rtn, "insnstr");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001068}
1069
1070static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001071PyCursesWindow_Is_LineTouched(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001072{
1073 int line, erg;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001074 if (!PyArg_Parse(args,"i;line", &line))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001075 return NULL;
1076 erg = is_linetouched(self->win, line);
1077 if (erg == ERR) {
1078 PyErr_SetString(PyExc_TypeError,
1079 "is_linetouched: line number outside of boundaries");
1080 return NULL;
1081 } else
1082 if (erg == FALSE) {
1083 Py_INCREF(Py_False);
1084 return Py_False;
1085 } else {
1086 Py_INCREF(Py_True);
1087 return Py_True;
1088 }
1089}
1090
1091static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001092PyCursesWindow_NoOutRefresh(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001093{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001094 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001095 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001096
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00001097#if defined(__NetBSD__)
1098 if (0) {
1099#else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001100 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00001101#endif
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001102 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001103 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001104 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001105 "(iiiiii);" \
1106 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
1107 &pminrow, &pmincol, &sminrow,
1108 &smincol, &smaxrow, &smaxcol))
1109 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001110 Py_BEGIN_ALLOW_THREADS
1111 rtn = pnoutrefresh(self->win,
1112 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +00001113 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001114 Py_END_ALLOW_THREADS
1115 return PyCursesCheckERR(rtn, "pnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001116 default:
1117 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001118 "noutrefresh() called for a pad "
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001119 "requires 6 arguments");
1120 return NULL;
1121 }
1122 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001123 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001124 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001125
1126 Py_BEGIN_ALLOW_THREADS
1127 rtn = wnoutrefresh(self->win);
1128 Py_END_ALLOW_THREADS
1129 return PyCursesCheckERR(rtn, "wnoutrefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001130 }
1131}
1132
1133static PyObject *
Andrew M. Kuchling9de6ffa2000-12-21 16:22:22 +00001134PyCursesWindow_Overlay(PyCursesWindowObject *self, PyObject *args)
1135{
1136 PyCursesWindowObject *temp;
1137 int use_copywin = FALSE;
1138 int sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol;
1139 int rtn;
1140
1141 switch (ARG_COUNT(args)) {
1142 case 1:
1143 if (!PyArg_ParseTuple(args, "O!;window object",
1144 &PyCursesWindow_Type, &temp))
1145 return NULL;
1146 break;
1147 case 7:
1148 if (!PyArg_ParseTuple(args, "(O!iiiiii);window object, int, int, int, int, int, int",
1149 &PyCursesWindow_Type, &temp, &sminrow, &smincol,
1150 &dminrow, &dmincol, &dmaxrow, &dmaxcol))
1151 return NULL;
1152 use_copywin = TRUE;
1153 break;
1154 default:
1155 PyErr_SetString(PyExc_TypeError,
1156 "overlay requires one or seven arguments");
1157 return NULL;
1158 }
1159
1160 if (use_copywin == TRUE) {
1161 rtn = copywin(self->win, temp->win, sminrow, smincol,
1162 dminrow, dmincol, dmaxrow, dmaxcol, TRUE);
1163 return PyCursesCheckERR(rtn, "copywin");
1164 }
1165 else {
1166 rtn = overlay(self->win, temp->win);
1167 return PyCursesCheckERR(rtn, "overlay");
1168 }
1169}
1170
1171static PyObject *
1172PyCursesWindow_Overwrite(PyCursesWindowObject *self, PyObject *args)
1173{
1174 PyCursesWindowObject *temp;
1175 int use_copywin = FALSE;
1176 int sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol;
1177 int rtn;
1178
1179 switch (ARG_COUNT(args)) {
1180 case 1:
1181 if (!PyArg_ParseTuple(args, "O!;window object",
1182 &PyCursesWindow_Type, &temp))
1183 return NULL;
1184 break;
1185 case 7:
1186 if (!PyArg_ParseTuple(args, "(O!iiiiii);window object, int, int, int, int, int, int",
1187 &PyCursesWindow_Type, &temp, &sminrow, &smincol,
1188 &dminrow, &dmincol, &dmaxrow, &dmaxcol))
1189 return NULL;
1190 use_copywin = TRUE;
1191 break;
1192 default:
1193 PyErr_SetString(PyExc_TypeError,
1194 "overwrite requires one or seven arguments");
1195 return NULL;
1196 }
1197
1198 if (use_copywin == TRUE) {
1199 rtn = copywin(self->win, temp->win, sminrow, smincol,
1200 dminrow, dmincol, dmaxrow, dmaxcol, FALSE);
1201 return PyCursesCheckERR(rtn, "copywin");
1202 }
1203 else {
1204 rtn = overwrite(self->win, temp->win);
1205 return PyCursesCheckERR(rtn, "overwrite");
1206 }
1207}
1208
1209static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001210PyCursesWindow_PutWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001211{
1212 PyObject *temp;
1213
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001214 if (!PyArg_Parse(args, "O;fileobj", &temp))
Guido van Rossum85738471995-02-17 13:50:17 +00001215 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001216 if (!PyFile_Check(temp)) {
1217 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1218 return NULL;
1219 }
1220 return PyCursesCheckERR(putwin(self->win, PyFile_AsFile(temp)),
1221 "putwin");
1222}
1223
1224static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001225PyCursesWindow_RedrawLine(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001226{
1227 int beg, num;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001228 if (!PyArg_Parse(args,"(ii);beg,num", &beg, &num))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001229 return NULL;
1230 return PyCursesCheckERR(wredrawln(self->win,beg,num), "redrawln");
1231}
1232
1233static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001234PyCursesWindow_Refresh(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001235{
1236 int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001237 int rtn;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001238
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00001239#if defined(__NetBSD__)
1240 if (0) {
1241#else
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001242 if (self->win->_flags & _ISPAD) {
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00001243#endif
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001244 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001245 case 6:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001246 if (!PyArg_Parse(args,
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001247 "(iiiiii);" \
1248 "pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol",
1249 &pminrow, &pmincol, &sminrow,
1250 &smincol, &smaxrow, &smaxcol))
1251 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001252
1253 Py_BEGIN_ALLOW_THREADS
1254 rtn = prefresh(self->win,
1255 pminrow, pmincol, sminrow,
Andrew M. Kuchlingb6e46872000-06-27 15:01:10 +00001256 smincol, smaxrow, smaxcol);
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001257 Py_END_ALLOW_THREADS
1258 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001259 default:
1260 PyErr_SetString(PyCursesError,
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001261 "refresh() for a pad requires 6 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001262 return NULL;
1263 }
1264 } else {
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001265 if (!PyArg_NoArgs(args))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001266 return NULL;
Andrew M. Kuchlingf4195722000-06-23 01:36:21 +00001267 Py_BEGIN_ALLOW_THREADS
1268 rtn = wrefresh(self->win);
1269 Py_END_ALLOW_THREADS
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001270 return PyCursesCheckERR(rtn, "prefresh");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001271 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001272}
1273
1274static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001275PyCursesWindow_SetScrollRegion(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001276{
1277 int x, y;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001278 if (!PyArg_Parse(args,"(ii);top, bottom",&y,&x))
Guido van Rossum85738471995-02-17 13:50:17 +00001279 return NULL;
1280 return PyCursesCheckERR(wsetscrreg(self->win,y,x), "wsetscrreg");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001281}
1282
1283static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001284PyCursesWindow_SubWin(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001285{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001286 WINDOW *win;
1287 int nlines, ncols, begin_y, begin_x;
1288
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001289 nlines = 0;
1290 ncols = 0;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001291 switch (ARG_COUNT(args)) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001292 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001293 if (!PyArg_Parse(args,"(ii);begin_y,begin_x",&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001294 return NULL;
1295 break;
1296 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001297 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001298 &nlines,&ncols,&begin_y,&begin_x))
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001299 return NULL;
1300 break;
1301 default:
1302 PyErr_SetString(PyExc_TypeError, "subwin requires 2 or 4 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001303 return NULL;
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001304 }
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001305
Andrew M. Kuchling8353f622000-07-26 18:36:27 +00001306 /* printf("Subwin: %i %i %i %i \n", nlines, ncols, begin_y, begin_x); */
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00001307#if !defined(__NetBSD__)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001308 if (self->win->_flags & _ISPAD)
1309 win = subpad(self->win, nlines, ncols, begin_y, begin_x);
1310 else
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00001311#endif
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001312 win = subwin(self->win, nlines, ncols, begin_y, begin_x);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001313
1314 if (win == NULL) {
1315 PyErr_SetString(PyCursesError, catchall_NULL);
1316 return NULL;
1317 }
1318
1319 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001320}
1321
1322static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001323PyCursesWindow_Scroll(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001324{
Andrew M. Kuchlinge1c43522001-01-29 20:31:29 +00001325 int nlines;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001326 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001327 case 0:
1328 return PyCursesCheckERR(scroll(self->win), "scroll");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001329 case 1:
Andrew M. Kuchlinge1c43522001-01-29 20:31:29 +00001330 if (!PyArg_Parse(args, "i;nlines", &nlines))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001331 return NULL;
Andrew M. Kuchlinge1c43522001-01-29 20:31:29 +00001332 return PyCursesCheckERR(wscrl(self->win, nlines), "scroll");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001333 default:
1334 PyErr_SetString(PyExc_TypeError, "scroll requires 0 or 1 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001335 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001336 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00001337}
1338
1339static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001340PyCursesWindow_TouchLine(PyCursesWindowObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001341{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001342 int st, cnt, val;
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001343 switch (ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001344 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001345 if (!PyArg_Parse(args,"(ii);start,count",&st,&cnt))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001346 return NULL;
1347 return PyCursesCheckERR(touchline(self->win,st,cnt), "touchline");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001348 case 3:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001349 if (!PyArg_Parse(args, "(iii);start,count,val", &st, &cnt, &val))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001350 return NULL;
1351 return PyCursesCheckERR(wtouchln(self->win, st, cnt, val), "touchline");
1352 default:
1353 PyErr_SetString(PyExc_TypeError, "touchline requires 2 or 3 arguments");
Guido van Rossum85738471995-02-17 13:50:17 +00001354 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001355 }
1356}
1357
1358static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001359PyCursesWindow_Vline(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001360{
1361 PyObject *temp;
1362 chtype ch;
1363 int n, x, y, code = OK;
1364 attr_t attr = A_NORMAL;
1365
1366 switch (ARG_COUNT(args)) {
1367 case 2:
1368 if (!PyArg_Parse(args, "(Oi);ch or int,n", &temp, &n))
1369 return NULL;
1370 break;
1371 case 3:
1372 if (!PyArg_Parse(args, "(Oil);ch or int,n,attr", &temp, &n, &attr))
1373 return NULL;
1374 break;
1375 case 4:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001376 if (!PyArg_Parse(args, "(iiOi);y,x,ch or int,n", &y, &x, &temp, &n))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001377 return NULL;
1378 code = wmove(self->win, y, x);
1379 break;
1380 case 5:
1381 if (!PyArg_Parse(args, "(iiOil); y,x,ch or int,n,attr",
1382 &y, &x, &temp, &n, &attr))
1383 return NULL;
1384 code = wmove(self->win, y, x);
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +00001385 break;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001386 default:
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +00001387 PyErr_SetString(PyExc_TypeError, "vline requires 2 to 5 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001388 return NULL;
1389 }
1390
1391 if (code != ERR) {
1392 if (!PyCurses_ConvertToChtype(temp, &ch)) {
1393 PyErr_SetString(PyExc_TypeError,
1394 "argument 1 or 3 must be a ch or an int");
1395 return NULL;
1396 }
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001397 return PyCursesCheckERR(wvline(self->win, ch | attr, n), "vline");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001398 } else
1399 return PyCursesCheckERR(code, "wmove");
Guido van Rossumf6971e21994-08-30 12:25:20 +00001400}
1401
1402static PyMethodDef PyCursesWindow_Methods[] = {
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001403 {"addch", (PyCFunction)PyCursesWindow_AddCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001404 {"addnstr", (PyCFunction)PyCursesWindow_AddNStr},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001405 {"addstr", (PyCFunction)PyCursesWindow_AddStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001406 {"attroff", (PyCFunction)PyCursesWindow_wattroff},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001407 {"attron", (PyCFunction)PyCursesWindow_wattron},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001408 {"attrset", (PyCFunction)PyCursesWindow_wattrset},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001409 {"bkgd", (PyCFunction)PyCursesWindow_Bkgd},
1410 {"bkgdset", (PyCFunction)PyCursesWindow_BkgdSet},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001411 {"border", (PyCFunction)PyCursesWindow_Border, METH_VARARGS},
1412 {"box", (PyCFunction)PyCursesWindow_Box},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001413 {"clear", (PyCFunction)PyCursesWindow_wclear},
1414 {"clearok", (PyCFunction)PyCursesWindow_clearok},
1415 {"clrtobot", (PyCFunction)PyCursesWindow_wclrtobot},
1416 {"clrtoeol", (PyCFunction)PyCursesWindow_wclrtoeol},
1417 {"cursyncup", (PyCFunction)PyCursesWindow_wcursyncup},
1418 {"delch", (PyCFunction)PyCursesWindow_DelCh},
1419 {"deleteln", (PyCFunction)PyCursesWindow_wdeleteln},
1420 {"derwin", (PyCFunction)PyCursesWindow_DerWin},
1421 {"echochar", (PyCFunction)PyCursesWindow_EchoChar},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001422#ifdef NCURSES_MOUSE_VERSION
1423 {"enclose", (PyCFunction)PyCursesWindow_Enclose},
1424#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001425 {"erase", (PyCFunction)PyCursesWindow_werase},
1426 {"getbegyx", (PyCFunction)PyCursesWindow_getbegyx},
1427 {"getbkgd", (PyCFunction)PyCursesWindow_GetBkgd},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001428 {"getch", (PyCFunction)PyCursesWindow_GetCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001429 {"getkey", (PyCFunction)PyCursesWindow_GetKey},
1430 {"getmaxyx", (PyCFunction)PyCursesWindow_getmaxyx},
1431 {"getparyx", (PyCFunction)PyCursesWindow_getparyx},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001432 {"getstr", (PyCFunction)PyCursesWindow_GetStr},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001433 {"getyx", (PyCFunction)PyCursesWindow_getyx},
1434 {"hline", (PyCFunction)PyCursesWindow_Hline},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001435 {"idcok", (PyCFunction)PyCursesWindow_idcok},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001436 {"idlok", (PyCFunction)PyCursesWindow_idlok},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001437 {"immedok", (PyCFunction)PyCursesWindow_immedok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001438 {"inch", (PyCFunction)PyCursesWindow_InCh},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001439 {"insch", (PyCFunction)PyCursesWindow_InsCh},
1440 {"insdelln", (PyCFunction)PyCursesWindow_winsdelln},
1441 {"insertln", (PyCFunction)PyCursesWindow_winsertln},
1442 {"insnstr", (PyCFunction)PyCursesWindow_InsNStr},
1443 {"insstr", (PyCFunction)PyCursesWindow_InsStr},
1444 {"instr", (PyCFunction)PyCursesWindow_InStr},
1445 {"is_linetouched", (PyCFunction)PyCursesWindow_Is_LineTouched},
1446 {"is_wintouched", (PyCFunction)PyCursesWindow_is_wintouched},
1447 {"keypad", (PyCFunction)PyCursesWindow_keypad},
1448 {"leaveok", (PyCFunction)PyCursesWindow_leaveok},
1449 {"move", (PyCFunction)PyCursesWindow_wmove},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001450 {"mvderwin", (PyCFunction)PyCursesWindow_mvderwin},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001451 {"mvwin", (PyCFunction)PyCursesWindow_mvwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001452 {"nodelay", (PyCFunction)PyCursesWindow_nodelay},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001453 {"notimeout", (PyCFunction)PyCursesWindow_notimeout},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001454 {"noutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh},
Andrew M. Kuchlinga98e92b2000-08-20 23:37:02 +00001455 /* Backward compatibility alias -- remove in Python 2.1 */
Andrew M. Kuchling9de6ffa2000-12-21 16:22:22 +00001456 {"nooutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh},
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +00001457 {"overlay", (PyCFunction)PyCursesWindow_Overlay, METH_VARARGS},
1458 {"overwrite", (PyCFunction)PyCursesWindow_Overwrite,
1459 METH_VARARGS},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001460 {"putwin", (PyCFunction)PyCursesWindow_PutWin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001461 {"redrawln", (PyCFunction)PyCursesWindow_RedrawLine},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001462 {"redrawwin", (PyCFunction)PyCursesWindow_redrawwin},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001463 {"refresh", (PyCFunction)PyCursesWindow_Refresh},
Andrew M. Kuchlinga1e4b052000-06-27 21:49:47 +00001464#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001465 {"resize", (PyCFunction)PyCursesWindow_wresize},
1466#endif
1467 {"scroll", (PyCFunction)PyCursesWindow_Scroll},
1468 {"scrollok", (PyCFunction)PyCursesWindow_scrollok},
Sjoerd Mullender14ece161995-03-17 12:18:38 +00001469 {"setscrreg", (PyCFunction)PyCursesWindow_SetScrollRegion},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001470 {"standend", (PyCFunction)PyCursesWindow_wstandend},
1471 {"standout", (PyCFunction)PyCursesWindow_wstandout},
1472 {"subpad", (PyCFunction)PyCursesWindow_SubWin},
1473 {"subwin", (PyCFunction)PyCursesWindow_SubWin},
1474 {"syncdown", (PyCFunction)PyCursesWindow_wsyncdown},
1475 {"syncok", (PyCFunction)PyCursesWindow_syncok},
1476 {"syncup", (PyCFunction)PyCursesWindow_wsyncup},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00001477 {"timeout", (PyCFunction)PyCursesWindow_wtimeout},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001478 {"touchline", (PyCFunction)PyCursesWindow_TouchLine},
1479 {"touchwin", (PyCFunction)PyCursesWindow_touchwin},
1480 {"untouchwin", (PyCFunction)PyCursesWindow_untouchwin},
1481 {"vline", (PyCFunction)PyCursesWindow_Vline},
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +00001482 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00001483};
1484
1485static PyObject *
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00001486PyCursesWindow_GetAttr(PyCursesWindowObject *self, char *name)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001487{
Guido van Rossuma597dde1995-01-10 20:56:29 +00001488 return Py_FindMethod(PyCursesWindow_Methods, (PyObject *)self, name);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001489}
1490
Guido van Rossumf6971e21994-08-30 12:25:20 +00001491/* -------------------------------------------------------*/
Guido van Rossum85738471995-02-17 13:50:17 +00001492
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001493PyTypeObject PyCursesWindow_Type = {
Guido van Rossum6915c4d2001-01-19 00:28:08 +00001494 PyObject_HEAD_INIT(NULL)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001495 0, /*ob_size*/
1496 "curses window", /*tp_name*/
1497 sizeof(PyCursesWindowObject), /*tp_basicsize*/
1498 0, /*tp_itemsize*/
1499 /* methods */
1500 (destructor)PyCursesWindow_Dealloc, /*tp_dealloc*/
1501 0, /*tp_print*/
1502 (getattrfunc)PyCursesWindow_GetAttr, /*tp_getattr*/
1503 (setattrfunc)0, /*tp_setattr*/
1504 0, /*tp_compare*/
1505 0, /*tp_repr*/
1506 0, /*tp_as_number*/
1507 0, /*tp_as_sequence*/
1508 0, /*tp_as_mapping*/
1509 0, /*tp_hash*/
1510};
1511
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001512/*********************************************************************
1513 Global Functions
1514**********************************************************************/
Guido van Rossumf6971e21994-08-30 12:25:20 +00001515
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001516NoArgNoReturnFunction(beep)
1517NoArgNoReturnFunction(def_prog_mode)
1518NoArgNoReturnFunction(def_shell_mode)
1519NoArgNoReturnFunction(doupdate)
1520NoArgNoReturnFunction(endwin)
1521NoArgNoReturnFunction(flash)
1522NoArgNoReturnFunction(nocbreak)
1523NoArgNoReturnFunction(noecho)
1524NoArgNoReturnFunction(nonl)
1525NoArgNoReturnFunction(noraw)
1526NoArgNoReturnFunction(reset_prog_mode)
1527NoArgNoReturnFunction(reset_shell_mode)
1528NoArgNoReturnFunction(resetty)
1529NoArgNoReturnFunction(savetty)
1530
1531NoArgOrFlagNoReturnFunction(cbreak)
1532NoArgOrFlagNoReturnFunction(echo)
1533NoArgOrFlagNoReturnFunction(nl)
1534NoArgOrFlagNoReturnFunction(raw)
1535
1536NoArgReturnIntFunction(baudrate)
1537NoArgReturnIntFunction(termattrs)
1538
1539NoArgReturnStringFunction(termname)
1540NoArgReturnStringFunction(longname)
1541
1542NoArgTrueFalseFunction(can_change_color)
1543NoArgTrueFalseFunction(has_colors)
1544NoArgTrueFalseFunction(has_ic)
1545NoArgTrueFalseFunction(has_il)
1546NoArgTrueFalseFunction(isendwin)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001547NoArgNoReturnVoidFunction(filter)
1548NoArgNoReturnVoidFunction(flushinp)
1549NoArgNoReturnVoidFunction(noqiflush)
1550
1551static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001552PyCurses_Color_Content(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001553{
1554 short color,r,g,b;
1555
1556 PyCursesInitialised
1557 PyCursesInitialisedColor
1558
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001559 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001560 PyErr_SetString(PyExc_TypeError,
1561 "color_content requires 1 argument");
1562 return NULL;
1563 }
1564
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001565 if (!PyArg_Parse(args, "h;color", &color)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001566
1567 if (color_content(color, &r, &g, &b) != ERR)
1568 return Py_BuildValue("(iii)", r, g, b);
1569 else {
1570 PyErr_SetString(PyCursesError,
1571 "Argument 1 was out of range. Check value of COLORS.");
1572 return NULL;
1573 }
1574}
1575
1576static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001577PyCurses_color_pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001578{
1579 int n;
1580
1581 PyCursesInitialised
1582 PyCursesInitialisedColor
1583
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001584 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001585 PyErr_SetString(PyExc_TypeError, "color_pair requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001586 return NULL;
1587 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001588 if (!PyArg_Parse(args, "i;number", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001589 return PyInt_FromLong((long) (n << 8));
1590}
1591
1592static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001593PyCurses_Curs_Set(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001594{
1595 int vis,erg;
1596
1597 PyCursesInitialised
1598
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001599 if (ARG_COUNT(args)!=1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001600 PyErr_SetString(PyExc_TypeError, "curs_set requires 1 argument");
1601 return NULL;
1602 }
1603
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001604 if (!PyArg_Parse(args, "i;int", &vis)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001605
1606 erg = curs_set(vis);
1607 if (erg == ERR) return PyCursesCheckERR(erg, "curs_set");
1608
1609 return PyInt_FromLong((long) erg);
1610}
1611
1612static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001613PyCurses_Delay_Output(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001614{
1615 int ms;
1616
1617 PyCursesInitialised
1618
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001619 if (ARG_COUNT(args) != 1) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001620 PyErr_SetString(PyExc_TypeError, "delay_output requires 1 argument");
1621 return NULL;
1622 }
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001623 if (!PyArg_Parse(args, "i;ms", &ms)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001624
1625 return PyCursesCheckERR(delay_output(ms), "delay_output");
1626}
1627
1628static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001629PyCurses_EraseChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001630{
1631 char ch;
1632
1633 PyCursesInitialised
1634
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001635 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001636
1637 ch = erasechar();
1638
1639 return PyString_FromString(&ch);
1640}
1641
1642static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001643PyCurses_getsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001644{
1645 int x,y;
1646
1647 PyCursesInitialised
1648
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001649 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001650
1651 getsyx(y, x);
1652
1653 return Py_BuildValue("(ii)", y, x);
1654}
1655
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001656#ifdef NCURSES_MOUSE_VERSION
1657static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001658PyCurses_GetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001659{
1660 int rtn;
1661 MEVENT event;
1662
1663 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001664 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001665
1666 rtn = getmouse( &event );
1667 if (rtn == ERR) {
1668 PyErr_SetString(PyCursesError, "getmouse() returned ERR");
1669 return NULL;
1670 }
1671 return Py_BuildValue("(hiiil)",
1672 (short)event.id,
1673 event.x, event.y, event.z,
1674 (long) event.bstate);
1675}
1676
1677static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001678PyCurses_UngetMouse(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001679{
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00001680 MEVENT event;
1681
1682 PyCursesInitialised
1683 if (!PyArg_ParseTuple(args, "(hiiil)",
1684 &event.id,
1685 &event.x, &event.y, &event.z,
1686 (int *) &event.bstate))
1687 return NULL;
1688
1689 return PyCursesCheckERR(ungetmouse(&event), "ungetmouse");
1690}
1691#endif
1692
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001693static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001694PyCurses_GetWin(PyCursesWindowObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001695{
1696 WINDOW *win;
1697 PyObject *temp;
1698
1699 PyCursesInitialised
1700
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001701 if (!PyArg_Parse(args, "O;fileobj", &temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001702
1703 if (!PyFile_Check(temp)) {
1704 PyErr_SetString(PyExc_TypeError, "argument must be a file object");
1705 return NULL;
1706 }
1707
1708 win = getwin(PyFile_AsFile(temp));
1709
1710 if (win == NULL) {
1711 PyErr_SetString(PyCursesError, catchall_NULL);
1712 return NULL;
1713 }
1714
1715 return PyCursesWindow_New(win);
1716}
1717
1718static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001719PyCurses_HalfDelay(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001720{
1721 unsigned char tenths;
1722
1723 PyCursesInitialised
1724
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001725 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001726 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001727 if (!PyArg_Parse(args, "b;tenths", &tenths)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001728 break;
1729 default:
1730 PyErr_SetString(PyExc_TypeError, "halfdelay requires 1 argument");
1731 return NULL;
1732 }
1733
1734 return PyCursesCheckERR(halfdelay(tenths), "halfdelay");
1735}
1736
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00001737#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001738 /* No has_key! */
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001739static PyObject * PyCurses_has_key(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001740{
1741 int ch;
1742
1743 PyCursesInitialised
1744
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001745 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001746
1747 if (has_key(ch) == FALSE) {
1748 Py_INCREF(Py_False);
1749 return Py_False;
1750 }
1751 Py_INCREF(Py_True);
1752 return Py_True;
1753}
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00001754#endif /* STRICT_SYSV_CURSES */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001755
1756static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001757PyCurses_Init_Color(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001758{
1759 short color, r, g, b;
1760
1761 PyCursesInitialised
1762 PyCursesInitialisedColor
1763
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001764 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001765 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001766 if (!PyArg_Parse(args, "(hhhh);color,r,g,b", &color, &r, &g, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001767 break;
1768 default:
1769 PyErr_SetString(PyExc_TypeError, "init_color requires 4 arguments");
1770 return NULL;
1771 }
1772
1773 return PyCursesCheckERR(init_color(color, r, g, b), "init_color");
1774}
1775
1776static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001777PyCurses_Init_Pair(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001778{
1779 short pair, f, b;
1780
1781 PyCursesInitialised
1782 PyCursesInitialisedColor
1783
Andrew M. Kuchling4463acb2000-07-24 23:54:49 +00001784 if (ARG_COUNT(args) != 3) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001785 PyErr_SetString(PyExc_TypeError, "init_pair requires 3 arguments");
1786 return NULL;
1787 }
1788
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001789 if (!PyArg_Parse(args, "(hhh);pair, f, b", &pair, &f, &b)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001790
1791 return PyCursesCheckERR(init_pair(pair, f, b), "init_pair");
1792}
1793
Andrew M. Kuchling32552682000-12-22 21:52:27 +00001794static PyObject *ModDict;
1795
Guido van Rossumf6971e21994-08-30 12:25:20 +00001796static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001797PyCurses_InitScr(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001798{
Guido van Rossum56bf2351994-08-31 22:06:24 +00001799 WINDOW *win;
Andrew M. Kuchlinge1c43522001-01-29 20:31:29 +00001800 PyObject *nlines, *cols;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001801
1802 if (!PyArg_NoArgs(args)) return NULL;
1803
Guido van Rossum585c6dc1995-02-24 13:45:43 +00001804 if (initialised == TRUE) {
Guido van Rossumf6971e21994-08-30 12:25:20 +00001805 wrefresh(stdscr);
1806 return (PyObject *)PyCursesWindow_New(stdscr);
1807 }
Guido van Rossum56bf2351994-08-31 22:06:24 +00001808
1809 win = initscr();
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001810
Guido van Rossum85738471995-02-17 13:50:17 +00001811 if (win == NULL) {
1812 PyErr_SetString(PyCursesError, catchall_NULL);
1813 return NULL;
1814 }
1815
Andrew M. Kuchling26cc66f2000-11-18 17:45:59 +00001816 initialised = initialised_setupterm = TRUE;
Guido van Rossum56bf2351994-08-31 22:06:24 +00001817
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001818/* This was moved from initcurses() because it core dumped on SGI,
1819 where they're not defined until you've called initscr() */
1820#define SetDictInt(string,ch) \
1821 PyDict_SetItemString(ModDict,string,PyInt_FromLong((long) (ch)));
1822
1823 /* Here are some graphic symbols you can use */
1824 SetDictInt("ACS_ULCORNER", (ACS_ULCORNER));
1825 SetDictInt("ACS_LLCORNER", (ACS_LLCORNER));
1826 SetDictInt("ACS_URCORNER", (ACS_URCORNER));
1827 SetDictInt("ACS_LRCORNER", (ACS_LRCORNER));
1828 SetDictInt("ACS_LTEE", (ACS_LTEE));
1829 SetDictInt("ACS_RTEE", (ACS_RTEE));
1830 SetDictInt("ACS_BTEE", (ACS_BTEE));
1831 SetDictInt("ACS_TTEE", (ACS_TTEE));
1832 SetDictInt("ACS_HLINE", (ACS_HLINE));
1833 SetDictInt("ACS_VLINE", (ACS_VLINE));
1834 SetDictInt("ACS_PLUS", (ACS_PLUS));
1835 SetDictInt("ACS_S1", (ACS_S1));
1836 SetDictInt("ACS_S9", (ACS_S9));
1837 SetDictInt("ACS_DIAMOND", (ACS_DIAMOND));
1838 SetDictInt("ACS_CKBOARD", (ACS_CKBOARD));
1839 SetDictInt("ACS_DEGREE", (ACS_DEGREE));
1840 SetDictInt("ACS_PLMINUS", (ACS_PLMINUS));
1841 SetDictInt("ACS_BULLET", (ACS_BULLET));
1842 SetDictInt("ACS_LARROW", (ACS_LARROW));
1843 SetDictInt("ACS_RARROW", (ACS_RARROW));
1844 SetDictInt("ACS_DARROW", (ACS_DARROW));
1845 SetDictInt("ACS_UARROW", (ACS_UARROW));
1846 SetDictInt("ACS_BOARD", (ACS_BOARD));
1847 SetDictInt("ACS_LANTERN", (ACS_LANTERN));
1848 SetDictInt("ACS_BLOCK", (ACS_BLOCK));
1849 SetDictInt("ACS_BSSB", (ACS_ULCORNER));
1850 SetDictInt("ACS_SSBB", (ACS_LLCORNER));
1851 SetDictInt("ACS_BBSS", (ACS_URCORNER));
1852 SetDictInt("ACS_SBBS", (ACS_LRCORNER));
1853 SetDictInt("ACS_SBSS", (ACS_RTEE));
1854 SetDictInt("ACS_SSSB", (ACS_LTEE));
1855 SetDictInt("ACS_SSBS", (ACS_BTEE));
1856 SetDictInt("ACS_BSSS", (ACS_TTEE));
1857 SetDictInt("ACS_BSBS", (ACS_HLINE));
1858 SetDictInt("ACS_SBSB", (ACS_VLINE));
1859 SetDictInt("ACS_SSSS", (ACS_PLUS));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001860
1861 /* The following are never available with strict SYSV curses */
1862#ifdef ACS_S3
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001863 SetDictInt("ACS_S3", (ACS_S3));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001864#endif
1865#ifdef ACS_S7
1866 SetDictInt("ACS_S7", (ACS_S7));
1867#endif
1868#ifdef ACS_LEQUAL
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001869 SetDictInt("ACS_LEQUAL", (ACS_LEQUAL));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001870#endif
1871#ifdef ACS_GEQUAL
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001872 SetDictInt("ACS_GEQUAL", (ACS_GEQUAL));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001873#endif
1874#ifdef ACS_PI
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001875 SetDictInt("ACS_PI", (ACS_PI));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001876#endif
1877#ifdef ACS_NEQUAL
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001878 SetDictInt("ACS_NEQUAL", (ACS_NEQUAL));
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00001879#endif
1880#ifdef ACS_STERLING
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00001881 SetDictInt("ACS_STERLING", (ACS_STERLING));
1882#endif
1883
Andrew M. Kuchlinge1c43522001-01-29 20:31:29 +00001884 nlines = PyInt_FromLong((long) LINES);
1885 PyDict_SetItemString(ModDict, "LINES", nlines);
1886 Py_DECREF(nlines);
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001887 cols = PyInt_FromLong((long) COLS);
1888 PyDict_SetItemString(ModDict, "COLS", cols);
1889 Py_DECREF(cols);
Guido van Rossum56bf2351994-08-31 22:06:24 +00001890
1891 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00001892}
1893
Andrew M. Kuchling26cc66f2000-11-18 17:45:59 +00001894static PyObject *
1895PyCurses_setupterm(PyObject* self, PyObject *args, PyObject* keywds)
1896{
1897 int fd = -1;
1898 int err;
1899 char* termstr = NULL;
1900
1901 static char *kwlist[] = {"term", "fd", NULL};
1902
1903 if (!PyArg_ParseTupleAndKeywords(
1904 args,keywds,"|zi:setupterm",kwlist,&termstr,&fd)) {
1905 return NULL;
1906 }
1907
1908 if (fd == -1) {
1909 PyObject* sys_stdout;
1910
1911 sys_stdout = PySys_GetObject("stdout");
1912
1913 if (sys_stdout == NULL) {
1914 PyErr_SetString(
1915 PyCursesError,
1916 "lost sys.stdout");
1917 return NULL;
1918 }
1919
1920 fd = PyObject_AsFileDescriptor(sys_stdout);
1921
1922 if (fd == -1) {
1923 return NULL;
1924 }
1925 }
1926
1927 if (setupterm(termstr,fd,&err) == ERR) {
1928 char* s = "setupterm: unknown error";
1929
1930 if (err == 0) {
1931 s = "setupterm: could not find terminal";
1932 } else if (err == -1) {
1933 s = "setupterm: could not find terminfo database";
1934 }
1935
1936 PyErr_SetString(PyCursesError,s);
1937 return NULL;
1938 }
1939
1940 initialised_setupterm = TRUE;
1941
1942 Py_INCREF(Py_None);
1943 return Py_None;
1944}
Guido van Rossumf6971e21994-08-30 12:25:20 +00001945
1946static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001947PyCurses_IntrFlush(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00001948{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001949 int ch;
1950
1951 PyCursesInitialised
1952
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001953 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001954 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001955 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001956 break;
1957 default:
1958 PyErr_SetString(PyExc_TypeError, "intrflush requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00001959 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001960 }
1961
1962 return PyCursesCheckERR(intrflush(NULL,ch), "intrflush");
1963}
1964
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00001965#if !defined(__NetBSD__)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001966static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001967PyCurses_KeyName(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001968{
1969 const char *knp;
1970 int ch;
1971
1972 PyCursesInitialised
1973
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001974 if (!PyArg_Parse(args,"i",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001975
1976 knp = keyname(ch);
1977
1978 return PyString_FromString((knp == NULL) ? "" : (char *)knp);
1979}
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00001980#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001981
1982static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001983PyCurses_KillChar(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001984{
1985 char ch;
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 ch = killchar();
1990
1991 return PyString_FromString(&ch);
1992}
1993
1994static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00001995PyCurses_Meta(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00001996{
1997 int ch;
1998
1999 PyCursesInitialised
2000
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002001 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002002 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002003 if (!PyArg_Parse(args,"i;True(1), False(0)",&ch)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002004 break;
2005 default:
2006 PyErr_SetString(PyExc_TypeError, "meta requires 1 argument");
2007 return NULL;
2008 }
2009
2010 return PyCursesCheckERR(meta(stdscr, ch), "meta");
2011}
2012
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002013#ifdef NCURSES_MOUSE_VERSION
2014static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002015PyCurses_MouseInterval(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002016{
2017 int interval;
2018 PyCursesInitialised
2019
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002020 if (!PyArg_Parse(args,"i;interval",&interval))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002021 return NULL;
2022 return PyCursesCheckERR(mouseinterval(interval), "mouseinterval");
2023}
2024
2025static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002026PyCurses_MouseMask(PyObject *self, PyObject *args)
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002027{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002028 int newmask;
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002029 mmask_t oldmask, availmask;
2030
2031 PyCursesInitialised
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002032 if (!PyArg_Parse(args,"i;mousemask",&newmask))
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002033 return NULL;
2034 availmask = mousemask(newmask, &oldmask);
2035 return Py_BuildValue("(ll)", (long)availmask, (long)oldmask);
2036}
2037#endif
2038
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002039static PyObject *
Andrew M. Kuchling2824d7f2000-12-15 00:44:02 +00002040PyCurses_Napms(PyObject *self, PyObject *args)
2041{
2042 int ms;
2043
2044 PyCursesInitialised
2045 if (!PyArg_Parse(args, "i;ms", &ms)) return NULL;
2046
2047 return Py_BuildValue("i", napms(ms));
2048}
2049
2050
2051static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002052PyCurses_NewPad(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002053{
2054 WINDOW *win;
2055 int nlines, ncols;
2056
2057 PyCursesInitialised
2058
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002059 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002060
2061 win = newpad(nlines, ncols);
2062
2063 if (win == NULL) {
2064 PyErr_SetString(PyCursesError, catchall_NULL);
2065 return NULL;
2066 }
2067
2068 return (PyObject *)PyCursesWindow_New(win);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002069}
2070
2071static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002072PyCurses_NewWindow(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002073{
2074 WINDOW *win;
Andrew M. Kuchling5a76c442001-07-14 20:38:30 +00002075 int nlines, ncols, begin_y=0, begin_x=0;
Guido van Rossum85738471995-02-17 13:50:17 +00002076
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002077 PyCursesInitialised
2078
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002079 switch (ARG_COUNT(args)) {
Guido van Rossum85738471995-02-17 13:50:17 +00002080 case 2:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002081 if (!PyArg_Parse(args,"(ii);nlines,ncols",&nlines,&ncols))
Guido van Rossum85738471995-02-17 13:50:17 +00002082 return NULL;
2083 break;
2084 case 4:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002085 if (!PyArg_Parse(args, "(iiii);nlines,ncols,begin_y,begin_x",
Guido van Rossumf6971e21994-08-30 12:25:20 +00002086 &nlines,&ncols,&begin_y,&begin_x))
Guido van Rossum85738471995-02-17 13:50:17 +00002087 return NULL;
2088 break;
2089 default:
2090 PyErr_SetString(PyExc_TypeError, "newwin requires 2 or 4 arguments");
2091 return NULL;
2092 }
2093
Andrew M. Kuchling5a76c442001-07-14 20:38:30 +00002094 win = newwin(nlines,ncols,begin_y,begin_x);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002095 if (win == NULL) {
Guido van Rossum85738471995-02-17 13:50:17 +00002096 PyErr_SetString(PyCursesError, catchall_NULL);
2097 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002098 }
Guido van Rossum85738471995-02-17 13:50:17 +00002099
Guido van Rossumf6971e21994-08-30 12:25:20 +00002100 return (PyObject *)PyCursesWindow_New(win);
2101}
2102
2103static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002104PyCurses_Pair_Content(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002105{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002106 short pair,f,b;
2107
2108 PyCursesInitialised
2109 PyCursesInitialisedColor
2110
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002111 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002112 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002113 if (!PyArg_Parse(args, "h;pair", &pair)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002114 break;
2115 default:
2116 PyErr_SetString(PyExc_TypeError, "pair_content requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00002117 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002118 }
2119
2120 if (!pair_content(pair, &f, &b)) {
2121 PyErr_SetString(PyCursesError,
2122 "Argument 1 was out of range. (1..COLOR_PAIRS-1)");
2123 return NULL;
2124 }
2125
2126 return Py_BuildValue("(ii)", f, b);
2127}
2128
2129static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002130PyCurses_pair_number(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002131{
2132 int n;
2133
2134 PyCursesInitialised
2135 PyCursesInitialisedColor
2136
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002137 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002138 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002139 if (!PyArg_Parse(args, "i;pairvalue", &n)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002140 break;
2141 default:
2142 PyErr_SetString(PyExc_TypeError,
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002143 "pair_number requires 1 argument");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002144 return NULL;
2145 }
2146
2147 return PyInt_FromLong((long) ((n & A_COLOR) >> 8));
2148}
2149
2150static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002151PyCurses_Putp(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002152{
2153 char *str;
2154
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002155 if (!PyArg_Parse(args,"s;str", &str)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002156 return PyCursesCheckERR(putp(str), "putp");
2157}
2158
2159static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002160PyCurses_QiFlush(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002161{
2162 int flag = 0;
2163
2164 PyCursesInitialised
2165
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002166 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002167 case 0:
2168 qiflush();
2169 Py_INCREF(Py_None);
2170 return Py_None;
2171 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002172 if (!PyArg_Parse(args, "i;True(1) or False(0)", &flag)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002173 if (flag) qiflush();
2174 else noqiflush();
2175 Py_INCREF(Py_None);
2176 return Py_None;
2177 default:
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002178 PyErr_SetString(PyExc_TypeError, "qiflush requires 0 or 1 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002179 return NULL;
2180 }
2181}
2182
2183static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002184PyCurses_setsyx(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002185{
2186 int y,x;
2187
2188 PyCursesInitialised
2189
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002190 if (ARG_COUNT(args)!=2) {
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002191 PyErr_SetString(PyExc_TypeError, "setsyx requires 2 arguments");
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002192 return NULL;
2193 }
2194
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002195 if (!PyArg_Parse(args, "(ii);y, x", &y, &x)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002196
2197 setsyx(y,x);
2198
Guido van Rossumf6971e21994-08-30 12:25:20 +00002199 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00002200 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002201}
2202
2203static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002204PyCurses_Start_Color(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002205{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002206 int code;
2207 PyObject *c, *cp;
2208
2209 PyCursesInitialised
2210
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002211 if (!PyArg_NoArgs(args)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002212
2213 code = start_color();
2214 if (code != ERR) {
2215 initialisedcolors = TRUE;
2216 c = PyInt_FromLong((long) COLORS);
2217 PyDict_SetItemString(ModDict, "COLORS", c);
2218 Py_DECREF(c);
2219 cp = PyInt_FromLong((long) COLOR_PAIRS);
2220 PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp);
2221 Py_DECREF(cp);
2222 Py_INCREF(Py_None);
2223 return Py_None;
2224 } else {
2225 PyErr_SetString(PyCursesError, "start_color() returned ERR");
Guido van Rossum85738471995-02-17 13:50:17 +00002226 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002227 }
2228}
2229
2230static PyObject *
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002231PyCurses_tigetflag(PyObject *self, PyObject *args)
2232{
2233 char *capname;
2234
Andrew M. Kuchling26cc66f2000-11-18 17:45:59 +00002235 PyCursesSetupTermCalled;
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002236
2237 if (!PyArg_ParseTuple(args, "z", &capname))
2238 return NULL;
2239
2240 return PyInt_FromLong( (long) tigetflag( capname ) );
2241}
2242
2243static PyObject *
2244PyCurses_tigetnum(PyObject *self, PyObject *args)
2245{
2246 char *capname;
2247
Andrew M. Kuchling26cc66f2000-11-18 17:45:59 +00002248 PyCursesSetupTermCalled;
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002249
2250 if (!PyArg_ParseTuple(args, "z", &capname))
2251 return NULL;
2252
2253 return PyInt_FromLong( (long) tigetnum( capname ) );
2254}
2255
2256static PyObject *
2257PyCurses_tigetstr(PyObject *self, PyObject *args)
2258{
2259 char *capname;
2260
Andrew M. Kuchling26cc66f2000-11-18 17:45:59 +00002261 PyCursesSetupTermCalled;
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002262
2263 if (!PyArg_ParseTuple(args, "z", &capname))
2264 return NULL;
2265
2266 capname = tigetstr( capname );
2267 if (capname == 0 || capname == (char*) -1) {
2268 Py_INCREF(Py_None);
2269 return Py_None;
2270 }
2271 return PyString_FromString( capname );
2272}
2273
2274static PyObject *
Andrew M. Kuchlingf16e0ed2000-11-07 03:35:24 +00002275PyCurses_tparm(PyObject *self, PyObject *args)
2276{
2277 char* fmt;
2278 char* result = NULL;
2279 int i1,i2,i3,i4,i5,i6,i7,i8,i9;
2280
Andrew M. Kuchling26cc66f2000-11-18 17:45:59 +00002281 PyCursesSetupTermCalled;
Andrew M. Kuchlingf16e0ed2000-11-07 03:35:24 +00002282
2283 if (!PyArg_ParseTuple(args, "s|iiiiiiiii:tparm",
2284 &fmt, &i1, &i2, &i3, &i4,
2285 &i5, &i6, &i7, &i8, &i9)) {
2286 return NULL;
2287 }
2288
2289 switch (PyTuple_GET_SIZE(args)) {
2290 case 1:
2291 result = tparm(fmt);
2292 break;
2293 case 2:
2294 result = tparm(fmt,i1);
2295 break;
2296 case 3:
2297 result = tparm(fmt,i1,i2);
2298 break;
2299 case 4:
2300 result = tparm(fmt,i1,i2,i3);
2301 break;
2302 case 5:
2303 result = tparm(fmt,i1,i2,i3,i4);
2304 break;
2305 case 6:
2306 result = tparm(fmt,i1,i2,i3,i4,i5);
2307 break;
2308 case 7:
2309 result = tparm(fmt,i1,i2,i3,i4,i5,i6);
2310 break;
2311 case 8:
2312 result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7);
2313 break;
2314 case 9:
2315 result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7,i8);
2316 break;
2317 case 10:
2318 result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7,i8,i9);
2319 break;
2320 }
2321
2322 return PyString_FromString(result);
2323}
2324
2325static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002326PyCurses_TypeAhead(PyObject *self, PyObject *args)
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002327{
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002328 int fd;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002329
2330 PyCursesInitialised
2331
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002332 if (!PyArg_Parse(args,"i;fd",&fd)) return NULL;
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002333
2334 PyCursesCheckERR(typeahead( fd ), "typeahead");
2335 Py_INCREF(Py_None);
2336 return Py_None;
2337}
2338
2339static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002340PyCurses_UnCtrl(PyObject *self, PyObject *args)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002341{
2342 PyObject *temp;
2343 chtype ch;
2344
2345 PyCursesInitialised
2346
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002347 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002348
2349 if (PyInt_Check(temp))
2350 ch = (chtype) PyInt_AsLong(temp);
2351 else if (PyString_Check(temp))
2352 ch = (chtype) *PyString_AsString(temp);
2353 else {
2354 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
2355 return NULL;
2356 }
2357
2358 return PyString_FromString(unctrl(ch));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002359}
2360
2361static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002362PyCurses_UngetCh(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002363{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002364 PyObject *temp;
2365 chtype ch;
2366
2367 PyCursesInitialised
2368
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002369 if (!PyArg_Parse(args,"O;ch or int",&temp)) return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002370
2371 if (PyInt_Check(temp))
2372 ch = (chtype) PyInt_AsLong(temp);
2373 else if (PyString_Check(temp))
2374 ch = (chtype) *PyString_AsString(temp);
2375 else {
2376 PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
Guido van Rossum85738471995-02-17 13:50:17 +00002377 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002378 }
2379
Guido van Rossum85738471995-02-17 13:50:17 +00002380 return PyCursesCheckERR(ungetch(ch), "ungetch");
Guido van Rossumf6971e21994-08-30 12:25:20 +00002381}
2382
2383static PyObject *
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002384PyCurses_Use_Env(PyObject *self, PyObject *args)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002385{
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002386 int flag;
2387
2388 PyCursesInitialised
2389
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002390 switch(ARG_COUNT(args)) {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002391 case 1:
Andrew M. Kuchlingad9b1f82000-07-09 14:35:00 +00002392 if (!PyArg_Parse(args,"i;True(1), False(0)",&flag))
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002393 return NULL;
2394 break;
2395 default:
2396 PyErr_SetString(PyExc_TypeError, "use_env requires 1 argument");
Guido van Rossum85738471995-02-17 13:50:17 +00002397 return NULL;
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002398 }
2399 use_env(flag);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002400 Py_INCREF(Py_None);
Guido van Rossum85738471995-02-17 13:50:17 +00002401 return Py_None;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002402}
2403
Guido van Rossumf6971e21994-08-30 12:25:20 +00002404/* List of functions defined in the module */
2405
2406static PyMethodDef PyCurses_methods[] = {
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002407 {"baudrate", (PyCFunction)PyCurses_baudrate},
2408 {"beep", (PyCFunction)PyCurses_beep},
2409 {"can_change_color", (PyCFunction)PyCurses_can_change_color},
2410 {"cbreak", (PyCFunction)PyCurses_cbreak},
2411 {"color_content", (PyCFunction)PyCurses_Color_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002412 {"color_pair", (PyCFunction)PyCurses_color_pair},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002413 {"curs_set", (PyCFunction)PyCurses_Curs_Set},
2414 {"def_prog_mode", (PyCFunction)PyCurses_def_prog_mode},
2415 {"def_shell_mode", (PyCFunction)PyCurses_def_shell_mode},
2416 {"delay_output", (PyCFunction)PyCurses_Delay_Output},
2417 {"doupdate", (PyCFunction)PyCurses_doupdate},
2418 {"echo", (PyCFunction)PyCurses_echo},
2419 {"endwin", (PyCFunction)PyCurses_endwin},
2420 {"erasechar", (PyCFunction)PyCurses_EraseChar},
2421 {"filter", (PyCFunction)PyCurses_filter},
2422 {"flash", (PyCFunction)PyCurses_flash},
2423 {"flushinp", (PyCFunction)PyCurses_flushinp},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002424#ifdef NCURSES_MOUSE_VERSION
2425 {"getmouse", (PyCFunction)PyCurses_GetMouse},
2426 {"ungetmouse", (PyCFunction)PyCurses_UngetMouse, METH_VARARGS},
2427#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002428 {"getsyx", (PyCFunction)PyCurses_getsyx},
2429 {"getwin", (PyCFunction)PyCurses_GetWin},
2430 {"has_colors", (PyCFunction)PyCurses_has_colors},
2431 {"has_ic", (PyCFunction)PyCurses_has_ic},
2432 {"has_il", (PyCFunction)PyCurses_has_il},
Andrew M. Kuchlingbf680262000-07-25 12:37:41 +00002433#ifndef STRICT_SYSV_CURSES
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002434 {"has_key", (PyCFunction)PyCurses_has_key},
Guido van Rossumf6971e21994-08-30 12:25:20 +00002435#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002436 {"halfdelay", (PyCFunction)PyCurses_HalfDelay},
2437 {"init_color", (PyCFunction)PyCurses_Init_Color},
2438 {"init_pair", (PyCFunction)PyCurses_Init_Pair},
2439 {"initscr", (PyCFunction)PyCurses_InitScr},
2440 {"intrflush", (PyCFunction)PyCurses_IntrFlush},
2441 {"isendwin", (PyCFunction)PyCurses_isendwin},
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00002442#if !defined(__NetBSD__)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002443 {"keyname", (PyCFunction)PyCurses_KeyName},
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00002444#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002445 {"killchar", (PyCFunction)PyCurses_KillChar},
2446 {"longname", (PyCFunction)PyCurses_longname},
2447 {"meta", (PyCFunction)PyCurses_Meta},
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002448#ifdef NCURSES_MOUSE_VERSION
2449 {"mouseinterval", (PyCFunction)PyCurses_MouseInterval},
2450 {"mousemask", (PyCFunction)PyCurses_MouseMask},
2451#endif
Andrew M. Kuchling2824d7f2000-12-15 00:44:02 +00002452 {"napms", (PyCFunction)PyCurses_Napms},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002453 {"newpad", (PyCFunction)PyCurses_NewPad},
2454 {"newwin", (PyCFunction)PyCurses_NewWindow},
2455 {"nl", (PyCFunction)PyCurses_nl},
2456 {"nocbreak", (PyCFunction)PyCurses_nocbreak},
2457 {"noecho", (PyCFunction)PyCurses_noecho},
2458 {"nonl", (PyCFunction)PyCurses_nonl},
2459 {"noqiflush", (PyCFunction)PyCurses_noqiflush},
2460 {"noraw", (PyCFunction)PyCurses_noraw},
2461 {"pair_content", (PyCFunction)PyCurses_Pair_Content},
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002462 {"pair_number", (PyCFunction)PyCurses_pair_number},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002463 {"putp", (PyCFunction)PyCurses_Putp},
2464 {"qiflush", (PyCFunction)PyCurses_QiFlush},
2465 {"raw", (PyCFunction)PyCurses_raw},
2466 {"reset_prog_mode", (PyCFunction)PyCurses_reset_prog_mode},
2467 {"reset_shell_mode", (PyCFunction)PyCurses_reset_shell_mode},
Andrew M. Kuchling1a104002000-07-06 18:14:03 +00002468 {"resetty", (PyCFunction)PyCurses_resetty},
2469 {"savetty", (PyCFunction)PyCurses_savetty},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002470 {"setsyx", (PyCFunction)PyCurses_setsyx},
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +00002471 {"setupterm", (PyCFunction)PyCurses_setupterm,
2472 METH_VARARGS|METH_KEYWORDS},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002473 {"start_color", (PyCFunction)PyCurses_Start_Color},
2474 {"termattrs", (PyCFunction)PyCurses_termattrs},
2475 {"termname", (PyCFunction)PyCurses_termname},
Andrew M. Kuchling70e89c12000-07-26 02:57:20 +00002476 {"tigetflag", (PyCFunction)PyCurses_tigetflag, METH_VARARGS},
2477 {"tigetnum", (PyCFunction)PyCurses_tigetnum, METH_VARARGS},
2478 {"tigetstr", (PyCFunction)PyCurses_tigetstr, METH_VARARGS},
Andrew M. Kuchlingf16e0ed2000-11-07 03:35:24 +00002479 {"tparm", (PyCFunction)PyCurses_tparm, METH_VARARGS},
Andrew M. Kuchling97311bb2000-06-21 01:41:48 +00002480 {"typeahead", (PyCFunction)PyCurses_TypeAhead},
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002481 {"unctrl", (PyCFunction)PyCurses_UnCtrl},
2482 {"ungetch", (PyCFunction)PyCurses_UngetCh},
2483 {"use_env", (PyCFunction)PyCurses_Use_Env},
Andrew M. Kuchling16e65a02001-10-20 16:05:52 +00002484 {NULL, NULL} /* sentinel */
Guido van Rossumf6971e21994-08-30 12:25:20 +00002485};
2486
2487/* Initialization function for the module */
2488
Guido van Rossum6915c4d2001-01-19 00:28:08 +00002489DL_EXPORT(void)
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00002490init_curses(void)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002491{
Andrew M. Kuchling32552682000-12-22 21:52:27 +00002492 PyObject *m, *d, *v, *c_api_object;
2493 static void *PyCurses_API[PyCurses_API_pointers];
2494
Guido van Rossum6915c4d2001-01-19 00:28:08 +00002495 /* Initialize object type */
2496 PyCursesWindow_Type.ob_type = &PyType_Type;
2497
Andrew M. Kuchling32552682000-12-22 21:52:27 +00002498 /* Initialize the C API pointer array */
2499 PyCurses_API[0] = (void *)&PyCursesWindow_Type;
2500 PyCurses_API[1] = (void *)func_PyCursesSetupTermCalled;
2501 PyCurses_API[2] = (void *)func_PyCursesInitialised;
2502 PyCurses_API[3] = (void *)func_PyCursesInitialisedColor;
Guido van Rossumf6971e21994-08-30 12:25:20 +00002503
2504 /* Create the module and add the functions */
Andrew M. Kuchlingb7f198e2000-06-10 23:12:32 +00002505 m = Py_InitModule("_curses", PyCurses_methods);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002506
Guido van Rossumf6971e21994-08-30 12:25:20 +00002507 /* Add some symbolic constants to the module */
2508 d = PyModule_GetDict(m);
Andrew M. Kuchling32552682000-12-22 21:52:27 +00002509 ModDict = d; /* For PyCurses_InitScr to use later */
2510
2511 /* Add a CObject for the C API */
2512 c_api_object = PyCObject_FromVoidPtr((void *)PyCurses_API, NULL);
2513 PyDict_SetItemString(d, "_C_API", c_api_object);
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002514
Guido van Rossum85738471995-02-17 13:50:17 +00002515 /* For exception curses.error */
Fred Drake589c35b2000-07-06 19:38:49 +00002516 PyCursesError = PyErr_NewException("_curses.error", NULL, NULL);
Guido van Rossum85738471995-02-17 13:50:17 +00002517 PyDict_SetItemString(d, "error", PyCursesError);
Guido van Rossumfbea2f31994-08-31 22:05:27 +00002518
Guido van Rossum85738471995-02-17 13:50:17 +00002519 /* Make the version available */
Guido van Rossum8fbf82b1995-02-17 13:54:04 +00002520 v = PyString_FromString(PyCursesVersion);
2521 PyDict_SetItemString(d, "version", v);
2522 PyDict_SetItemString(d, "__version__", v);
2523 Py_DECREF(v);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002524
Andrew M. Kuchlingcaefb372000-12-26 15:57:01 +00002525 SetDictInt("ERR", ERR);
2526 SetDictInt("OK", OK);
2527
Guido van Rossumf6971e21994-08-30 12:25:20 +00002528 /* Here are some attributes you can add to chars to print */
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002529
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002530 SetDictInt("A_ATTRIBUTES", A_ATTRIBUTES);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002531 SetDictInt("A_NORMAL", A_NORMAL);
2532 SetDictInt("A_STANDOUT", A_STANDOUT);
2533 SetDictInt("A_UNDERLINE", A_UNDERLINE);
2534 SetDictInt("A_REVERSE", A_REVERSE);
2535 SetDictInt("A_BLINK", A_BLINK);
2536 SetDictInt("A_DIM", A_DIM);
2537 SetDictInt("A_BOLD", A_BOLD);
2538 SetDictInt("A_ALTCHARSET", A_ALTCHARSET);
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00002539#if !defined(__NetBSD__)
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002540 SetDictInt("A_INVIS", A_INVIS);
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00002541#endif
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002542 SetDictInt("A_PROTECT", A_PROTECT);
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002543 SetDictInt("A_CHARTEXT", A_CHARTEXT);
2544 SetDictInt("A_COLOR", A_COLOR);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002545
2546 /* The following are never available with strict SYSV curses */
2547#ifdef A_HORIZONTAL
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002548 SetDictInt("A_HORIZONTAL", A_HORIZONTAL);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002549#endif
2550#ifdef A_LEFT
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002551 SetDictInt("A_LEFT", A_LEFT);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002552#endif
2553#ifdef A_LOW
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002554 SetDictInt("A_LOW", A_LOW);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002555#endif
2556#ifdef A_RIGHT
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002557 SetDictInt("A_RIGHT", A_RIGHT);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002558#endif
2559#ifdef A_TOP
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002560 SetDictInt("A_TOP", A_TOP);
Andrew M. Kuchlinge7d36162000-11-01 19:59:12 +00002561#endif
2562#ifdef A_VERTICAL
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002563 SetDictInt("A_VERTICAL", A_VERTICAL);
2564#endif
Andrew M. Kuchling03e644b2000-05-23 16:24:54 +00002565
Andrew M. Kuchling22b88ce2000-05-23 16:18:03 +00002566 SetDictInt("COLOR_BLACK", COLOR_BLACK);
2567 SetDictInt("COLOR_RED", COLOR_RED);
2568 SetDictInt("COLOR_GREEN", COLOR_GREEN);
2569 SetDictInt("COLOR_YELLOW", COLOR_YELLOW);
2570 SetDictInt("COLOR_BLUE", COLOR_BLUE);
2571 SetDictInt("COLOR_MAGENTA", COLOR_MAGENTA);
2572 SetDictInt("COLOR_CYAN", COLOR_CYAN);
2573 SetDictInt("COLOR_WHITE", COLOR_WHITE);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002574
Andrew M. Kuchling8e9d23b2000-06-27 03:10:38 +00002575#ifdef NCURSES_MOUSE_VERSION
2576 /* Mouse-related constants */
2577 SetDictInt("BUTTON1_PRESSED", BUTTON1_PRESSED);
2578 SetDictInt("BUTTON1_RELEASED", BUTTON1_RELEASED);
2579 SetDictInt("BUTTON1_CLICKED", BUTTON1_CLICKED);
2580 SetDictInt("BUTTON1_DOUBLE_CLICKED", BUTTON1_DOUBLE_CLICKED);
2581 SetDictInt("BUTTON1_TRIPLE_CLICKED", BUTTON1_TRIPLE_CLICKED);
2582
2583 SetDictInt("BUTTON2_PRESSED", BUTTON2_PRESSED);
2584 SetDictInt("BUTTON2_RELEASED", BUTTON2_RELEASED);
2585 SetDictInt("BUTTON2_CLICKED", BUTTON2_CLICKED);
2586 SetDictInt("BUTTON2_DOUBLE_CLICKED", BUTTON2_DOUBLE_CLICKED);
2587 SetDictInt("BUTTON2_TRIPLE_CLICKED", BUTTON2_TRIPLE_CLICKED);
2588
2589 SetDictInt("BUTTON3_PRESSED", BUTTON3_PRESSED);
2590 SetDictInt("BUTTON3_RELEASED", BUTTON3_RELEASED);
2591 SetDictInt("BUTTON3_CLICKED", BUTTON3_CLICKED);
2592 SetDictInt("BUTTON3_DOUBLE_CLICKED", BUTTON3_DOUBLE_CLICKED);
2593 SetDictInt("BUTTON3_TRIPLE_CLICKED", BUTTON3_TRIPLE_CLICKED);
2594
2595 SetDictInt("BUTTON4_PRESSED", BUTTON4_PRESSED);
2596 SetDictInt("BUTTON4_RELEASED", BUTTON4_RELEASED);
2597 SetDictInt("BUTTON4_CLICKED", BUTTON4_CLICKED);
2598 SetDictInt("BUTTON4_DOUBLE_CLICKED", BUTTON4_DOUBLE_CLICKED);
2599 SetDictInt("BUTTON4_TRIPLE_CLICKED", BUTTON4_TRIPLE_CLICKED);
2600
2601 SetDictInt("BUTTON_SHIFT", BUTTON_SHIFT);
2602 SetDictInt("BUTTON_CTRL", BUTTON_CTRL);
2603 SetDictInt("BUTTON_ALT", BUTTON_ALT);
2604
2605 SetDictInt("ALL_MOUSE_EVENTS", ALL_MOUSE_EVENTS);
2606 SetDictInt("REPORT_MOUSE_POSITION", REPORT_MOUSE_POSITION);
2607#endif
Guido van Rossumf6971e21994-08-30 12:25:20 +00002608 /* Now set everything up for KEY_ variables */
2609 {
2610 int key;
2611 char *key_n;
2612 char *key_n2;
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00002613#if !defined(__NetBSD__)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002614 for (key=KEY_MIN;key < KEY_MAX; key++) {
2615 key_n = (char *)keyname(key);
Guido van Rossumf5c6d471995-02-07 15:38:32 +00002616 if (key_n == NULL || strcmp(key_n,"UNKNOWN KEY")==0)
Guido van Rossumf6971e21994-08-30 12:25:20 +00002617 continue;
2618 if (strncmp(key_n,"KEY_F(",6)==0) {
2619 char *p1, *p2;
2620 key_n2 = malloc(strlen(key_n)+1);
2621 p1 = key_n;
2622 p2 = key_n2;
2623 while (*p1) {
2624 if (*p1 != '(' && *p1 != ')') {
2625 *p2 = *p1;
2626 p2++;
2627 }
2628 p1++;
2629 }
2630 *p2 = (char)0;
2631 } else
2632 key_n2 = key_n;
Guido van Rossum85738471995-02-17 13:50:17 +00002633 PyDict_SetItemString(d,key_n2,PyInt_FromLong((long) key));
Guido van Rossumf6971e21994-08-30 12:25:20 +00002634 if (key_n2 != key_n)
2635 free(key_n2);
2636 }
Andrew M. Kuchling2d339f92001-01-29 20:47:59 +00002637#endif
Guido van Rossum85738471995-02-17 13:50:17 +00002638 SetDictInt("KEY_MIN", KEY_MIN);
2639 SetDictInt("KEY_MAX", KEY_MAX);
Guido van Rossumf6971e21994-08-30 12:25:20 +00002640 }
Guido van Rossumf6971e21994-08-30 12:25:20 +00002641}