/* structure to store contents of character based screen NOTE - do *not* use the system curses.h. This is an internal header. This header can be exported for use with an optional curses emulator. */ #include #include #include struct rowdata { unsigned char modc; /* first modified column this row */ signed char srow; /* screen row this data came from or -1 */ short data; /* offset in map of column data */ }; #define _curx ccol #define _cury crow #define _maxx cols #define _maxy rows typedef struct window { struct win *win; short rows; /* number of rows */ short cols; /* number of cols */ short prow; /* row in window of upper left corner */ short pcol; /* col in window of upper left corner */ short crow; /* cursor row */ short ccol; /* cursor column */ CHTYPE attr; /* current attributes */ CHTYPE far *data; /* screen data */ struct rowdata d[1]; /* array of data for rows */ } WINDOW; extern WINDOW *curscr; /* contents of physical screen */ extern WINDOW *stdscr; /* standard window for full screen */ WINDOW *newwin(/**/ int,int,int,int /**/); int delwin(/**/ WINDOW * /**/); void cdecl box(WINDOW *,...); int waddstr(WINDOW *,const char *); int wprintw(WINDOW *,const char *,...); int printw(const char *,...); int mvwprintw(WINDOW *,int,int,const char *,...); int wnoutrefresh(WINDOW *); int waddch(WINDOW *,CHTYPE); int getkey(void); int touchwin(WINDOW *); int mvwin(WINDOW *,int,int); int wclearall(WINDOW *,CHTYPE), wcleareol(WINDOW *,CHTYPE), wcleareos(WINDOW *,CHTYPE); int wdeleteln(WINDOW *), winsertln(WINDOW *); void winsch(WINDOW *,CHTYPE), wdelch(WINDOW *); int overwrite(WINDOW *,WINDOW *); int initscr(void), endwin(void); #define LINES PSrows #define COLS PScols #define doupdate() (PSsync(),OK) extern int PSrows, PScols; #define getmaxx(w) w->cols #define getmaxy(w) w->rows #define werase(w) wclear(w) #define wmove(w,r,c) ((w)->crow=(r),(w)->ccol=(c)) #define winchrc(w,r,c) (w)->data[(w)->d[r].data+(c)] #define winch(w) winchrc(w,(w)->crow,(w)->ccol) #define wrefresh(w) ((void)wnoutrefresh(w),doupdate()) #define wattroff(w,a) ((w)->attr &= ~(a)) #define wattron(w,a) ((w)->attr |= (a)) #define wattrset(w,a) ((w)->attr = (a)) #define wattrget(w) (w)->attr #define wclrtoeol(w) wcleareol(w,' ' /* | wattrget(w) */) #define wclrtoeos(w) wcleareos(w,' ' /* | wattrget(w) */) #define wclear(w) wclearall(w,' ' /* | wattrget(w) */) #define wstandout(w) wattron(w,A_STANDOUT) #define wstandend(w) wattroff(w,A_STANDOUT) #define attroff(a) wattron(stdscr,a) #define attron(a) wattron(stdscr,a) #define standout() wstandout(stdscr) #define standend() wstandout(stdscr) #define getyx(w,r,c) ((r)=(w)->crow,(c)=(w)->ccol) #define addch(c) waddch(stdscr,c) #define delch() wdelch(stdscr) #define insch(c) winsch(stdscr,c) #define deleteln() wdeleteln(stdscr) #define insertln() winsertln(stdscr) #define clear() wclear(stdscr) #define erase() werase(stdscr) #define addstr(s) waddstr(stdscr,s) #define move(r,c) wmove(stdscr,r,c) #define inch() winch(stdscr) #define refresh() wrefresh(stdscr) #define mvaddstr(r,c,s) (move(r,c),addstr(s)) #define mvaddch(r,c,ch) (move(r,c),addch(ch)) #define mvinsch(r,c,ch) (move(r,c),insch(ch)) #define mvinch(r,c) (move(r,c),inch()) #define mvdelch(r,c) (move(r,c),delch()) #define mvwaddch(w,r,c,ch) (wmove(w,r,c),waddch(w,ch)) #define mvwaddstr(w,r,c,s) (wmove(w,r,c),waddstr(w,s)) #define mvwdelch(w,r,c) (wmove(w,r,c),wdelch(w)) #define mvwinsch(w,r,c,ch) (wmove(w,r,c),winsch(w,ch)) #define mvwinch(w,r,c) (wmove(w,r,c),winch(w)) #define clrtoeol() wclrtoeol(stdscr) #define clearok(x,y) #define subwin(w,r,c,br,bc) newwin(r,c,br,bc) #define cbreak() cmode(1)