[BACK]Return to curses.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libcurses

Annotation of src/lib/libcurses/curses.h, Revision 1.20

1.20    ! lukem       1: /*     $NetBSD: curses.h,v 1.19 1997/09/12 21:08:22 phil Exp $ */
1.18      mikel       2:
1.1       cgd         3: /*
1.13      cgd         4:  * Copyright (c) 1981, 1993, 1994
1.7       cgd         5:  *     The Regents of the University of California.  All rights reserved.
1.1       cgd         6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. Redistributions in binary form must reproduce the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer in the
                     14:  *    documentation and/or other materials provided with the distribution.
                     15:  * 3. All advertising materials mentioning features or use of this software
                     16:  *    must display the following acknowledgement:
                     17:  *     This product includes software developed by the University of
                     18:  *     California, Berkeley and its contributors.
                     19:  * 4. Neither the name of the University nor the names of its contributors
                     20:  *    may be used to endorse or promote products derived from this software
                     21:  *    without specific prior written permission.
                     22:  *
                     23:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     24:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     25:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     26:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     27:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     28:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     29:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     30:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     31:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     32:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     33:  * SUCH DAMAGE.
                     34:  *
1.13      cgd        35:  *     @(#)curses.h    8.4 (Berkeley) 8/10/94
1.1       cgd        36:  */
                     37:
1.4       mycroft    38: #ifndef _CURSES_H_
                     39: #define        _CURSES_H_
1.1       cgd        40:
1.7       cgd        41: #include <sys/types.h>
                     42: #include <sys/cdefs.h>
                     43:
1.4       mycroft    44: #include <stdio.h>
1.20    ! lukem      45: #include <termcap.h>
1.1       cgd        46:
1.4       mycroft    47: /*
                     48:  * The following #defines and #includes are present for backward
                     49:  * compatibility only.  They should not be used in future code.
                     50:  *
                     51:  * START BACKWARD COMPATIBILITY ONLY.
                     52:  */
                     53: #ifndef _CURSES_PRIVATE
1.1       cgd        54: #define        bool    char
                     55: #define        reg     register
                     56:
1.4       mycroft    57: #ifndef TRUE
1.1       cgd        58: #define        TRUE    (1)
1.4       mycroft    59: #endif
                     60: #ifndef FALSE
1.1       cgd        61: #define        FALSE   (0)
1.4       mycroft    62: #endif
1.1       cgd        63:
1.4       mycroft    64: #define        _puts(s)        tputs(s, 0, __cputchar)
                     65: #define        _putchar(c)     __cputchar(c)
1.1       cgd        66:
1.4       mycroft    67: /* Old-style terminal modes access. */
1.7       cgd        68: #define        baudrate()      (cfgetospeed(&__baset))
1.4       mycroft    69: #define        crmode()        cbreak()
1.7       cgd        70: #define        erasechar()     (__baset.c_cc[VERASE])
                     71: #define        killchar()      (__baset.c_cc[VKILL])
1.4       mycroft    72: #define        nocrmode()      nocbreak()
1.7       cgd        73: #define        ospeed          (cfgetospeed(&__baset))
1.4       mycroft    74: #endif /* _CURSES_PRIVATE */
                     75:
1.7       cgd        76: extern char     GT;                    /* Gtty indicates tabs. */
                     77: extern char     NONL;                  /* Term can't hack LF doing a CR. */
                     78: extern char     UPPERCASE;             /* Terminal is uppercase only. */
                     79:
1.4       mycroft    80: extern int      My_term;               /* Use Def_term regardless. */
                     81: extern char    *Def_term;              /* Default terminal type. */
                     82:
                     83: /* Termcap capabilities. */
1.10      cgd        84: extern char    AM, BS, CA, DA, EO, HC, IN, MI, MS, NC, NS, OS,
1.4       mycroft    85:                PC, UL, XB, XN, XT, XS, XX;
1.1       cgd        86: extern char    *AL, *BC, *BT, *CD, *CE, *CL, *CM, *CR, *CS, *DC, *DL,
                     87:                *DM, *DO, *ED, *EI, *K0, *K1, *K2, *K3, *K4, *K5, *K6,
                     88:                *K7, *K8, *K9, *HO, *IC, *IM, *IP, *KD, *KE, *KH, *KL,
                     89:                *KR, *KS, *KU, *LL, *MA, *ND, *NL, *RC, *SC, *SE, *SF,
                     90:                *SO, *SR, *TA, *TE, *TI, *UC, *UE, *UP, *US, *VB, *VS,
