xref: /illumos-gate/usr/src/lib/libxcurses/h/curses.h (revision 1da57d55)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*
28  * curses.h
29  *
30  * XCurses Library
31  *
32  * Copyright 1990, 1995 by Mortice Kern Systems Inc.  All rights reserved.
33  *
34  */
35 
36 #ifndef __M_CURSES_H__
37 #define __M_CURSES_H__
38 
39 #define _XOPEN_CURSES
40 
41 #include <stdio.h>
42 #include <term.h>
43 #include <unctrl.h>
44 #include <wchar.h>
45 
46 #ifndef EOF
47 #define EOF			(-1)
48 #endif
49 
50 #ifndef WEOF
51 #define WEOF			(-1)
52 #endif
53 
54 /*
55  * Not all <wchar.h> are created equal.
56  */
57 #ifndef _MBSTATE_T
58 #define _MBSTATE_T
59 typedef int mbstate_t;
60 #endif
61 
62 #define ERR			EOF
63 #define OK			0
64 
65 #if !(defined(__cplusplus) && defined(_BOOL))
66 typedef	short bool;
67 #endif
68 
69 #define TRUE    		1
70 #define FALSE   		0
71 
72 typedef unsigned short attr_t;
73 
74 /*
75  * These attributes and masks can be applied to an attr_t.
76  * These are ordered according to the <no_color_video> mask,
77  * which has been extended to include additional attributes.
78  */
79 #define WA_NORMAL	0x0
80 #define WA_STANDOUT	0x0001
81 #define WA_UNDERLINE	0x0002
82 #define WA_REVERSE	0x0004
83 #define WA_BLINK	0x0008
84 #define WA_DIM		0x0010
85 #define WA_BOLD		0x0020
86 #define WA_INVIS	0x0040
87 #define WA_PROTECT	0x0080
88 #define WA_ALTCHARSET	0x0100
89 #define WA_HORIZONTAL	0x0200
90 #define WA_LEFT		0x0400
91 #define WA_LOW		0x0800
92 #define WA_RIGHT	0x1000
93 #define WA_TOP		0x2000
94 #define WA_VERTICAL	0x4000
95 
96 #define WA_SGR_MASK	0x01ff		/* Historical attribute set. */
97 #define WA_SGR1_MASK	0x7e00		/* Extended attribute set. */
98 
99 /*
100  * Internal attribute used to support <ceol_standout_glitch>.
101  */
102 #define WA_COOKIE	0x8000
103 
104 /*
105  * Color names.
106  */
107 #define COLOR_BLACK     0
108 #define COLOR_BLUE      1
109 #define COLOR_GREEN     2
110 #define COLOR_CYAN      3
111 #define COLOR_RED       4
112 #define COLOR_MAGENTA   5
113 #define COLOR_YELLOW    6
114 #define COLOR_WHITE     7
115 
116 /*
117  * A cchar_t details the attributes, color, and a string of wide characters
118  * composing a complex character (p12).  The wide character string consists
119  * of a spacing character (wcwidth() > 0) and zero or more non-spacing
120  * characters.  Xcurses (p17) states that the minimum number of non-spacing
121  * characters associated with a spacing character must be at least 5, if a
122  * limit is imposed.
123  */
124 #define M_CCHAR_MAX	6
125 
126 /***
127  *** Opaque data type.  Keep your grubby mits off.
128  ***/
129 typedef struct {
130 	short _f;			/* True if start of character. */
131 	short _n;			/* Number of elements in wc[]. */
132         short _co;			/* Color pair number. */
133         attr_t _at;			/* Attribute flags. */
134         wchar_t _wc[M_CCHAR_MAX];	/* Complex spacing character. */
135 } cchar_t;
136 
137 /***
138  *** Opaque data type.  Keep your grubby mits off.
139  ***/
140 typedef struct window_t {
141 	cchar_t _bg;			/* Background. */
142 	cchar_t _fg;			/* Foreground, ignore character. */
143 	short _cury, _curx;		/* Curent cursor position in window. */
144 	short _begy, _begx;		/* Upper-left origin on screen. */
145 	short _maxy, _maxx;		/* Window dimensions. */
146 	short _top, _bottom;		/* Window's software scroll region. */
147 	short _refy, _refx;		/* Pad origin of last refresh. */
148 	short _sminy, _sminx;		/* T-L screen corner of last refresh. */
149 	short _smaxy, _smaxx;		/* B-R screen corner of last refresh. */
150 	short _vmin, _vtime;		/* wtimeout() control. */
151 	short *_first, *_last;		/* Dirty region for each screen line. */
152 	unsigned short _flags;		/* Internal flags for the window. */
153 	unsigned short _scroll;		/* Internal for scroll optimization. */
154 	cchar_t **_line;
155 	cchar_t *_base;			/* Block of M*N screen cells. */
156 	struct window_t *_parent;	/* Parent of sub-window. */
157 } WINDOW;
158 
159 /***
160  *** Opaque data type.  Keep your grubby mits off.
161  ***/
162 typedef struct {
163 	int _kfd;		/* typeahead() file descriptor. */
164 	FILE *_if, *_of;	/* I/O file pointers. */
165 	TERMINAL *_term;	/* Associated terminfo entry. */
166 	WINDOW *_newscr;	/* New screen image built by wnoutrefresh(). */
167 	WINDOW *_curscr;	/* Current screen image after doupdate(). */
168 	mbstate_t _state;	/* Current multibyte state of _of. */
169 	unsigned long *_hash;	/* Hash values for curscr's screen lines. */
170 	unsigned short _flags;	/* Assorted flags. */
171 	void *_decode;		/* Function key decode tree. */
172 	void *_in;		/* Wide I/O object. */
173 	struct {
174 		int _size;	/* Allocated size of the input stack. */
175 		int _count;	/* Number of entries on the input stack. */
176 		int *_stack;	/* Buffer used for the input stack. */
177 	} _unget;
178 	struct {
179 		WINDOW *_w;	/* Exists on if emulating soft label keys. */
180 		char *_labels[8];	/* Soft label key strings. */
181 		short _justify[8];	/* Justification for label. */
182 	} _slk;
183 } SCREEN;
184 
185 #ifndef __M_UNCTRL_H__
186 /*
187  * Backwards compatiblity with historical Curses applications.
188  */
189 typedef unsigned long chtype;
190 #endif
191 
192 /*
193  * These attributes and masks can be applied to a chtype.
194  * They are order according to the <no_color_video> mask.
195  */
196 #define A_NORMAL        0x00000000L
197 #define A_ATTRIBUTES    0xffff0000L	/* Color/Attribute mask */
198 #define A_CHARTEXT      0x0000ffffL     /* 16-bit character mask */
199 #define A_COLOR         0xfe000000L     /* Colour mask, see __COLOR_SHIFT */
200 #define A_STANDOUT      0x00010000L
201 #define A_UNDERLINE     0x00020000L
202 #define A_REVERSE       0x00040000L
203 #define A_BLINK         0x00080000L
204 #define A_DIM           0x00100000L
205 #define A_BOLD          0x00200000L
206 #define A_INVIS         0x00400000L
207 #define A_PROTECT       0x00800000L
208 #define A_ALTCHARSET    0x01000000L
209 
210 /*
211  * Colour atttribute support for chtype.
212  */
213 #define __COLOR_SHIFT	26
214 
215 /*
216  * Characters constants used with a chtype.
217  * Mapping defined in Xcurses Section 6.2.12 (p260).
218  */
219 #define ACS_VLINE       (A_ALTCHARSET | 'x')
220 #define ACS_HLINE       (A_ALTCHARSET | 'q')
221 #define ACS_ULCORNER    (A_ALTCHARSET | 'l')
222 #define ACS_URCORNER    (A_ALTCHARSET | 'k')
223 #define ACS_LLCORNER    (A_ALTCHARSET | 'm')
224 #define ACS_LRCORNER    (A_ALTCHARSET | 'j')
225 #define ACS_RTEE        (A_ALTCHARSET | 'u')
226 #define ACS_LTEE        (A_ALTCHARSET | 't')
227 #define ACS_BTEE        (A_ALTCHARSET | 'v')
228 #define ACS_TTEE        (A_ALTCHARSET | 'w')
229 #define ACS_PLUS        (A_ALTCHARSET | 'n')
230 #define ACS_S1          (A_ALTCHARSET | 'o')
231 #define ACS_S9          (A_ALTCHARSET | 's')
232 #define ACS_DIAMOND     (A_ALTCHARSET | '`')
233 #define ACS_CKBOARD     (A_ALTCHARSET | 'a')
234 #define ACS_DEGREE      (A_ALTCHARSET | 'f')
235 #define ACS_PLMINUS     (A_ALTCHARSET | 'g')
236 #define ACS_BULLET      (A_ALTCHARSET | '~')
237 #define ACS_LARROW      (A_ALTCHARSET | ',')
238 #define ACS_RARROW      (A_ALTCHARSET | '+')
239 #define ACS_DARROW      (A_ALTCHARSET | '.')
240 #define ACS_UARROW      (A_ALTCHARSET | '-')
241 #define ACS_BOARD       (A_ALTCHARSET | 'h')
242 #define ACS_LANTERN     (A_ALTCHARSET | 'I')
243 #define ACS_BLOCK       (A_ALTCHARSET | '0')
244 
245 #ifndef _XOPEN_SOURCE
246 /*
247  * MKS Extensions for double width box characters.
248  */
249 #define ACS_DVLINE      ACS_VLINE
250 #define ACS_DHLINE      ACS_HLINE
251 #define ACS_DULCORNER   ACS_ULCORNER
252 #define ACS_DURCORNER   ACS_URCORNER
253 #define ACS_DLLCORNER   ACS_LLCORNER
254 #define ACS_DLRCORNER   ACS_LRCORNER
255 #define ACS_DRTEE       ACS_RTEE
256 #define ACS_DLTEE       ACS_LTEE
257 #define ACS_DBTEE       ACS_BTEE
258 #define ACS_DTTEE       ACS_TTEE
259 #endif /* _XOPEN_SOURCE */
260 
261 /*
262  * Wide characters constants for a cchar_t.
263  */
264 extern const cchar_t __WACS_VLINE;
265 extern const cchar_t __WACS_HLINE;
266 extern const cchar_t __WACS_ULCORNER;
267 extern const cchar_t __WACS_URCORNER;
268 extern const cchar_t __WACS_LLCORNER;
269 extern const cchar_t __WACS_LRCORNER;
270 extern const cchar_t __WACS_RTEE;
271 extern const cchar_t __WACS_LTEE;
272 extern const cchar_t __WACS_BTEE;
273 extern const cchar_t __WACS_TTEE;
274 extern const cchar_t __WACS_PLUS;
275 extern const cchar_t __WACS_S1;
276 extern const cchar_t __WACS_S9;
277 extern const cchar_t __WACS_DIAMOND;
278 extern const cchar_t __WACS_CKBOARD;
279 extern const cchar_t __WACS_DEGREE;
280 extern const cchar_t __WACS_PLMINUS;
281 extern const cchar_t __WACS_BULLET;
282 extern const cchar_t __WACS_LARROW;
283 extern const cchar_t __WACS_RARROW;
284 extern const cchar_t __WACS_DARROW;
285 extern const cchar_t __WACS_UARROW;
286 extern const cchar_t __WACS_BOARD;
287 extern const cchar_t __WACS_LANTERN;
288 extern const cchar_t __WACS_BLOCK;
289 
290 #define WACS_VLINE	&__WACS_VLINE
291 #define WACS_HLINE	&__WACS_HLINE
292 #define WACS_ULCORNER	&__WACS_ULCORNER
293 #define WACS_URCORNER	&__WACS_URCORNER
294 #define WACS_LLCORNER	&__WACS_LLCORNER
295 #define WACS_LRCORNER	&__WACS_LRCORNER
296 #define WACS_RTEE	&__WACS_RTEE
297 #define WACS_LTEE	&__WACS_LTEE
298 #define WACS_BTEE	&__WACS_BTEE
299 #define WACS_TTEE	&__WACS_TTEE
300 #define WACS_PLUS	&__WACS_PLUS
301 #define WACS_S1		&__WACS_S1
302 #define WACS_S9		&__WACS_S9
303 #define WACS_DIAMOND	&__WACS_DIAMOND
304 #define WACS_CKBOARD	&__WACS_CKBOARD
305 #define WACS_DEGREE	&__WACS_DEGREE
306 #define WACS_PLMINUS	&__WACS_PLMINUS
307 #define WACS_BULLET	&__WACS_BULLET
308 #define WACS_LARROW	&__WACS_LARROW
309 #define WACS_RARROW	&__WACS_RARROW
310 #define WACS_DARROW	&__WACS_DARROW
311 #define WACS_UARROW	&__WACS_UARROW
312 #define WACS_BOARD	&__WACS_BOARD
313 #define WACS_LANTERN	&__WACS_LANTERN
314 #define WACS_BLOCK	&__WACS_BLOCK
315 
316 #ifndef _XOPEN_SOURCE
317 /*
318  * MKS Extensions for double width box characters.
319  */
320 #define WACS_DVLINE      WACS_VLINE
321 #define WACS_DHLINE      WACS_HLINE
322 #define WACS_DULCORNER   WACS_ULCORNER
323 #define WACS_DURCORNER   WACS_URCORNER
324 #define WACS_DLLCORNER   WACS_LLCORNER
325 #define WACS_DLRCORNER   WACS_LRCORNER
326 #define WACS_DRTEE       WACS_RTEE
327 #define WACS_DLTEE       WACS_LTEE
328 #define WACS_DBTEE       WACS_BTEE
329 #define WACS_DTTEE       WACS_TTEE
330 #endif /* _XOPEN_SOURCE */
331 
332 /*
333  * Internal functions.
334  */
335 extern int __m_outc(int);
336 extern int __m_tty_wc(int, wchar_t *);
337 extern int __m_chtype_cc(chtype, cchar_t *);
338 extern chtype __m_cc_chtype(const cchar_t *);
339 extern int __m_copywin(const WINDOW *, WINDOW *, int);
340 extern WINDOW *__m_newwin(WINDOW *, int, int, int, int);
341 
342 /*
343  * Internal macros.
344  */
345 #define __m_getpary(w)		((w)->_parent == (WINDOW *) 0 ? -1 \
346 				: (w)->_begy - (w)->_parent->_begy)
347 #define __m_getparx(w)		((w)->_parent == (WINDOW *) 0 ? -1 \
348 				: (w)->_begx - (w)->_parent->_begx)
349 
350 /*
351  * Global Window Macros
352  */
353 #define getyx(w,y,x)            (y = (w)->_cury, x = (w)->_curx)
354 #define getbegyx(w,y,x)         (y = (w)->_begy, x = (w)->_begx)
355 #define getmaxyx(w,y,x)         (y = (w)->_maxy, x = (w)->_maxx)
356 #define getparyx(w,y,x)         (y = __m_getpary(w), x = __m_getparx(w))
357 
358 /*
359  * Global variables
360  */
361 extern int LINES, COLS;
362 extern int COLORS, COLOR_PAIRS;
363 extern WINDOW *curscr, *stdscr;
364 
365 #ifndef _XOPEN_SOURCE
366 /*
367  * Non-portable extension functions.
368  */
369 extern int wistombs(char *, const wint_t *, int);
370 extern int wistowcs(wchar_t *, const wint_t *, int);
371 #endif /* _XOPEN_SOURCE */
372 
373 #ifdef M_CURSES_TRACE
374 /*
375  * Curses trace facility is only available with a version of
376  * the library that was compiled with -DM_CURSES_TRACE.
377  */
378 extern void traceoff(void);
379 extern void traceon(void);
380 #endif /* M_CURSES_TRACE */
381 
382 extern int addch(chtype);
383 extern int addchnstr(const chtype *, int);
384 extern int addchstr(const chtype *);
385 extern int add_wch(const cchar_t *);
386 extern int add_wchnstr(const cchar_t *, int);
387 extern int add_wchstr(const cchar_t *);
388 extern int mvaddch(int, int, chtype);
389 extern int mvaddchnstr(int, int, const chtype *, int);
390 extern int mvaddchstr(int, int, const chtype *);
391 extern int mvadd_wch(int, int, const cchar_t *);
392 extern int mvadd_wchnstr(int, int, const cchar_t *, int);
393 extern int mvadd_wchstr(int, int, const cchar_t *);
394 extern int mvwaddch(WINDOW *, int, int, chtype);
395 extern int mvwaddchnstr(WINDOW *, int, int, const chtype *, int);
396 extern int mvwaddchstr(WINDOW *, int, int, const chtype *);
397 extern int mvwadd_wch(WINDOW *, int, int, const cchar_t *);
398 extern int mvwadd_wchnstr(WINDOW *, int, int, const cchar_t *, int);
399 extern int mvwadd_wchstr(WINDOW *, int, int, const cchar_t *);
400 extern int waddch(WINDOW *, chtype);
401 extern int waddchnstr(WINDOW *, const chtype *, int);
402 extern int waddchstr(WINDOW *, const chtype *);
403 extern int wadd_wch(WINDOW *, const cchar_t *);
404 extern int wadd_wchnstr(WINDOW *, const cchar_t *, int);
405 extern int wadd_wchstr(WINDOW *, const cchar_t *);
406 
407 extern int addnstr(const char *, int);
408 extern int addstr(const char *);
409 extern int addnwstr(const wchar_t *, int);
410 extern int addwstr(const wchar_t *);
411 extern int mvaddnstr(int, int, const char *, int);
412 extern int mvaddstr(int, int, const char *);
413 extern int mvaddnwstr(int, int, const wchar_t *, int);
414 extern int mvaddwstr(int, int, const wchar_t *);
415 extern int mvwaddnstr(WINDOW *, int, int, const char *, int);
416 extern int mvwaddstr(WINDOW *, int, int, const char *);
417 extern int mvwaddnwstr(WINDOW *, int, int, const wchar_t *, int);
418 extern int mvwaddwstr(WINDOW *, int, int, const wchar_t *);
419 extern int waddnstr(WINDOW *, const char *, int);
420 extern int waddstr(WINDOW *, const char *);
421 extern int waddnwstr(WINDOW *, const wchar_t *, int);
422 extern int waddwstr(WINDOW *, const wchar_t *);
423 
424 extern int attroff(int);
425 extern int attron(int);
426 extern int attrset(int);
427 extern int wattroff(WINDOW *, int);
428 extern int wattron(WINDOW *, int);
429 extern int wattrset(WINDOW *, int);
430 
431 extern int attr_get(attr_t *, short *, void *);
432 extern int attr_off(attr_t, void *);
433 extern int attr_on(attr_t, void *);
434 extern int attr_set(attr_t, short, void *);
435 extern int color_set(short, void *);
436 extern int wattr_get(WINDOW *, attr_t *, short *, void *);
437 extern int wattr_off(WINDOW *, attr_t, void *);
438 extern int wattr_on(WINDOW *, attr_t, void *);
439 extern int wattr_set(WINDOW *, attr_t, short, void *);
440 extern int wcolor_set(WINDOW *, short, void *);
441 
442 extern chtype COLOR_PAIR(short);
443 extern short PAIR_NUMBER(chtype);
444 
445 extern int baudrate(void);
446 
447 extern int delay_output(int);
448 extern int napms(int);
449 
450 extern int beep(void);
451 extern int flash(void);
452 
453 extern int bkgd(chtype);
454 extern int bkgdset(chtype);
455 extern chtype getbkgd(WINDOW *);
456 extern int wbkgd(WINDOW *, chtype);
457 extern int wbkgdset(WINDOW *, chtype);
458 
459 extern int bkgrnd(const cchar_t *);
460 extern void bkgrndset(const cchar_t *);
461 extern int getbkgrnd(cchar_t *);
462 extern int wbkgrnd(WINDOW *, const cchar_t *);
463 extern void wbkgrndset(WINDOW *, const cchar_t *);
464 extern int wgetbkgrnd(WINDOW *, cchar_t *);
465 
466 extern int border(
467 	chtype, chtype, chtype, chtype,
468 	chtype, chtype, chtype, chtype);
469 extern int border_set(
470 	const cchar_t *, const cchar_t *,
471 	const cchar_t *, const cchar_t *,
472 	const cchar_t *, const cchar_t *,
473 	const cchar_t *, const cchar_t *);
474 extern int box(WINDOW *, chtype, chtype);
475 extern int box_set(WINDOW *, const cchar_t *, const cchar_t *);
476 extern int wborder(
477 	WINDOW *,
478 	chtype, chtype, chtype, chtype,
479 	chtype, chtype, chtype, chtype);
480 extern int wborder_set(
481 	WINDOW *,
482 	const cchar_t *, const cchar_t *,
483 	const cchar_t *, const cchar_t *,
484 	const cchar_t *, const cchar_t *,
485 	const cchar_t *, const cchar_t *);
486 
487 extern bool can_change_color(void);
488 extern int color_content(short, short *, short *, short *);
489 extern bool has_colors(void);
490 extern int init_color(short, short, short, short);
491 extern int init_pair(short, short, short);
492 extern int pair_content(short, short *, short *);
493 extern int start_color(void);
494 
495 extern int cbreak(void);
496 extern int halfdelay(int);
497 extern int nocbreak(void);
498 extern int raw(void);
499 extern int noraw(void);
500 
501 extern int chgat(int, attr_t, short, const void *);
502 extern int mvchgat(int, int, int, attr_t, short, const void *);
503 extern int mvwchgat(WINDOW *, int, int, int, attr_t, short, const void *);
504 extern int wchgat(WINDOW *, int, attr_t, short, const void *);
505 
506 extern int clear(void);
507 extern int clrtobot(void);
508 extern int clrtoeol(void);
509 extern int erase(void);
510 extern int wclear(WINDOW *);
511 extern int wclrtobot(WINDOW *);
512 extern int wclrtoeol(WINDOW *);
513 extern int werase(WINDOW *);
514 
515 extern int clearok(WINDOW *, bool);
516 extern void idcok(WINDOW *, bool);
517 extern int idlok(WINDOW *, bool);
518 extern void immedok(WINDOW *, bool);
519 extern int intrflush(WINDOW *, bool);
520 extern int keypad(WINDOW *, bool);
521 extern int leaveok(WINDOW *, bool);
522 extern int meta(WINDOW *, bool);
523 extern int nodelay(WINDOW *, bool);
524 extern int notimeout(WINDOW *, bool);
525 extern int scrollok(WINDOW *, bool);
526 extern int syncok(WINDOW *, bool);
527 
528 extern int copywin(const WINDOW *, WINDOW *, int, int, int, int, int, int, int);
529 extern int overlay(const WINDOW *, WINDOW *);
530 extern int overwrite(const WINDOW *, WINDOW *);
531 
532 extern int curs_set(int);
533 
534 extern int def_prog_mode(void);
535 extern int def_shell_mode(void);
536 extern int reset_prog_mode(void);
537 extern int reset_shell_mode(void);
538 
539 extern int delch(void);
540 extern int mvdelch(int, int);
541 extern int mvwdelch(WINDOW *, int, int);
542 extern int wdelch(WINDOW *);
543 
544 extern int deleteln(void);
545 extern int insdelln(int);
546 extern int insertln(void);
547 extern int wdeleteln(WINDOW *);
548 extern int winsdelln(WINDOW *, int);
549 extern int winsertln(WINDOW *);
550 
551 extern void delscreen(SCREEN *);
552 extern SCREEN *newterm(char *, FILE *, FILE *);
553 extern SCREEN *set_term(SCREEN *);
554 
555 extern int delwin(WINDOW *);
556 extern WINDOW *derwin(WINDOW *, int, int, int, int);
557 extern WINDOW *dupwin(WINDOW *);
558 extern WINDOW *getwin(FILE *);
559 extern int mvwin(WINDOW *, int, int);
560 extern int mvderwin(WINDOW *, int, int);
561 extern WINDOW *newwin(int, int, int, int);
562 extern int putwin(WINDOW *,  FILE *);
563 extern int redrawwin(WINDOW *);
564 extern WINDOW *subwin(WINDOW *, int, int, int, int);
565 extern int wredrawln(WINDOW *, int, int);
566 
567 extern int doupdate(void);
568 extern int refresh(void);
569 extern int wnoutrefresh(WINDOW *);
570 extern int wrefresh(WINDOW *);
571 
572 extern int echo(void);
573 extern int noecho(void);
574 extern int echochar(chtype);
575 extern int echo_wchar(const cchar_t *);
576 extern int wechochar(WINDOW *, chtype);
577 extern int wecho_wchar(WINDOW *, const cchar_t *);
578 
579 extern int endwin(void);
580 extern void filter(void);
581 extern WINDOW *initscr(void);
582 extern bool isendwin(void);
583 extern int ripoffline(int, int (*)(WINDOW *, int));
584 extern int typeahead(int);
585 extern void use_env(bool);
586 
587 extern int erasechar(void);
588 extern int erasewchar(wchar_t *);
589 extern int killchar(void);
590 extern int killwchar(wchar_t *);
591 
592 extern int flushinp(void);
593 
594 extern int getcchar(const cchar_t *, wchar_t *, attr_t *, short *, void *);
595 extern int setcchar(cchar_t *, const wchar_t *, attr_t, short, const void *);
596 
597 extern int getch(void);
598 extern int get_wch(wint_t *);
599 extern int mvgetch(int, int);
600 extern int mvget_wch(int, int, wint_t *);
601 extern int mvwgetch(WINDOW *, int, int);
602 extern int mvwget_wch(WINDOW *, int, int, wint_t *);
603 extern int wgetch(WINDOW *);
604 extern int wget_wch(WINDOW *, wint_t *);
605 
606 extern int getnstr(char *, int);
607 extern int getstr(char *);
608 extern int mvgetnstr(int, int, char *, int);
609 extern int mvgetstr(int, int, char *);
610 extern int mvwgetnstr(WINDOW *, int, int, char *, int);
611 extern int mvwgetstr(WINDOW *, int, int, char *);
612 extern int wgetnstr(WINDOW *, char *, int);
613 extern int wgetstr(WINDOW *, char *);
614 
615 extern int getn_wstr(wint_t *, int);
616 extern int get_wstr(wint_t *);
617 extern int mvgetn_wstr(int, int, wint_t *, int);
618 extern int mvget_wstr(int, int, wint_t *);
619 extern int mvwgetn_wstr(WINDOW *, int, int, wint_t *, int);
620 extern int mvwget_wstr(WINDOW *, int, int, wint_t *);
621 extern int wgetn_wstr(WINDOW *, wint_t *, int);
622 extern int wget_wstr(WINDOW *, wint_t *);
623 
624 extern bool has_ic(void);
625 extern bool has_il(void);
626 
627 extern int hline(chtype, int);
628 extern int hline_set(const cchar_t *, int);
629 extern int vline(chtype, int);
630 extern int vline_set(const cchar_t *, int);
631 extern int mvhline(int, int, chtype, int);
632 extern int mvhline_set(int, int, const cchar_t *, int);
633 extern int mvvline(int, int, chtype, int);
634 extern int mvvline_set(int, int, const cchar_t *, int);
635 extern int mvwhline(WINDOW *, int, int, chtype, int);
636 extern int mvwhline_set(WINDOW *, int, int, const cchar_t *, int);
637 extern int mvwvline(WINDOW *, int, int, chtype, int);
638 extern int mvwvline_set(WINDOW *, int, int, const cchar_t *, int);
639 extern int whline(WINDOW *, chtype, int);
640 extern int whline_set(WINDOW *, const cchar_t *, int);
641 extern int wvline(WINDOW *, chtype, int);
642 extern int wvline_set(WINDOW *, const cchar_t *, int);
643 
644 extern chtype inch(void);
645 extern int inchnstr(chtype *, int);
646 extern int inchstr(chtype *);
647 extern int in_wch(cchar_t *);
648 extern int in_wchnstr(cchar_t *, int);
649 extern int in_wchstr(cchar_t *);
650 extern chtype mvinch(int, int);
651 extern int mvinchnstr(int, int, chtype *, int);
652 extern int mvinchstr(int, int, chtype *);
653 extern int mvin_wch(int, int, cchar_t *);
654 extern int mvin_wchnstr(int, int, cchar_t *, int);
655 extern int mvin_wchstr(int, int, cchar_t *);
656 extern chtype mvwinch(WINDOW *, int, int);
657 extern int mvwinchnstr(WINDOW *, int, int, chtype *, int);
658 extern int mvwinchstr(WINDOW *, int, int, chtype *);
659 extern int mvwin_wch(WINDOW *, int, int, cchar_t *);
660 extern int mvwin_wchnstr(WINDOW *, int, int, cchar_t *, int);
661 extern int mvwin_wchstr(WINDOW *, int, int, cchar_t *);
662 extern chtype winch(WINDOW *);
663 extern int winchnstr(WINDOW *, chtype *, int);
664 extern int winchstr(WINDOW *, chtype *);
665 extern int win_wch(WINDOW *, cchar_t *);
666 extern int win_wchnstr(WINDOW *, cchar_t *, int);
667 extern int win_wchstr(WINDOW *, cchar_t *);
668 
669 extern int innstr(char *, int);
670 extern int instr(char *);
671 extern int innwstr(wchar_t *, int);
672 extern int inwstr(wchar_t *);
673 extern int mvinnstr(int, int, char *, int);
674 extern int mvinstr(int, int, char *);
675 extern int mvinnwstr(int, int, wchar_t *, int);
676 extern int mvinwstr(int, int, wchar_t *);
677 extern int mvwinnstr(WINDOW *, int, int, char *, int);
678 extern int mvwinstr(WINDOW *, int, int, char *);
679 extern int mvwinnwstr(WINDOW *, int, int, wchar_t *, int);
680 extern int mvwinwstr(WINDOW *, int, int, wchar_t *);
681 extern int winnstr(WINDOW *, char *, int);
682 extern int winstr(WINDOW *, char *);
683 extern int winnwstr(WINDOW *, wchar_t *, int);
684 extern int winwstr(WINDOW *, wchar_t *);
685 
686 extern int insch(chtype);
687 extern int ins_wch(const cchar_t *);
688 extern int mvinsch(int, int, chtype);
689 extern int mvins_wch(int, int, const cchar_t *);
690 extern int mvwinsch(WINDOW *, int, int, chtype);
691 extern int mvwins_wch(WINDOW *, int, int, const cchar_t *);
692 extern int winsch(WINDOW *, chtype);
693 extern int wins_wch(WINDOW *, const cchar_t *);
694 
695 extern int insnstr(const char *, int);
696 extern int insstr(const char *);
697 extern int ins_nwstr(const wchar_t *, int);
698 extern int ins_wstr(const wchar_t *);
699 extern int mvinsnstr(int, int, const char *, int);
700 extern int mvinsstr(int, int, const char *);
701 extern int mvins_nwstr(int, int, const wchar_t *, int);
702 extern int mvins_wstr(int, int, const wchar_t *);
703 extern int mvwinsnstr(WINDOW *, int, int, const char *, int);
704 extern int mvwinsstr(WINDOW *, int, int, const char *);
705 extern int mvwins_nwstr(WINDOW *, int, int, const wchar_t *, int);
706 extern int mvwins_wstr(WINDOW *, int, int, const wchar_t *);
707 extern int winsnstr(WINDOW *, const char *, int);
708 extern int winsstr(WINDOW *, const char *);
709 extern int wins_nwstr(WINDOW *, const wchar_t *, int);
710 extern int wins_wstr(WINDOW *, const wchar_t *);
711 
712 extern bool is_linetouched(WINDOW *, int);
713 extern bool is_wintouched(WINDOW *);
714 extern int touchline(WINDOW *, int, int);
715 extern int touchwin(WINDOW *);
716 extern int wtouchln(WINDOW *, int, int, int);
717 extern int untouchwin(WINDOW *);
718 
719 extern const char *keyname(int);
720 extern const char *key_name(wchar_t);
721 
722 extern char *longname(void);
723 extern char *termname(void);
724 
725 extern int move(int, int);
726 extern int wmove(WINDOW *, int, int);
727 
728 extern int mvcur(int, int, int, int);
729 
730 extern WINDOW *newpad(int, int);
731 extern int pechochar(WINDOW *, chtype);
732 extern int pecho_wchar(WINDOW *, const cchar_t *);
733 extern int pnoutrefresh(WINDOW *, int, int, int, int, int, int);
734 extern int prefresh(WINDOW *, int, int, int, int, int, int);
735 extern WINDOW *subpad(WINDOW *, int, int, int, int);
736 
737 extern int nl(void);
738 extern int nonl(void);
739 
740 extern int printw(const char *, ...);
741 extern int mvprintw(int, int, const char *, ...);
742 extern int mvwprintw(WINDOW *, int, int, const char *, ...);
743 #if defined(sun)
744 extern int vwprintw(WINDOW *, const char *, __va_list);
745 extern int vw_printw(WINDOW *, const char *, __va_list);
746 #else
747 extern int vwprintw(WINDOW *, const char *, void *);
748 extern int vw_printw(WINDOW *, const char *, void *);
749 #endif
750 extern int wprintw(WINDOW *, const char *, ...);
751 
752 extern void qiflush(void);
753 extern void noqiflush(void);
754 
755 extern int resetty(void);
756 extern int savetty(void);
757 
758 extern int scanw(const char *, ...);
759 extern int mvscanw(int, int, const char *, ...);
760 extern int mvwscanw(WINDOW *, int, int, const char *, ...);
761 #if defined(sun)
762 extern int vwscanw(WINDOW *, const char *, __va_list);
763 extern int vw_scanw(WINDOW *, const char *, __va_list);
764 #else
765 extern int vwscanw(WINDOW *, const char *, void *);
766 extern int vw_scanw(WINDOW *, const char *, void *);
767 #endif
768 extern int wscanw(WINDOW *, const char *, ...);
769 
770 extern int scr_dump(const char *);
771 extern int scr_init(const char *);
772 extern int scr_restore(const char *);
773 extern int scr_set(const char *);
774 
775 extern int scrl(int);
776 extern int scroll(WINDOW *);
777 extern int setscrreg(int, int);
778 extern int wscrl(WINDOW *, int);
779 extern int wsetscrreg(WINDOW *, int, int);
780 
781 extern int slk_attroff(const chtype);
782 extern int slk_attron(const chtype);
783 extern int slk_attrset(const chtype);
784 extern int slk_attr_off(const attr_t, void *);
785 extern int slk_attr_on(const attr_t, void *);
786 extern int slk_attr_set(const attr_t, short, void *);
787 extern int slk_color_set(short);
788 extern int slk_clear(void);
789 extern int slk_init(int);
790 extern char *slk_label(int);
791 extern int slk_noutrefresh(void);
792 extern int slk_refresh(void);
793 extern int slk_restore(void);
794 extern int slk_set(int, const char *, int);
795 extern int slk_touch(void);
796 extern int slk_wset(int, const wchar_t *, int);
797 
798 extern int standend(void);
799 extern int wstandend(WINDOW *);
800 extern int standout(void);
801 extern int wstandout(WINDOW *);
802 
803 extern chtype termattrs(void);
804 extern attr_t term_attrs(void);
805 
806 extern void timeout(int);
807 extern void wtimeout(WINDOW *, int);
808 
809 extern int ungetch(int);
810 extern int unget_wch(const wchar_t);
811 
812 extern int vidattr(chtype);
813 extern int vid_attr(attr_t, short, void *);
814 extern int vidputs(chtype, int (*)(int));
815 extern int vid_puts(attr_t, short, void *, int (*)(int));
816 
817 extern void wcursyncup(WINDOW *);
818 extern void wsyncdown(WINDOW *);
819 extern void wsyncup(WINDOW *);
820 
821 extern const wchar_t *wunctrl(const cchar_t *);
822 
823 /*
824  * These macros are not suitable for strict XPG4 conformance,
825  * because some of them evaluate their arguments more than once.
826  * However, they can improve speed and size of an application,
827  * provided an application is careful about not using side effects
828  * with function/macro parameters.
829  */
830 #ifndef _XOPEN_SOURCE_EXTENDED
831 
832 #define addch(ch)			waddch(stdscr,ch)
833 #define mvaddch(y,x,ch)			(move(y,x)?ERR:addch(ch))
834 #define mvwaddch(w,y,x,ch)		(wmove(w,y,x)?ERR:waddch(w,ch))
835 
836 #define add_wch(cp)			wadd_wch(stdscr,cp)
837 #define mvadd_wch(y,x,cp)		(move(y,x)?ERR:add_wch(cp))
838 #define mvwadd_wch(w,y,x,cp)		(wmove(w,y,x)?ERR:wadd_wch(w,cp))
839 
840 #define addchnstr(chs,n)		waddchnstr(stdscr,chs,n)
841 #define addchstr(chs)			waddchstr(stdscr,chs)
842 #define mvaddchnstr(y,x,chs,n)		(move(y,x)?ERR:addchnstr(chs,n))
843 #define mvaddchstr(y,x,chs)		(move(y,x)?ERR:addchstr(chs))
844 #define mvwaddchnstr(w,y,x,chs,n)	(wmove(w,y,x)?ERR:waddchnstr(w,chs,n))
845 #define mvwaddchstr(w,y,x,chs)		(wmove(w,y,x)?ERR:waddchstr(w,chs))
846 #define waddchstr(w,chs)		waddchnstr(w,chs,-1)
847 
848 #define add_wchnstr(cp,n)		wadd_wchnstr(stdscr,cp,n)
849 #define add_wchstr(cp)			wadd_wchstr(stdscr,cp)
850 #define mvadd_wchnstr(y,x,cp,n)		(move(y,x)?ERR:add_wchnstr(cp,n))
851 #define mvadd_wchstr(y,x,cp)		(move(y,x)?ERR:add_wchstr(cp))
852 #define mvwadd_wchnstr(w,y,x,cp,n)	(wmove(w,y,x)?ERR:wadd_wchnstr(w,cp,n))
853 #define mvwadd_wchstr(w,y,x,cp)		(wmove(w,y,x)?ERR:wadd_wchstr(w,cp))
854 #define wadd_wchstr(w,cp)		wadd_wchnstr(w,cp,-1)
855 
856 #define addnstr(s,n)			waddnstr(stdscr,s,n)
857 #define addstr(s)			waddstr(stdscr,s)
858 #define mvaddnstr(y,x,s,n)		(move(y,x)?ERR:addnstr(s,n))
859 #define mvaddstr(y,x,s)			(move(y,x)?ERR:addstr(s))
860 #define mvwaddnstr(w,y,x,s,n)		(wmove(w,y,x)?ERR:waddnstr(w,s,n))
861 #define mvwaddstr(w,y,x,s)		(wmove(w,y,x)?ERR:waddstr(w,s))
862 #define waddstr(w,wcs)			waddnstr(w,wcs,-1)
863 
864 #define addnwstr(wcs,n)			waddnwstr(stdscr,wcs,n)
865 #define addwstr(wcs)			waddwstr(stdscr,wcs)
866 #define mvaddnwstr(y,x,wcs,n)		(move(y,x)?ERR:addnwstr(wcs,n))
867 #define mvaddwstr(y,x,wcs)		(move(y,x)?ERR:addwstr(wcs))
868 #define mvwaddnwstr(w,y,x,wcs,n)	(wmove(w,y,x)?ERR:waddnwstr(w,wcs,n))
869 #define mvwaddwstr(w,y,x,wcs)		(wmove(w,y,x)?ERR:waddwstr(w,wcs))
870 #define waddwstr(w,wcs)			waddnwstr(w,wcs,-1)
871 
872 #define attr_get(a,c,o)			wattr_get(stdscr,a,c,o)
873 #define attr_off(a,o)			wattr_off(stdscr,a,o)
874 #define attr_on(a,o)			wattr_on(stdscr,a,o)
875 #define attr_set(a,c,o)			wattr_set(stdscr,a,c,o)
876 
877 #define COLOR_PAIR(n)   		((chtype)(n)<<__COLOR_SHIFT)
878 #define PAIR_NUMBER(a)  		(((chtype)(a)&A_COLOR)>>__COLOR_SHIFT)
879 
880 #define bkgd(ch)			wbkgd(stdscr, ch)
881 #define bkgdset(ch)			__m_chtype_cc(ch, &stdscr->_bg)
882 #define getbkgd(w)			__m_cc_chtype(&(w)->_bg)
883 #define wbkgdset(w,ch)			__m_chtype_cc(ch, &(w)->_bg)
884 
885 #define bkgrnd(b)			wbkgrnd(stdscr,b)
886 #define bkgrndset(b)			wbkgrndset(stdscr,b)
887 #define getbkgrnd(b)			wgetbkgrnd(stdscr,b)
888 #define wbkgrndset(w,b)			((w)->_bg = *(b))
889 #define wgetbkgrnd(w,b)			(*(b) = (w)->_bg, OK)
890 
891 #define border(ls, rs, ts, bs, tl, tr, bl, br) \
892 	wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br)
893 #define border_set(ls, rs, ts, bs, tl, tr, bl, br) \
894 	wborder_set(stdscr, ls, rs, ts, bs, tl, tr, bl, br)
895 #define box(w,v,h)			wborder(w,v,v,h,h,0,0,0,0)
896 #define box_set(w,v,h)			wborder_set(w,v,v,h,h,0,0,0,0)
897 
898 #define can_change_color()		(2 < max_colors && can_change \
899 					&& initialize_color != (char *) 0)
900 #define has_colors()			(0 < max_colors)
901 
902 #define chgat(n,a,co,p)			wchgat(stdscr,n,a,co,p)
903 #define mvchgat(y,x,n,a,co,p)		(move(y,x)?ERR:chgat(n,a,co,p))
904 #define mvwchgat(w,y,x,n,a,co,p)	(wmove(w,y,x)?ERR:wchgat(w,n,a,co,p))
905 
906 #define clear()				wclear(stdscr)
907 #define clrtobot()			wclrtobot(stdscr)
908 #define clrtoeol()			wclrtoeol(stdscr)
909 #define erase()				werase(stdscr)
910 #define wclear(w)			(clearok(w,1)?ERR:werase(w))
911 #define werase(w)			(wmove(w,0,0)?ERR:wclrtobot(w))
912 
913 #define delch()				wdelch(stdscr)
914 #define mvdelch(y,x)			(move(y,x)?ERR:delch())
915 #define mvwdelch(w,y,x)			(wmove(w,y,x)?ERR:wdelch(w))
916 
917 #define deleteln()			wdeleteln(stdscr)
918 #define insdelln(n)			winsdelln(stdscr,n)
919 #define insertln()			winsertln(stdscr)
920 #define wdeleteln(w)			winsdelln(w, -1)
921 #define winsertln(w)			winsdelln(w, 1)
922 
923 #define refresh()			wrefresh(stdscr)
924 
925 #define echochar(ch)			wechochar(stdscr,ch)
926 #define echo_wchar(cp)			wecho_wchar(stdscr,cp)
927 #define wechochar(w,ch)			(waddch(w,ch)?ERR:wrefresh(w))
928 #define wecho_wchar(w,cp)		(wadd_wch(w,cp)?ERR:wrefresh(w))
929 
930 #define erasewchar(wp)			__m_tty_wc(VERASE, wp)
931 #define killwchar(wp)			__m_tty_wc(VKILL, wp)
932 
933 #define getch()				wgetch(stdscr)
934 #define mvgetch(y,x)			(move(y,x)?ERR:getch())
935 #define mvwgetch(w,y,x)			(wmove(w,y,x)?ERR:wgetch(w))
936 
937 #define get_wch(wcp)			wget_wch(stdscr,wcp)
938 #define mvget_wch(y,x,wcp)		(move(y,x)?ERR:get_wch(wcp))
939 #define mvwget_wch(w,y,x,wcp)		(wmove(w,y,x)?ERR:wget_wch(w,wcp))
940 
941 #define getnstr(s,n)			wgetnstr(stdscr,s,n)
942 #define getstr(s)			wgetstr(stdscr,s)
943 #define mvgetnstr(y,x,s,n)		(move(y,x)?ERR:getnstr(s,n))
944 #define mvgetstr(y,x,s)			(move(y,x)?ERR:getstr(s))
945 #define mvwgetnstr(w,y,x,s,n)		(wmove(w,y,x)?ERR:wgetnstr(w,s,n))
946 #define mvwgetstr(w,y,x,s)		(wmove(w,y,x)?ERR:wgetstr(w,s))
947 #define wgetstr(w,s)			wgetnstr(w,s,-1)
948 
949 #define getn_wstr(wcs,n)		wgetn_wstr(stdscr,wcs,n)
950 #define get_wstr(wcs)			wget_wstr(stdscr,wcs)
951 #define mvgetn_wstr(y,x,wcs,n)		(move(y,x)?ERR:getn_wstr(wcs,n))
952 #define mvget_wstr(y,x,wcs)		(move(y,x)?ERR:get_wstr(wcs))
953 #define mvwgetn_wstr(w,y,x,wcs,n)	(wmove(w,y,x)?ERR:wgetn_wstr(w,wcs,n))
954 #define mvwget_wstr(w,y,x,wcs)		(wmove(w,y,x)?ERR:wget_wstr(w,wcs))
955 #define wget_wstr(w,wcs)		wgetn_wstr(w,wcs,-1)
956 
957 #define has_ic()			(((insert_character != (char *) 0 \
958 					   || parm_ich != (char *) 0) \
959 					  && (delete_character != (char *) 0 \
960 					      || parm_dch != (char *) 0)) \
961 					 || (enter_insert_mode != (char *) 0 \
962 					     && exit_insert_mode))
963 
964 #define has_il()			(((insert_line != (char *) 0 \
965 					   || parm_insert_line != (char *) 0) \
966 					  && (delete_line != (char *) 0 \
967 					      || parm_delete_line !=(char*)0)) \
968 					 || change_scroll_region != (char *) 0)
969 
970 
971 #define hline(ch,n)			whline(stdscr,ch,n)
972 #define vline(ch,n)			wvline(stdscr,ch,n)
973 #define mvhline(y,x,ch,n)		(move(y,x)?ERR:hline(ch,n))
974 #define mvvline(y,x,ch,n)		(move(y,x)?ERR:vline(ch,n))
975 #define mvwhline(w,y,x,ch,n)		(wmove(w,y,x)?ERR:whline(w,ch,n))
976 #define mvwvline(w,y,x,ch,n)		(wmove(w,y,x)?ERR:wvline(w,ch,n))
977 
978 #define hline_set(cp,n)			whline_set(stdscr,cp,n)
979 #define vline_set(cp,n)			wvline_set(stdscr,cp,n)
980 #define mvhline_set(y,x,cp,n)		(move(y,x)?ERR:hline_set(cp,n))
981 #define mvvline_set(y,x,cp,n)		(move(y,x)?ERR:vline_set(cp,n))
982 #define mvwhline_set(w,y,x,cp,n)	(wmove(w,y,x)?ERR:whline_set(w,cp,n))
983 #define mvwvline_set(w,y,x,cp,n)	(wmove(w,y,x)?ERR:wvline_set(w,cp,n))
984 
985 #define inch()				winch(stdscr)
986 #define mvinch(y,x)			(move(y,x)?ERR:inch())
987 #define mvwinch(w,y,x)			(wmove(w,y,x)?ERR:winch(w))
988 
989 #define in_wch(cp)			win_wch(stdscr,cp)
990 #define mvin_wch(y,x,cp)		(move(y,x)?ERR:in_wch(cp))
991 #define mvwin_wch(w,y,x,cp)		(wmove(w,y,x)?ERR:win_wch(w,cp))
992 
993 #define inchnstr(chs,n)			winchnstr(stdscr,chs,n)
994 #define inchstr(chs)			winchstr(stdscr,chs)
995 #define mvinchnstr(y,x,chs,n)		(move(y,x)?ERR:inchnstr(chs,n))
996 #define mvinchstr(y,x,chs)		(move(y,x)?ERR:inchstr(chs))
997 #define mvwinchnstr(w,y,x,chs,n)	(wmove(w,y,x)?ERR:winchnstr(w,chs,n))
998 #define mvwinchstr(w,y,x,chs)		(wmove(w,y,x)?ERR:winchstr(w,chs))
999 #define winchstr(w,chs)			winchnstr(w,chs,-1)
1000 
1001 #define in_wchnstr(cp,n)		win_wchnstr(stdscr,cp,n)
1002 #define in_wchstr(cp)			win_wchstr(stdscr,cp)
1003 #define mvin_wchnstr(y,x,cp,n)		(move(y,x)?ERR:in_wchnstr(cp,n))
1004 #define mvin_wchstr(y,x,cp)		(move(y,x)?ERR:in_wchstr(cp))
1005 #define mvwin_wchnstr(w,y,x,cp,n)	(wmove(w,y,x)?ERR:win_wchnstr(w,cp,n))
1006 #define mvwin_wchstr(w,y,x,cp)		(wmove(w,y,x)?ERR:win_wchstr(w,cp))
1007 #define win_wchstr(w,cp)		win_wchnstr(w,cp,-1)
1008 
1009 #define innstr(s,n)			winnstr(stdscr,s,n)
1010 #define instr(s)			winstr(stdscr,s)
1011 #define mvinnstr(y,x,s,n)		(move(y,x)?ERR:innstr(s,n))
1012 #define mvinstr(y,x,s)			(move(y,x)?ERR:instr(s))
1013 #define mvwinnstr(w,y,x,s,n)		(wmove(w,y,x)?ERR:winnstr(w,s,n))
1014 #define mvwinstr(w,y,x,s)		(wmove(w,y,x)?ERR:winstr(w,s))
1015 #define winstr(w,s)			winnstr(w,s,-1)
1016 
1017 #define innwstr(wcs,n)			winnwstr(stdscr,wcs,n)
1018 #define inwstr(wcs)			winwstr(stdscr,wcs)
1019 #define mvinnwstr(y,x,wcs,n)		(move(y,x)?ERR:innwstr(wcs,n))
1020 #define mvinwstr(y,x,wcs)		(move(y,x)?ERR:inwstr(wcs))
1021 #define mvwinnwstr(w,y,x,wcs,n)		(wmove(w,y,x)?ERR:winnwstr(w,wcs,n))
1022 #define mvwinwstr(w,y,x,wcs)		(wmove(w,y,x)?ERR:winwstr(w,wcs))
1023 #define winwstr(w,wcs)			winnwstr(w,wcs,-1)
1024 
1025 #define insch(ch)			winsch(stdscr,ch)
1026 #define mvinsch(y,x,ch)			(move(y,x)?ERR:insch(ch))
1027 #define mvwinsch(w,y,x,ch)		(wmove(w,y,x)?ERR:winsch(w,ch))
1028 
1029 #define ins_wch(cp)			wins_wch(stdscr,cp)
1030 #define mvins_wch(y,x,cp)		(move(y,x)?ERR:ins_wch(cp))
1031 #define mvwins_wch(w,y,x,cp)		(wmove(w,y,x)?ERR:wins_wch(w,cp))
1032 
1033 #define insnstr(s,n)			winsnstr(stdscr,s,n)
1034 #define insstr(s)			winsstr(stdscr,s)
1035 #define mvinsnstr(y,x,s,n)		(move(y,x)?ERR:insnstr(s,n))
1036 #define mvinsstr(y,x,s)			(move(y,x)?ERR:insstr(s))
1037 #define	mvwinsnstr(w, y, x, s, n)	(wmove(w, y, x)?ERR:winsnstr(w, s, n))
1038 #define	mvwinsstr(w, y, x, s)		(wmove(w, y, x)?ERR:winsstr(w, s))
1039 #define	winsstr(w, s)			winsnstr(w, s, -1)
1040 
1041 #define	ins_nwstr(wcs, n)		wins_nwstr(stdscr, wcs, n)
1042 #define	ins_wstr(wcs)			wins_wstr(stdscr, wcs)
1043 #define	mvins_nwstr(y, x, wcs, n)	(move(y, x)?ERR:ins_nwstr(wcs, n))
1044 #define	mvins_wstr(y, x, wcs)		(move(y, x)?ERR:ins_wstr(wcs))
1045 #define	mvwins_nwstr(w, y, x, wcs, n)	(wmove(w, y, x)?ERR:wins_nwstr(w,wcs,n))
1046 #define	mvwins_wstr(w, y, x, wcs)	(wmove(w, y, x)?ERR:wins_wstr(w,wcs))
1047 #define	wins_wstr(w, wcs)		wins_nwstr(w, wcs, -1)
1048 
1049 #define	is_linetouched(w, y)		(0 <= (w)->_last[y])
1050 
1051 #define	mvcur(or, oc, nr, nc)		__m_mvcur(or, oc, nr, nc, __m_outc)
1052 
1053 #define	move(y, x)			wmove(stdscr, y, x)
1054 
1055 #define	overlay(s, t)			__m_copywin(s, t, 1)
1056 #define	overwrite(s, t)			__m_copywin(s, t, 0)
1057 
1058 #define	newpad(ny, nx)			__m_newwin((WINDOW *) 0, ny, nx, -1, -1)
1059 #define	subpad(par, ny, nx, by, bx)	subwin(par, ny, nx, by, bx)
1060 
1061 #define	nodelay(w, bf)			(wtimeout(w, (bf)?0:-1), OK)
1062 #define	timeout(n)			wtimeout(stdscr, n)
1063 
1064 #define	qiflush()			((void) intrflush((WINDOW *) 0, 1))
1065 #define	noqiflush()			((void) intrflush((WINDOW *) 0, 0))
1066 
1067 #define	redrawwin(w)			wredrawln(w, 0, (w)->_maxy)
1068 
1069 #define	scrl(n)				wscrl(stdscr, n)
1070 #define	setscrreg(t, b)			wsetscrreg(stdscr, t, b)
1071 
1072 #define	standend()			wstandend(stdscr)
1073 #define	standout()			wstandout(stdscr)
1074 #define	wstandend(w)			(wattr_set(w, WA_NORMAL, COLOR_BLACK, \
1075 					(void *)0), 1)
1076 #define	wstandout(w)			(wattr_on(w, WA_STANDOUT, (void *)0), 1)
1077 
1078 #define	touchline(w, y, n)		wtouchln(w, y, n, 1)
1079 #define	touchwin(w)			wtouchln(w, 0, (w)->_maxy, 1)
1080 #define	untouchwin(w)			wtouchln(w, 0, (w)->_maxy, 0)
1081 
1082 #define	termname()			(cur_term->_term)
1083 
1084 #ifndef _XOPEN_SOURCE
1085 /*
1086  * Obsolete functions names.
1087  */
1088 #define	crmode				cbreak
1089 #define	nocrmode			nocbreak
1090 #define	saveterm			def_prog_mode
1091 #define	fixterm				reset_prog_mode
1092 #define	resetterm			reset_shell_mode
1093 #endif /* _XOPEN_SOURCE */
1094 #endif /* _XOPEN_SOURCE_EXTENDED */
1095 
1096 /*
1097  * Special Keys
1098  *
1099  * Keypad layout
1100  *	A1	up	A3
1101  *     left	B2     right
1102  *	C1     down	C3
1103  *
1104  * Chossing negative values for KEY_ constants means that they can
1105  * be safely returned in either an int or long type.
1106  */
1107 #define	__KEY_BASE	(-2)
1108 #define	__KEY_MAX	__KEY_BASE
1109 
1110 #define	KEY_CODE_YES	(__KEY_BASE-1)		/* Special indicator. */
1111 
1112 #define	KEY_BREAK	(__KEY_BASE-2)		/* Break key (unreliable) */
1113 #define	KEY_DOWN	(__KEY_BASE-3)		/* The four arrow keys ... */
1114 #define	KEY_UP		(__KEY_BASE-4)
1115 #define	KEY_LEFT	(__KEY_BASE-5)
1116 #define	KEY_RIGHT	(__KEY_BASE-6)
1117 #define	KEY_HOME	(__KEY_BASE-7)		/* Move to upper-left corner. */
1118 #define	KEY_BACKSPACE	(__KEY_BASE-8)		/* Backspace */
1119 #define	KEY_F0		(__KEY_BASE-9)		/* Function keys.  Space for */
1120 #define	KEY_F(n)	(KEY_F0-(n))    	/* 64 keys is reserved. */
1121 #define	KEY_DL		(__KEY_BASE-73)		/* Delete line */
1122 #define	KEY_IL		(__KEY_BASE-74)		/* Insert line */
1123 #define	KEY_DC		(__KEY_BASE-75)		/* Delete character */
1124 #define	KEY_IC		(__KEY_BASE-76)		/* Ins char / enter ins mode */
1125 #define	KEY_EIC		(__KEY_BASE-77)		/* Exit insert char mode */
1126 #define	KEY_CLEAR	(__KEY_BASE-78)		/* Clear screen */
1127 #define	KEY_EOS		(__KEY_BASE-79)		/* Clear to end of screen */
1128 #define	KEY_EOL		(__KEY_BASE-80)		/* Clear to end of line */
1129 #define	KEY_SF		(__KEY_BASE-81)		/* Scroll 1 line forward */
1130 #define	KEY_SR		(__KEY_BASE-82)		/* Scroll 1 line backwards */
1131 #define	KEY_NPAGE	(__KEY_BASE-83)		/* Next page */
1132 #define	KEY_PPAGE	(__KEY_BASE-84)		/* Previous page */
1133 #define	KEY_STAB	(__KEY_BASE-85)		/* Set tab */
1134 #define	KEY_CTAB	(__KEY_BASE-86)		/* Clear tab */
1135 #define	KEY_CATAB	(__KEY_BASE-87)		/* Clear all tabs */
1136 #define	KEY_ENTER	(__KEY_BASE-88)		/* Enter or send */
1137 #define	KEY_SRESET	(__KEY_BASE-89)		/* Soft (partial) reset */
1138 #define	KEY_RESET	(__KEY_BASE-90)		/* Hard reset */
1139 #define	KEY_PRINT	(__KEY_BASE-91)		/* Print or copy */
1140 #define	KEY_LL		(__KEY_BASE-92)		/* Move to lower left corner. */
1141 #define	KEY_A1		(__KEY_BASE-93)		/* Upper left of keypad */
1142 #define	KEY_A3		(__KEY_BASE-94) 	/* Upper rght of keypad */
1143 #define	KEY_B2		(__KEY_BASE-95) 	/* Center of keypad */
1144 #define	KEY_C1		(__KEY_BASE-96) 	/* Lower left of keypad */
1145 #define	KEY_C3		(__KEY_BASE-97) 	/* Lower right of keypad */
1146 #define	KEY_BTAB	(__KEY_BASE-98) 	/* Back Tab */
1147 #define	KEY_BEG		(__KEY_BASE-99) 	/* Beginning */
1148 #define	KEY_CANCEL	(__KEY_BASE-100)
1149 #define	KEY_CLOSE	(__KEY_BASE-101)
1150 #define	KEY_COMMAND	(__KEY_BASE-102)
1151 #define	KEY_COPY	(__KEY_BASE-103)
1152 #define	KEY_CREATE	(__KEY_BASE-104)
1153 #define	KEY_END		(__KEY_BASE-105)
1154 #define	KEY_EXIT	(__KEY_BASE-106)
1155 #define	KEY_FIND	(__KEY_BASE-107)
1156 #define	KEY_HELP	(__KEY_BASE-108)
1157 #define	KEY_MARK	(__KEY_BASE-109)
1158 #define	KEY_MESSAGE	(__KEY_BASE-110)
1159 #define	KEY_MOUSE	(__KEY_BASE-111)	/* Mouse event occured */
1160 #define	KEY_MOVE	(__KEY_BASE-112)
1161 #define	KEY_NEXT	(__KEY_BASE-113)	/* Next object */
1162 #define	KEY_OPEN	(__KEY_BASE-114)
1163 #define	KEY_OPTIONS	(__KEY_BASE-115)
1164 #define	KEY_PREVIOUS	(__KEY_BASE-116)	/* Previous object */
1165 #define	KEY_REDO	(__KEY_BASE-117)
1166 #define	KEY_REFERENCE	(__KEY_BASE-118)
1167 #define	KEY_REFRESH	(__KEY_BASE-119)
1168 #define	KEY_REPLACE	(__KEY_BASE-120)
1169 #define	KEY_RESTART	(__KEY_BASE-121)
1170 #define	KEY_RESUME	(__KEY_BASE-122)
1171 #define	KEY_SAVE	(__KEY_BASE-123)
1172 #define	KEY_SBEG	(__KEY_BASE-124)	/* Shifted keys */
1173 #define	KEY_SCANCEL	(__KEY_BASE-125)
1174 #define	KEY_SCOMMAND	(__KEY_BASE-126)
1175 #define	KEY_SCOPY	(__KEY_BASE-127)
1176 #define	KEY_SCREATE	(__KEY_BASE-128)
1177 #define	KEY_SDC		(__KEY_BASE-129)
1178 #define	KEY_SDL		(__KEY_BASE-130)
1179 #define	KEY_SELECT	(__KEY_BASE-131)	/* Select */
1180 #define	KEY_SEND	(__KEY_BASE-132)	/* Shifted end key */
1181 #define	KEY_SEOL	(__KEY_BASE-133)
1182 #define	KEY_SEXIT	(__KEY_BASE-134)
1183 #define	KEY_SFIND	(__KEY_BASE-135)
1184 #define	KEY_SHELP	(__KEY_BASE-136)
1185 #define	KEY_SHOME	(__KEY_BASE-137)
1186 #define	KEY_SIC		(__KEY_BASE-138)
1187 #define	KEY_SLEFT	(__KEY_BASE-139)
1188 #define	KEY_SMESSAGE	(__KEY_BASE-140)
1189 #define	KEY_SMOVE	(__KEY_BASE-141)
1190 #define	KEY_SNEXT	(__KEY_BASE-142)
1191 #define	KEY_SOPTIONS	(__KEY_BASE-143)
1192 #define	KEY_SPREVIOUS	(__KEY_BASE-144)
1193 #define	KEY_SPRINT	(__KEY_BASE-145)
1194 #define	KEY_SREDO	(__KEY_BASE-146)
1195 #define	KEY_SREPLACE	(__KEY_BASE-147)
1196 #define	KEY_SRIGHT	(__KEY_BASE-148)
1197 #define	KEY_SRSUME	(__KEY_BASE-149)
1198 #define	KEY_SSAVE	(__KEY_BASE-150)
1199 #define	KEY_SSUSPEND	(__KEY_BASE-151)
1200 #define	KEY_SUNDO	(__KEY_BASE-152)
1201 #define	KEY_SUSPEND	(__KEY_BASE-153)
1202 #define	KEY_UNDO	(__KEY_BASE-154)
1203 
1204 #define	__KEY_MIN	(__KEY_BASE-155)
1205 
1206 #endif /* __M_CURSES_H__ */
1207