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