/* 5/15/81 (Berkeley) @(#)curses.h 1.8 */ /* @(#)curses.h 1.20 (MRH) 3/16/83 */ #ifndef WINDOW # ifndef NONSTANDARD # include <stdio.h> /* * This trick is used to distinguish between USG and V7 systems. * We assume that L_ctermid is only defined in stdio.h in USG * systems, but not in V7 or Berkeley UNIX. */ # ifdef L_ctermid # define USG # endif # include <unctrl.h> # ifdef USG # include <termio.h> typedef struct termio SGTTY; # else # include <sgtty.h> typedef struct sgttyb SGTTY; # endif # else NONSTANDARD /* * NONSTANDARD is intended for a standalone program (no UNIX) * that manages screens. The specific program is Alan Hewett's * ITC, which runs standalone on an 11/23 (at least for now). * It is unclear whether this code needs to be supported anymore. */ # define NULL 0 # endif NONSTANDARD # define bool char # define reg register /* * chtype is the type used to store a character together with attributes. * It can be set to "char" to save space, or "long" to get more attributes. */ # ifdef CHTYPE typedef CHTYPE chtype; # else typedef unsigned short chtype; # endif CHTYPE # define TRUE (1) # define FALSE (0) # define ERR (-1) # define OK (0) # define _SUBWIN 01 # define _ENDLINE 02 # define _FULLWIN 04 # define _SCROLLWIN 010 # define _FLUSH 020 # define _ISPAD 040 # define _STANDOUT 0200 # define _NOCHANGE -1 struct _win_st { short _cury, _curx; short _maxy, _maxx; short _begy, _begx; short _flags; chtype _attrs; bool _clear; bool _leave; bool _scroll; bool _use_idl; bool _use_keypad; /* 0=no, 1=yes, 2=yes/timeout */ bool _use_meta; /* T=use the meta key */ bool _nodelay; /* T=don't wait for tty input */ chtype **_y; short *_firstch; short *_lastch; short _tmarg,_bmarg; }; extern int LINES, COLS; typedef struct _win_st WINDOW; extern WINDOW *stdscr, *curscr; extern char *Def_term, ttytype[]; typedef struct screen SCREEN; # ifndef NOMACROS # ifndef MINICURSES /* * psuedo functions for standard screen */ # define addch(ch) waddch(stdscr, ch) # define getch() wgetch(stdscr) # define addstr(str) waddstr(stdscr, str) # define getstr(str) wgetstr(stdscr, str) # define move(y, x) wmove(stdscr, y, x) # define clear() wclear(stdscr) # define erase() werase(stdscr) # define clrtobot() wclrtobot(stdscr) # define clrtoeol() wclrtoeol(stdscr) # define insertln() winsertln(stdscr) # define deleteln() wdeleteln(stdscr) # define refresh() wrefresh(stdscr) # define inch() winch(stdscr) # define insch(c) winsch(stdscr,c) # define delch() wdelch(stdscr) # define standout() wstandout(stdscr) # define standend() wstandend(stdscr) # define attron(at) wattron(stdscr,at) # define attroff(at) wattroff(stdscr,at) # define attrset(at) wattrset(stdscr,at) # define setscrreg(t,b) wsetscrreg(stdscr, t, b) # define wsetscrreg(win,t,b) (win->_tmarg=(t),win->_bmarg=(b)) /* * mv functions */ #define mvwaddch(win,y,x,ch) (wmove(win,y,x)==ERR?ERR:waddch(win,ch)) #define mvwgetch(win,y,x) (wmove(win,y,x)==ERR?ERR:wgetch(win)) #define mvwaddstr(win,y,x,str) (wmove(win,y,x)==ERR?ERR:waddstr(win,str)) #define mvwgetstr(win,y,x,str) (wmove(win,y,x)==ERR?ERR:wgetstr(win,str)) #define mvwinch(win,y,x) (wmove(win,y,x)==ERR?ERR:winch(win)) #define mvwdelch(win,y,x) (wmove(win,y,x)==ERR?ERR:wdelch(win)) #define mvwinsch(win,y,x,c) (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 mvaddstr(y,x,str) mvwaddstr(stdscr,y,x,str) #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) # else MINICURSES # define addch(ch) m_addch(ch) # define addstr(str) m_addstr(str) # define move(y, x) m_move(y, x) # define clear() m_clear() # define erase() m_erase() # define refresh() m_refresh() # define standout() wstandout(stdscr) # define standend() wstandend(stdscr) # define attron(at) wattron(stdscr,at) # define attroff(at) wattroff(stdscr,at) # define attrset(at) wattrset(stdscr,at) # define mvaddch(y,x,ch) move(y, x), addch(ch) # define mvaddstr(y,x,str) move(y, x), addstr(str) # define initscr m_initscr # define newterm m_newterm /* * These functions don't exist in minicurses, so we define them * to nonexistent functions to help the user catch the error. */ #define getch m_getch #define getstr m_getstr #define clrtobot m_clrtobot #define clrtoeol m_clrtoeol #define insertln m_insertln #define deleteln m_deleteln #define inch m_inch #define insch m_insch #define delch m_delch /* mv functions that aren't valid */ #define mvwaddch m_mvwaddch #define mvwgetch m_mvwgetch #define mvwaddstr m_mvaddstr #define mvwgetstr m_mvwgetstr #define mvwinch m_mvwinch #define mvwdelch m_mvwdelch #define mvwinsch m_mvwinsch #define mvgetch m_mvwgetch #define mvgetstr m_mvwgetstr #define mvinch m_mvwinch #define mvdelch m_mvwdelch #define mvinsch m_mvwinsch /* Real functions that aren't valid */ #define box m_box #define delwin m_delwin #define longname m_longname #define makenew m_makenew #define mvprintw m_mvprintw #define mvscanw m_mvscanw #define mvwin m_mvwin #define mvwprintw m_mvwprintw #define mvwscanw m_mvwscanw #define newwin m_newwin #define _outchar m_outchar #define overlay m_overlay #define overwrite m_overwrite #define printw m_printw #define putp m_putp #define scanw m_scanw #define scroll m_scroll #define subwin m_subwin #define touchwin m_touchwin #define _tscroll m_tscroll #define _tstp m_tstp #define vidattr m_vidattr #define waddch m_waddch #define waddstr m_waddstr #define wclear m_wclear #define wclrtobot m_wclrtobot #define wclrtoeol m_wclrtoeol #define wdelch m_wdelch #define wdeleteln m_wdeleteln #define werase m_werase #define wgetch m_wgetch #define wgetstr m_wgetstr #define winsch m_winsch #define winsertln m_winsertln #define wmove m_wmove #define wprintw m_wprintw #define wrefresh m_wrefresh #define wscanw m_wscanw #define setscrreg m_setscrreg #define wsetscrreg m_wsetscrreg # endif MINICURSES /* * psuedo functions */ #define getyx(win,y,x) y = win->_cury, x = win->_curx #define winch(win) (win->_y[win->_cury][win->_curx]) WINDOW *initscr(), *newwin(), *subwin(), *newpad(); char *longname(); char erasechar(), killchar(); int wgetch(); /* because it can return KEY_*, for instance. */ SCREEN *newterm(); /* Various video attributes */ #define A_STANDOUT 0000200 #define A_UNDERLINE 0000400 #define A_REVERSE 0001000 #define A_BLINK 0002000 #define A_DIM 0004000 #define A_BOLD 0010000 /* The next three are subject to change (perhaps to colors) so don't depend on them */ #define A_INVIS 0020000 #define A_PROTECT 0040000 #define A_ALTCHARSET 0100000 #define A_NORMAL 0000000 #define A_ATTRIBUTES 0377600 #define A_CHARTEXT 0000177 /* Funny "characters" enabled for various special function keys for input */ #define KEY_BREAK 0401 /* break key (unreliable) */ #define KEY_DOWN 0402 /* The four arrow keys ... */ #define KEY_UP 0403 #define KEY_LEFT 0404 #define KEY_RIGHT 0405 /* ... */ #define KEY_HOME 0406 /* Home key (upward+left arrow) */ #define KEY_BACKSPACE 0407 /* backspace (unreliable) */ #define KEY_F0 0410 /* Function keys. Space for 64 */ #define KEY_F(n) (KEY_F0+(n)) /* keys is reserved. */ #define KEY_DL 0510 /* Delete line */ #define KEY_IL 0511 /* Insert line */ #define KEY_DC 0512 /* Delete character */ #define KEY_IC 0513 /* Insert char or enter insert mode */ #define KEY_EIC 0514 /* Exit insert char mode */ #define KEY_CLEAR 0515 /* Clear screen */ #define KEY_EOS 0516 /* Clear to end of screen */ #define KEY_EOL 0517 /* Clear to end of line */ #define KEY_SF 0520 /* Scroll 1 line forward */ #define KEY_SR 0521 /* Scroll 1 line backwards (reverse) */ #define KEY_NPAGE 0522 /* Next page */ #define KEY_PPAGE 0523 /* Previous page */ #define KEY_STAB 0524 /* Set tab */ #define KEY_CTAB 0525 /* Clear tab */ #define KEY_CATAB 0526 /* Clear all tabs */ #define KEY_ENTER 0527 /* Enter or send (unreliable) */ #define KEY_SRESET 0530 /* soft (partial) reset (unreliable) */ #define KEY_RESET 0531 /* reset or hard reset (unreliable) */ #define KEY_PRINT 0532 /* print or copy */ #define KEY_LL 0533 /* home down or bottom (lower left) */ /* The keypad is arranged like this: */ /* a1 up a3 */ /* left b2 right */ /* c1 down c3 */ #define KEY_A1 0534 /* upper left of keypad */ #define KEY_A3 0535 /* upper right of keypad */ #define KEY_B2 0536 /* center of keypad */ #define KEY_C1 0537 /* lower left of keypad */ #define KEY_C3 0540 /* lower right of keypad */ # endif NOMACROS #endif WINDOW