BSD 4_3_Reno release
[unix-history] / usr / src / lib / libcurses / curses.h
index 099b851..33a07a2 100644 (file)
@@ -1,27 +1,50 @@
-/* %G% (Berkeley) @(#)curses.h 1.4 */
-# ifndef WINDOW
+/*
+ * Copyright (c) 1981 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted provided
+ * that: (1) source distributions retain this entire copyright notice and
+ * comment, and (2) distributions including binaries display the following
+ * acknowledgement:  ``This product includes software developed by the
+ * University of California, Berkeley and its contributors'' in the
+ * documentation or other materials provided with the distribution and in
+ * all advertising materials mentioning features or use of this software.
+ * Neither the name of the University nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *     @(#)curses.h    5.9 (Berkeley) 7/1/90
+ */
+
+#ifndef WINDOW
 
 
-# include      <stdio.h>
+#include       <stdio.h>
  
  
-# include      <sgtty.h>
+#define USE_OLD_TTY
+#include       <sys/ioctl.h>
+#undef USE_OLD_TTY
 
 
-# define       bool    char
-# define       reg     register
+#define        bool    char
+#define        reg     register
 
 
-# define       TRUE    (1)
-# define       FALSE   (0)
-# define       ERR     (0)
-# define       OK      (1)
+#define        TRUE    (1)
+#define        FALSE   (0)
+#define        ERR     (0)
+#define        OK      (1)
 
 
-# define       _SUBWIN         01
-# define       _ENDLINE        02
-# define       _FULLWIN        04
-# define       _SCROLLWIN      010
-# define       _FLUSH          020
-# define       _STANDOUT       0200
-# define       _NOCHANGE       -1
+#define        _ENDLINE        001
+#define        _FULLWIN        002
+#define        _SCROLLWIN      004
+#define        _FLUSH          010
+#define        _FULLLINE       020
+#define        _IDLINE         040
+#define        _STANDOUT       0200
+#define        _NOCHANGE       -1
 
 
-# define       _puts(s)        tputs(s, 0, _putchar);
+#define        _puts(s)        tputs(s, 0, _putchar)
 
 typedef        struct sgttyb   SGTTY;
 
 
 typedef        struct sgttyb   SGTTY;
 
@@ -29,33 +52,39 @@ typedef     struct sgttyb   SGTTY;
  * Capabilities from termcap
  */
 
  * Capabilities from termcap
  */
 
-bool   AM, BS, CA, DA, DB, EO, GT, HZ, IN, MI, MS, NC, OS, UL, XN;
-char    *AL, *BC, *BT, *CD, *CE, *CL, *CM, *DC, *DL, *DM, *DO, *ED,
-       *EI, *HO, *IC, *IM, *IP, *LL, *MA, *ND, *SE, *SF, *SO, *SR,
-       *TA, *TE, *TI, *UC, *UE, *UP, *US, *VB, *VE, *VS, PC;
+extern bool     AM, BS, CA, DA, DB, EO, HC, HZ, IN, MI, MS, NC, NS, OS, UL,
+               XB, XN, XT, XS, XX;
+extern char    *AL, *BC, *BT, *CD, *CE, *CL, *CM, *CR, *CS, *DC, *DL,
+               *DM, *DO, *ED, *EI, *K0, *K1, *K2, *K3, *K4, *K5, *K6,
+               *K7, *K8, *K9, *HO, *IC, *IM, *IP, *KD, *KE, *KH, *KL,
+               *KR, *KS, *KU, *LL, *MA, *ND, *NL, *RC, *SC, *SE, *SF,
+               *SO, *SR, *TA, *TE, *TI, *UC, *UE, *UP, *US, *VB, *VS,
+               *VE, *AL_PARM, *DL_PARM, *UP_PARM, *DOWN_PARM,
+               *LEFT_PARM, *RIGHT_PARM;
+extern char    PC;
 
 /*
  * From the tty modes...
  */
 
 
 /*
  * From the tty modes...
  */
 