1.7       cgd        91:                *VE, *al, *dl, *sf, *sr,
1.4       mycroft    92:                *AL_PARM, *DL_PARM, *UP_PARM, *DOWN_PARM, *LEFT_PARM,
                     93:                *RIGHT_PARM;
                     94:
1.7       cgd        95: /* END BACKWARD COMPATIBILITY ONLY. */
                     96:
                     97: /* 8-bit ASCII characters. */
                     98: #define        unctrl(c)               __unctrl[(c) & 0xff]
                     99: #define        unctrllen(ch)           __unctrllen[(ch) & 0xff]
                    100:
                    101: extern char    *__unctrl[256]; /* Control strings. */
                    102: extern char     __unctrllen[256];      /* Control strings length. */
                    103:
                    104: /*
                    105:  * A window an array of __LINE structures pointed to by the 'lines' pointer.
                    106:  * A line is an array of __LDATA structures pointed to by the 'line' pointer.
                    107:  *
                    108:  * IMPORTANT: the __LDATA structure must NOT induce any padding, so if new
                    109:  * fields are added -- padding fields with *constant values* should ensure
                    110:  * that the compiler will not generate any padding when storing an array of
                    111:  *  __LDATA structures.  This is to enable consistent use of memcmp, and memcpy
                    112:  * for comparing and copying arrays.
                    113:  */
                    114: typedef struct {
                    115:        char ch;                        /* the actual character */
                    116:
                    117: #define        __STANDOUT      0x01            /* Added characters are standout. */
                    118:        char attr;                      /* attributes of character */
                    119: } __LDATA;
                    120:
                    121: #define __LDATASIZE    (sizeof(__LDATA))
                    122:
                    123: typedef struct {
                    124: #define        __ISDIRTY       0x01            /* Line is dirty. */
                    125: #define __ISPASTEOL    0x02            /* Cursor is past end of line */
                    126: #define __FORCEPAINT   0x04            /* Force a repaint of the line */
1.16      jtc       127:        unsigned int flags;
                    128:        unsigned int hash;              /* Hash value for the line. */
1.7       cgd       129:        size_t *firstchp, *lastchp;     /* First and last chngd columns ptrs */
                    130:        size_t firstch, lastch;         /* First and last changed columns. */
                    131:        __LDATA *line;                  /* Pointer to the line text. */
                    132: } __LINE;
                    133:
                    134: typedef struct __window {              /* Window structure. */
                    135:        struct __window *nextp, *orig;  /* Subwindows list and parent. */
                    136:        size_t begy, begx;              /* Window home. */
                    137:        size_t cury, curx;              /* Current x, y coordinates. */
                    138:        size_t maxy, maxx;              /* Maximum values for curx, cury. */
                    139:        short ch_off;                   /* x offset for firstch/lastch. */
                    140:        __LINE **lines;                 /* Array of pointers to the lines */
                    141:        __LINE  *lspace;                /* line space (for cleanup) */
                    142:        __LDATA *wspace;                /* window space (for cleanup) */
                    143:
                    144: #define        __ENDLINE       0x001           /* End of screen. */
                    145: #define        __FLUSH         0x002           /* Fflush(stdout) after refresh. */
1.13      cgd       146: #define        __FULLWIN       0x004           /* Window is a screen. */
                    147: #define        __IDLINE        0x008           /* Insert/delete sequences. */
                    148: #define        __SCROLLWIN     0x010           /* Last char will scroll window. */
                    149: #define        __SCROLLOK      0x020           /* Scrolling ok. */
                    150: #define        __CLEAROK       0x040           /* Clear on next refresh. */
                    151: #define __WSTANDOUT    0x080           /* Standout window */
                    152: #define __LEAVEOK      0x100           /* If curser left */
1.16      jtc       153:        unsigned int flags;
1.7       cgd       154: } WINDOW;
                    155:
