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