-bool   NONL, UPPERCASE;
-
-bool   normtty, _pfast;
+extern bool    GT, NONL, UPPERCASE, normtty, _pfast;
 
 struct _win_st {
 
 struct _win_st {
-       short   _cury, _curx;
-       short   _maxy, _maxx;
-       short   _begy, _begx;
-       short   _flags;
-       bool    _clear;
-       bool    _leave;
-       bool    _scroll;
-       char    **_y;
-       short   *_firstch;
-       short   *_lastch;
+       short           _cury, _curx;
+       short           _maxy, _maxx;
+       short           _begy, _begx;
+       short           _flags;
+       short           _ch_off;
+       bool            _clear;
+       bool            _leave;
+       bool            _scroll;
+       char            **_y;
+       short           *_firstch;
+       short           *_lastch;
+       struct _win_st  *_nextp, *_orig;
 };
 
 };
 
-# define       WINDOW  struct _win_st
+#define        WINDOW  struct _win_st
 
 extern bool    My_term, _echoit, _rawmode, _endwin;
 
 
 extern bool    My_term, _echoit, _rawmode, _endwin;
 
@@ -63,53 +92,64 @@ extern char *Def_term, ttytype[];
 
 extern int     LINES, COLS, _tty_ch, _res_flg;
 
 
 extern int     LINES, COLS, _tty_ch, _res_flg;
 
-SGTTY          _tty;
+extern SGTTY   _tty;
 
 
-WINDOW         *stdscr, *curscr;
+extern WINDOW  *stdscr, *curscr;
 
 /*
  *     Define VOID to stop lint from generating "null effect"
  * comments.
  */
 
 /*
  *     Define VOID to stop lint from generating "null effect"
  * comments.
  */
-# ifdef lint
+#ifdef lint
 int    __void__;
 int    __void__;
-# define       VOID(x) (__void__ = (int) (x))
-# else
-# define       VOID(x) (x)
-# endif
+#define        VOID(x) (__void__ = (int) (x))
+#else
+#define        VOID(x) (x)
+#endif
 
 /*
  * psuedo functions for standard screen
  */
 
 /*
  * psuedo functions for standard screen
  */
-# define       addch(ch)       VOID(waddch(stdscr, ch))
-# define       getch()         VOID(wgetch(stdscr))
-# define       addstr(str)     VOID(waddstr(stdscr, str))
-# define       getstr(str)     VOID(wgetstr(stdscr, str))
-# define       move(y, x)      VOID(wmove(stdscr, y, x))
-# define       clear()         VOID(wclear(stdscr))
-# define       erase()         VOID(werase(stdscr))
-# define       clrtobot()      VOID(wclrtobot(stdscr))
-# define       clrtoeol()      VOID(wclrtoeol(stdscr))
-# define       insertln()      VOID(winsertln(stdscr))
-# define       deleteln()      VOID(wdeleteln(stdscr))
-# define       refresh()       VOID(wrefresh(stdscr))
-# define       inch()          VOID(winch(stdscr))
-# define       standout()      VOID(wstandout(stdscr))
-# define       standend()      VOID(wstandend(stdscr))
+#define        addch(ch)       VOID(waddch(stdscr, ch))
+#define        getch()         VOID(wgetch(stdscr))
+#define        addbytes(da,co) VOID(waddbytes(stdscr, da,co))
+#define        addstr(str)     VOID(waddbytes(stdscr, str, strlen(str)))
+#define        getstr(str)     VOID(wgetstr(stdscr, str))
+#define        move(y, x)      VOID(wmove(stdscr, y, x))
+#define        clear()         VOID(wclear(stdscr))
+#define        erase()         VOID(werase(stdscr))
+#define        clrtobot()      VOID(wclrtobot(stdscr))
+#define        clrtoeol()      VOID(wclrtoeol(stdscr))
+#define        insertln()      VOID(winsertln(stdscr))
+#define        deleteln()      VOID(wdeleteln(stdscr))
+#define        refresh()       VOID(wrefresh(stdscr))
+#define        inch()          VOID(winch(stdscr))
+#define        insch(c)        VOID(winsch(stdscr,c))
+#define        delch()         VOID(wdelch(stdscr))
+#define        standout()      VOID(wstandout(stdscr))
+#define        standend()      VOID(wstandend(stdscr))
 
 /*
  * mv functions
  */
 #define        mvwaddch(win,y,x,ch)    VOID(wmove(win,y,x)==ERR?ERR:waddch(win,ch))
 #define        mvwgetch(win,y,x)       VOID(wmove(win,y,x)==ERR?ERR:wgetch(win))
 
 /*
  * mv functions
  */
 #define        mvwaddch(win,y,x,ch)    VOID(wmove(win,y,x)==ERR?ERR:waddch(win,ch))
 #define        mvwgetch(win,y,x)       VOID(wmove(win,y,x)==ERR?ERR:wgetch(win))
