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