1.4       mycroft   156: /* Curses external declarations. */
                    157: extern WINDOW  *curscr;                /* Current screen. */
                    158: extern WINDOW  *stdscr;                /* Standard screen. */
                    159:
1.7       cgd       160: extern struct termios __orig_termios;  /* Terminal state before curses */
                    161: extern struct termios __baset;         /* Our base terminal state */
                    162: extern int __tcaction;                 /* If terminal hardware set. */
1.4       mycroft   163:
                    164: extern int      COLS;                  /* Columns on the screen. */
                    165: extern int      LINES;                 /* Lines on the screen. */
                    166:
                    167: extern char    *ttytype;               /* Full name of current terminal. */
                    168:
                    169: #define        ERR     (0)                     /* Error return. */
                    170: #define        OK      (1)                     /* Success return. */
                    171:
                    172: /* Standard screen pseudo functions. */
1.7       cgd       173: #define        addbytes(s, n)                  __waddbytes(stdscr, s, n, 0)
                    174: #define        addch(ch)                       waddch(stdscr, ch)
                    175: #define        addnstr(s, n)                   waddnstr(stdscr, s, n)
                    176: #define        addstr(s)                       __waddbytes(stdscr, s, strlen(s), 0)
                    177: #define        clear()                         wclear(stdscr)
                    178: #define        clrtobot()                      wclrtobot(stdscr)
                    179: #define        clrtoeol()                      wclrtoeol(stdscr)
                    180: #define        delch()                         wdelch(stdscr)
                    181: #define        deleteln()                      wdeleteln(stdscr)
                    182: #define        erase()                         werase(stdscr)
                    183: #define        getch()                         wgetch(stdscr)
                    184: #define        getstr(s)                       wgetstr(stdscr, s)
                    185: #define        inch()                          winch(stdscr)
                    186: #define        insch(ch)                       winsch(stdscr, ch)
                    187: #define        insertln()                      winsertln(stdscr)
                    188: #define        move(y, x)                      wmove(stdscr, y, x)
                    189: #define        refresh()                       wrefresh(stdscr)
                    190: #define        standend()                      wstandend(stdscr)
                    191: #define        standout()                      wstandout(stdscr)
                    192: #define        waddbytes(w, s, n)              __waddbytes(w, s, n, 0)
                    193: #define        waddstr(w, s)                   __waddbytes(w, s, strlen(s), 0)
1.4       mycroft   194:
                    195: /* Standard screen plus movement pseudo functions. */
1.7       cgd       196: #define        mvaddbytes(y, x, s, n)          mvwaddbytes(stdscr, y, x, s, n)
                    197: #define        mvaddch(y, x, ch)               mvwaddch(stdscr, y, x, ch)
                    198: #define        mvaddnstr(y, x, s, n)           mvwaddnstr(stdscr, y, x, s, n)
                    199: #define        mvaddstr(y, x, s)               mvwaddstr(stdscr, y, x, s)
                    200: #define        mvdelch(y, x)                   mvwdelch(stdscr, y, x)
                    201: #define        mvgetch(y, x)                   mvwgetch(stdscr, y, x)
                    202: #define        mvgetstr(y, x, s)               mvwgetstr(stdscr, y, x, s)
                    203: #define        mvinch(y, x)                    mvwinch(stdscr, y, x)
                    204: #define        mvinsch(y, x, c)                mvwinsch(stdscr, y, x, c)
                    205: #define        mvwaddbytes(w, y, x, s, n) \
                    206:        (wmove(w, y, x) == ERR ? ERR : __waddbytes(w, s, n, 0))
                    207: #define        mvwaddch(w, y, x, ch) \
                    208:        (wmove(w, y, x) == ERR ? ERR : waddch(w, ch))
                    209: #define        mvwaddnstr(w, y, x, s, n) \
                    210:        (wmove(w, y, x) == ERR ? ERR : waddnstr(w, s, n))
                    211: #define        mvwaddstr(w, y, x, s) \
                    212:        (wmove(w, y, x) == ERR ? ERR : __waddbytes(w, s, strlen(s), 0))
                    213: #define        mvwdelch(w, y, x) \
                    214:        (wmove(w, y, x) == ERR ? ERR : wdelch(w))
                    215: #define        mvwgetch(w, y, x) \
                    216:        (wmove(w, y, x) == ERR ? ERR : wgetch(w))
                    217: #define        mvwgetstr(w, y, x, s) \
                    218:        (wmove(w, y, x) == ERR ? ERR : wgetstr(w, s))
                    219: #define        mvwinch(w, y, x) \
                    220:        (wmove(w, y, x) == ERR ? ERR : winch(w))
                    221: #define        mvwinsch(w, y, x, c) \
                    222:        (wmove(w, y, x) == ERR ? ERR : winsch(w, c))
                    223:
