xref: /titanic_44/usr/src/lib/libcurses/screen/curses.ed (revision 2b24ab6b3865caeede9eeb9db6b83e1d89dcd1ea)
1e keycaps
2H
3g/.*KEY_/s//KEY_/
4g/KEY_F([1-9]/d
5g'\(KEY_[^,]*\),[ 	]*\([0-9][0-9]*\),[ 	]*\(.*\)'s''#define	\1	\2		/* \3 */'
6w ./tmp/keycaps
7e !sort +2n ./tmp/keycaps
8g'\(KEY_[^	]	\)'s''\1	'
9g'\(KEY_[^	][^	]	\)'s''\1	'
10g'\(KEY_[^	][^	][^	]	\)'s''\1	'
111i
12/* Funny "characters" enabled for various special function keys for input */
13/* This list is created from caps and curses.ed. Do not edit it! */
14#define	KEY_MIN		0401		/* Minimum curses key */
15#define	KEY_BREAK	0401		/* break key (unreliable) */
16.
17/KEY_F(0)/s//KEY_F0	/
18a
19#define	KEY_F(n)	(KEY_F0+(n))	/* Space for 64 function keys */
20					/* is reserved. */
21.
22/KEY_ENTER/a
23#define	KEY_SRESET	0530		/* soft (partial) reset (unreliable) */
24#define	KEY_RESET	0531		/* reset or hard reset (unreliable) */
25.
26/KEY_A1/i
27					/* The keypad is arranged like this: */
28					/*    a1    up    a3   */
29					/*   left   b2  right  */
30					/*    c1   down   c3   */
31.
32$a
33#define	KEY_MAX		0777		/* Maximum curses key */
34.
351i
36#ifndef _CURSES_H
37#define	_CURSES_H
38
39#pragma ident	"%Z%%M%	%I%	%E% SMI"
40
41/*
42 * curses.h - this file is automatically made from caps and
43 *	curses.ed. Don't make changes directly to curses.h!
44 */
45
46#include <widec.h>
47
48#include <stdio.h>
49
50#ifdef	__cplusplus
51extern "C" {
52#endif
53
54#define	CSMAX   4
55
56/*
57 * This trick is used to distinguish between SYSV and V7 systems.
58 * We assume that L_ctermid is only defined in stdio.h in SYSV
59 * systems, but not in V7 or Berkeley UNIX.
60 */
61#ifdef L_ctermid
62#ifdef SYSV
63#undef SYSV
64#endif
65#define	SYSV
66#endif
67/* Some V7 systems define	L_ctermid - we list those here */
68#ifdef BSD
69#undef SYSV
70#endif
71
72#ifdef SYSV
73
74#include <termio.h>
75typedef struct termio SGTTY;
76typedef struct termios SGTTYS;
77
78#else /* !SYSV */
79
80#ifndef _SGTTYB_
81#include <sgtty.h>
82#endif /* _SGTTYB_ */
83typedef struct sgttyb SGTTY;
84
85/*
86 * Here we attempt to improve portability by providing some #defines
87 * for SYSV functions on non-SYSV systems.
88 */
89#define	memcpy(dst, src, len)	bcopy((src), (dst), (len))
90#define	strchr			index
91#define	strrchr			rindex
92#endif /* SYSV */
93
94/*
95 * bool is a built-in type in standard C++ and as such is not
96 * defined here when using standard C++. However, the GNU compiler
97 * fixincludes utility nonetheless creates it's own version of this
98 * header for use by gcc and g++. In that version it adds a redundant
99 * guard for __cplusplus. To avoid the creation of a gcc/g++ specific
100 * header we need to include the following magic comment:
101 *
102 * we must use the C++ compiler's type
103 *
104 * The above comment should not be removed or changed until GNU
105 * gcc/fixinc/inclhack.def is updated to bypass this header.
106 */
107#if !defined(__cplusplus) && !defined(_BOOL)
108typedef	char bool;
109#endif /* !defined(__cplusplus) && !defined(_BOOL) */
110
111#define	_VR3_COMPAT_CODE
112/*
113 * chtype is the type used to store a character together with attributes.
114 * It can be set to "char" to save space, or "long" to get more attributes.
115 */
116#ifdef	CHTYPE
117typedef	CHTYPE chtype;
118#else
119#ifdef _LP64
120typedef unsigned int chtype;
121#else
122typedef unsigned long chtype;
123#endif /* _LP64 */
124#endif /* CHTYPE */
125
126/*
127 *	Define for the 'old' definition of chtype is required
128 *	when we are running in compatibility mode
129 */
130#ifdef _VR3_COMPAT_CODE
131typedef unsigned short _ochtype;
132#endif
133
134/* TRUE and FALSE get defined so many times, */
135/* let's not get in the way of other definitions. */
136#if	!defined(TRUE) || ((TRUE) != 1)
137#define	TRUE	(1)
138#endif
139#if	!defined(FALSE) || ((FALSE) != 0)
140#define	FALSE	(0)
141#endif
142#if	!defined(ERR) || ((ERR) != -1)
143#define	ERR	(-1)
144#endif
145#if	!defined(OK) || ((OK) != 0)
146#define	OK	(0)
147#endif
148
149/* short-hand notations */
150typedef struct _win_st	WINDOW;
151typedef struct screen	SCREEN;
152typedef struct _Mouse	MOUSE_STATUS;
153
154struct _win_st
155{
156	short		_cury, _curx;	/* current coordinates */
157	short		_maxy, _maxx;	/* max coordinates */
158	short		_begy, _begx;	/* (0,0) screen coordinates */
159	char		_flags;
160	short		_yoffset;	/* actual begy is _begy+_yoffset */
161	bool		_clear,		/* clearok() info */
162			_leave,		/* leaveok() info */
163			_immed,		/* window in immediate mode */
164			_sync;		/* auto syncup of parent */
165	WINDOW		*_padwin;	/* "pad" area for current window */
166#ifdef	_VR3_COMPAT_CODE
167	_ochtype	**_y16;		/* MUST stay at this offset in WINDOW */
168#endif
169	short		*_firstch;	/* first change in line */
170	short		*_lastch;	/* last change in line */
171	short		_tmarg, _bmarg;	/* scrolling region bounds */
172					/* MUST stay at this offset in WINDOW */
173	unsigned	_scroll		: 1;	/* scrollok() info */
174	unsigned	_use_idl	: 1;
175	unsigned	_use_keypad	: 1;
176	unsigned	_notimeout	: 1;
177	unsigned	_use_idc	: 1;
178	chtype		_attrs;		/* current window attributes */
179	chtype		_bkgd;		/* background, normally blank */
180	int		_delay;		/* delay period on wgetch */
181					/* 0:  for nodelay */
182					/* <0: for infinite delay */
183					/* >0: delay time in millisec */
184	short		_ndescs;	/* number of descendants */
185	short		_parx, _pary;	/* coords relative to parent (0,0) */
186	WINDOW		*_parent;	/* the parent if this is a subwin */
187	chtype		**_y;		/* lines of data */
188	short		_nbyte;		/* number of bytes to come */
189	short		_index;		/* index to hold coming char */
190	char		_waitc[CSMAX];	/* array to hold partial m-width char */
191	bool		_insmode;	/* TRUE for inserting, */
192					/* FALSE for adding */
193};
194
195/* _lastch is initially set to this, _firstch is set to win->_maxx */
196#define	_NOCHANGE	-1
197#define	_INFINITY	16000	/* no line can be longer than this */
198
199/* values for win->_flags */
200#define	_ISPAD		001
201#define	_WINCHANGED	002
202#define	_WINMOVED	004
203#define	_WINSDEL	010
204#define	_CANT_BE_IMMED	020
205#define	_WIN_ADD_ONE	040
206#define	_WIN_INS_ONE	100
207
208struct _Mouse {
209	int x, y;
210	short button[3];
211	int   changes;
212};
213
214#define	CURS_STUPID	0
215#define	CURS_UNKNOWN	1
216#define	CURS_BAD_MALLOC	2
217
218/*
219 * Various tricks to shut up lint about things that are perfectly fine.
220 */
221#if defined(__lint) && !defined(CURSES) /* if not internal to curses source */
222struct screen {
223	int _nobody_;
224};
225#endif /* __lint */
226
227/* common external variables */
228
229extern	int	LINES, COLS, TABSIZE, COLORS, COLOR_PAIRS;
230
231extern	short	curs_errno;
232
233extern WINDOW *stdscr, *curscr;
234
235extern  MOUSE_STATUS	Mouse_status;
236
237extern char ttytype[];
238
239extern char	curs_parm_err[],
240		*curs_err_strings[];
241
242/* Function declarations */
243
244#ifdef	_VR3_COMPAT_CODE
245
246extern	_ochtype	*acs_map;
247extern chtype 	*acs32map;
248
249/* definitions for Vr3 source compatibility */
250
251#define	initscr		initscr32
252#define	newterm		newterm32
253#define	waddch		w32addch
254#define	wechochar	w32echochar
255#define	pechochar	p32echochar
256#define	winsch		w32insch
257#define	vidputs		vid32puts
258#define	vidattr		vid32attr
259#define	wattroff	w32attroff
260#define	wattron		w32attron
261#define	wattrset	w32attrset
262#define	acs_map		acs32map
263#define	box		box32
264
265#ifdef	__STDC__
266extern WINDOW *initscr(void);
267extern	SCREEN	*newterm(char *, FILE *, FILE *);
268#else
269extern WINDOW *initscr();
270extern	SCREEN	*newterm();
271#endif
272
273/* declarations for mini-curses */
274
275#ifdef	__STDC__
276extern	WINDOW 	*m_initscr(void);
277
278extern	SCREEN	*m_newterm(char *, FILE *, FILE *);
279
280extern	int	m_addch(int), m_addstr(char *), m_clear(void), m_erase(void),
281		m_move(int, int), m_refresh(void);
282
283#else  /* __STDC__ */
284extern	WINDOW	*m_initscr();
285
286extern	SCREEN	*m_newterm();
287
288extern	int	m_addch(), m_addstr(), m_clear(), m_erase(),
289		m_move(), m_refresh();
290
291#endif /* __STDC__ */
292
293#else	/* _VR3_COMPAT_CODE */
294
295extern chtype *acs_map;
296
297#endif	/* _VR3_COMPAT_CODE */
298
299#ifdef __STDC__
300
301extern SCREEN *newscreen(char *, int, int, int, FILE *, FILE *);
302extern SCREEN *setcurscreen(SCREEN *);
303
304extern WINDOW *initscr(void);
305extern WINDOW *newwin(int, int, int, int);
306extern WINDOW *newpad(int, int);
307extern WINDOW *derwin(WINDOW *, int, int, int, int);
308extern WINDOW *dupwin(WINDOW *);
309extern WINDOW *getwin(FILE *);
310
311extern int wgetch(WINDOW *); /* it can return KEY_*, for instance. */
312
313extern char *longname(void);	/* long name of terminal */
314extern char *termname(void);	/* effective terminal name */
315extern char *keyname(int); 	/* name of token returned by wgetch() */
316extern char *slk_label(int);
317extern char erasechar(void);
318extern char killchar(void);
319extern char *unctrl(int);
320
321extern chtype termattrs(void);
322
323extern void vidupdate(chtype, chtype, int (*)(char));
324extern void wsyncup(WINDOW *);
325extern void wsyncdown(WINDOW *);
326extern void delscreen(SCREEN *);
327extern void curserr(void);
328extern void _setqiflush(int);
329extern void wcursyncup(WINDOW *);
330
331extern int cbreak(void);
332extern int nocbreak(void);
333extern int reset_prog_mode(void);
334extern int reset_shell_mode(void);
335extern int def_prog_mode(void);
336extern int _setecho(int);
337extern int _setnonl(int);
338extern int def_shell_mode(void);
339extern int raw(void);
340extern int savetty(void);
341extern int traceon(void);
342extern int _meta(int);
343extern int traceoff(void);
344extern int noraw(void);
345extern int flushinp(void);
346extern int _getsyx(int *, int *);
347extern int _ring(bool);
348extern int resetty(void);
349extern int ripoffline(int, int (*)(WINDOW *, int));
350extern int setsyx(int, int);
351extern int slk_refresh(void);
352extern int slk_restore(void);
353extern int wstandend(WINDOW *);
354extern int wstandout(WINDOW *);
355extern int wattroff(WINDOW *, chtype);
356extern int wattron(WINDOW *, chtype);
357extern int wattrset(WINDOW *, chtype);
358extern int wrefresh(WINDOW *);
359
360extern int copywin(WINDOW *, WINDOW *, int, int, int, int, int, int, int);
361extern int curs_set(int);
362extern int delay_output(int);
363extern int delwin(WINDOW *);
364extern int doupdate(void);
365extern int drainio(int);
366extern int endwin(void);
367extern int isendwin(void);
368extern int baudrate(void);
369extern int has_ic(void);
370extern int has_il(void);
371extern int keypad(WINDOW *, bool);
372extern int mvcur(int, int, int, int);
373
374extern int mvprintw(int, int, ...);
375extern int mvscanw(int, int, ...);
376extern int mvwprintw(WINDOW *, int, int, ...);
377extern int mvwscanw(WINDOW *, int, int, ...);
378extern int printw(char *, ...);
379extern int scanw(char *, ...);
380extern int wprintw(WINDOW *, ...);
381extern int wscanw(WINDOW *, ...);
382
383		/* __va_list is the ANSI-C safe definition of the	*/
384		/* va_list type as allowed to be defined in stdlib.h.	*/
385		/* <stdio.h> provides the nested include of <va_list.h>	*/
386		/* which provides this namespace safe definition.	*/
387		/* Either <stdarg.h> or <varargs.h> must be included to	*/
388		/* use these interfaces.				*/
389
390extern int vwprintw(WINDOW *, char *, __va_list);
391extern int vwscanw(WINDOW *, char *, __va_list);
392
393extern int mvwin(WINDOW *, int, int);
394extern int mvderwin(WINDOW *, int, int);
395extern int napms(int);
396extern int newkey(char *, short, bool);
397extern int filter(void);
398extern int pechochar(WINDOW *, chtype);
399extern int pnoutrefresh(WINDOW *, int, int, int, int, int, int);
400extern int prefresh(WINDOW *, int, int, int, int, int, int);
401
402extern int putwin(WINDOW *, FILE *);
403extern int wredrawln(WINDOW *, int, int);
404extern int scr_dump(char *);
405extern int setupterm(char *, int, int *);
406
407extern int slk_attron(chtype);
408extern int slk_attroff(chtype);
409extern int slk_attrset(chtype);
410extern int slk_clear(void);
411extern int slk_noutrefresh(void);
412extern int slk_set(int, char *, int);
413extern int slk_start(int, int *);
414extern int slk_touch(void);
415extern int start_color(void);
416extern int typeahead(int);
417
418extern bool can_change_color(void);
419extern bool has_colors(void);
420
421extern int waddch(WINDOW *, chtype);
422extern int waddchnstr(WINDOW *, chtype *, int);
423extern int waddnstr(WINDOW *, char *, int);
424extern int wbkgd(WINDOW *, chtype);
425extern int wborder(WINDOW *, chtype, chtype, chtype, chtype,
426		chtype, chtype, chtype, chtype);
427extern int wclrtobot(WINDOW *);
428extern int wclrtoeol(WINDOW *);
429extern int wdelch(WINDOW *);
430extern int wechochar(WINDOW *, chtype);
431extern int wgetstr(WINDOW *, char *);
432extern int wgetnstr(WINDOW *, char *, int);
433extern int whline(WINDOW *, chtype, int);
434extern int wvline(WINDOW *, chtype, int);
435extern int winchnstr(WINDOW *, chtype *, int);
436extern int winchstr(WINDOW *, chtype *);
437extern int winnstr(WINDOW *, char *, int);
438extern int winsch(WINDOW *, chtype);
439extern int winsdelln(WINDOW *, int);		/* internal */
440extern int winsnstr(WINDOW *, char *, int);
441extern int winstr(WINDOW *, char *);
442extern int wmove(WINDOW *, int, int);
443extern int wnoutrefresh(WINDOW *);
444extern int wredrawln(WINDOW *, int, int);
445extern int wscrl(WINDOW *, int);
446extern int wsetscrreg(WINDOW *, int, int);
447extern int wtouchln(WINDOW *, int, int, int);
448
449extern int crmode(void);
450extern int nocrmode(void);
451extern int ungetch(int);
452
453extern int mouse_set(long int);
454extern int mouse_on(long int);
455extern int mouse_off(long int);
456extern int request_mouse_pos(void);
457extern int map_button(unsigned long);
458
459extern void wmouse_position(WINDOW *, int *, int *);
460
461extern unsigned long getmouse(void), getbmap(void);
462
463		/* the following declarations take integers as arguments  */
464		/* to keep the CI5 compiler happy.  what we really want   */
465		/* to pass is given in comments.  (by the way, we don't   */
466		/* save anything by passing short or bool, since compiler */
467		/* expands them to integers any way			  */
468
469extern int pair_content(short, short *, short *);
470extern int color_content(short, short *, short *, short *); /* as above */
471extern int init_color(short, short, short, short);
472extern int init_pair(short, short, short);
473extern int idlok(WINDOW *, bool);
474
475extern void immedok(WINDOW *, bool);
476
477extern chtype winwch(WINDOW *);
478
479extern int pechowchar(WINDOW *, chtype);
480extern int ungetwch(const wchar_t);
481extern int waddnwstr(WINDOW *, wchar_t *, int);
482extern int waddwch(WINDOW *, chtype);
483extern int waddwchnstr(WINDOW *, chtype *, int);
484extern int wechowchar(WINDOW *, chtype);
485extern int wgetnwstr(WINDOW *, wchar_t *, int);
486extern int wgetwch(WINDOW *);
487extern int wgetwstr(WINDOW *, wchar_t *);
488extern int winnwstr(WINDOW *, wchar_t *, int);
489extern int winsnwstr(WINDOW *, wchar_t *, int);
490extern int winswch(WINDOW *, chtype);
491extern int winwchnstr(WINDOW *, chtype *, int);
492extern int winwstr(WINDOW *, wchar_t *);
493
494#else /* __STDC__ */
495
496extern	SCREEN	*newscreen(),	/* termname, lines, cols, tabsiz, fout, fin */
497		*setcurscreen(); /* screenptr */
498
499extern	WINDOW 	*initscr(),
500		*newwin(),		/* nlines, ncols, begy, begx */
501		*newpad(),		/* nlines, ncols */
502		*derwin(),		/* orig, nlines, ncols, begy, begx */
503		*dupwin(),		/* orig */
504		*getwin();		/* file */
505
506extern	int	wgetch(); /* because it can return KEY_*, for instance. */
507
508extern	char	*longname(),	/* long name of terminal */
509		*termname(),	/* effective terminal name */
510		*keyname(),	/* (int)  name of token returned by wgetch() */
511		*slk_label(),	/* index */
512		erasechar(),
513		killchar(),
514		*unctrl();
515
516extern	chtype	termattrs();
517
518extern	void	vidupdate(), wsyncup(), wsyncdown(),
519		delkeymap(),
520		delscreen(), curserr(),
521		_setqiflush(),
522		immedok(),
523		wcursyncup();
524
525extern	int	cbreak(), nocbreak(),
526		reset_prog_mode(), reset_shell_mode(), def_prog_mode(),
527		_setecho(), _setnonl(),
528		def_shell_mode(), raw(),
529		savetty(), traceon(), _meta(),
530		traceoff(), noraw(), flushinp(), _getsyx(),
531		_ring(), resetty(), ripoffline(), setsyx(), slk_refresh(),
532		slk_restore(), wstandend(), wstandout(),
533		wattroff(), wattron(), wattrset(), wrefresh();
534
535extern	int	color_cont(), copywin(), curs_set(), delay_output(), delwin(),
536		doupdate(), drainio(), endwin(), isendwin(),
537		baudrate(), has_ic(), has_il(), idlok(),
538		init_color(), init_pair(), keypad(), mvcur();
539
540extern	int	mvprintw(), mvscanw(), mvwprintw(), mvwscanw(),
541		printw(), scanw(), wprintw(), wscanw(), vwprintw(), vwscanw();
542
543extern	int	mvwin(), mvderwin(), napms(), newkey(), filter(),
544		pair_content(), pechochar(), pnoutrefresh(), prefresh();
545
546extern 	int	putwin(), wredrawln(), scr_dump(), setupterm();
547
548extern	int	slk_attrof(), slk_attrof(), slk_attrset(),
549		slk_clear(), slk_noutrefresh(), slk_set(),
550		slk_start(), slk_touch(), start_color(),
551		typeahead();
552
553extern	bool	can_change_color(), has_colors();
554
555extern	int	waddch(), waddchnstr(), waddnstr(), wbkgd(),
556		wborder(), wclrtobot(), wclrtoeol(), wdelch(), wechochar(),
557		wgetstr(), wgetnstr(), whline(), wvline(), winchnstr(),
558		winchstr(), winnstr(), winsch(),
559		winsdelln(),		/* internal */
560		winsnstr(), winstr(), wmove(), wnoutrefresh(), wredrawln(),
561		wscrl(), wsetscrreg(), wtouchln();
562
563extern	int	crmode(), nocrmode(), ungetch();
564
565extern	int	mouse_set(), mouse_on(), mouse_off(),
566		request_mouse_pos(), map_button();
567
568extern void	wmouse_position();
569
570extern unsigned long getmouse(), getbmap();
571
572extern chtype	winwch();
573
574extern int	pechowchar(), ungetwch(), waddnwstr(), waddwch(),
575		waddwchnstr(), wechowchar(), wgetnwstr(), wgetwch(),
576		wgetwstr(), winnwstr(), winsnwstr(), winswch(),
577		winwchnstr(), winwstr();
578
579#endif /* __STDC__ */
580
581#define	getsyx(y, x)		_getsyx(&(y), &(x))
582
583/*
584 * Functions to get at the window structure.
585 */
586
587#define	getyx(win, y, x)	((y) = getcury(win), (x) = getcurx(win))
588#define	getbegyx(win, y, x)	((y) = getbegy(win), (x) = getbegx(win))
589#define	getmaxyx(win, y, x)	((y) = getmaxy(win), (x) = getmaxx(win))
590#define	getparyx(win, y, x)	((y) = getpary(win), (x) = getparx(win))
591
592#if	defined(CURS_PERFORMANCE) && !defined(__lint)
593#define	getcury(win)		((win)->_cury)
594#define	getcurx(win)		((win)->_curx)
595#define	getbegy(win)		((win)->_begy)
596#define	getbegx(win)		((win)->_begx)
597#define	getmaxy(win)		((win)->_maxy)
598#define	getmaxx(win)		((win)->_maxx)
599#define	getpary(win)		((win)->_pary)
600#define	getparx(win)		((win)->_parx)
601#define	getbkgd(win)		((win)->_bkgd)
602#define	getattrs(win)		((win)->_attrs)
603#else 	/* defined(CURS_PERFORMANCE) && !defined(__lint) */
604
605#ifdef __STDC__
606extern int getcury(WINDOW *);
607extern int getcurx(WINDOW *);
608extern int getbegy(WINDOW *);
609extern int getbegx(WINDOW *);
610extern int getmaxy(WINDOW *);
611extern int getmaxx(WINDOW *);
612extern int getpary(WINDOW *);
613extern int getparx(WINDOW *);
614
615extern chtype getbkgd(WINDOW *);
616extern chtype getattrs(WINDOW *);
617
618#else  /* __STDC__ */
619extern	int	getcury(), getcurx(), getbegy(), getbegx(),
620		getmaxy(), getmaxx(), getpary(), getparx();
621
622extern chtype	getbkgd(), getattrs();
623
624#endif  /* __STDC__ */
625#endif	/* defined(CURS_PERFORMANCE) && !defined(__lint) */
626
627#if	defined(NOMACROS) || defined(__lint)
628
629#ifdef __STDC__
630
631extern	SCREEN	*newterm(char *, FILE *, FILE *);
632extern	SCREEN  *set_term(SCREEN *);
633
634extern WINDOW *subpad(WINDOW *, int, int, int, int);
635extern WINDOW *subwin(WINDOW *, int, int, int, int);
636
637extern char *unctrl(int);
638
639extern chtype inch(void);
640extern chtype winch(WINDOW *);
641extern chtype mvinch(int, int);
642extern chtype mvwinch(WINDOW *, int, int);
643
644extern int addch(chtype);
645extern int addchnstr(chtype *, int);
646extern int addchstr(chtype *);
647extern int addnstr(char *, int);
648extern int addstr(char *);
649extern int attroff(chtype);
650extern int attron(chtype);
651extern int attrset(chtype);
652extern int beep(void);
653extern int bkgd(chtype);
654extern int border(chtype, chtype, chtype, chtype,
655		chtype, chtype, chtype, chtype);
656extern int box(WINDOW *, chtype, chtype);
657extern int clear(void);
658extern int clearok(WINDOW *, bool);
659extern int clrtobot(void);
660extern int clrtoeol(void);
661extern int crmode(void);
662extern int delch(void);
663extern int deleteln(void);
664extern int echo(void);
665extern int echochar(chtype);
666extern int erase(void);
667extern int fixterm(void);
668extern int flash(void);
669extern int garbagedlines(WINDOW *, int, int);
670extern int garbagedwin(WINDOW *);
671extern int getch(void);
672extern int getstr(char *);
673extern int gettmode(void);
674extern int halfdelay(int);
675extern int hline(chtype, int);
676extern int inchnstr(chtype *, int);
677extern int inchstr(chtype *);
678extern int innstr(char *, int);
679extern int insch(chtype);
680extern int insdelln(int);
681extern int insertln(void);
682extern int insnstr(char *, int);
683extern int insstr(char *);
684extern int instr(char *);
685extern int intrflush(WINDOW *, int);
686extern int is_linetouched(WINDOW *, int);
687extern int is_wintouched(WINDOW *);
688extern int leaveok(WINDOW *, bool);
689extern int meta(WINDOW *, int);
690extern int move(int, int);
691extern int mvaddch(int, int, chtype);
692extern int mvaddchnstr(int, int, chtype *, int);
693extern int mvaddchstr(int, int, chtype *);
694extern int mvaddnstr(int, int, char *, int);
695extern int mvaddstr(int, int, char *);
696extern int mvdelch(int, int);
697extern int mvgetch(int, int);
698extern int mvgetstr(int, int, char *);
699extern int mvhline(int, int, chtype, int);
700extern int mvinchnstr(int, int, chtype *, int);
701extern int mvinchstr(int, int, chtype *);
702extern int mvinnstr(int, int, char *, int);
703extern int mvinsch(int, int, chtype);
704extern int mvinsnstr(int, int, char *, int);
705extern int mvinsstr(int, int, char *);
706extern int mvinstr(int, int, char *);
707extern int mvvline(int, int, chtype, int);
708extern int mvwaddch(WINDOW *, int, int, chtype);
709extern int mvwaddchnstr(WINDOW *, int, int, chtype *, int);
710extern int mvwaddchstr(WINDOW *, int, int, chtype *);
711extern int mvwaddnstr(WINDOW *, int, int, char *, int);
712extern int mvwaddstr(WINDOW *, int, int, char *);
713extern int mvwdelch(WINDOW *, int, int);
714extern int mvwgetch(WINDOW *, int, int);
715extern int mvwgetstr(WINDOW *, int, int, char *);
716extern int mvwhline(WINDOW *, int, int, chtype, int);
717extern int mvwinchnstr(WINDOW *, int, int, chtype *, int);
718extern int mvwinchstr(WINDOW *, int, int, chtype *);
719extern int mvwinnstr(WINDOW *, int, int, char *, int);
720extern int mvwinsch(WINDOW *, int, int, chtype);
721extern int mvwinsnstr(WINDOW *, int, int, char *, int);
722extern int mvwinsstr(WINDOW *, int, int, char *);
723extern int mvwinstr(WINDOW *, int, int, char *);
724extern int mvwvline(WINDOW *, int, int, chtype, int);
725extern int nl(void);
726extern int nocrmode(void);
727extern int nodelay(WINDOW *, bool);
728extern int noecho(void);
729extern int nonl(void);
730extern int notimeout(WINDOW *, bool);
731extern int overlay(WINDOW *, WINDOW *);
732extern int overwrite(WINDOW *, WINDOW *);
733extern int redrawwin(WINDOW *);
734extern int refresh(void);
735extern int resetterm(void);
736extern int saveterm(void);
737extern int scr_init(char *);
738extern int scr_restore(char *);
739extern int scr_set(char *);
740extern int scrl(int);
741extern int scroll(WINDOW *);
742extern int scrollok(WINDOW *, bool);
743extern int setscrreg(int, int);
744extern int setterm(char *);
745extern int slk_init(int);
746extern int standend(void);
747extern int standout(void);
748extern int syncok(WINDOW *, bool);
749extern int touchline(WINDOW *, int, int);
750extern int touchwin(WINDOW *);
751extern int untouchwin(WINDOW *);
752extern int vline(chtype, int);
753extern int waddchstr(WINDOW *, chtype *);
754extern int waddstr(WINDOW *, char *);
755extern int wclear(WINDOW *);
756extern int wdeleteln(WINDOW *);
757extern int werase(WINDOW *);
758extern int winchstr(WINDOW *, chtype *);
759extern int winsertln(WINDOW *);
760extern int winsstr(WINDOW *, char *);
761extern int winstr(WINDOW *, char *);
762extern int wstandend(WINDOW *);
763extern int wstandout(WINDOW *);
764
765extern void bkgdset(chtype);
766extern void idcok(WINDOW *, bool);
767extern void noqiflush(void);
768extern void wbkgdset(WINDOW *, chtype);
769extern void qiflush(void);
770extern void timeout(int);
771extern void wtimeout(WINDOW *, int);
772extern void use_env(int);			/* int sb. char */
773
774extern chtype inwch(void);
775extern chtype mvinwch(int, int);
776extern chtype mvwinwch(WINDOW *, int, int);
777
778extern int addnwstr(wchar_t *, int);
779extern int addwch(chtype);
780extern int addwchnstr(chtype *, int);
781extern int addwchstr(chtype *);
782extern int addwstr(wchar_t *);
783extern int echowchar(chtype);
784extern int getnwstr(wchar_t *, int);
785extern int getwch(void);
786extern int getwstr(wchar_t *);
787extern int innwstr(wchar_t *, int);
788extern int insnwstr(wchar_t *, int);
789extern int inswch(chtype);
790extern int inswstr(wchar_t *);
791extern int inwchnstr(chtype *, int);
792extern int inwchstr(chtype *);
793extern int inwstr(wchar_t *);
794extern int mvaddnwstr(int, int, wchar_t *, int);
795extern int mvaddwch(int, int, chtype);
796extern int mvaddwchnstr(int, int, chtype *, int);
797extern int mvaddwchstr(int, int, chtype *);
798extern int mvaddwstr(int, int, wchar_t *);
799extern int mvgetnwstr(int, int, wchar_t *, int);
800extern int mvgetwch(int, int);
801extern int mvgetwstr(int, int, wchar_t *);
802extern int mvinnwstr(int, int, wchar_t *, int);
803extern int mvinsnwstr(int, int, wchar_t *, int);
804extern int mvinswch(int, int, chtype);
805extern int mvinswstr(int, int, wchar_t *);
806extern int mvinwchnstr(int, int, chtype *, int);
807extern int mvinwchstr(int, int, chtype *);
808extern int mvinwstr(int, int, wchar_t *);
809extern int mvwaddnwstr(WINDOW *, int, int, wchar_t *, int);
810extern int mvwaddwch(WINDOW *, int, int, chtype);
811extern int mvwaddwchnstr(WINDOW *, int, int, chtype *, int);
812extern int mvwaddwchstr(WINDOW *, int, int, chtype *);
813extern int mvwaddwstr(WINDOW *, int, int, wchar_t *);
814extern int mvwgetnwstr(WINDOW *, int, int, wchar_t *, int);
815extern int mvwgetwch(WINDOW *, int, int);
816extern int mvwgetwstr(WINDOW *, int, int, wchar_t *);
817extern int mvwinnwstr(WINDOW *, int, int, wchar_t *, int);
818extern int mvwinsnwstr(WINDOW *, int, int, wchar_t *, int);
819extern int mvwinswch(WINDOW *, int, int, chtype);
820extern int mvwinswstr(WINDOW *, int, int, wchar_t *);
821extern int mvwinwchnstr(WINDOW *, int, int, chtype *, int);
822extern int mvwinwchstr(WINDOW *, int, int, chtype *);
823extern int mvwinwstr(WINDOW *, int, int, wchar_t *);
824extern int waddwchstr(WINDOW *, chtype *);
825extern int waddwstr(WINDOW *, wchar_t *);
826extern int winswstr(WINDOW *, wchar_t *);
827extern int winwchstr(WINDOW *, chtype *);
828
829#else /* __STDC__ */
830
831extern	SCREEN	*newterm(),		/* termname, fout, fin */
832extern	SCREEN	*set_term();		/* screenptr */
833
834extern	WINDOW	*subpad(),
835extern	WINDOW	*subwin();
836
837extern	chtype	inch(), winch(), mvinch(), mvwinch();
838
839extern	char	*unctrl();
840
841extern	int	addch(), addchnstr(), addchstr(), addnstr(), addstr(),
842		attroff(), attron(), attrset(), beep(), bkgd(),
843		border(), box(), clear(), clearok(), clrtobot(), clrtoeol(),
844		crmode(), delch(), deleteln(), echo(), echochar(),
845		erase(),
846/* MORE */	fixterm(),
847		flash(), garbagedlines(), garbagedwin(),
848		getch(), getstr(), gettmode(), halfdelay(), hline(),
849		inchnstr(), inchstr(), innstr(), insch(),
850		insdelln(), insertln(), insnstr(), insstr(), instr(),
851		intrflush(),
852		is_linetouched(), is_wintouched(), leaveok(), meta(),
853		move(), mvaddch(), mvaddchnstr(), mvaddchstr(), mvaddnstr(),
854		mvaddstr(), mvdelch(), mvgetch(), mvgetstr(), mvhline(),
855		mvinchnstr(), mvinchstr(), mvinnstr(), mvinsch(), mvinsnstr(),
856		mvinsstr(), mvinstr(), mvvline(), mvwaddch(), mvwaddchnstr(),
857		mvwaddchstr(), mvwaddnstr(), mvwaddstr(), mvwdelch(),
858		mvwgetch(), mvwgetstr(), mvwhline(), mvwinchnstr(),
859		mvwinchstr(), mvwinnstr(), mvwinsch(), mvwinsnstr(),
860		mvwinsstr(), mvwinstr(), mvwvline(),
861		nl(), nocrmode(), nodelay(),
862		noecho(), nonl(), notimeout(),
863		overlay(), overwrite(), redrawwin(), refresh(),
864		resetterm(), saveterm(), scr_init(),
865		scr_restore(), scr_set(), scrl(),
866		scroll(), scrollok(), setscrreg(), setterm(),
867		slk_init(), standend(), standout(),
868		syncok(), touchline(), touchwin(), untouchwin(), vline(),
869		waddchstr(), waddstr(), wclear(),
870		wdeleteln(), werase(), winchstr(), winsertln(),
871		winsstr(), winstr(), wstandend(), wstandout();
872
873extern	void	bkgdset(), wbkgdset(), idcok(), noqiflush(),
874		qiflush(), timeout(), wtimeout(), use_env();
875
876extern unsigned long getmouse(), getbmap();
877
878extern chtype   inwch(), mvinwch(), mvwinwch();
879
880extern int	addnwstr(), addwch(), addwchnstr(), addwchstr(),
881		addwstr(), echowchar(), getnwstr(), getwch(),
882		getwstr(), innwstr(), insnwstr(), inswch(),
883		inswstr(), inwchnstr(), inwchstr(), inwstr(),
884		mvaddnwstr(), mvaddwch(), mvaddwchnstr(), mvaddwchstr(),
885		mvaddwstr(), mvgetnwstr(), mvgetwch(), mvgetwstr(),
886		mvinnwstr(), mvinsnwstr(), mvinswch(), mvinswstr(),
887		mvinwchnstr(), mvinwchstr(), mvinwstr(), mvwaddnwstr(),
888		mvwaddwch(), mvwaddwchnstr(), mvwaddwchstr(), mvwaddwstr(),
889		mvwgetnwstr(), mvwgetwch(), mvwgetwstr(), mvwinnwstr(),
890		mvwinsnwstr(), mvwinswch(), mvwinswstr(), mvwinwchnstr(),
891		mvwinwchstr(), mvwinwstr(), waddwchstr(), waddwstr(),
892		winswstr(), winwchstr();
893
894#endif /* __STDC__ */
895
896#else	/* NOMACROS || __lint */
897
898/*
899 * The defines from here down to the #endif for NOMACROS
900 * define	macros, which may be more efficient than their
901 * function versions. The functions may be accessed by defining
902 * NOMACROS in C code. This is useful for debugging purposes.
903 */
904
905#include  <unctrl.h>
906
907/* pseudo functions for stdscr */
908#define	addch(ch)	waddch(stdscr, ch)
909#define	addnstr(s, n)	waddnstr(stdscr, s, n)
910#define	addstr(str)	waddstr(stdscr, str)
911#define	attroff(at)	wattroff(stdscr, at)
912#define	attron(at)	wattron(stdscr, at)
913#define	attrset(at)	wattrset(stdscr, at)
914#define	bkgd(c)		wbkgd(stdscr, c)
915#define	border(ls, rs, ts, bs, tl, tr, bl, br) \
916	wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br)
917#define	clear()		wclear(stdscr)
918#define	clrtobot()	wclrtobot(stdscr)
919#define	clrtoeol()	wclrtoeol(stdscr)
920#define	delch()		wdelch(stdscr)
921#define	deleteln()	wdeleteln(stdscr)
922#define	echochar(ch)	wechochar(stdscr, ch)
923#define	erase()		werase(stdscr)
924#define	getch()		wgetch(stdscr)
925#define	getstr(str)	wgetstr(stdscr, str)
926#define	inch()		winch(stdscr)
927#define	insch(c)	winsch(stdscr, c)
928#define	insdelln(id)	winsdelln(stdscr, id)
929#define	insertln()	winsertln(stdscr)
930#define	insnstr(s, n)	winsnstr(stdscr, s, n)
931#define	insstr(s)	winsstr(stdscr, s)
932#define	move(y, x)	wmove(stdscr, y, x)
933#define	refresh()	wrefresh(stdscr)
934#define	scrl(n)		wscrl(stdscr, n)
935#define	setscrreg(t, b)	wsetscrreg(stdscr, t, b)
936#define	standend()	wstandend(stdscr)
937#define	standout()	wstandout(stdscr)
938#define	timeout(tm)	wtimeout(stdscr, tm)
939#define	hline(c, num)	whline(stdscr, c, num)
940#define	vline(c, num)	wvline(stdscr, c, num)
941#define	addchstr(str)	waddchstr(stdscr, str)
942#define	addchnstr(str, n)	waddchnstr(stdscr, str, n)
943#define	instr(str)	winstr(stdscr, (str))
944#define	innstr(str, n)	winnstr(stdscr, (str), (n))
945#define	inchstr(str)	winchstr(stdscr, str)
946#define	inchnstr(str, n)	winchnstr(stdscr, str, n)
947#define	bkgdset(c)	wbkgdset(stdscr, c)
948
949#define	addnwstr(ws, n)	waddnwstr(stdscr, ws, n)
950#define	addwch(ch)	waddwch(stdscr, ch)
951#define	addwchnstr(str, n)	waddwchnstr(stdscr, str, n)
952#define	addwchstr(str)	waddwchstr(stdscr, str)
953#define	addwstr(ws)	waddwstr(stdscr, ws)
954#define	echowchar(ch)	wechowchar(stdscr, ch)
955#define	getnwstr(ws, n)	wgetnwstr(stdscr, ws, n)
956#define	getwch()	wgetwch(stdscr)
957#define	getwstr(ws)	wgetwstr(stdscr, ws)
958#define	innwstr(ws, n)	winnwstr(stdscr, ws, n)
959#define	insnwstr(ws, n)	winsnwstr(stdscr, ws, n)
960#define	inswch(c)	winswch(stdscr, c)
961#define	inswstr(ws)	winswstr(stdscr, ws)
962#define	inwch()	winwch(stdscr)
963#define	inwchnstr(str, n)	winwchnstr(stdscr, str, n)
964#define	inwchstr(str)	winwchstr(stdscr, str)
965#define	inwstr(ws)	winwstr(stdscr, ws)
966
967#define	adjcurspos()	wadjcurspos(stdscr)
968#define	movenextch()	wmovenextch(stdscr)
969#define	moveprevch()	wmoveprevch(stdscr)
970
971/* functions to define	environment flags of a window */
972#ifdef	CURS_PERFORMANCE
973#define	wbkgdset(win, c) \
974	(((win)->_attrs = (((win)->_attrs & ~((win)->_bkgd & A_ATTRIBUTES)) | \
975	    (c & A_ATTRIBUTES))), ((win)->_bkgd = (c)))
976#define	syncok(win, bf)		((win)->_parent ? (win)->_sync = (bf) : ERR)
977#define	notimeout(win, bf) \
978	(((win)->_notimeout = ((bf) ? TRUE : FALSE)), OK)
979#define	clearok(win, bf)	(((win)->_clear = (bf)), OK)
980#define	leaveok(win, bf)	(((win)->_leave = (bf)), OK)
981#define	scrollok(win, bf)	(((win)->_scroll = ((bf) ? TRUE : FALSE)), OK)
982#define	idcok(win, bf)		((win)->_use_idc = ((bf) ? TRUE : FALSE))
983#define	nodelay(win, bf)	(((win)->_delay = (bf) ? 0 : -1), OK)
984#define	is_wintouched(win)	((win)->_flags & _WINCHANGED)
985#define	is_linetouched(win, line) \
986	((((line) >= (win)->_maxy) || ((line) < 0)) ? ERR : \
987	    (((win)->_firstch[(line)] == _INFINITY) ? FALSE : TRUE))
988
989#define	subwin(win, nl, nc, by, bx) \
990	derwin((win), (nl), (nc), (by-win->_begy), (bx-win->_begx))
991#define	touchwin(win)		wtouchln((win), 0, (win)->_maxy, TRUE)
992#define	redrawwin(win)		wredrawln((win), 0, (win)->_maxy)
993#define	winchstr(win, str) \
994	winchnstr((win), str, ((win)->_maxx - (win)->_curx))
995#define	winstr(win, str) \
996	winnstr((win), str, ((win)->_maxx - (win)->_curx))
997#define	untouchwin(win)		wtouchln((win), 0, ((win)->_maxy), FALSE)
998#define	winch(win)		((win)->_y[(win)->_cury][(win)->_curx])
999
1000#define	wtimeout(win, tm)	((win)->_delay = (tm))
1001#define	use_env(bf)		(_use_env = (bf))
1002
1003#else	/* CURS_PERFORMANCE */
1004
1005#ifdef __STDC__
1006
1007extern void wbkgdset(WINDOW *, chtype);
1008extern void idcok(WINDOW *, bool);
1009extern void wtimeout(WINDOW *, int);
1010extern void use_env(int);			 /* int sb. char */
1011
1012extern int syncok(WINDOW *, bool);
1013extern int notimeout(WINDOW *, bool);
1014extern int clearok(WINDOW *, bool);
1015extern int leaveok(WINDOW *, bool);
1016extern int scrollok(WINDOW *, bool);
1017extern int nodelay(WINDOW *, bool);
1018extern int is_linetouched(WINDOW *, int);
1019extern int is_wintouched(WINDOW *);
1020extern int touchwin(WINDOW *);
1021extern int redrawwin(WINDOW *);
1022extern int winchstr(WINDOW *, chtype *);
1023extern int winstr(WINDOW *, char *);
1024extern int untouchwin(WINDOW *);
1025
1026extern chtype winch(WINDOW *);
1027
1028extern WINDOW *subwin(WINDOW *, int, int, int, int);
1029
1030#else  /* __STDC__ */
1031
1032extern	void	wbkgdset(), idcok(), wtimeout(), use_env();
1033
1034extern	int	syncok(), notimeout(), clearok(), leaveok(),
1035		scrollok(), nodelay(), is_linetouched(), is_wintouched(),
1036		touchwin(), redrawwin(), winchstr(), winstr(),
1037		untouchwin();
1038
1039extern  chtype  winch();
1040
1041extern WINDOW *subwin();
1042
1043#endif /* __STDC__ */
1044
1045#endif	/* CURS_PERFORMANCE */
1046
1047/* functions for move and update */
1048#define	mvaddch(y, x, ch) \
1049	mvwaddch(stdscr, y, x, ch)
1050#define	mvaddnstr(y, x, s, n) \
1051	mvwaddnstr(stdscr, y, x, s, n)
1052#define	mvaddstr(y, x, str) \
1053	mvwaddstr(stdscr, y, x, str)
1054#define	mvdelch(y, x) \
1055	mvwdelch(stdscr, y, x)
1056#define	mvgetch(y, x) \
1057	mvwgetch(stdscr, y, x)
1058#define	mvgetstr(y, x, str) \
1059	mvwgetstr(stdscr, y, x, str)
1060#define	mvinch(y, x) \
1061	mvwinch(stdscr, y, x)
1062#define	mvinsch(y, x, c) \
1063	mvwinsch(stdscr, y, x, c)
1064#define	mvinsnstr(y, x, s, n) \
1065	mvwinsnstr(stdscr, y, x, s, n)
1066#define	mvinsstr(y, x, s) \
1067	mvwinsstr(stdscr, y, x, s)
1068#define	mvaddchstr(y, x, str) \
1069	mvwaddchstr(stdscr, y, x, str)
1070#define	mvaddchnstr(y, x, str, n) \
1071	mvwaddchnstr(stdscr, y, x, str, n)
1072#define	mvinstr(y, x, str) \
1073	mvwinstr(stdscr, y, x, (str))
1074#define	mvinnstr(y, x, str, n) \
1075	mvwinnstr(stdscr, y, x, (str), (n))
1076#define	mvinchstr(y, x, str) \
1077	mvwinchstr(stdscr, y, x, str)
1078#define	mvinchnstr(y, x, str, n) \
1079	mvwinchnstr(stdscr, y, x, str, n)
1080#define	mvhline(y, x, c, num) \
1081	mvwhline(stdscr, y, x, c, num)
1082#define	mvvline(y, x, c, num) \
1083	mvwvline(stdscr, y, x, c, num)
1084
1085#define	mvaddnwstr(y, x, ws, n) \
1086	mvwaddnwstr(stdscr, y, x, ws, n)
1087#define	mvaddwch(y, x, ch) \
1088	mvwaddwch(stdscr, y, x, ch)
1089#define	mvaddwchnstr(y, x, str, n) \
1090	mvwaddwchnstr(stdscr, y, x, str, n)
1091#define	mvaddwchstr(y, x, str) \
1092	mvwaddwchstr(stdscr, y, x, str)
1093#define	mvaddwstr(y, x, ws) \
1094	mvwaddwstr(stdscr, y, x, ws)
1095#define	mvgetnwstr(y, x, ws, n) \
1096	mvwgetnwstr(stdscr, y, x, ws, n)
1097#define	mvgetwch(y, x) \
1098	mvwgetwch(stdscr, y, x)
1099#define	mvgetwstr(y, x, ws) \
1100	mvwgetwstr(stdscr, y, x, ws)
1101#define	mvinnwstr(y, x, ws, n) \
1102	mvwinnwstr(stdscr, y, x, ws, n)
1103#define	mvinsnwstr(y, x, ws, n) \
1104	mvwinsnwstr(stdscr, y, x, ws, n)
1105#define	mvinswch(y, x, c) \
1106	mvwinswch(stdscr, y, x, c)
1107#define	mvinswstr(y, x, ws) \
1108	mvwinswstr(stdscr, y, x, ws)
1109#define	mvinwch(y, x) \
1110	mvwinwch(stdscr, y, x)
1111#define	mvinwchnstr(y, x, str, n) \
1112	mvwinwchnstr(stdscr, y, x, str, n)
1113#define	mvinwchstr(y, x, str) \
1114	mvwinwchstr(stdscr, y, x, str)
1115#define	mvinwstr(y, x, ws) \
1116	mvwinwstr(stdscr, y, x, ws)
1117
1118#define	mvwaddch(win, y, x, ch) \
1119	(wmove(win, y, x) == ERR ? ERR : waddch(win, ch))
1120#define	mvwaddnstr(win, y, x, s, n) \
1121	(wmove(win, y, x) == ERR ? ERR : waddnstr(win, s, n))
1122#define	mvwaddstr(win, y, x, str) \
1123	(wmove(win, y, x) == ERR ? ERR : waddstr(win, str))
1124#define	mvwdelch(win, y, x) \
1125	(wmove(win, y, x) == ERR ? ERR : wdelch(win))
1126#define	mvwgetch(win, y, x) \
1127	(wmove(win, y, x) == ERR ? ERR : wgetch(win))
1128#define	mvwgetstr(win, y, x, str) \
1129	(wmove(win, y, x) == ERR ? ERR : wgetstr(win, str))
1130#define	mvwinch(win, y, x) \
1131	(wmove(win, y, x) == ERR ? (chtype)ERR : winch(win))
1132#define	mvwinsch(win, y, x, c) \
1133	(wmove(win, y, x) == ERR ? ERR : winsch(win, c))
1134#define	mvwinsnstr(win, y, x, s, n) \
1135	(wmove(win, y, x) == ERR ? ERR : winsnstr(win, s, n))
1136#define	mvwinsstr(win, y, x, s) \
1137	(wmove(win, y, x) == ERR ? ERR : winsstr(win, s))
1138#define	mvwhline(win, y, x, c, num) \
1139	(wmove(win, y, x) == ERR ? ERR : whline(win, c, num))
1140#define	mvwvline(win, y, x, c, num) \
1141	(wmove(win, y, x) == ERR ? ERR : wvline(win, c, num))
1142#define	mvwaddchstr(win, y, x, str) \
1143	(wmove(win, y, x) == ERR ? ERR : waddchstr(win, str))
1144#define	mvwaddchnstr(win, y, x, str, n) \
1145	(wmove(win, y, x) == ERR ? ERR : waddchnstr(win, str, n))
1146#define	mvwinstr(win, y, x, str) \
1147	(wmove(win, y, x) == ERR ? ERR : winstr(win, str))
1148#define	mvwinnstr(win, y, x, str, n) \
1149	(wmove(win, y, x) == ERR ? ERR : winnstr(win, str, n))
1150#define	mvwinchstr(win, y, x, str) \
1151	(wmove(win, y, x) == ERR ? ERR : winchstr(win, str))
1152#define	mvwinchnstr(win, y, x, str, n) \
1153	(wmove(win, y, x) == ERR ? ERR : winchnstr(win, str, n))
1154#define	mvwaddnwstr(win, y, x, ws, n) \
1155	(wmove(win, y, x) == ERR ? ERR : waddnwstr(win, ws, n))
1156#define	mvwaddwch(win, y, x, ch) \
1157	(wmove(win, y, x) == ERR ? ERR : waddwch(win, ch))
1158#define	mvwaddwchnstr(win, y, x, str, n) \
1159	(wmove(win, y, x) == ERR ? ERR : waddwchnstr(win, str, n))
1160#define	mvwaddwchstr(win, y, x, str) \
1161	(wmove(win, y, x) == ERR ? ERR : waddwchstr(win, str))
1162#define	mvwaddwstr(win, y, x, ws) \
1163	(wmove(win, y, x) == ERR ? ERR : waddwstr(win, ws))
1164#define	mvwgetnwstr(win, y, x, ws, n) \
1165	(wmove(win, y, x) == ERR ? ERR : wgetnwstr(win, ws, n))
1166#define	mvwgetwch(win, y, x) \
1167	(wmove(win, y, x) == ERR ? ERR : wgetwch(win))
1168#define	mvwgetwstr(win, y, x, ws) \
1169	(wmove(win, y, x) == ERR ? ERR : wgetwstr(win, ws))
1170#define	mvwinnwstr(win, y, x, ws, n) \
1171	(wmove(win, y, x) == ERR ? ERR : winnwstr(win, ws, n))
1172#define	mvwinsnwstr(win, y, x, ws, n) \
1173	(wmove(win, y, x) == ERR ? ERR : winsnwstr(win, ws, n))
1174#define	mvwinswch(win, y, x, c) \
1175	(wmove(win, y, x) == ERR ? ERR : winswch(win, c))
1176#define	mvwinswstr(win, y, x, ws) \
1177	(wmove(win, y, x) == ERR ? ERR : winswstr(win, ws))
1178#define	mvwinwch(win, y, x) \
1179	(wmove(win, y, x) == ERR ?(chtype) ERR : winwch(win))
1180#define	mvwinwchnstr(win, y, x, str, n) \
1181	(wmove(win, y, x) == ERR ? ERR : winwchnstr(win, str, n))
1182#define	mvwinwchstr(win, y, x, str) \
1183	(wmove(win, y, x) == ERR ? ERR : winwchstr(win, str))
1184#define	mvwinwstr(win, y, x, ws) \
1185	(wmove(win, y, x) == ERR ? ERR : winwstr(win, ws))
1186
1187#define	waddwchstr(win, str)	waddwchnstr(win, str, -1)
1188#define	winwchstr(win, str)	winwchnstr(win, str, -1)
1189#define	waddwstr(win, ws)	waddnwstr(win, ws, -1)
1190#define	winswstr(win, ws)	winsnwstr(win, ws, -1)
1191
1192#ifdef CURS_MACROS
1193#define	overlay(src, dst)	_overlap((src), (dst), TRUE)
1194#define	overwrite(src, dst)	_overlap((src), (dst), FALSE)
1195#define	wdeleteln(win)		winsdelln((win), -1)
1196#define	winsertln(win)		winsdelln((win), 1)
1197#define	wstandend(win)		wattrset((win), A_NORMAL)
1198#define	wstandout(win)		wattron((win), A_STANDOUT)
1199#define	beep()			_ring(TRUE)
1200#define	flash()			_ring(FALSE)
1201#define	scroll(win)		wscrl((win), 1)
1202#define	slk_init(f)		slk_start(((f == 0) ? 3 : 2), NULL)
1203#define	scr_init(file)		_scr_all(file, 0)
1204#define	scr_restore(file)	_scr_all(file, 1)
1205#define	scr_set(file)		_scr_all(file, 2)
1206#define	subpad(win, nl, nc, by, bx) derwin((win), (nl), (nc), (by), (bx))
1207#define	box(win, v, h)		wborder((win), (v), (v), (h), (h), 0, 0, 0, 0)
1208#define	newterm(type, fout, fin) newscreen((type), 0, 0, 0, (fout), (fin))
1209#define	touchline(win, y, n)	wtouchln((win), (y), (n), TRUE)
1210
1211#define	waddstr(win, str)	waddnstr((win), (str), -1)
1212#define	werase(win)		(wmove((win), 0, 0), wclrtobot(win))
1213#define	wclear(win)		(clearok((win), TRUE), werase(win))
1214#define	intrflush(win, flag)	_setqiflush(flag)
1215#define	meta(win, flag)		_meta(flag)
1216
1217#define	setterm(name)		setupterm((name), 1, (char *)NULL)
1218#define	gettmode()		(OK)
1219#define	halfdelay(tens)		ttimeout((tens)*100)
1220
1221#define	echo()			_setecho(TRUE)
1222#define	noecho()		_setecho(FALSE)
1223#define	nl()			_setnonl(FALSE)
1224#define	nonl()			_setnonl(TRUE)
1225
1226#else /* CURS_MACROS */
1227
1228#ifdef __STDC__
1229
1230extern int overlay(WINDOW *, WINDOW *);
1231extern int overwrite(WINDOW *, WINDOW *);
1232extern int wdeleteln(WINDOW *);
1233extern int winsertln(WINDOW *);
1234extern int wstandend(WINDOW *);
1235extern int wstandout(WINDOW *);
1236extern int beep(void);
1237extern int flash(void);
1238extern int scroll(WINDOW *);
1239extern int slk_init(int);
1240extern int scr_init(char *);
1241extern int scr_restore(char *);
1242extern int box(WINDOW *, chtype, chtype);
1243extern int touchline(WINDOW *, int, int);
1244extern int waddstr(WINDOW *, char *);
1245extern int werase(WINDOW *);
1246extern int wclear(WINDOW *);
1247extern int intrflush(WINDOW *, int);
1248extern int meta(WINDOW *, int);
1249extern int setterm(char *);
1250extern int gettmode(void);
1251extern int halfdelay(int);
1252extern int echo(void);
1253extern int noecho(void);
1254extern int nl(void);
1255extern int nonl(void);
1256
1257extern WINDOW *subpad(WINDOW *, int, int, int, int);
1258
1259extern  SCREEN *newterm(char *, FILE *, FILE *);
1260
1261#else  /* __STDC__ */
1262
1263extern	int	overlay(), overwrite(), wdeleteln(), winsertln(),
1264		wstandend(), wstandout(), beep(), flash(),
1265		scroll(), slk_init(), scr_init(), scr_restore(),
1266		box(), touchline(), waddstr(), werase(),
1267		wclear(), intrflush(), meta(), setterm(), gettmode(),
1268		halfdelay(), echo(), noecho(), nl(), nonl();
1269
1270extern	WINDOW *subpad();
1271
1272extern  SCREEN  *newterm();
1273
1274#endif /* __STDC__ */
1275#endif /* CURS_MACROS */
1276
1277#define	garbagedlines		wredrawln
1278#define	garbagedwin		redrawwin
1279
1280#define	crmode			cbreak
1281#define	nocrmode		nocbreak
1282#define	saveterm		def_prog_mode
1283#define	fixterm			reset_prog_mode
1284#define	resetterm		reset_shell_mode
1285
1286#define	waddchstr(win, str)	waddchnstr((win), (str), -1)
1287#define	winsstr(win, str)	winsnstr((win), (str), -1)
1288
1289/* iocontrol functions */
1290#define	qiflush()		_setqiflush(TRUE)
1291#define	noqiflush()		_setqiflush(FALSE)
1292
1293#define	set_term		setcurscreen
1294
1295#endif	/* NOMACROS || __lint */
1296
1297/*
1298 * Standard alternate character set.  The current ACS world is evolving,
1299 * so we support only a widely available subset: the line drawing characters
1300 * from the VT100, plus a few from the Teletype 5410v1.  Eventually there
1301 * may be support of more sophisticated ACS line drawing, such as that
1302 * in the Teletype 5410, the HP line drawing set, and the like.  There may
1303 * be support for some non line oriented characters as well.
1304 *
1305 * Line drawing ACS names are of the form ACS_trbl, where t is the top, r
1306 * is the right, b is the bottom, and l is the left.  t, r, b, and l might
1307 * be B (blank), S (single), D (double), or T (thick).  The subset defined
1308 * here only uses B and S.
1309 */
1310
1311#define	ACS_BSSB	(acs_map['l'])
1312#define	ACS_SSBB	(acs_map['m'])
1313#define	ACS_BBSS	(acs_map['k'])
1314#define	ACS_SBBS	(acs_map['j'])
1315#define	ACS_SBSS	(acs_map['u'])
1316#define	ACS_SSSB	(acs_map['t'])
1317#define	ACS_SSBS	(acs_map['v'])
1318#define	ACS_BSSS	(acs_map['w'])
1319#define	ACS_BSBS	(acs_map['q'])
1320#define	ACS_SBSB	(acs_map['x'])
1321#define	ACS_SSSS	(acs_map['n'])
1322
1323/*
1324 * Human readable names for the most commonly used characters.
1325 * "Upper", "right", etc. are chosen to be consistent with the vt100 manual.
1326 */
1327
1328#define	ACS_ULCORNER	ACS_BSSB
1329#define	ACS_LLCORNER	ACS_SSBB
1330#define	ACS_URCORNER	ACS_BBSS
1331#define	ACS_LRCORNER	ACS_SBBS
1332#define	ACS_RTEE	ACS_SBSS
1333#define	ACS_LTEE	ACS_SSSB
1334#define	ACS_BTEE	ACS_SSBS
1335#define	ACS_TTEE	ACS_BSSS
1336#define	ACS_HLINE	ACS_BSBS
1337#define	ACS_VLINE	ACS_SBSB
1338#define	ACS_PLUS	ACS_SSSS
1339#define	ACS_S1		(acs_map['o'])	/* scan line 1 */
1340#define	ACS_S9		(acs_map['s'])	/* scan line 9 */
1341#define	ACS_DIAMOND	(acs_map['`'])	/* diamond */
1342#define	ACS_CKBOARD	(acs_map['a'])	/* checker board (stipple) */
1343#define	ACS_DEGREE	(acs_map['f'])	/* degree symbol */
1344#define	ACS_PLMINUS	(acs_map['g'])	/* plus/minus */
1345#define	ACS_BULLET	(acs_map['~'])	/* bullet */
1346	/* Teletype 5410v1 symbols */
1347#define	ACS_LARROW	(acs_map[','])	/* arrow pointing left */
1348#define	ACS_RARROW	(acs_map['+'])	/* arrow pointing right */
1349#define	ACS_DARROW	(acs_map['.'])	/* arrow pointing down */
1350#define	ACS_UARROW	(acs_map['-'])	/* arrow pointing up */
1351#define	ACS_BOARD	(acs_map['h'])	/* board of squares */
1352#define	ACS_LANTERN	(acs_map['i'])	/* lantern symbol */
1353#define	ACS_BLOCK	(acs_map['0'])	/* solid square block */
1354
1355.
1356$a
1357
1358/*
1359 *	The definition for 'reg' is not standard, and is provided for
1360 *	compatibility reasons. User's are discouraged from using this.
1361 */
1362#define	reg	register
1363
1364/* Various video attributes */
1365#define	A_STANDOUT	000010000000
1366#define	_STANDOUT	A_STANDOUT    /* for compatability with old curses */
1367#define	A_UNDERLINE	000020000000
1368#define	A_REVERSE	000040000000
1369#define	A_BLINK		000100000000
1370#define	A_DIM		000200000000
1371#define	A_BOLD		000400000000
1372#define	A_ALTCHARSET	001000000000
1373
1374/* The next two are subject to change so don't depend on them */
1375#define	A_INVIS		010000000000
1376#define	A_PROTECT	020000000000U
1377
1378#define	A_NORMAL	000000000000
1379#define	A_ATTRIBUTES	031777700000U	/* 0xCFFF8000 */
1380#define	A_CHARTEXT	006000077777	/* 0x30007FFF */
1381#define	A_COLOR		000007700000
1382
1383#define	A_WATTRIBUTES	031770000000U	/* 0xCFE00000 */
1384#define	A_WCHARTEXT	006007777777	/* 0x301FFFFF */
1385
1386#define	COLOR_PAIR(n)	((n) << 15)
1387#define	PAIR_NUMBER(n)	(((n) & A_COLOR) >> 15)
1388
1389/* definition of 8 basic color	*/
1390#define	COLOR_BLACK	0
1391#define	COLOR_RED	1
1392#define	COLOR_GREEN	2
1393#define	COLOR_YELLOW	3
1394#define	COLOR_BLUE	4
1395#define	COLOR_MAGENTA	5
1396#define	COLOR_CYAN	6
1397#define	COLOR_WHITE	7
1398
1399/* mouse related macros: don't change these definitions or bit-masks.	*/
1400/* they are interdependent (used by _map_button() in tgetch()		*/
1401#define	BUTTON_RELEASED		0
1402#define	BUTTON_PRESSED		1
1403#define	BUTTON_CLICKED		2
1404#define	BUTTON_DOUBLE_CLICKED	3
1405#define	BUTTON_TRIPLE_CLICKED	4
1406
1407#define	MOUSE_X_POS		(Mouse_status.x)
1408#define	MOUSE_Y_POS		(Mouse_status.y)
1409#define	A_BUTTON_CHANGED	(Mouse_status.changes & 7)
1410#define	MOUSE_MOVED		(Mouse_status.changes & 8)
1411#define	MOUSE_POS_REPORT	(Mouse_status.changes & 16)
1412#define	BUTTON_CHANGED(x)	(Mouse_status.changes & (1 << ((x) - 1)))
1413#define	BUTTON_STATUS(x)	(Mouse_status.button[(x)-1])
1414
1415/* definition of mouse bit-masks	*/
1416#define	BUTTON1_RELEASED	000000000001
1417#define	BUTTON1_PRESSED		000000000002
1418#define	BUTTON1_CLICKED		000000000004
1419#define	BUTTON1_DOUBLE_CLICKED	000000000010
1420#define	BUTTON1_TRIPLE_CLICKED	000000000020
1421#define	BUTTON2_RELEASED	000000000040
1422#define	BUTTON2_PRESSED		000000000100
1423#define	BUTTON2_CLICKED		000000000200
1424#define	BUTTON2_DOUBLE_CLICKED	000000000400
1425#define	BUTTON2_TRIPLE_CLICKED	000000001000
1426#define	BUTTON3_RELEASED	000000002000
1427#define	BUTTON3_PRESSED		000000004000
1428#define	BUTTON3_CLICKED		000000010000
1429#define	BUTTON3_DOUBLE_CLICKED	000000020000
1430#define	BUTTON3_TRIPLE_CLICKED	000000040000
1431#define	ALL_MOUSE_EVENTS	000000077777
1432#define	REPORT_MOUSE_POSITION	000000100000
1433
1434#ifdef	__cplusplus
1435}
1436#endif
1437
1438#endif	/* _CURSES_H */
1439.
14400r copyright.h
14411,.g/#pragma ident/d
1442g/\@(\#)curses\.ed/s//\@(\#)curses\.h/
1443w curses.h
1444