# define bool char /* boolean variable */
# define reg register /* register varaible abbr. */
# define ERR (0) /* default return on error */
# define OK (1) /* default return on good run */
# define _SUBWIN 01 /* window is a subindow */
# define _ENDLINE 02 /* lines go to end of screen */
# define _FULLWIN 04 /* window is entire screen */
# define _SCROLLWIN 010 /* window could cause scroll */
# define _STANDOUT 0200 /* standout mode in effect */
# define _NOCHANGE -1 /* no change on this line */
# define _puts(s) tputs(s, 0, _putchar);
typedef struct sgttyb SGTTY
;
/* Copyright (c) 1979 Regents of the University of California */
* Capabilities from termcap
char *AL
; /* P* Add new blank line */
bool AM
; /* Automatic margins */
char *BC
; /* Back cursor */
bool BS
; /* Backspace works */
char *BT
; /* P Back tab */
bool CA
; /* Cursor addressible */
char *CD
; /* P* Clear to end of display */
char *CE
; /* P Clear to end of line */
char *CL
; /* P* Clear screen */
char *CM
; /* P Cursor motion */
bool DA
; /* Display may be retained above */
bool DB
; /* Display may be retained below */
char *DC
; /* P* Delete character */
char *DL
; /* P* Delete line sequence */
char *DM
; /* Delete mode (enter) */
char *DO
; /* Down line sequence */
char *ED
; /* End delete mode */
bool EO
; /* Can erase overstrikes with ' ' */
char *EI
; /* End insert mode */
bool GT
; /* Gtty indicates tabs */
char *HO
; /* Home cursor */
bool HZ
; /* Hazeltine ~ braindamage */
char *IC
; /* P Insert character */
bool IN
; /* Insert-null blessing */
char *IM
; /* Insrt mode (as ':im=:' if 'ic') */
char *IP
; /* P* pad after char ins'd using IM+IE */
char *LL
; /* Quick to last line, column 0 */
char *MA
; /* Ctrl character map for cmd mode */
bool MI
; /* can move in insert mode */
bool NC
; /* No Cr: \r sends \r\n then eats \n */
char *ND
; /* Non-destructive space */
bool OS
; /* Overstrike works */
char PC
; /* Pad character */
char *SE
; /* Standout end (may leave space) */
char *SF
; /* P Scroll forwards */
char *SO
; /* Stand out begin (may leave space) */
char *SR
; /* P Scroll backwards */
char *TA
; /* P Tab (not ^I or with padding) */
char *TE
; /* End sequence after TI */
char *TI
; /* Terminal Initialize */
char *UC
; /* Underline a single Character */
char *UE
; /* Underline End sequence */
bool UL
; /* Underlining works even though !os */
char *US
; /* Underline Start sequence */
char *VB
; /* Visible bell */
char *VE
; /* Visual end sequence */
char *VS
; /* Visual start sequence */
bool XN
; /* A newline gets eaten after wrap */
/* X? is reserved for severely nauseous glitches */
/* If there are enough of these we may need bit masks! */
bool NONL
; /* Term can't hack linefeeds doing a CR */
bool UPPERCASE
; /* Ick! */
bool normtty
; /* set if must normal mode from normf */
bool pfast
; /* Have stty -nl'ed to go faster */
# define WINDOW struct _win_st
struct _win_st
{ /* window description structure */
short _cury
, _curx
; /* current y,x positions */
short _maxy
, _maxx
; /* maximum y,x positions */
short _begy
, _begx
; /* start y,x positions */
short _flags
; /* various window flags */
bool _clear
; /* need to clear */
bool _leave
; /* leave curx,y at last update */
bool _scroll
; /* scrolls allowed */
char **_y
; /* actual window */
short *_firstch
; /* first change on line */
short *_lastch
; /* last change on line */
extern bool My_term
, /* set if user species terminal */
_echoit
, /* set if echoing characters */
_rawmode
; /* set if terminal in raw mode */
extern char *Def_term
, /* default terminal type */
ttytype
[]; /* long name of current terminal */
extern int LINES
, COLS
, /* number of lines and columns */
_tty_ch
, /* channel with tty on it */
_res_flg
; /* sgtty flags stored for reset */
FILE *outf
; /* error outfile */
SGTTY _tty
; /* tty structure */
WINDOW
*stdscr
, /* standard screen */
*curscr
; /* current screen */
* Define VOID to stop lint from generating "null effect"
int __void__
; /* place to assign to */
# define VOID(x) (__void__ = (int) (x))
* 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 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 mvwinch(win,y,x) VOID(wmove(win,y,x) == ERR ? ERR : winch(win))
#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) mvwgetstr(stdscr,y,x)
#define mvinch(y,x) mvwinch(win,y,x)
#define clearok(win,bf) (win->_clear = bf)
#define leaveok(win,bf) (win->_leave = bf)
#define scrollok(win,bf) (win->_scroll = bf)
#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,pfast=_rawmode=FALSE,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 = FALSE, 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))
WINDOW
*initscr(), *newwin();