1.17      jtc       224:
1.7       cgd       225: /* Psuedo functions. */
                    226: #define        clearok(w, bf) \
                    227:        ((bf) ? ((w)->flags |= __CLEAROK) : ((w)->flags &= ~__CLEAROK))
                    228: #define        flushok(w, bf) \
                    229:        ((bf) ? ((w)->flags |= __FLUSH) : ((w)->flags &= ~__FLUSH))
                    230: #define        leaveok(w, bf) \
                    231:        ((bf) ? ((w)->flags |= __LEAVEOK) : ((w)->flags &= ~__LEAVEOK))
                    232: #define        scrollok(w, bf) \
                    233:        ((bf) ? ((w)->flags |= __SCROLLOK) : ((w)->flags &= ~__SCROLLOK))
                    234: #define        winch(w) \
                    235:        ((w)->lines[(w)->cury]->line[(w)->curx].ch & 0177)
1.17      jtc       236:
                    237: #define        getyx(w, y, x)          (y) = getcury(w), (x) = getcurx(w)
                    238: #define getbegyx(w, y, x)      (y) = getbegy(w), (x) = getbegx(w)
                    239: #define getmaxyx(w, y, x)      (y) = getmaxy(w), (x) = getmaxx(w)
                    240: #define getcury(w)             ((w)->cury)
                    241: #define getcurx(w)             ((w)->curx)
                    242: #define getbegy(w)             ((w)->begy)
                    243: #define getbegx(w)             ((w)->begx)
                    244: #define getmaxy(w)             ((w)->maxy)
                    245: #define getmaxx(w)             ((w)->maxx)
1.4       mycroft   246:
                    247: /* Public function prototypes. */
1.14      jtc       248: __BEGIN_DECLS
1.4       mycroft   249: int     box __P((WINDOW *, int, int));
                    250: int     cbreak __P((void));
                    251: int     delwin __P((WINDOW *));
                    252: int     echo __P((void));
                    253: int     endwin __P((void));
                    254: char   *fullname __P((char *, char *));
                    255: char   *getcap __P((char *));
                    256: int     gettmode __P((void));
                    257: void    idlok __P((WINDOW *, int));
                    258: WINDOW *initscr __P((void));
                    259: char   *longname __P((char *, char *));
                    260: int     mvcur __P((int, int, int, int));
                    261: int     mvprintw __P((int, int, const char *, ...));
                    262: int     mvscanw __P((int, int, const char *, ...));
                    263: int     mvwin __P((WINDOW *, int, int));
                    264: int     mvwprintw __P((WINDOW *, int, int, const char *, ...));
                    265: int     mvwscanw __P((WINDOW *, int, int, const char *, ...));
                    266: WINDOW *newwin __P((int, int, int, int));
                    267: int     nl __P((void));
                    268: int     nocbreak __P((void));
                    269: int     noecho __P((void));
                    270: int     nonl __P((void));
                    271: int     noraw __P((void));
                    272: int     overlay __P((WINDOW *, WINDOW *));
                    273: int     overwrite __P((WINDOW *, WINDOW *));
                    274: int     printw __P((const char *, ...));
                    275: int     raw __P((void));
                    276: int     resetty __P((void));
                    277: int     savetty __P((void));
                    278: int     scanw __P((const char *, ...));
                    279: int     scroll __P((WINDOW *));
                    280: int     setterm __P((char *));
