home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / uccs / root.12 / usr / include / curses.h next >
C/C++ Source or Header  |  1998-08-19  |  47KB  |  1,317 lines

  1. #ident    "@(#)curses:common/lib/xlibcurses/screen/curses.ed    1.60.4.2"
  2. #ident "$Header: /sms/sinixV5.4es/rcs/s19-full/usr/src/lib/xlibcurses/screen/curses.ed,v 1.1 91/02/28 21:14:00 ccs Exp $"
  3. /*
  4.  * Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  5.  *                                                                         
  6.  *        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  7.  *                   SANTA CRUZ OPERATION INC.                             
  8.  *                                                                         
  9.  *   The copyright notice above does not evidence any actual or intended   
  10.  *   publication of such source code.                                      
  11.  */
  12.  
  13. /*        copyright    "%c%"     */
  14.  
  15. /*
  16.  *    Copyright (c) 1982, 1986, 1988
  17.  *    The Regents of the University of California
  18.  *    All Rights Reserved.
  19.  *    Portions of this document are derived from
  20.  *    software developed by the University of
  21.  *    California, Berkeley, and its contributors.
  22.  */
  23.  
  24. #ident  "$Header: copyright.h 1.2 91/06/26 $"
  25.  
  26. /*
  27.  * curses.h - this file is automatically made from caps and
  28.  *    curses.ed. Don't make changes directly to curses.h!
  29.  */
  30. #ifndef CURSES_H
  31.  
  32. #define CURSES_H    /* define prevents multiple includes */
  33.  
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif
  37.  
  38. #ifndef _WCHAR_T
  39. #define _WCHAR_T
  40. typedef long    wchar_t;
  41. #endif
  42.  
  43. #define    CSMAX    4
  44.  
  45. #include  <stdio.h>
  46.  
  47.   /*
  48.    * This trick is used to distinguish between SYSV and V7 systems.
  49.    * We assume that L_ctermid is only defined in stdio.h in SYSV
  50.    * systems, but not in V7 or Berkeley UNIX.
  51.    */
  52. #ifdef L_ctermid
  53. # define SYSV
  54. #endif
  55.    /* Some V7 systems define L_ctermid - we list those here */
  56. #ifdef BSD
  57. # undef SYSV
  58. #endif
  59.  
  60. #ifdef SYSV
  61. # ifndef VINTR
  62. #  include <termio.h>
  63. #  include <termios.h>
  64. # endif /* VINTR */
  65. #ifndef _SGTTY
  66. #define _SGTTY
  67.     typedef struct termios SGTTY;
  68. #endif
  69. #else /* !SYSV */
  70. # ifndef _SGTTYB_
  71. #  include <sgtty.h>
  72. # endif /* _SGTTYB_ */
  73.     typedef struct sgttyb SGTTY;
  74. /*
  75.  * Here we attempt to improve portability by providing some #defines
  76.  * for SYSV functions on non-SYSV systems.
  77.  */
  78.  
  79. # define memcpy(dst, src, len)    bcopy((src), (dst), (len))
  80. # define strchr            index
  81. # define strrchr        rindex
  82. #endif /* SYSV */
  83.  
  84. #ifndef _BOOL
  85. typedef char bool;
  86. #endif
  87.  
  88. #define _VR3_COMPAT_CODE
  89. /*
  90.  * chtype is the type used to store a character together with attributes.
  91.  * It can be set to "char" to save space, or "long" to get more attributes.
  92.  */
  93. #ifndef _CHTYPE_T
  94. #define _CHTYPE_T
  95. #ifdef    CHTYPE
  96.     typedef    CHTYPE chtype;
  97. #else
  98.     typedef unsigned long chtype;
  99. #endif /* CHTYPE */
  100. #endif /* _CHTYPE_T */
  101.  
  102. /*
  103.     Define for the 'old' definition of chtype is required
  104.     when we are running in compatibility mode
  105. */
  106. #ifdef _VR3_COMPAT_CODE
  107. typedef unsigned short _ochtype;
  108. #endif
  109.  
  110. /* TRUE and FALSE get defined so many times, */
  111. /* let's not get in the way of other definitions. */
  112. #if    !defined(TRUE) || ((TRUE) != 1)
  113. #define    TRUE    (1)
  114. #endif
  115. #if    !defined(FALSE) || ((FALSE) != 0)
  116. #define    FALSE    (0)
  117. #endif
  118. #if    !defined(ERR) || ((ERR) != -1)
  119. #define    ERR    (-1)
  120. #endif
  121. #if    !defined(OK) || ((OK) != 0)
  122. #define    OK    (0)
  123. #endif
  124.  
  125. /* short-hand notations */
  126. typedef struct _win_st    WINDOW;
  127. typedef struct screen    SCREEN;
  128. typedef struct _Mouse    MOUSE_STATUS;
  129.  
  130. struct _win_st
  131. {
  132.     short        _cury, _curx;    /* current coordinates */
  133.     short        _maxy, _maxx;    /* max coordinates */
  134.     short        _begy, _begx;    /* (0,0) screen coordinates */
  135.     char        _flags;
  136.     short        _yoffset;    /* actual begy is _begy+_yoffset */
  137.     bool        _clear,        /* clearok() info */
  138.             _leave,        /* leaveok() info */
  139.             _immed,        /* window in immediate mode */
  140.             _sync;        /* auto syncup of parent */
  141.     WINDOW        *_padwin;    /* "pad" area for current window */
  142. #ifdef    _VR3_COMPAT_CODE
  143.     _ochtype    **_y16;        /* MUST stay at this offset in WINDOW */
  144. #endif
  145.     short        *_firstch;    /* first change in line */
  146.     short        *_lastch;    /* last change in line */
  147.     short        _tmarg, _bmarg;    /* scrolling region bounds */
  148.                     /* MUST stay at this offset in WINDOW */
  149.     unsigned    _scroll        : 1;    /* scrollok() info */
  150.     unsigned    _use_idl    : 1;    
  151.     unsigned    _use_keypad    : 1;
  152.     unsigned    _notimeout    : 1;
  153.     unsigned    _use_idc    : 1;    
  154.     chtype        _attrs;        /* current window attributes */
  155.     chtype        _bkgd;        /* background, normally blank */
  156.     int        _delay;        /* delay period on wgetch
  157.                      * 0:  for nodelay
  158.                      * <0: for infinite delay
  159.                      * >0: delay time in units of millisec
  160.                      */
  161.     short        _ndescs;    /* number of descendants */
  162.     short        _parx, _pary;    /* coords relative to parent (0,0) */
  163.     WINDOW        *_parent;    /* the parent if this is a subwin */
  164.     chtype        **_y;            /* lines of data */
  165.     short        _nbyte;        /* number of bytes to come */
  166.     short        _index;        /* index to store coming char */
  167.     char        _waitc[CSMAX];    /* array to store partial m-width char*/
  168.     bool        _insmode;    /* TRUE for inserting, */
  169.                     /* FALSE for adding */
  170. };
  171.  
  172. /* _lastch is initially set to this, _firstch is set to win->_maxx */
  173. #define    _NOCHANGE    -1
  174. #define _INFINITY    16000    /* no line can be longer than this */
  175.  
  176. /* values for win->_flags */
  177. #define    _ISPAD        001
  178. #define    _WINCHANGED    002
  179. #define    _WINMOVED    004
  180. #define    _WINSDEL    010
  181. #define    _CANT_BE_IMMED    020
  182. #define    _WIN_ADD_ONE    040
  183. #define    _WIN_INS_ONE    100
  184.  
  185. struct _Mouse {
  186.     int x, y;
  187.     short button[3];
  188.     int   changes;
  189. };
  190.  
  191. #define CURS_STUPID    0
  192. #define CURS_UNKNOWN    1
  193. #define CURS_BAD_MALLOC    2
  194.  
  195. /*
  196.  * Various tricks to shut up lint about things that are perfectly fine.
  197.  */
  198. #if    defined(lint) && !defined(CURSES) /* if not internal to curses source */
  199.  struct screen {
  200.      int _nobody_;
  201.  };
  202. #endif /* lint */
  203.  
  204. /* common external variables */
  205.  
  206. extern    int    LINES, COLS, TABSIZE, COLORS, COLOR_PAIRS;
  207.  
  208. extern    short    curs_errno;
  209.  
  210. extern    WINDOW    *stdscr, *curscr;
  211.  
  212. extern  MOUSE_STATUS    Mouse_status;
  213.  
  214. extern    char    ttytype[];
  215.  
  216. extern char    curs_parm_err[],
  217.         *curs_err_strings[];
  218.  
  219. /* Function declarations */
  220.  
  221. #ifdef    _VR3_COMPAT_CODE
  222.  
  223. extern    _ochtype    *acs_map;
  224. extern    chtype        *acs32map;
  225.  
  226. /* definitions for Vr3 source compatibility */
  227.  
  228. #define initscr        initscr32
  229. #define newterm        newterm32
  230. #define waddch        w32addch
  231. #define wechochar    w32echochar
  232. #define pechochar    p32echochar
  233. #define winsch        w32insch
  234. #define vidputs        vid32puts
  235. #define vidattr        vid32attr
  236. #define wattroff    w32attroff
  237. #define wattron        w32attron
  238. #define wattrset    w32attrset
  239. #define acs_map        acs32map
  240. #define box        box32
  241.  
  242. #ifdef    __STDC__
  243. extern    WINDOW    *initscr();
  244. extern    SCREEN    *newterm(char *, FILE *, FILE *);
  245. #else
  246. extern    WINDOW    *initscr();
  247. extern    SCREEN    *newterm();
  248. #endif
  249.  
  250. /* declarations for mini-curses */
  251.  
  252. #ifdef    __STDC__
  253. extern    WINDOW    *m_initscr(void);
  254.  
  255. extern    SCREEN    *m_newterm(char *, FILE *, FILE *);
  256.  
  257. extern    int    m_addch(int), m_addstr(char *), m_clear(void), m_erase(void),
  258.         m_move(int, int), m_refresh(void);
  259.  
  260. #else  /* __STDC__ */
  261. extern    WINDOW    *m_initscr();
  262.  
  263. extern    SCREEN    *m_newterm();
  264.  
  265. extern    int    m_addch(), m_addstr(), m_clear(), m_erase(),
  266.         m_move(), m_refresh();
  267.  
  268. #endif /* __STDC__ */
  269.  
  270. #else    /* _VR3_COMPAT_CODE */
  271.  
  272. extern    chtype    *acs_map;
  273.  
  274. #endif    /* _VR3_COMPAT_CODE */
  275.  
  276. #ifdef __STDC__
  277.  
  278. extern    SCREEN    *newscreen(char *, int, int, int, FILE *, FILE *),
  279.         *setcurscreen(SCREEN *);
  280.  
  281. extern    WINDOW    *initscr(void),
  282.         *newwin(int, int, int, int),
  283.         *newpad(int, int),
  284.         *derwin(WINDOW *, int, int, int, int),
  285.         *dupwin(WINDOW *),
  286.         *getwin(FILE *);
  287.  
  288. extern    int    wgetch(WINDOW *); /* it can return KEY_*, for instance. */
  289.  
  290. extern    char    *longname(void),    /* long name of terminal */
  291.         *termname(void),    /* effective terminal name */
  292.         *keyname(int),     /* name of token returned by wgetch() */
  293.         *slk_label(int),
  294.         erasechar(void),
  295.         killchar(void),
  296.         *unctrl(int);
  297.  
  298. extern    chtype    termattrs(void);
  299.  
  300. extern    void    vidupdate(chtype, chtype, int (*)(int)),
  301.         wsyncup(WINDOW *), wsyncdown(WINDOW *),
  302.         delscreen(SCREEN *), curserr(void),
  303.         _setqiflush(int), 
  304.         wcursyncup(WINDOW *);
  305.  
  306. extern    int    cbreak(void), nocbreak(void), 
  307.         reset_prog_mode(void), reset_shell_mode(void),
  308.         def_prog_mode(void), _setecho(int), _setnonl(int),
  309.         def_shell_mode(void), raw(void),
  310.         savetty(void), traceon(void), _meta(int), 
  311.         traceoff(void), noraw(void), flushinp(void),
  312.         _getsyx(int *, int *),
  313.         _ring(int), resetty(void),
  314.         ripoffline(int, int (*)(WINDOW *, int)),
  315.         setsyx(int, int), slk_refresh(void),
  316.         slk_restore(void), 
  317.         wstandend(WINDOW *), wstandout(WINDOW *),
  318.         wattroff(WINDOW *, chtype), wattron(WINDOW *, chtype),
  319.         wattrset(WINDOW *, chtype),
  320.         wrefresh(WINDOW *);
  321.  
  322. extern    int    copywin(WINDOW *, WINDOW *, int, int, int, int, int, int, int),
  323.         curs_set(int), delay_output(int), delwin(WINDOW *),
  324.         doupdate(void), draino(int), endwin(void), isendwin(void),
  325.         baudrate(void), has_ic(void), has_il(void),
  326.         keypad(WINDOW *, int),
  327.         mvcur(int, int, int, int);
  328.  
  329. extern    int    mvprintw(int, int, ...), mvscanw(int, int, ...),
  330.         mvwprintw(WINDOW *, int, int, ...),
  331.         mvwscanw(WINDOW *, int, int, ...),
  332.         printw(char *, ...), scanw(char *, ...),
  333.         wprintw(WINDOW *, ...), wscanw(WINDOW *, ...);
  334.  
  335.         /* in the following 2 functions 'void *' is really va_list */
  336.         /* however, we cannot include <stdarg.h> in curses.h,      */
  337.         /* because some applications may be using <varargs.h> that */
  338.         /* conflicts with <stdarg.h>                   */
  339.  
  340. extern  int    vwprintw(WINDOW *, char *, void *),
  341.         vwscanw(WINDOW *, char *, void *);
  342.  
  343. extern    int    mvwin(WINDOW *, int, int), mvderwin(WINDOW *, int, int),
  344.         napms(int), newkey(char *, int, int),
  345.         _overlay (WINDOW *, WINDOW *, int),
  346.         pechochar(WINDOW *, chtype),
  347.         pnoutrefresh(WINDOW *, int, int, int, int, int, int),
  348.         prefresh(WINDOW *, int, int, int, int, int, int);
  349.  
  350. extern  void    filter(void);
  351.  
  352. extern     int    putwin(WINDOW *, FILE *), wredrawln(WINDOW *, int, int),
  353.         scr_dump(char *), setupterm(char *, int, int *);
  354.  
  355. extern    int    slk_attron(chtype), slk_attroff(chtype), slk_attrset(chtype),
  356.         slk_clear(void), slk_noutrefresh(void),
  357.         slk_set(int, char *, int),
  358.         slk_start(int, int *), slk_touch(void), start_color(void),
  359.         typeahead(int);
  360.  
  361. extern    bool    can_change_color(void), has_colors(void);
  362.         
  363. extern int    waddch(WINDOW *, chtype),
  364.         waddchnstr(WINDOW *, chtype *, int),
  365.         waddnstr(WINDOW *, char *, int),
  366.         wbkgd(WINDOW *, chtype),
  367.         wborder(WINDOW *, chtype, chtype, chtype, chtype,
  368.                   chtype, chtype, chtype, chtype),
  369.         wclrtobot(WINDOW *), wclrtoeol(WINDOW *), 
  370.         wdelch(WINDOW *), wechochar(WINDOW *, chtype),
  371.         wgetstr(WINDOW *, char *),
  372.         wgetnstr(WINDOW *, char *, int),
  373.         whline(WINDOW *, chtype, int),
  374.         wvline(WINDOW *, chtype, int),
  375.         winchnstr(WINDOW *, chtype *, int),
  376.         winchstr(WINDOW *, chtype *),
  377.         winnstr(WINDOW *, char *, int),
  378.         winsch(WINDOW *, chtype),
  379.         winsdelln(WINDOW *, int),        /* internal */
  380.         winsnstr(WINDOW *, char *, int),
  381.         winstr(WINDOW *, char *),
  382.         wmove(WINDOW *, int, int),
  383.         wnoutrefresh(WINDOW *),
  384.         wredrawln(WINDOW *, int, int),
  385.         wscrl(WINDOW *, int),
  386.         wsetscrreg(WINDOW *, int, int),
  387.         wtouchln(WINDOW *, int, int, int);
  388.  
  389. extern    int    crmode(void), nocrmode(void), ungetch(int);
  390.  
  391. extern    int    mouse_set(long int), mouse_on(long int),
  392.         mouse_off(long int), request_mouse_pos(void),
  393.         map_button(unsigned long);
  394.  
  395. extern    void    wmouse_position (WINDOW *, int *, int *);
  396.  
  397. extern unsigned long getmouse(void), getbmap(void);
  398.         
  399.         /* the following declarations take integers as arguments */
  400.         /* to keep the CI5 compiler happy.  what we really want  */
  401.         /* to pass is given in comments.  (by the way, we don't  */
  402.         /* save anything by passing short or bool, since compiler*/
  403.         /* expands them to integers any way             */
  404.  
  405. extern    int    pair_content(int /*short*/, short *, short *),
  406.         color_content(int /*short*/, short *, short *, short *),
  407.         init_color(int, int, int, int /*all 4 ints */),
  408.         init_pair(int, int, int /*all 3 ints */),
  409.         idlok(WINDOW *, int /*bool*/);
  410.  
  411. extern    void    immedok(WINDOW *, int /*bool*/); 
  412.  
  413. extern chtype    winwch(WINDOW *);
  414.  
  415. extern int    pechowchar(WINDOW *, chtype), ungetwch(int),
  416.         waddnwstr(WINDOW *, wchar_t *, int),
  417.         waddwch(WINDOW *, chtype),
  418.         waddwchnstr(WINDOW *, chtype *, int),
  419.         wechowchar(WINDOW *, chtype),
  420.         wgetnwstr(WINDOW *, wchar_t *, int),
  421.         wgetwch(WINDOW *),
  422.         wgetwstr(WINDOW *, wchar_t *),
  423.         winnwstr(WINDOW *, wchar_t *, int),
  424.         winsnwstr(WINDOW *, wchar_t *, int),
  425.         winswch(WINDOW *, chtype),
  426.         winwchnstr(WINDOW *, chtype *, int),
  427.         winwstr(WINDOW *, wchar_t *);
  428.  
  429. #else /* __STDC__ */
  430.  
  431. extern    SCREEN    *newscreen(/*termname,lines,cols,tabsiz,fout,fin*/),
  432.         *setcurscreen(/*screenptr*/);
  433.  
  434. extern    WINDOW    *initscr(),
  435.         *newwin(/*nlines,ncols,begy,begx*/),
  436.         *newpad(/*nlines,ncols*/),
  437.         *derwin(/*orig,nlines,ncols,begy,begx*/),
  438.         *dupwin(/*orig*/),
  439.         *getwin(/*file*/);
  440.  
  441. extern    int    wgetch(); /* because it can return KEY_*, for instance. */
  442.  
  443. extern    char    *longname(),    /* long name of terminal */
  444.         *termname(),    /* effective terminal name */
  445.         *keyname(/*int*/), /* name of token returned by wgetch() */
  446.         *slk_label(/*index*/),
  447.         erasechar(),
  448.         killchar(),
  449.         *unctrl();
  450.  
  451. extern    chtype    termattrs();
  452.  
  453. extern    void    vidupdate(), wsyncup(), wsyncdown(),
  454.         delkeymap(), 
  455.         delscreen(), curserr(),
  456.         _setqiflush(), 
  457.         immedok(), 
  458.         wcursyncup();
  459.  
  460. extern    int    cbreak(), nocbreak(), 
  461.         reset_prog_mode(), reset_shell_mode(), def_prog_mode(),
  462.         _setecho(), _setnonl(),
  463.         def_shell_mode(), raw(),
  464.         savetty(), traceon(), _meta(), 
  465.         traceoff(), noraw(), flushinp(), _getsyx(),
  466.         _ring(), resetty(), ripoffline(), setsyx(), slk_refresh(),
  467.         slk_restore(), wstandend(), wstandout(),
  468.         wattroff(), wattron(), wattrset(), wrefresh();
  469.  
  470. extern    int    color_cont(), copywin(), curs_set(), delay_output(), delwin(),
  471.         doupdate(), draino(), endwin(), isendwin(),
  472.         baudrate(), has_ic(), has_il(), idlok(), 
  473.         init_color(), init_pair(), keypad(), mvcur();
  474.  
  475. extern    int    mvprintw(), mvscanw(), mvwprintw(), mvwscanw(),
  476.         printw(), scanw(), wprintw(), wscanw(), vwprintw(), vwscanw();
  477.  
  478. extern    int    mvwin(), mvderwin(), napms(), newkey(), _overlay(),
  479.         pair_content(), pechochar(), pnoutrefresh(), prefresh();
  480.  
  481. extern    void    filter();
  482.  
  483. extern     int    putwin(), wredrawln(), scr_dump(), setupterm();
  484.  
  485. extern    int    slk_attrof(), slk_attrof(), slk_attrset(),
  486.         slk_clear(), slk_noutrefresh(), slk_set(),
  487.         slk_start(), slk_touch(), start_color(),
  488.         typeahead();
  489.  
  490. extern    bool    can_change_color(), has_colors();
  491.         
  492. extern    int    waddch(), waddchnstr(), waddnstr(), wbkgd(),
  493.         wborder(), wclrtobot(), wclrtoeol(), wdelch(), wechochar(),
  494.         wgetstr(), wgetnstr(), whline(), wvline(), winchnstr(),
  495.         winchstr(), winnstr(), winsch(),
  496.         winsdelln(),        /*internal */
  497.         winsnstr(), winstr(), wmove(), wnoutrefresh(), wredrawln(),
  498.         wscrl(), wsetscrreg(), wtouchln();
  499.  
  500. extern    int    crmode(), nocrmode(), ungetch();
  501.  
  502. extern    int    mouse_set(), mouse_on(), mouse_off(),
  503.         request_mouse_pos(), map_button();
  504.         
  505. extern void    wmouse_position();
  506.  
  507. extern unsigned long getmouse(), getbmap();
  508.  
  509. extern chtype    winwch();
  510.  
  511. extern int    pechowchar(), ungetwch(), waddnwstr(), waddwch(),
  512.         waddwchnstr(), wechowchar(), wgetnwstr(), wgetwch(),
  513.         wgetwstr(), winnwstr(), winsnwstr(), winswch(),
  514.         winwchnstr(), winwstr();
  515.  
  516. #endif /* __STDC__ */
  517.  
  518. #define getsyx(y,x)        _getsyx(&(y),&(x))
  519.  
  520. /* 
  521.  * Functions to get at the window structure.
  522.  */
  523.  
  524. #define getyx(win,y,x)        ((y) = getcury(win), (x) = getcurx(win))
  525. #define    getbegyx(win,y,x)    ((y) = getbegy(win), (x) = getbegx(win))
  526. #define    getmaxyx(win,y,x)    ((y) = getmaxy(win), (x) = getmaxx(win))
  527. #define    getparyx(win,y,x)    ((y) = getpary(win), (x) = getparx(win))
  528.  
  529. #if    defined(CURS_PERFORMANCE) && !defined(lint)
  530. #define getcury(win)        ((win)->_cury)
  531. #define getcurx(win)        ((win)->_curx)
  532. #define    getbegy(win)        ((win)->_begy)
  533. #define    getbegx(win)        ((win)->_begx)
  534. #define    getmaxy(win)        ((win)->_maxy)
  535. #define    getmaxx(win)        ((win)->_maxx)
  536. #define    getpary(win)        ((win)->_pary)
  537. #define    getparx(win)        ((win)->_parx)
  538. #define getbkgd(win)        ((win)->_bkgd)
  539. #define getattrs(win)        ((win)->_attrs)
  540. #else     /* defined(CURS_PERFORMANCE) && !defined(lint) */
  541.  
  542. #ifdef __STDC__
  543. extern    int    getcury(WINDOW *), getcurx(WINDOW *),
  544.         getbegy(WINDOW *), getbegx(WINDOW *),
  545.         getmaxy(WINDOW *), getmaxx(WINDOW *),
  546.         getpary(WINDOW *), getparx(WINDOW *);
  547.  
  548. extern chtype    getbkgd(WINDOW *), getattrs(WINDOW *);
  549.  
  550. #else  /* __STDC__ */
  551. extern    int    getcury(), getcurx(), getbegy(), getbegx(),
  552.         getmaxy(), getmaxx(), getpary(), getparx();
  553.  
  554. extern chtype    getbkgd(), getattrs();
  555.  
  556. #endif  /* __STDC__ */
  557. #endif    /* defined(CURS_PERFORMANCE) && !defined(lint) */
  558.  
  559. #if    defined(NOMACROS) || defined(lint)
  560.  
  561. #ifdef __STDC__
  562.  
  563. extern    SCREEN    *newterm(char *, FILE *, FILE *),
  564.         *set_term(SCREEN *);
  565.  
  566. extern    WINDOW    *subpad(WINDOW *, int, int, int, int),
  567.         *subwin(WINDOW *, int, int, int, int);
  568.  
  569. extern    char    *unctrl(int);
  570.  
  571. extern    chtype    inch(void), winch(WINDOW *), mvinch(int, int),
  572.         mvwinch(WINDOW *, int, int);
  573.  
  574. extern int    addch(chtype), addchnstr(chtype *, int), addchstr(chtype *),
  575.         addnstr(char *, int), addstr(char *),
  576.         attroff(chtype), attron(chtype), attrset(chtype),
  577.         beep(void), bkgd(chtype),
  578.         border(chtype, chtype, chtype, chtype,
  579.                chtype, chtype, chtype, chtype),
  580.         box(WINDOW *, chtype, chtype),
  581.         clear(void), clearok(WINDOW *, int /*bool*/),
  582.         clrtobot(void), clrtoeol(void),
  583.         crmode(void), delch(void), deleteln(void),
  584.         echo(void), echochar(chtype), erase(void),
  585. /* MORE */    fixterm(void),
  586.         flash(void), garbagedlines(WINDOW *, int, int),
  587.         garbagedwin(WINDOW *),
  588.         getch(void), getstr(char *), gettmode(void),
  589.         halfdelay(int), hline(chtype, int),
  590.         inchnstr(chtype *, int), inchstr(chtype *),
  591.         innstr(char *, int), insch(chtype),
  592.         insdelln(int), insertln(void), insnstr(char *, int),
  593.         insstr(char *), instr(char *), intrflush(WINDOW *, int),
  594.         is_linetouched(WINDOW *, int), is_wintouched(WINDOW *),
  595.         leaveok(WINDOW *, int /*bool*/), meta(WINDOW *, int),
  596.         move(int, int), mvaddch(int, int, chtype),
  597.         mvaddchnstr(int, int, chtype *, int),
  598.         mvaddchstr(int, int, chtype *),
  599.         mvaddnstr(int, int, char *, int),
  600.         mvaddstr(int, int, char *),
  601.         mvdelch(int, int),
  602.         mvgetch(int, int),
  603.         mvgetstr(int, int, char *),
  604.         mvhline(int, int, chtype, int),
  605.         mvinchnstr(int, int, chtype *, int),
  606.         mvinchstr(int, int, chtype *),
  607.         mvinnstr(int, int, char *, int),
  608.         mvinsch(int, int, chtype),
  609.         mvinsnstr(int, int, char *, int),
  610.         mvinsstr(int, int, char *),
  611.         mvinstr(int, int, char *),
  612.         mvvline(int, int, chtype, int),
  613.         mvwaddch(WINDOW *, int, int, chtype),
  614.         mvwaddchnstr(WINDOW *, int, int, chtype *, int),
  615.         mvwaddchstr(WINDOW *, int, int, chtype *),
  616.         mvwaddnstr(WINDOW *, int, int, char *, int),
  617.         mvwaddstr(WINDOW *, int, int, char *),
  618.         mvwdelch(WINDOW *, int, int),
  619.         mvwgetch(WINDOW *, int, int),
  620.         mvwgetstr(WINDOW *, int, int, char *),
  621.         mvwhline(WINDOW *, int, int, chtype, int),
  622.         mvwinchnstr(WINDOW *, int, int, chtype *, int),
  623.         mvwinchstr(WINDOW *, int, int,chtype *),
  624.         mvwinnstr(WINDOW *, int, int, char *, int),
  625.         mvwinsch(WINDOW *, int, int, chtype),
  626.         mvwinsnstr(WINDOW *, int, int, char *, int),
  627.         mvwinsstr(WINDOW *, int, int, char *),
  628.         mvwinstr(WINDOW *, int, int, char *),
  629.         mvwvline(WINDOW *, int, int, chtype, int),
  630.         nl(void), nocrmode(void), nodelay(WINDOW *, int /*bool*/),
  631.         noecho(void), nonl(void), notimeout(WINDOW *, int /*bool*/),
  632.         overlay(WINDOW *, WINDOW *), overwrite(WINDOW *, WINDOW *),
  633.         redrawwin(WINDOW *), refresh(void),
  634.         resetterm(void), saveterm(void), scr_init(char *),
  635.         scr_restore(char *), scr_set(char *), scrl(int),
  636.         scroll(WINDOW *), scrollok(WINDOW *, int /*bool*/),
  637.         setscrreg(int, int), setterm(char *),
  638.         slk_init(int), standend(void), standout(void),
  639.         syncok(WINDOW *, int /*bool*/),
  640.         touchline(WINDOW *, int, int), touchwin(WINDOW *),
  641.         untouchwin(WINDOW *), vline(chtype, int),
  642.         waddchstr(WINDOW *, chtype *), waddstr(WINDOW *, char *),
  643.         wclear(WINDOW *),
  644.         wdeleteln(WINDOW *), werase(WINDOW *),
  645.         winchstr(WINDOW *, chtype *), winsertln(WINDOW *),
  646.         winsstr(WINDOW *, char *), winstr(WINDOW *, char *),
  647.         wstandend(WINDOW *), wstandout(WINDOW *);
  648.  
  649. extern    void    bkgdset(chtype), idcok(WINDOW *, int /*bool*/),
  650.         noqiflush(void),
  651.         wbkgdset(WINDOW *, chtype),
  652.         qiflush(void), timeout(int), wtimeout(WINDOW *, int),
  653.         use_env(int /*char*/);
  654.  
  655. extern chtype    inwch(void),
  656.         mvinwch(int, int),
  657.         mvwinwch(WINDOW *, int, int);
  658.  
  659. extern int    addnwstr(wchar_t *, int),
  660.         addwch(chtype),
  661.         addwchnstr(chtype *, int),
  662.         addwchstr(chtype *),
  663.         addwstr(wchar_t *),
  664.         echowchar(chtype),
  665.         getnwstr(wchar_t *, int),
  666.         getwch(void),
  667.         getwstr(wchar_t *),
  668.         innwstr(wchar_t *, int),
  669.         insnwstr(wchar_t *, int),
  670.         inswch(chtype),
  671.         inswstr(wchar_t *),
  672.         inwchnstr(chtype *, int),
  673.         inwchstr(chtype *),
  674.         inwstr(wchar_t *),
  675.         mvaddnwstr(int, int, wchar_t *, int),
  676.         mvaddwch(int, int, chtype),
  677.         mvaddwchnstr(int, int, chtype *, int),
  678.         mvaddwchstr(int, int, chtype *),
  679.         mvaddwstr(int, int, wchar_t *),
  680.         mvgetnwstr(int, int, wchar_t *, int),
  681.         mvgetwch(int, int),
  682.         mvgetwstr(int, int, wchar_t *),
  683.         mvinnwstr(int, int, wchar_t *, int),
  684.         mvinsnwstr(int, int, wchar_t *, int),
  685.         mvinswch(int, int, chtype),
  686.         mvinswstr(int, int, wchar_t *),
  687.         mvinwchnstr(int, int, chtype *, int),
  688.         mvinwchstr(int, int, chtype *),
  689.         mvinwstr(int, int, wchar_t *),
  690.         mvwaddnwstr(WINDOW *, int, int, wchar_t *, int),
  691.         mvwaddwch(WINDOW *, int, int, chtype),
  692.         mvwaddwchnstr(WINDOW *, int, int, chtype *, int),
  693.         mvwaddwchstr(WINDOW *, int, int, chtype *),
  694.         mvwaddwstr(WINDOW *, int, int, wchar_t *),
  695.         mvwgetnwstr(WINDOW *, int, int, wchar_t *, int),
  696.         mvwgetwch(WINDOW *, int, int),
  697.         mvwgetwstr(WINDOW *, int, int, wchar_t *),
  698.         mvwinnwstr(WINDOW *, int, int, wchar_t *, int),
  699.         mvwinsnwstr(WINDOW *, int, int, wchar_t *, int),
  700.         mvwinswch(WINDOW *, int, int, chtype),
  701.         mvwinswstr(WINDOW *, int, int, wchar_t *),
  702.         mvwinwchnstr(WINDOW *, int, int, chtype *, int),
  703.         mvwinwchstr(WINDOW *, int, int,chtype *),
  704.         mvwinwstr(WINDOW *, int, int, wchar_t *),
  705.         waddwchstr(WINDOW *, chtype *),
  706.         waddwstr(WINDOW *, wchar_t *),
  707.         winswstr(WINDOW *, wchar_t *),
  708.         winwchstr(WINDOW *, chtype *);
  709.  
  710. #else /* __STDC__ */
  711.  
  712. extern    SCREEN    *newterm(/*termname,fout,fin*/),
  713.         *set_term(/*screenptr*/);
  714.  
  715. extern    WINDOW    *subpad(),
  716.         *subwin();
  717.  
  718. extern    chtype    inch(), winch(), mvinch(), mvwinch();
  719.  
  720. extern    char    *unctrl();
  721.  
  722. extern int    addch(), addchnstr(), addchstr(), addnstr(), addstr(),
  723.         attroff(), attron(), attrset(), beep(), bkgd(),
  724.         border(), box(), clear(), clearok(), clrtobot(), clrtoeol(),
  725.         crmode(), delch(), deleteln(), echo(), echochar(),
  726.         erase(),
  727. /* MORE */    fixterm(),
  728.         flash(), garbagedlines(), garbagedwin(),
  729.         getch(), getstr(), gettmode(), halfdelay(), hline(),
  730.         inchnstr(), inchstr(), innstr(), insch(),
  731.         insdelln(), insertln(), insnstr(), insstr(), instr(),
  732.         intrflush(),
  733.         is_linetouched(), is_wintouched(), leaveok(), meta(),
  734.         move(), mvaddch(), mvaddchnstr(), mvaddchstr(), mvaddnstr(),
  735.         mvaddstr(), mvdelch(), mvgetch(), mvgetstr(), mvhline(),
  736.         mvinchnstr(), mvinchstr(), mvinnstr(), mvinsch(), mvinsnstr(),
  737.         mvinsstr(), mvinstr(), mvvline(), mvwaddch(), mvwaddchnstr(),
  738.         mvwaddchstr(), mvwaddnstr(), mvwaddstr(), mvwdelch(),
  739.         mvwgetch(), mvwgetstr(), mvwhline(), mvwinchnstr(),
  740.         mvwinchstr(), mvwinnstr(), mvwinsch(), mvwinsnstr(),
  741.         mvwinsstr(), mvwinstr(), mvwvline(),
  742.         nl(), nocrmode(), nodelay(),
  743.         noecho(), nonl(), notimeout(),
  744.         overlay(), overwrite(), redrawwin(), refresh(),
  745.         resetterm(), saveterm(), scr_init(),
  746.         scr_restore(), scr_set(), scrl(),
  747.         scroll(), scrollok(), setscrreg(), setterm(),
  748.         slk_init(), standend(), standout(), 
  749.         syncok(), touchline(), touchwin(), untouchwin(), vline(),
  750.         waddchstr(), waddstr(), wclear(),
  751.         wdeleteln(), werase(), winchstr(), winsertln(),
  752.         winsstr(), winstr(), wstandend(), wstandout();
  753.  
  754. extern    void    bkgdset(), wbkgdset(), idcok(), noqiflush(),
  755.         qiflush(), timeout(), wtimeout(), use_env();
  756.  
  757. extern unsigned long getmouse(), getbmap();
  758.  
  759. extern chtype    inwch(), mvinwch(), mvwinwch();
  760.  
  761. extern int    addnwstr(), addwch(), addwchnstr(), addwchstr(),
  762.         addwstr(), echowchar(), getnwstr(), getwch(),
  763.         getwstr(), innwstr(), insnwstr(), inswch(),
  764.         inswstr(), inwchnstr(), inwchstr(), inwstr(),
  765.         mvaddnwstr(), mvaddwch(), mvaddwchnstr(), mvaddwchstr(),
  766.         mvaddwstr(), mvgetnwstr(), mvgetwch(), mvgetwstr(),
  767.         mvinnwstr(), mvinsnwstr(), mvinswch(), mvinswstr(),
  768.         mvinwchnstr(), mvinwchstr(), mvinwstr(), mvwaddnwstr(),
  769.         mvwaddwch(), mvwaddwchnstr(), mvwaddwchstr(), mvwaddwstr(),
  770.         mvwgetnwstr(), mvwgetwch(), mvwgetwstr(), mvwinnwstr(),
  771.         mvwinsnwstr(), mvwinswch(), mvwinswstr(), mvwinwchnstr(),
  772.         mvwinwchstr(), mvwinwstr(), waddwchstr(), waddwstr(),
  773.         winswstr(), winwchstr();
  774.  
  775. #endif /* __STDC__ */
  776.  
  777. #else    /* NOMACROS || lint */
  778.  
  779. /*
  780.  * The defines from here down to the #endif for NOMACROS
  781.  * define macros, which may be more efficient than their
  782.  * function versions. The functions may be accessed by defining
  783.  * NOMACROS in C code. This is useful for debugging purposes.
  784.  */
  785.  
  786. #include  <unctrl.h>
  787.  
  788. /* pseudo functions for stdscr */
  789. #define    addch(ch)    waddch(stdscr, ch)
  790. #define    addnstr(s,n)    waddnstr(stdscr,s,n)
  791. #define    addstr(str)    waddstr(stdscr, str)
  792. #define    attroff(at)    wattroff(stdscr,at)
  793. #define    attron(at)    wattron(stdscr,at)
  794. #define    attrset(at)    wattrset(stdscr,at)
  795. #define    bkgd(c)        wbkgd(stdscr,c)
  796. #define    border(ls, rs, ts, bs, tl, tr, bl, br)    wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br)    
  797. #define    clear()        wclear(stdscr)
  798. #define    clrtobot()    wclrtobot(stdscr)
  799. #define    clrtoeol()    wclrtoeol(stdscr)
  800. #define    delch()        wdelch(stdscr)
  801. #define    deleteln()    wdeleteln(stdscr)
  802. #define    echochar(ch)    wechochar(stdscr, ch)
  803. #define    erase()        werase(stdscr)
  804. #define    getch()        wgetch(stdscr)
  805. #define    getstr(str)    wgetstr(stdscr, str)
  806. #define    inch()        winch(stdscr)
  807. #define    insch(c)    winsch(stdscr,c)
  808. #define    insdelln(id)    winsdelln(stdscr,id)
  809. #define    insertln()    winsertln(stdscr)
  810. #define    insnstr(s,n)    winsnstr(stdscr,s,n)
  811. #define    insstr(s)    winsstr(stdscr,s)
  812. #define    move(y, x)    wmove(stdscr, y, x)
  813. #define    refresh()    wrefresh(stdscr)
  814. #define    scrl(n)        wscrl(stdscr,n)
  815. #define    setscrreg(t,b)    wsetscrreg(stdscr, t, b)
  816. #define    standend()    wstandend(stdscr)
  817. #define    standout()    wstandout(stdscr)
  818. #define    timeout(tm)    wtimeout(stdscr,tm)
  819. #define    hline(c,num)    whline(stdscr,c,num)
  820. #define    vline(c,num)    wvline(stdscr,c,num)
  821. #define    addchstr(str)    waddchstr(stdscr,str)
  822. #define    addchnstr(str,n)    waddchnstr(stdscr,str,n)
  823. #define    instr(str)    winstr(stdscr,(str))
  824. #define    innstr(str,n)    winnstr(stdscr,(str),(n))
  825. #define    inchstr(str)    winchstr(stdscr,str)
  826. #define    inchnstr(str,n)    winchnstr(stdscr,str,n)
  827. #define    bkgdset(c)    wbkgdset(stdscr,c)
  828.  
  829. #define    addnwstr(ws,n)    waddnwstr(stdscr,ws,n)
  830. #define    addwch(ch)    waddwch(stdscr,ch)
  831. #define    addwchnstr(str,n)    waddwchnstr(stdscr,str,n)
  832. #define    addwchstr(str)    waddwchstr(stdscr,str)
  833. #define    addwstr(ws)    waddwstr(stdscr,ws)
  834. #define    echowchar(ch)    wechowchar(stdscr,ch)
  835. #define    getnwstr(ws,n)    wgetnwstr(stdscr,ws,n)
  836. #define    getwch()    wgetwch(stdscr)
  837. #define    getwstr(ws)    wgetwstr(stdscr, ws)
  838. #define    innwstr(ws,n)    winnwstr(stdscr,ws,n)
  839. #define    insnwstr(ws,n)    winsnwstr(stdscr,ws,n)
  840. #define    inswch(c)    winswch(stdscr,c)
  841. #define    inswstr(ws)    winswstr(stdscr,ws)
  842. #define    inwch()        winwch(stdscr)
  843. #define    inwchnstr(str,n)    winwchnstr(stdscr,str,n)
  844. #define    inwchstr(str)    winwchstr(stdscr,str)
  845. #define    inwstr(ws)    winwstr(stdscr,ws)
  846.  
  847. /* functions to define environment flags of a window */
  848. #ifdef    CURS_PERFORMANCE
  849. #define    wbkgdset(win,c)        (((win)->_attrs = (((win)->_attrs & ~((win)->_bkgd & A_ATTRIBUTES)) | (c & A_ATTRIBUTES))), ((win)->_bkgd = (c)))
  850. #define syncok(win,bf)        ((win)->_parent?(win)->_sync=(bf):ERR)
  851. #define    notimeout(win,bf)    (((win)->_notimeout = ((bf) ? TRUE : FALSE)),OK)
  852. #define    clearok(win,bf)        (((win)->_clear = (bf)), OK)
  853. #define    leaveok(win,bf)        (((win)->_leave = (bf)), OK)
  854. #define    scrollok(win,bf)    (((win)->_scroll = ((bf) ? TRUE : FALSE)), OK)
  855. #define    idcok(win,bf)        ((win)->_use_idc = ((bf) ? TRUE : FALSE))
  856. #define    nodelay(win,bf)        (((win)->_delay = (bf) ? 0 : -1), OK)
  857. #define is_wintouched(win)    ((win)->_flags & _WINCHANGED)
  858. #define is_linetouched(win,line)    ((((line) >= (win)->_maxy) || \
  859.                      ((line) < 0)) ? ERR : \
  860.                     (((win)->_firstch[(line)] == _INFINITY) ? \
  861.                                   FALSE : TRUE))
  862.  
  863. #define subwin(win,nl,nc,by,bx)    derwin((win),(nl),(nc),(by-win->_begy),(bx-win->_begx))
  864. #define touchwin(win)        wtouchln((win),0,(win)->_maxy,TRUE)
  865. #define redrawwin(win)        wredrawln((win),0,(win)->_maxy)
  866. #define    winchstr(win,str)    winchnstr((win),str,((win)->_maxx - (win)->_curx))
  867. #define    winstr(win,str)        winnstr((win),str,((win)->_maxx - (win)->_curx))
  868. #define untouchwin(win)        wtouchln((win),0,((win)->_maxy),FALSE)
  869. #define    winch(win)        ((win)->_y[(win)->_cury][(win)->_curx])
  870.  
  871. #define wtimeout(win,tm)    ((win)->_delay = (tm))
  872. #define use_env(bf)        (_use_env = (bf))
  873.  
  874. #else    /* CURS_PERFORMANCE */
  875.  
  876. #ifdef __STDC__
  877.  
  878. extern    void    wbkgdset(WINDOW *, chtype),
  879.         idcok(WINDOW *, int /*bool*/),
  880.         wtimeout(WINDOW *, int), use_env(int /*char*/);
  881.  
  882. extern    int    syncok(WINDOW *, int /*bool*/),
  883.         notimeout(WINDOW *, int /*bool*/),
  884.         clearok(WINDOW *, int /*bool*/),
  885.         leaveok(WINDOW *, int /*bool*/),
  886.         scrollok(WINDOW *, int /*bool*/),
  887.         nodelay(WINDOW *, int /*bool*/),
  888.         is_linetouched(WINDOW *, int), is_wintouched(WINDOW *),
  889.         touchwin(WINDOW *), redrawwin(WINDOW *), 
  890.         winchstr(WINDOW *, chtype *), winstr(WINDOW *, char *),
  891.         untouchwin(WINDOW *); 
  892.  
  893. extern  chtype  winch(WINDOW *);
  894.  
  895. extern    WINDOW    *subwin(WINDOW *, int, int, int, int);
  896.  
  897. #else  /* __STDC__ */
  898.  
  899. extern    void    wbkgdset(), idcok(), wtimeout(), use_env();
  900.  
  901. extern    int    syncok(), notimeout(), clearok(), leaveok(),
  902.         scrollok(), nodelay(), is_linetouched(), is_wintouched(),
  903.         touchwin(), redrawwin(), winchstr(), winstr(),
  904.         untouchwin(); 
  905.  
  906. extern  chtype  winch();
  907.  
  908. extern    WINDOW    *subwin();
  909.  
  910. #endif /* __STDC__ */
  911.  
  912. #endif    /* CURS_PERFORMANCE */
  913.  
  914. /* functions for move and update */
  915. #define    mvaddch(y,x,ch)        mvwaddch(stdscr,y,x,ch)
  916. #define    mvaddnstr(y,x,s,n)    mvwaddnstr(stdscr,y,x,s,n)
  917. #define    mvaddstr(y,x,str)    mvwaddstr(stdscr,y,x,str)
  918. #define    mvdelch(y,x)        mvwdelch(stdscr,y,x)
  919. #define    mvgetch(y,x)        mvwgetch(stdscr,y,x)
  920. #define    mvgetstr(y,x,str)    mvwgetstr(stdscr,y,x,str)
  921. #define    mvinch(y,x)        mvwinch(stdscr,y,x)
  922. #define    mvinsch(y,x,c)        mvwinsch(stdscr,y,x,c)
  923. #define    mvinsnstr(y,x,s,n)    mvwinsnstr(stdscr,y,x,s,n)
  924. #define    mvinsstr(y,x,s)        mvwinsstr(stdscr,y,x,s)
  925. #define    mvaddchstr(y,x,str)    mvwaddchstr(stdscr,y,x,str)
  926. #define    mvaddchnstr(y,x,str,n)    mvwaddchnstr(stdscr,y,x,str,n)
  927. #define    mvinstr(y,x,str)    mvwinstr(stdscr,y,x,(str))
  928. #define    mvinnstr(y,x,str,n)    mvwinnstr(stdscr,y,x,(str),(n))
  929. #define    mvinchstr(y,x,str)    mvwinchstr(stdscr,y,x,str)
  930. #define    mvinchnstr(y,x,str,n)    mvwinchnstr(stdscr,y,x,str,n)
  931. #define    mvhline(y,x,c,num)    mvwhline(stdscr,y,x,c,num)
  932. #define    mvvline(y,x,c,num)    mvwvline(stdscr,y,x,c,num)
  933.  
  934. #define    mvaddnwstr(y,x,ws,n)    mvwaddnwstr(stdscr,y,x,ws,n)
  935. #define    mvaddwch(y,x,ch)    mvwaddwch(stdscr,y,x,ch)
  936. #define    mvaddwchnstr(y,x,str,n)    mvwaddwchnstr(stdscr,y,x,str,n)
  937. #define    mvaddwchstr(y,x,str)    mvwaddwchstr(stdscr,y,x,str)
  938. #define    mvaddwstr(y,x,ws)    mvwaddwstr(stdscr,y,x,ws)
  939. #define    mvgetnwstr(y,x,ws,n)    mvwgetnwstr(stdscr,y,x,ws,n)
  940. #define    mvgetwch(y,x)        mvwgetwch(stdscr,y,x)
  941. #define    mvgetwstr(y,x,ws)    mvwgetwstr(stdscr,y,x,ws)
  942. #define    mvinnwstr(y,x,ws,n)    mvwinnwstr(stdscr,y,x,ws,n)
  943. #define    mvinsnwstr(y,x,ws,n)    mvwinsnwstr(stdscr,y,x,ws,n)
  944. #define    mvinswch(y,x,c)        mvwinswch(stdscr,y,x,c)
  945. #define    mvinswstr(y,x,ws)    mvwinswstr(stdscr,y,x,ws)
  946. #define    mvinwch(y,x)        mvwinwch(stdscr,y,x)
  947. #define    mvinwchnstr(y,x,str,n)    mvwinwchnstr(stdscr,y,x,str,n)
  948. #define    mvinwchstr(y,x,str)    mvwinwchstr(stdscr,y,x,str)
  949. #define    mvinwstr(y,x,ws)    mvwinwstr(stdscr,y,x,ws)
  950.  
  951. #define    mvwaddch(win,y,x,ch)    (wmove(win,y,x)==ERR?ERR:waddch(win,ch))
  952. #define    mvwaddnstr(win,y,x,s,n)    (wmove(win,y,x)==ERR?ERR:waddnstr(win,s,n))
  953. #define    mvwaddstr(win,y,x,str)    (wmove(win,y,x)==ERR?ERR:waddstr(win,str))
  954. #define    mvwdelch(win,y,x)    (wmove(win,y,x)==ERR?ERR:wdelch(win))
  955. #define    mvwgetch(win,y,x)    (wmove(win,y,x)==ERR?ERR:wgetch(win))
  956. #define    mvwgetstr(win,y,x,str)    (wmove(win,y,x)==ERR?ERR:wgetstr(win,str))
  957. #define    mvwinch(win,y,x)    (wmove(win,y,x)==ERR?(chtype) ERR:winch(win))
  958. #define    mvwinsch(win,y,x,c)    (wmove(win,y,x)==ERR?ERR:winsch(win,c))
  959. #define    mvwinsnstr(win,y,x,s,n)    (wmove(win,y,x)==ERR?ERR:winsnstr(win,s,n))
  960. #define    mvwinsstr(win,y,x,s)    (wmove(win,y,x)==ERR?ERR:winsstr(win,s))
  961. #define    mvwhline(win,y,x,c,num)    (wmove(win,y,x)==ERR?ERR:whline(win,c,num))
  962. #define    mvwvline(win,y,x,c,num)    (wmove(win,y,x)==ERR?ERR:wvline(win,c,num))
  963. #define    mvwaddchstr(win,y,x,str)    (wmove(win,y,x)==ERR?ERR:waddchstr(win,str))
  964. #define    mvwaddchnstr(win,y,x,str,n)    (wmove(win,y,x)==ERR?ERR:waddchnstr(win,str,n))
  965. #define    mvwinstr(win,y,x,str)    (wmove(win,y,x)==ERR?ERR:winstr(win,str))
  966. #define    mvwinnstr(win,y,x,str,n)    (wmove(win,y,x)==ERR?ERR:winnstr(win,str,n))
  967. #define    mvwinchstr(win,y,x,str)    (wmove(win,y,x)==ERR?ERR:winchstr(win,str))
  968. #define    mvwinchnstr(win,y,x,str,n)    (wmove(win,y,x)==ERR?ERR:winchnstr(win,str,n))
  969.  
  970. #define    mvwaddnwstr(win,y,x,ws,n) (wmove(win,y,x)==ERR?ERR:waddnwstr(win,ws,n))
  971. #define    mvwaddwch(win,y,x,ch)    (wmove(win,y,x)==ERR?ERR:waddwch(win,ch))
  972. #define    mvwaddwchnstr(win,y,x,str,n) (wmove(win,y,x)==ERR?ERR:waddwchnstr(win,str,n))
  973. #define    mvwaddwchstr(win,y,x,str) (wmove(win,y,x)==ERR?ERR:waddwchstr(win,str))
  974. #define    mvwaddwstr(win,y,x,ws)    (wmove(win,y,x)==ERR?ERR:waddwstr(win,ws))
  975. #define    mvwgetnwstr(win,y,x,ws,n) (wmove(win,y,x)==ERR?ERR:wgetnwstr(win,ws,n))
  976. #define    mvwgetwch(win,y,x)    (wmove(win,y,x)==ERR?ERR:wgetwch(win))
  977. #define    mvwgetwstr(win,y,x,ws)    (wmove(win,y,x)==ERR?ERR:wgetwstr(win,ws))
  978. #define    mvwinnwstr(win,y,x,ws,n) (wmove(win,y,x)==ERR?ERR:winnwstr(win,ws,n))
  979. #define    mvwinsnwstr(win,y,x,ws,n) (wmove(win,y,x)==ERR?ERR:winsnwstr(win,ws,n))
  980. #define    mvwinswch(win,y,x,c)    (wmove(win,y,x)==ERR?ERR:winswch(win,c))
  981. #define    mvwinswstr(win,y,x,ws)    (wmove(win,y,x)==ERR?ERR:winswstr(win,ws))
  982. #define    mvwinwch(win,y,x)    (wmove(win,y,x)==ERR?(chtype)ERR:winwch(win))
  983. #define    mvwinwchnstr(win,y,x,str,n) (wmove(win,y,x)==ERR?ERR:winwchnstr(win,str,n))
  984. #define    mvwinwchstr(win,y,x,str) (wmove(win,y,x)==ERR?ERR:winwchstr(win,str))
  985. #define    mvwinwstr(win,y,x,ws)    (wmove(win,y,x)==ERR?ERR:winwstr(win,ws))
  986.  
  987. #define    waddwchstr(win,str)    waddwchnstr(win,str,-1)
  988. #define    winwchstr(win,str)    winwchnstr(win,str,-1)
  989. #define waddwstr(win,ws)    waddnwstr(win,ws,-1)
  990. #define winswstr(win,ws)    winsnwstr(win,ws,-1)
  991.  
  992. #ifdef CURS_MACROS
  993. #define overlay(src,dst)    _overlap((src),(dst),TRUE)
  994. #define overwrite(src,dst)    _overlap((src),(dst),FALSE)
  995. #define wdeleteln(win)        winsdelln((win),-1)
  996. #define winsertln(win)        winsdelln((win),1)
  997. #define wstandend(win)        wattrset((win),A_NORMAL)
  998. #define wstandout(win)        wattron((win),A_STANDOUT)
  999. #define beep()            _ring(TRUE)
  1000. #define flash()            _ring(FALSE)
  1001. #define scroll(win)        wscrl((win),1)
  1002. #define slk_init(f)        slk_start(((f == 0) ? 3 : 2),NULL)
  1003. #define    scr_init(file)        _scr_all(file,0)
  1004. #define    scr_restore(file)    _scr_all(file,1)
  1005. #define    scr_set(file)        _scr_all(file,2)
  1006. #define subpad(win,nl,nc,by,bx)    derwin((win),(nl),(nc),(by),(bx))
  1007. #define box(win,v,h)        wborder((win),(v),(v),(h),(h),0,0,0,0)
  1008. #define newterm(type,fout,fin)    newscreen((type),0,0,0,(fout),(fin))
  1009. #define touchline(win,y,n)    wtouchln((win),(y),(n),TRUE)
  1010.  
  1011. #define waddstr(win,str)    waddnstr((win),(str),-1)
  1012. #define werase(win)        (wmove((win),0,0), wclrtobot(win))
  1013. #define wclear(win)        (clearok((win),TRUE), werase(win))
  1014. #define intrflush(win,flag)    _setqiflush(flag)
  1015. #define meta(win,flag)        _meta(flag)
  1016.  
  1017. #define setterm(name)        setupterm((name),1,(char*)NULL)
  1018. #define gettmode()        (OK)
  1019. #define halfdelay(tens)        ttimeout((tens)*100)
  1020.  
  1021. #define echo()            _setecho(TRUE)
  1022. #define noecho()        _setecho(FALSE)
  1023. #define nl()            _setnonl(FALSE)
  1024. #define nonl()            _setnonl(TRUE)
  1025.  
  1026. #else /* CURS_MACROS */
  1027.  
  1028. #ifdef __STDC__
  1029.  
  1030. extern    int    overlay(WINDOW *, WINDOW *), overwrite(WINDOW *, WINDOW *),
  1031.         wdeleteln(WINDOW *), winsertln(WINDOW *),
  1032.         wstandend(WINDOW *), wstandout(WINDOW *),
  1033.         beep(void), flash(void), scroll(WINDOW *), slk_init(int),
  1034.         scr_init(char *), scr_restore(char *), scr_set(char *),
  1035.         box(WINDOW *, chtype, chtype), touchline(WINDOW *, int, int),
  1036.         waddstr(WINDOW *, char *), werase(WINDOW *),
  1037.         wclear(WINDOW *), intrflush(WINDOW *, int),
  1038.         meta(WINDOW *, int), setterm(char *), gettmode(void),
  1039.         halfdelay(int), echo(void), noecho(void), nl(void), nonl(void);
  1040.  
  1041. extern    WINDOW *subpad(WINDOW *, int, int, int, int);
  1042.  
  1043. extern  SCREEN  *newterm(char *, FILE *, FILE *);
  1044.  
  1045. #else  /* __STDC__ */
  1046.  
  1047. extern    int    overlay(), overwrite(), wdeleteln(), winsertln(),
  1048.         wstandend(), wstandout(), beep(), flash(),
  1049.         scroll(), slk_init(), scr_init(), scr_restore(), scr_set(),
  1050.         box(), touchline(), waddstr(), werase(),
  1051.         wclear(), intrflush(), meta(), setterm(), gettmode(),
  1052.         halfdelay(), echo(), noecho(), nl(), nonl();
  1053.  
  1054. extern    WINDOW *subpad();
  1055.  
  1056. extern  SCREEN  *newterm();
  1057.  
  1058. #endif /* __STDC__ */
  1059. #endif /* CURS_MACROS */
  1060.  
  1061. #define garbagedlines        wredrawln
  1062. #define garbagedwin        redrawwin
  1063.  
  1064. #define crmode            cbreak
  1065. #define nocrmode        nocbreak
  1066. #define saveterm        def_prog_mode
  1067. #define fixterm            reset_prog_mode
  1068. #define resetterm        reset_shell_mode
  1069.  
  1070. #define    waddchstr(win,str)    waddchnstr((win),(str),-1)
  1071. #define winsstr(win,str)    winsnstr((win),(str),-1)
  1072.  
  1073. /* iocontrol functions */
  1074. #define qiflush()        _setqiflush(TRUE)
  1075. #define noqiflush()        _setqiflush(FALSE)
  1076.  
  1077. #define set_term        setcurscreen
  1078.  
  1079. #endif    /* NOMACROS || lint */
  1080.  
  1081. /*
  1082.  * Standard alternate character set.  The current ACS world is evolving,
  1083.  * so we support only a widely available subset: the line drawing characters
  1084.  * from the VT100, plus a few from the Teletype 5410v1.  Eventually there
  1085.  * may be support of more sophisticated ACS line drawing, such as that
  1086.  * in the Teletype 5410, the HP line drawing set, and the like.  There may
  1087.  * be support for some non line oriented characters as well.
  1088.  *
  1089.  * Line drawing ACS names are of the form ACS_trbl, where t is the top, r
  1090.  * is the right, b is the bottom, and l is the left.  t, r, b, and l might
  1091.  * be B (blank), S (single), D (double), or T (thick).  The subset defined
  1092.  * here only uses B and S.
  1093.  */
  1094.  
  1095. #define ACS_BSSB    (acs_map['l'])
  1096. #define ACS_SSBB    (acs_map['m'])
  1097. #define ACS_BBSS    (acs_map['k'])
  1098. #define ACS_SBBS    (acs_map['j'])
  1099. #define ACS_SBSS    (acs_map['u'])
  1100. #define ACS_SSSB    (acs_map['t'])
  1101. #define ACS_SSBS    (acs_map['v'])
  1102. #define ACS_BSSS    (acs_map['w'])
  1103. #define ACS_BSBS    (acs_map['q'])
  1104. #define ACS_SBSB    (acs_map['x'])
  1105. #define ACS_SSSS    (acs_map['n'])
  1106.  
  1107. /*
  1108.  * Human readable names for the most commonly used characters.
  1109.  * "Upper", "right", etc. are chosen to be consistent with the vt100 manual.
  1110.  */
  1111.  
  1112. #define ACS_ULCORNER    ACS_BSSB
  1113. #define ACS_LLCORNER    ACS_SSBB
  1114. #define ACS_URCORNER    ACS_BBSS
  1115. #define ACS_LRCORNER    ACS_SBBS
  1116. #define ACS_RTEE    ACS_SBSS
  1117. #define ACS_LTEE    ACS_SSSB
  1118. #define ACS_BTEE    ACS_SSBS
  1119. #define ACS_TTEE    ACS_BSSS
  1120. #define ACS_HLINE    ACS_BSBS
  1121. #define ACS_VLINE    ACS_SBSB
  1122. #define ACS_PLUS    ACS_SSSS
  1123. #define ACS_S1        (acs_map['o'])    /* scan line 1 */
  1124. #define ACS_S9        (acs_map['s'])    /* scan line 9 */
  1125. #define ACS_DIAMOND    (acs_map['`'])    /* diamond */
  1126. #define ACS_CKBOARD    (acs_map['a'])    /* checker board (stipple) */
  1127. #define ACS_DEGREE    (acs_map['f'])    /* degree symbol */
  1128. #define ACS_PLMINUS    (acs_map['g'])    /* plus/minus */
  1129. #define ACS_BULLET    (acs_map['~'])    /* bullet */
  1130.     /* Teletype 5410v1 symbols */
  1131. #define ACS_LARROW    (acs_map[','])    /* arrow pointing left */
  1132. #define ACS_RARROW    (acs_map['+'])    /* arrow pointing right */
  1133. #define ACS_DARROW    (acs_map['.'])    /* arrow pointing down */
  1134. #define ACS_UARROW    (acs_map['-'])    /* arrow pointing up */
  1135. #define ACS_BOARD    (acs_map['h'])    /* board of squares */
  1136. #define ACS_LANTERN    (acs_map['i'])    /* lantern symbol */
  1137. #define ACS_BLOCK    (acs_map['0'])    /* solid square block */
  1138.  
  1139. /* Funny "characters" enabled for various special function keys for input */
  1140. /* This list is created from caps and curses.ed. Do not edit it! */
  1141. #define KEY_MIN        0401        /* Minimum curses key */
  1142. #define KEY_BREAK    0401        /* break key (unreliable) */
  1143. #define KEY_DOWN    0402        /* Sent by terminal down arrow key */
  1144. #define KEY_UP        0403        /* Sent by terminal up arrow key */
  1145. #define KEY_LEFT    0404        /* Sent by terminal left arrow key */
  1146. #define KEY_RIGHT    0405        /* Sent by terminal right arrow key */
  1147. #define KEY_HOME    0406        /* Sent by home key. */
  1148. #define KEY_BACKSPACE    0407        /* Sent by backspace key */
  1149. #define KEY_F0        0410        /* function key f0. */
  1150. #define KEY_F(n)    (KEY_F0+(n))    /* Space for 64 function keys is reserved. */
  1151. #define KEY_DL        0510        /* Sent by delete line key. */
  1152. #define KEY_IL        0511        /* Sent by insert line. */
  1153. #define KEY_DC        0512        /* Sent by delete character key. */
  1154. #define KEY_IC        0513        /* Sent by ins char/enter ins mode key. */
  1155. #define KEY_EIC        0514        /* Sent by rmir or smir in insert mode. */
  1156. #define KEY_CLEAR    0515        /* Sent by clear screen or erase key. */
  1157. #define KEY_EOS        0516        /* Sent by clear-to-end-of-screen key. */
  1158. #define KEY_EOL        0517        /* Sent by clear-to-end-of-line key. */
  1159. #define KEY_SF        0520        /* Sent by scroll-forward/down key */
  1160. #define KEY_SR        0521        /* Sent by scroll-backward/up key */
  1161. #define KEY_NPAGE    0522        /* Sent by next-page key */
  1162. #define KEY_PPAGE    0523        /* Sent by previous-page key */
  1163. #define KEY_STAB    0524        /* Sent by set-tab key */
  1164. #define KEY_CTAB    0525        /* Sent by clear-tab key */
  1165. #define KEY_CATAB    0526        /* Sent by clear-all-tabs key. */
  1166. #define KEY_ENTER    0527        /* Enter/send (unreliable) */
  1167. #define KEY_SRESET    0530        /* soft (partial) reset (unreliable) */
  1168. #define KEY_RESET    0531        /* reset or hard reset (unreliable) */
  1169. #define KEY_PRINT    0532        /* print or copy */
  1170. #define KEY_LL        0533        /* Sent by home-down key */
  1171.                     /* The keypad is arranged like this: */
  1172.                     /*    a1    up    a3   */
  1173.                     /*   left   b2  right  */
  1174.                     /*    c1   down   c3   */
  1175. #define KEY_A1        0534        /* Upper left of keypad */
  1176. #define KEY_A3        0535        /* Upper right of keypad */
  1177. #define KEY_B2        0536        /* Center of keypad */
  1178. #define KEY_C1        0537        /* Lower left of keypad */
  1179. #define KEY_C3        0540        /* Lower right of keypad */
  1180. #define KEY_BTAB    0541        /* Back tab key */
  1181. #define KEY_BEG        0542        /* beg(inning) key */
  1182. #define KEY_CANCEL    0543        /* cancel key */
  1183. #define KEY_CLOSE    0544        /* close key */
  1184. #define KEY_COMMAND    0545        /* cmd (command) key */
  1185. #define KEY_COPY    0546        /* copy key */
  1186. #define KEY_CREATE    0547        /* create key */
  1187. #define KEY_END        0550        /* end key */
  1188. #define KEY_EXIT    0551        /* exit key */
  1189. #define KEY_FIND    0552        /* find key */
  1190. #define KEY_HELP    0553        /* help key */
  1191. #define KEY_MARK    0554        /* mark key */
  1192. #define KEY_MESSAGE    0555        /* message key */
  1193. #define KEY_MOVE    0556        /* move key */
  1194. #define KEY_NEXT    0557        /* next object key */
  1195. #define KEY_OPEN    0560        /* open key */
  1196. #define KEY_OPTIONS    0561        /* options key */
  1197. #define KEY_PREVIOUS    0562        /* previous object key */
  1198. #define KEY_REDO    0563        /* redo key */
  1199. #define KEY_REFERENCE    0564        /* ref(erence) key */
  1200. #define KEY_REFRESH    0565        /* refresh key */
  1201. #define KEY_REPLACE    0566        /* replace key */
  1202. #define KEY_RESTART    0567        /* restart key */
  1203. #define KEY_RESUME    0570        /* resume key */
  1204. #define KEY_SAVE    0571        /* save key */
  1205. #define KEY_SBEG    0572        /* shifted beginning key */
  1206. #define KEY_SCANCEL    0573        /* shifted cancel key */
  1207. #define KEY_SCOMMAND    0574        /* shifted command key */
  1208. #define KEY_SCOPY    0575        /* shifted copy key */
  1209. #define KEY_SCREATE    0576        /* shifted create key */
  1210. #define KEY_SDC        0577        /* shifted delete char key */
  1211. #define KEY_SDL        0600        /* shifted delete line key */
  1212. #define KEY_SELECT    0601        /* select key */
  1213. #define KEY_SEND    0602        /* shifted end key */
  1214. #define KEY_SEOL    0603        /* shifted clear line key */
  1215. #define KEY_SEXIT    0604        /* shifted exit key */
  1216. #define KEY_SFIND    0605        /* shifted find key */
  1217. #define KEY_SHELP    0606        /* shifted help key */
  1218. #define KEY_SHOME    0607        /* shifted home key */
  1219. #define KEY_SIC        0610        /* shifted input key */
  1220. #define KEY_SLEFT    0611        /* shifted left arrow key */
  1221. #define KEY_SMESSAGE    0612        /* shifted message key */
  1222. #define KEY_SMOVE    0613        /* shifted move key */
  1223. #define KEY_SNEXT    0614        /* shifted next key */
  1224. #define KEY_SOPTIONS    0615        /* shifted options key */
  1225. #define KEY_SPREVIOUS    0616        /* shifted prev key */
  1226. #define KEY_SPRINT    0617        /* shifted print key */
  1227. #define KEY_SREDO    0620        /* shifted redo key */
  1228. #define KEY_SREPLACE    0621        /* shifted replace key */
  1229. #define KEY_SRIGHT    0622        /* shifted right arrow */
  1230. #define KEY_SRSUME    0623        /* shifted resume key */
  1231. #define KEY_SSAVE    0624        /* shifted save key */
  1232. #define KEY_SSUSPEND    0625        /* shifted suspend key */
  1233. #define KEY_SUNDO    0626        /* shifted undo key */
  1234. #define KEY_SUSPEND    0627        /* suspend key */
  1235. #define KEY_UNDO    0630        /* undo key */
  1236. #define KEY_MOUSE    0631        /* Mouse event has occured */
  1237. #define KEY_MAX        0777        /* Maximum curses key */
  1238.  
  1239. /*
  1240.     The definition for 'reg' is not standard, and is provided for
  1241.     compatibility reasons. User's are discouraged from using this.
  1242. */
  1243. #define    reg    register
  1244.  
  1245. /* Various video attributes */
  1246. #define A_STANDOUT    000000200000L
  1247. #define    _STANDOUT    A_STANDOUT    /* for compatability with old curses */
  1248. #define A_UNDERLINE    000000400000L
  1249. #define A_REVERSE    000001000000L
  1250. #define A_BLINK        000002000000L
  1251. #define A_DIM        000004000000L
  1252. #define A_BOLD        000010000000L
  1253. #define A_ALTCHARSET    000100000000L
  1254.  
  1255. /* The next two are subject to change so don't depend on them */
  1256. #define A_INVIS        000020000000L
  1257. #define A_PROTECT    000040000000L
  1258.  
  1259. #define A_NORMAL    000000000000L
  1260. #define A_ATTRIBUTES    037777600000L    /* 0xFFFF0000 */
  1261. #define A_CHARTEXT    000000177777L    /* 0x0000FFFF */
  1262. #define A_COLOR        017600000000L
  1263.  
  1264. #define COLOR_PAIR(n)    ((n) << 25)
  1265. #define PAIR_NUMBER(n)    (((n) & A_COLOR) >> 25)
  1266.  
  1267. /* definition of 8 basic color    */
  1268. #define COLOR_BLACK    0
  1269. #define COLOR_RED    1
  1270. #define COLOR_GREEN    2
  1271. #define COLOR_YELLOW    3
  1272. #define COLOR_BLUE    4
  1273. #define COLOR_MAGENTA    5
  1274. #define COLOR_CYAN    6
  1275. #define COLOR_WHITE    7
  1276.  
  1277. /* mouse related macros: don't change these definitions or bit-masks. */
  1278. /* they are interdependent (used by _map_button() in tgetch()          */
  1279. #define BUTTON_RELEASED            0
  1280. #define BUTTON_PRESSED             1
  1281. #define BUTTON_CLICKED             2
  1282. #define BUTTON_DOUBLE_CLICKED      3
  1283. #define BUTTON_TRIPLE_CLICKED      4
  1284.  
  1285. #define MOUSE_X_POS                (Mouse_status.x)
  1286. #define MOUSE_Y_POS                (Mouse_status.y)
  1287. #define A_BUTTON_CHANGED           (Mouse_status.changes & 7)
  1288. #define MOUSE_MOVED                (Mouse_status.changes & 8)
  1289. #define MOUSE_POS_REPORT       (Mouse_status.changes & 16)
  1290. #define BUTTON_CHANGED(x)          (Mouse_status.changes & (1 << ((x) - 1)))
  1291. #define BUTTON_STATUS(x)           (Mouse_status.button[(x)-1])
  1292.  
  1293. /* definition of mouse bit-masks    */
  1294. #define    BUTTON1_RELEASED    000000000001L
  1295. #define    BUTTON1_PRESSED        000000000002L
  1296. #define    BUTTON1_CLICKED        000000000004L
  1297. #define    BUTTON1_DOUBLE_CLICKED    000000000010L
  1298. #define    BUTTON1_TRIPLE_CLICKED    000000000020L
  1299. #define    BUTTON2_RELEASED    000000000040L
  1300. #define    BUTTON2_PRESSED        000000000100L
  1301. #define    BUTTON2_CLICKED        000000000200L
  1302. #define    BUTTON2_DOUBLE_CLICKED    000000000400L
  1303. #define    BUTTON2_TRIPLE_CLICKED    000000001000L
  1304. #define    BUTTON3_RELEASED    000000002000L
  1305. #define    BUTTON3_PRESSED        000000004000L
  1306. #define    BUTTON3_CLICKED        000000010000L
  1307. #define    BUTTON3_DOUBLE_CLICKED    000000020000L
  1308. #define    BUTTON3_TRIPLE_CLICKED    000000040000L
  1309. #define ALL_MOUSE_EVENTS    000000077777L
  1310. #define REPORT_MOUSE_POSITION    000000100000L
  1311.  
  1312. #ifdef __cplusplus
  1313. }
  1314. #endif
  1315.  
  1316. #endif /* CURSES_H */
  1317.