1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 1996-2003 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _CURSES_H 28 #define _CURSES_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 /* 33 * curses.h 34 * 35 * XCurses Library 36 * 37 * Copyright 1990, 1995 by Mortice Kern Systems Inc. All rights reserved. 38 * 39 */ 40 41 #include <sys/isa_defs.h> 42 #include <stdio.h> 43 #include <term.h> 44 #include <wchar.h> 45 46 #ifdef __cplusplus 47 extern "C" { 48 #endif 49 50 #define _XOPEN_CURSES 51 52 #ifndef EOF 53 #define EOF (-1) 54 #endif 55 56 #ifndef WEOF 57 #define WEOF ((wint_t)(-1)) 58 #endif 59 60 #define ERR EOF 61 #define OK 0 62 63 #if !(defined(__cplusplus) && defined(_BOOL)) 64 #ifndef _BOOL_DEFINED 65 typedef short bool; 66 #define _BOOL_DEFINED 67 #endif 68 #endif 69 70 #define TRUE 1 71 #define FALSE 0 72 73 typedef unsigned short attr_t; 74 75 /* 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. 79 */ 80 #define WA_NORMAL 0x0 81 #define WA_STANDOUT 0x0001 82 #define WA_UNDERLINE 0x0002 83 #define WA_REVERSE 0x0004 84 #define WA_BLINK 0x0008 85 #define WA_DIM 0x0010 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 92 #define WA_LOW 0x0800 93 #define WA_RIGHT 0x1000 94 #define WA_TOP 0x2000 95 #define WA_VERTICAL 0x4000 96 97 #define WA_SGR_MASK 0x01ff /* Historical attribute set. */ 98 #define WA_SGR1_MASK 0x7e00 /* Extended attribute set. */ 99 100 /* 101 * Internal attribute used to support <ceol_standout_glitch>. 102 */ 103 #define WA_COOKIE 0x8000 104 105 /* 106 * Color names. 107 */ 108 #define COLOR_BLACK 0 109 #define COLOR_RED 1 110 #define COLOR_GREEN 2 111 #define COLOR_YELLOW 3 112 #define COLOR_BLUE 4 113 #define COLOR_MAGENTA 5 114 #define COLOR_CYAN 6 115 #define COLOR_WHITE 7 116 117 /* 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 123 * limit is imposed. 124 */ 125 #define _M_CCHAR_MAX 6 126 127 /* 128 * Opaque data type. 129 */ 130 typedef struct { 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. */ 136 } cchar_t; 137 138 /* 139 * Opaque data type. 140 */ 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. */ 155 cchar_t **_line; 156 cchar_t *_base; /* Block of M*N screen cells. */ 157 struct window_t *_parent; /* Parent of sub-window. */ 158 } WINDOW; 159 160 /* 161 * Opaque data type. 162 */ 163 typedef struct { 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. */ 170 #if defined(_LP64) 171 unsigned int *_hash; /* Hash values for curscr's screen lines. */ 172 #else 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. */ 178 struct { 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. */ 182 } _unget; 183 struct { 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 */ 188 } _slk; 189 } SCREEN; 190 191 192 /* 193 * Backwards compatiblity with historical Curses applications. 194 */ 195 #ifndef _CHTYPE 196 #define _CHTYPE 197 #if defined(_LP64) 198 typedef unsigned int chtype; 199 #else 200 typedef unsigned long chtype; 201 #endif 202 #endif 203 204 /* 205 * These attributes and masks can be applied to a chtype. 206 * They are order according to the <no_color_video> mask. 207 */ 208 #if defined(_LP64) 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) */ 237 238 /* 239 * Color atttribute support for chtype. 240 */ 241 #define __COLOR_SHIFT 26 242 243 /* 244 * Characters constants used with a chtype. 245 * Mapping defined in Xcurses Section 6.2.12 (p260). 246 */ 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') 272 273 /* 274 * Wide characters constants for a cchar_t. 275 */ 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; 301 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 327 328 329 /* 330 * Internal macros. 331 */ 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) 336 337 /* 338 * Global Window Macros 339 */ 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)) 344 345 /* 346 * Global variables 347 */ 348 extern int LINES, COLS; 349 extern WINDOW *curscr, *stdscr; 350 extern int COLORS, COLOR_PAIRS; 351 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 *); 375 extern int border( 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); 558 extern int nl(void); 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); 724 725 #if !defined(__lint) 726 /* 727 * These macros can improve speed and size of an application. 728 */ 729 extern WINDOW *__w1; 730 extern chtype __cht1; 731 extern chtype __cht2; 732 extern cchar_t *__pcht1; 733 extern cchar_t *__pcht2; 734 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)) 739 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)) 744 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)) 749 750 #define mvaddchstr(y, x, chs) \ 751 (move(y, x) ? ((chs), ERR) : addchstr(chs)) 752 753 #define mvwaddchnstr(w, y, x, chs, n) \ 754 (wmove(__w1 = (w), y, x) ? ((chs), (n), ERR) :\ 755 waddchnstr(__w1, chs, n)) 756 757 #define mvwaddchstr(w, y, x, chs) \ 758 (wmove(__w1 = (w), y, x) ? ((chs), ERR) : waddchstr(__w1, chs)) 759 760 #define waddchstr(w, chs) waddchnstr(w, chs, -1) 761 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)) 766 767 #define mvadd_wchstr(y, x, cp) \ 768 (move(y, x) ? ((cp), ERR) : add_wchstr(cp)) 769 770 #define mvwadd_wchnstr(w, y, x, cp, n) \ 771 (wmove(__w1 = (w), y, x) ? ((cp), (n), ERR) :\ 772 wadd_wchnstr(__w1, cp, n)) 773 774 #define mvwadd_wchstr(w, y, x, cp) \ 775 (wmove(__w1 = (w), y, x) ? ((cp), ERR) :\ 776 wadd_wchstr(__w1, cp)) 777 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)) 783 784 #define mvaddstr(y, x, s) \ 785 (move(y, x) ? (s, ERR) : addstr(s)) 786 787 #define mvwaddnstr(w, y, x, s, n) \ 788 (wmove(__w1 = (w), y, x) ? (s, n, ERR) : waddnstr(__w1, s, n)) 789 790 #define mvwaddstr(w, y, x, s) \ 791 (wmove(__w1 = (w), y, x) ? (s, ERR) : waddstr(__w1, s)) 792 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)) 798 799 #define mvaddwstr(y, x, wcs) \ 800 (move(y, x) ? (wcs, ERR) : addwstr(wcs)) 801 802 #define mvwaddnwstr(w, y, x, wcs, n) \ 803 (wmove(__w1 = (w), y, x) ? (wcs, n, ERR) :\ 804 waddnwstr(__w1, wcs, n)) 805 806 #define mvwaddwstr(w, y, x, wcs) \ 807 (wmove(__w1 = (w), y, x) ? (wcs, ERR) : waddwstr(__w1, wcs)) 808 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) 814 815 #define COLOR_PAIR(n) ((chtype)(n) << __COLOR_SHIFT) 816 #define PAIR_NUMBER(a) (((chtype)(a) & A_COLOR) >> __COLOR_SHIFT) 817 818 #define bkgd(ch) wbkgd(stdscr, ch) 819 #define bkgdset(ch) wbkgdset(stdscr, ch) 820 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) 825 826 #define border(ls, rs, ts, bs, tl, tr, bl, br) \ 827 wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br) 828 829 #define border_set(ls, rs, ts, bs, tl, tr, bl, br) \ 830 wborder_set(stdscr, ls, rs, ts, bs, tl, tr, bl, br) 831 832 #define box(w, v, h) \ 833 wborder(w, __cht1 = (v), __cht1, __cht2 = (h), __cht2, 0, 0, 0, 0) 834 835 #define box_set(w, v, h) \ 836 wborder_set(w, __pcht1 = (v), __pcht1, __pcht2 = (h), __pcht2,\ 837 0, 0, 0, 0) 838 839 #define can_change_color() \ 840 (2 < max_colors && can_change && initialize_color != NULL) 841 842 #define has_colors() (0 < max_colors) 843 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)) 847 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)) 851 852 #define clear() wclear(stdscr) 853 #define clrtobot() wclrtobot(stdscr) 854 #define clrtoeol() wclrtoeol(stdscr) 855 #define erase() werase(stdscr) 856 #define wclear(w) \ 857 (clearok(__w1 = (w), 1) ? ERR : werase(__w1)) 858 859 #define werase(w) \ 860 (wmove(__w1 = (w), 0, 0) ? ERR : wclrtobot(__w1)) 861 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)) 866 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) :\ 877 wrefresh(__w1)) 878 879 #define wecho_wchar(w, cp) \ 880 (wadd_wch(__w1 = (w), cp) ? (wrefresh(__w1), ERR) :\ 881 wrefresh(__w1)) 882 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)) 887 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)) 891 892 #define mvwget_wch(w, y, x, wcp) \ 893 (wmove(__w1 = (w), y, x) ? (wcp, ERR) : wget_wch(__w1, wcp)) 894 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)) 899 900 #define mvgetstr(y, x, s) \ 901 (move(y, x) ? (s, ERR) : getstr(s)) 902 903 #define mvwgetnstr(w, y, x, s, n) \ 904 (wmove(__w1 = (w), y, x) ? (s, n, ERR) : wgetnstr(__w1, s, n)) 905 906 #define mvwgetstr(w, y, x, s) \ 907 (wmove(__w1 = (w), y, x) ? (s, ERR) : wgetstr(__w1, s)) 908 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)) 914 915 #define mvget_wstr(y, x, wcs) \ 916 (move(y, x) ? (wcs, ERR) : get_wstr(wcs)) 917 918 #define mvwgetn_wstr(w, y, x, wcs, n) \ 919 (wmove(__w1 = (w), y, x) ? (wcs, n, ERR) :\ 920 wgetn_wstr(__w1, wcs, n)) 921 922 #define mvwget_wstr(w, y, x, wcs) \ 923 (wmove(__w1 = (w), y, x) ? (wcs, ERR) : wget_wstr(__w1, wcs)) 924 925 #define wget_wstr(w, wcs) wgetn_wstr(w, wcs, -1) 926 927 #define has_ic() \ 928 (((insert_character != NULL || parm_ich != NULL) && \ 929 (delete_character != NULL || parm_dch != NULL)) || \ 930 (enter_insert_mode != NULL && exit_insert_mode)) 931 932 #define has_il() \ 933 (((insert_line != NULL || parm_insert_line != NULL) && \ 934 (delete_line != NULL || parm_delete_line != NULL)) || \ 935 change_scroll_region != NULL) 936 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)) 941 942 #define mvvline(y, x, ch, n) \ 943 (move(y, x) ? (ch, n, ERR) : vline(ch, n)) 944 945 #define mvwhline(w, y, x, ch, n) \ 946 (wmove(__w1 = (w), y, x) ? (ch, n, ERR) : whline(__w1, ch, n)) 947 948 #define mvwvline(w, y, x, ch, n) \ 949 (wmove(__w1 = (w), y, x) ? (ch, n, ERR) : wvline(__w1, ch, n)) 950 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)) 955 956 #define mvvline_set(y, x, cp, n) \ 957 (move(y, x) ? (cp, n, ERR) : vline_set(cp, n)) 958 959 #define mvwhline_set(w, y, x, cp, n) \ 960 (wmove(__w1 = (w), y, x) ? (cp, n, ERR) : whline_set(__w1, cp, n)) 961 962 #define mvwvline_set(w, y, x, cp, n) \ 963 (wmove(__w1 = (w), y, x) ? (cp, n, ERR) : wvline_set(__w1, cp, n)) 964 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)) 969 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)) 973 974 #define mvwin_wch(w, y, x, cp) \ 975 (wmove(__w1 = (w), y, x) ? (cp, ERR) : win_wch(__w1, cp)) 976 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)) 981 982 #define mvinchstr(y, x, chs) \ 983 (move(y, x) ? (chs, ERR) : inchstr(chs)) 984 985 #define mvwinchnstr(w, y, x, chs, n) \ 986 (wmove(__w1 = (w), y, x) ? (chs, n, ERR) : winchnstr(__w1, chs, n)) 987 988 #define mvwinchstr(w, y, x, chs) \ 989 (wmove(__w1 = (w), y, x) ? (chs, ERR) : winchstr(__w1, chs)) 990 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)) 996 997 #define mvin_wchstr(y, x, cp) \ 998 (move(y, x) ? (cp, ERR) : in_wchstr(cp)) 999 1000 #define mvwin_wchnstr(w, y, x, cp, n) \ 1001 (wmove(__w1 = (w), y, x) ? (cp, n, ERR) :\ 1002 win_wchnstr(__w1, cp, n)) 1003 1004 #define mvwin_wchstr(w, y, x, cp) \ 1005 (wmove(__w1 = (w), y, x) ? (cp, ERR) : win_wchstr(__w1, cp)) 1006 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)) 1012 1013 #define mvinstr(y, x, s) \ 1014 (move(y, x) ? (s, ERR) : instr(s)) 1015 1016 #define mvwinnstr(w, y, x, s, n) \ 1017 (wmove(__w1 = (w), y, x) ? (s, n, ERR) : winnstr(__w1, s, n)) 1018 1019 #define mvwinstr(w, y, x, s) \ 1020 (wmove(__w1 = (w), y, x) ? (s, ERR) : winstr(__w1, s)) 1021 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)) 1027 1028 #define mvinwstr(y, x, wcs) \ 1029 (move(y, x) ? (wcs, ERR) : inwstr(wcs)) 1030 1031 #define mvwinnwstr(w, y, x, wcs, n) \ 1032 (wmove(__w1 = (w), y, x) ? (wcs, n, ERR) :\ 1033 winnwstr(__w1, wcs, n)) 1034 1035 #define mvwinwstr(w, y, x, wcs) \ 1036 (wmove(__w1 = (w), y, x) ? (wcs, ERR) : winwstr(__w1, wcs)) 1037 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)) 1043 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)) 1048 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)) 1055 1056 #define mvwinsstr(w, y, x, s) \ 1057 (wmove(__w1 = (w), y, x) ? (s, ERR) : winsstr(__w1, s)) 1058 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)) 1064 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)) 1068 1069 #define mvwins_wstr(w, y, x, wcs) \ 1070 (wmove(__w1 = (w), y, x) ? (wcs, ERR) : wins_wstr(__w1, wcs)) 1071 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) 1089 1090 #endif /* !defined(__lint) */ 1091 1092 /* 1093 * Special Keys 1094 * 1095 * Keypad layout 1096 * A1 up A3 1097 * left B2 right 1098 * C1 down C3 1099 * 1100 * Chossing negative values for KEY_ constants means that they can 1101 * be safely returned in either an int or long type. 1102 */ 1103 #define __KEY_BASE (-2) 1104 #define __KEY_MAX __KEY_BASE 1105 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) 1198 1199 #define __KEY_MIN (__KEY_BASE-155) 1200 1201 #ifdef __cplusplus 1202 } 1203 #endif 1204 1205 #endif /* _CURSES_H */ 1206