1.7       cgd       281: int     sscans __P((WINDOW *, const char *, ...));
1.4       mycroft   282: WINDOW *subwin __P((WINDOW *, int, int, int, int));
                    283: int     suspendwin __P((void));
                    284: int     touchline __P((WINDOW *, int, int, int));
                    285: int     touchoverlap __P((WINDOW *, WINDOW *));
                    286: int     touchwin __P((WINDOW *));
1.12      cgd       287: int     vwprintw __P((WINDOW *, const char *, _BSD_VA_LIST_));
                    288: int      vwscanw __P((WINDOW *, const char *, _BSD_VA_LIST_));
1.4       mycroft   289: int     waddch __P((WINDOW *, int));
1.7       cgd       290: int     waddnstr __P((WINDOW *, const char *, int));
1.4       mycroft   291: int     wclear __P((WINDOW *));
                    292: int     wclrtobot __P((WINDOW *));
                    293: int     wclrtoeol __P((WINDOW *));
                    294: int     wdelch __P((WINDOW *));
                    295: int     wdeleteln __P((WINDOW *));
                    296: int     werase __P((WINDOW *));
                    297: int     wgetch __P((WINDOW *));
                    298: int     wgetstr __P((WINDOW *, char *));
                    299: int     winsch __P((WINDOW *, int));
                    300: int     winsertln __P((WINDOW *));
                    301: int     wmove __P((WINDOW *, int, int));
                    302: int     wprintw __P((WINDOW *, const char *, ...));
                    303: int     wrefresh __P((WINDOW *));
                    304: int     wscanw __P((WINDOW *, const char *, ...));
1.13      cgd       305: int     wstandend __P((WINDOW *));
                    306: int     wstandout __P((WINDOW *));
1.12      cgd       307: int     vwprintw __P((WINDOW *, const char *, _BSD_VA_LIST_));
1.4       mycroft   308:
1.7       cgd       309: /* Private functions that are needed for user programs prototypes. */
                    310: void    __cputchar __P((int));
                    311: int     __waddbytes __P((WINDOW *, const char *, int, int));
1.14      jtc       312: __END_DECLS
1.7       cgd       313:
                    314: /* Private functions. */
1.4       mycroft   315: #ifdef _CURSES_PRIVATE
1.7       cgd       316: void    __CTRACE __P((const char *, ...));
1.16      jtc       317: unsigned int __hash __P((char *, int));
1.4       mycroft   318: void    __id_subwins __P((WINDOW *));
1.7       cgd       319: int     __mvcur __P((int, int, int, int, int));
                    320: void    __restore_stophandler __P((void));
                    321: void    __set_stophandler __P((void));
1.4       mycroft   322: void    __set_subwin __P((WINDOW *, WINDOW *));
1.7       cgd       323: void    __startwin __P((void));
                    324: void    __stop_signal_handler __P((int));
1.4       mycroft   325: void    __swflags __P((WINDOW *));
1.7       cgd       326: int     __touchline __P((WINDOW *, int, int, int, int));
                    327: int     __touchwin __P((WINDOW *));
1.13      cgd       328: char   *__tscroll __P((const char *, int, int));
1.7       cgd       329: int     __waddch __P((WINDOW *, __LDATA *));
1.19      phil      330: int     __stopwin __P((void));
                    331: void    __restartwin __P((void));
1.4       mycroft   332:
                    333: /* Private #defines. */
                    334: #define        min(a,b)        (a < b ? a : b)
                    335: #define        max(a,b)        (a > b ? a : b)
                    336:
                    337: /* Private externs. */
                    338: extern int      __echoit;
                    339: extern int      __endwin;
                    340: extern int      __pfast;
                    341: extern int      __rawmode;
1.7       cgd       342: extern int      __noqch;
1.1       cgd       343: #endif
                    344:
1.4       mycroft   345: #endif /* !_CURSES_H_ */

CVSweb <webmaster@jp.NetBSD.org>