-#define        mvwaddstr(win,y,x,str)  VOID(wmove(win,y,x)==ERR?ERR:waddstr(win,str))
-#define        mvwgetstr(win,y,x)      VOID(wmove(win,y,x)==ERR?ERR:wgetstr(win))
+#define        mvwaddbytes(win,y,x,da,co) \
+               VOID(wmove(win,y,x)==ERR?ERR:waddbytes(win,da,co))
+#define        mvwaddstr(win,y,x,str) \
+               VOID(wmove(win,y,x)==ERR?ERR:waddbytes(win,str,strlen(str)))
+#define mvwgetstr(win,y,x,str)  VOID(wmove(win,y,x)==ERR?ERR:wgetstr(win,str))
 #define        mvwinch(win,y,x)        VOID(wmove(win,y,x) == ERR ? ERR : winch(win))
 #define        mvwinch(win,y,x)        VOID(wmove(win,y,x) == ERR ? ERR : winch(win))
+#define        mvwdelch(win,y,x)       VOID(wmove(win,y,x) == ERR ? ERR : wdelch(win))
+#define        mvwinsch(win,y,x,c)     VOID(wmove(win,y,x) == ERR ? ERR:winsch(win,c))
 #define        mvaddch(y,x,ch)         mvwaddch(stdscr,y,x,ch)
 #define        mvgetch(y,x)            mvwgetch(stdscr,y,x)
 #define        mvaddch(y,x,ch)         mvwaddch(stdscr,y,x,ch)
 #define        mvgetch(y,x)            mvwgetch(stdscr,y,x)
+#define        mvaddbytes(y,x,da,co)   mvwaddbytes(stdscr,y,x,da,co)
 #define        mvaddstr(y,x,str)       mvwaddstr(stdscr,y,x,str)
 #define        mvaddstr(y,x,str)       mvwaddstr(stdscr,y,x,str)
