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