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__ */