-#define        mvgetstr(y,x)           mvwgetstr(stdscr,y,x)
-#define        mvinch(y,x)             mvwinch(win,y,x)
+#define mvgetstr(y,x,str)       mvwgetstr(stdscr,y,x,str)
+#define        mvinch(y,x)             mvwinch(stdscr,y,x)
+#define        mvdelch(y,x)            mvwdelch(stdscr,y,x)
+#define        mvinsch(y,x,c)          mvwinsch(stdscr,y,x,c)
 
 /*
  * psuedo functions
 
 /*
  * psuedo functions
@@ -120,20 +160,44 @@ int       __void__;
 #define        scrollok(win,bf) (win->_scroll = bf)
 #define flushok(win,bf)         (bf ? (win->_flags |= _FLUSH):(win->_flags &= ~_FLUSH))
 #define        getyx(win,y,x)   y = win->_cury, x = win->_curx
 #define        scrollok(win,bf) (win->_scroll = bf)
 #define flushok(win,bf)         (bf ? (win->_flags |= _FLUSH):(win->_flags &= ~_FLUSH))
 #define        getyx(win,y,x)   y = win->_cury, x = win->_curx
-#define        winch(win)       (win->_y[win->_cury][win->_curx])
-
-#define raw()   (_tty.sg_flags|=RAW, _pfast=_rawmode=TRUE, stty(_tty_ch,&_tty))
-#define noraw()         (_tty.sg_flags&=~RAW,_rawmode=FALSE,_pfast=!(_tty.sg_flags&CRMOD),stty(_tty_ch,&_tty))
-#define crmode() (_tty.sg_flags |= CBREAK, _rawmode = TRUE, stty(_tty_ch,&_tty))
-#define nocrmode() (_tty.sg_flags &= ~CBREAK,_rawmode=FALSE,stty(_tty_ch,&_tty))
-#define echo()  (_tty.sg_flags |= ECHO, _echoit = TRUE, stty(_tty_ch, &_tty))
-#define noecho() (_tty.sg_flags &= ~ECHO, _echoit = FALSE, stty(_tty_ch, &_tty))
-#define nl()    (_tty.sg_flags |= CRMOD,_pfast = _rawmode,stty(_tty_ch, &_tty))
-#define nonl()  (_tty.sg_flags &= ~CRMOD, _pfast = TRUE, stty(_tty_ch, &_tty))
-#define        savetty() (gtty(_tty_ch, &_tty), _res_flg = _tty.sg_flags)
-#define        resetty() (_tty.sg_flags = _res_flg, stty(_tty_ch, &_tty))
+#define        winch(win)       (win->_y[win->_cury][win->_curx] & 0177)
+
+#define raw()   (_tty.sg_flags|=RAW, _pfast=_rawmode=TRUE, \
+       ioctl(_tty_ch, TIOCSETP, &_tty))
+#define noraw()         (_tty.sg_flags&=~RAW,_rawmode=FALSE,\
+       _pfast=!(_tty.sg_flags&CRMOD),ioctl(_tty_ch, TIOCSETP, &_tty))
+#define cbreak() (_tty.sg_flags |= CBREAK, _rawmode = TRUE, \
+       ioctl(_tty_ch, TIOCSETP, &_tty))
+#define nocbreak() (_tty.sg_flags &= ~CBREAK,_rawmode=FALSE, \
+       ioctl(_tty_ch, TIOCSETP, &_tty))
+#define crmode() cbreak()      /* backwards compatability */
+#define nocrmode() nocbreak()  /* backwards compatability */
+#define echo()  (_tty.sg_flags |= ECHO, _echoit = TRUE, \
+       ioctl(_tty_ch, TIOCSETP, &_tty))
+#define noecho() (_tty.sg_flags &= ~ECHO, _echoit = FALSE, \
+       ioctl(_tty_ch, TIOCSETP, &_tty))
+#define nl()    (_tty.sg_flags |= CRMOD,_pfast = _rawmode, \
+       ioctl(_tty_ch, TIOCSETP, &_tty))
+#define nonl()  (_tty.sg_flags &= ~CRMOD, _pfast = TRUE, \
+       ioctl(_tty_ch, TIOCSETP, &_tty))
+#define        savetty() ((void) ioctl(_tty_ch, TIOCGETP, &_tty), \
+       _res_flg = _tty.sg_flags)
+#define        resetty() (_tty.sg_flags = _res_flg, \
+       _echoit = ((_res_flg & ECHO) == ECHO), \
+       _rawmode = ((_res_flg & (CBREAK|RAW)) != 0), \
+       _pfast = ((_res_flg & CRMOD) ? _rawmode : TRUE), \
+       (void) ioctl(_tty_ch, TIOCSETP, &_tty))
+
+#define        erasechar()     (_tty.sg_erase)
+#define        killchar()      (_tty.sg_kill)
+#define baudrate()     (_tty.sg_ospeed)
 
 WINDOW *initscr(), *newwin(), *subwin();
 
 WINDOW *initscr(), *newwin(), *subwin();
-char   *longname();
+char   *longname(), *getcap();
 
 
-# endif
+/*
+ * Used to be in unctrl.h.
+ */
+#define        unctrl(c)       _unctrl[(c) & 0177]
+extern char *_unctrl[];
+#endif