diff options
author | svn2git <svn2git@FreeBSD.org> | 1994-07-01 08:00:00 +0000 |
---|---|---|
committer | svn2git <svn2git@FreeBSD.org> | 1994-07-01 08:00:00 +0000 |
commit | 5e0e9b99dc3fc0ecd49d929db0d57c784b66f481 (patch) | |
tree | e779b5a6edddbb949b7990751b12d6f25304ba86 /lib/libcurses | |
parent | a16f65c7d117419bd266c28a1901ef129a337569 (diff) |
Diffstat (limited to 'lib/libcurses')
-rw-r--r-- | lib/libcurses/Makefile | 3 | ||||
-rw-r--r-- | lib/libcurses/cr_put.c | 24 | ||||
-rw-r--r-- | lib/libcurses/curses.h | 1 | ||||
-rw-r--r-- | lib/libcurses/refresh.c | 42 | ||||
-rw-r--r-- | lib/libcurses/setterm.c | 27 | ||||
-rw-r--r-- | lib/libcurses/tstp.c | 8 | ||||
-rw-r--r-- | lib/libcurses/tty.c | 41 |
7 files changed, 95 insertions, 51 deletions
diff --git a/lib/libcurses/Makefile b/lib/libcurses/Makefile index 74baf7974571..b089a988b78a 100644 --- a/lib/libcurses/Makefile +++ b/lib/libcurses/Makefile @@ -9,7 +9,8 @@ SRCS= addbytes.c addch.c addnstr.c box.c clear.c clrtobot.c clrtoeol.c \ standout.c toucholap.c touchwin.c tscroll.c tstp.c tty.c unctrl.c MAN3= curses.3 -CFLAGS+=-D_CURSES_PRIVATE -I${.CURDIR} +CFLAGS+=-D_CURSES_PRIVATE +SHARED_LDADD+= -ltermcap beforeinstall: -cd ${.CURDIR}; cmp -s curses.h ${DESTDIR}/usr/include/curses.h > \ diff --git a/lib/libcurses/cr_put.c b/lib/libcurses/cr_put.c index b50875c91211..0afaf3a344d7 100644 --- a/lib/libcurses/cr_put.c +++ b/lib/libcurses/cr_put.c @@ -101,11 +101,11 @@ fgoto(in_refresh) while (l > 0) { if (__pfast) if (CR) - tputs(CR, 0, __cputchar); + tputs(CR, 1, __cputchar); else putchar('\r'); if (NL) - tputs(NL, 0, __cputchar); + tputs(NL, 1, __cputchar); else putchar('\n'); l--; @@ -146,7 +146,7 @@ fgoto(in_refresh) * Eggert's Superbee description which wins better. */ if (NL /* && !XB */ && __pfast) - tputs(NL, 0, __cputchar); + tputs(NL, 1, __cputchar); else putchar('\n'); l--; @@ -166,7 +166,7 @@ fgoto(in_refresh) if (outcol != COLS - 1 && plod(strlen(cgp), in_refresh) > 0) plod(0, in_refresh); else - tputs(cgp, 0, __cputchar); + tputs(cgp, 1, __cputchar); } else plod(0, in_refresh); outline = destline; @@ -243,7 +243,7 @@ plod(cnt, in_refresh) * Cheaper to home. Do it now and pretend it's a * regular local motion. */ - tputs(HO, 0, plodput); + tputs(HO, 1, plodput); outcol = outline = 0; } else if (LL) { /* @@ -252,7 +252,7 @@ plod(cnt, in_refresh) */ k = (LINES - 1) - destline; if (i + k + 2 < j && (k <= 0 || UP)) { - tputs(LL, 0, plodput); + tputs(LL, 1, plodput); outcol = 0; outline = LINES - 1; } @@ -302,12 +302,12 @@ plod(cnt, in_refresh) * into account. */ if (CR) - tputs(CR, 0, plodput); + tputs(CR, 1, plodput); else plodput('\r'); if (NC) { if (NL) - tputs(NL, 0, plodput); + tputs(NL, 1, plodput); else plodput('\n'); outline++; @@ -318,7 +318,7 @@ plod(cnt, in_refresh) dontcr: while (outline < destline) { outline++; if (NL) - tputs(NL, 0, plodput); + tputs(NL, 1, plodput); else plodput('\n'); if (plodcnt < 0) @@ -333,7 +333,7 @@ dontcr: while (outline < destline) { goto out; #ifdef notdef if (BT && outcol - destcol > k + 4) { - tputs(BT, 0, plodput); + tputs(BT, 1, plodput); outcol--; outcol &= ~7; continue; @@ -357,14 +357,14 @@ dontcr: while (outline < destline) { if (i > destcol) break; if (TA) - tputs(TA, 0, plodput); + tputs(TA, 1, plodput); else plodput('\t'); outcol = i; } if (destcol - outcol > 4 && i < COLS && (BC || BS)) { if (TA) - tputs(TA, 0, plodput); + tputs(TA, 1, plodput); else plodput('\t'); outcol = i; diff --git a/lib/libcurses/curses.h b/lib/libcurses/curses.h index 14e82deac58a..fa68e08c79dc 100644 --- a/lib/libcurses/curses.h +++ b/lib/libcurses/curses.h @@ -199,6 +199,7 @@ typedef struct termios SGTTY; extern SGTTY __orig_termios; /* Terminal state before curses */ extern SGTTY __baset; /* Our base terminal state */ extern int __tcaction; /* If terminal hardware set. */ +extern int __tty_fileno; /* Terminal file descriptor */ extern int COLS; /* Columns on the screen. */ extern int LINES; /* Lines on the screen. */ diff --git a/lib/libcurses/refresh.c b/lib/libcurses/refresh.c index 1a371fe45b2a..b0a84b1dc4f2 100644 --- a/lib/libcurses/refresh.c +++ b/lib/libcurses/refresh.c @@ -76,7 +76,11 @@ wrefresh(win) if (win->flags & __CLEAROK || curscr->flags & __CLEAROK || curwin) { if ((win->flags & __FULLWIN) || curscr->flags & __CLEAROK) { - tputs(CL, 0, __cputchar); + if (curscr->flags & __WSTANDOUT) { + tputs(SE, 0, __cputchar); + curscr->flags &= ~__WSTANDOUT; + } + tputs(CL, win->maxy, __cputchar); ly = 0; lx = 0; if (!curwin) { @@ -266,9 +270,9 @@ makech(win, wy) if (force) { if (CM) - tputs(tgoto(CM, lx, ly), 0, __cputchar); + tputs(tgoto(CM, lx, ly), 1, __cputchar); else { - tputs(HO, 0, __cputchar); + tputs(HO, 1, __cputchar); __mvcur(0, 0, ly, lx, 1); } } @@ -298,7 +302,7 @@ makech(win, wy) && wx <= lch) { if (ce != NULL && win->maxx + win->begx == - curscr->maxx && wx >= nlsp && nsp->ch == ' ') { + curscr->maxx && wx >= nlsp && nsp->ch == ' ' && nsp->attr == 0) { /* Check for clear to end-of-line. */ cep = &curscr->lines[win->begy + wy]->line[win->begx + win->maxx - 1]; while (cep->ch == ' ' && cep->attr == 0) @@ -315,7 +319,11 @@ makech(win, wy) #ifdef DEBUG __CTRACE("makech: using CE\n"); #endif - tputs(CE, 0, __cputchar); + if (curscr->flags & __WSTANDOUT) { + tputs(SE, 0, __cputchar); + curscr->flags &= ~__WSTANDOUT; + } + tputs(CE, 1, __cputchar); lx = wx + win->begx; while (wx++ <= clsp) { csp->ch = ' '; @@ -695,37 +703,37 @@ scrolln(starts, startw, curs, bot, top) __mvcur(oy, ox, top, 0, 1); /* Scroll up the block */ if (DL && (!dl || n > 1)) - tputs(__tscroll(DL, n), 0, __cputchar); + tputs(__tscroll(DL, n), n, __cputchar); else for(i = 0; i < n; i++) - tputs(dl, 0, __cputchar); + tputs(dl, 1, __cputchar); /* * Push down the bottom region. */ __mvcur(top, 0, bot - n + 1, 0, 1); if (AL && (!al || n > 1)) - tputs(__tscroll(AL, n), 0, __cputchar); + tputs(__tscroll(AL, n), n, __cputchar); else for(i = 0; i < n; i++) - tputs(al, 0, __cputchar); + tputs(al, 1, __cputchar); __mvcur(bot - n + 1, 0, oy, ox, 1); } else { /* Preserve the bottom lines */ __mvcur(oy, ox, bot + n + 1, 0, 1); /* n < 0 */ if (DL && (!dl || -n > 1)) - tputs(__tscroll(DL, -n), 0, __cputchar); + tputs(__tscroll(DL, -n), -n, __cputchar); else for(i = n; i < 0; i++) - tputs(dl, 0, __cputchar); + tputs(dl, 1, __cputchar); __mvcur(bot + n + 1, 0, top, 0, 1); /* Scroll the block down */ if (AL && (!al || -n > 1)) - tputs(__tscroll(AL, -n), 0, __cputchar); + tputs(__tscroll(AL, -n), -n, __cputchar); else for(i = n; i < 0; i++) - tputs(al, 0, __cputchar); + tputs(al, 1, __cputchar); __mvcur(top, 0, oy, ox, 1); } } else { /* Use change scroll region */ @@ -735,11 +743,11 @@ scrolln(starts, startw, curs, bot, top) __mvcur(oy, ox, bot, 0, 1); /* Scroll up the block */ if (SF && n > 1) - tputs(__tscroll(SF, n), 0, __cputchar); + tputs(__tscroll(SF, n), n, __cputchar); else for(i = 0; i < n; i++) if (NL && __pfast) - tputs(NL, 0, __cputchar); + tputs(NL, 1, __cputchar); else putchar('\n'); __mvcur(bot, 0, oy, ox, 1); @@ -747,10 +755,10 @@ scrolln(starts, startw, curs, bot, top) __mvcur(oy, ox, top, 0, 1); /* Scroll the block down */ if (SR && (!sr || -n > 1)) - tputs(__tscroll(SR, -n), 0, __cputchar); + tputs(__tscroll(SR, -n), -n, __cputchar); else for(i = n; i < 0; i++) - tputs(sr, 0, __cputchar); + tputs(sr, 1, __cputchar); __mvcur(top, 0, oy, ox, 1); } if (bot != curscr->maxy - 1 || top != 0) diff --git a/lib/libcurses/setterm.c b/lib/libcurses/setterm.c index 35e4e55b26d6..b949ae337843 100644 --- a/lib/libcurses/setterm.c +++ b/lib/libcurses/setterm.c @@ -35,6 +35,7 @@ static char sccsid[] = "@(#)setterm.c 8.3 (Berkeley) 1/2/94"; #endif /* not lint */ +#include <termios.h> #include <sys/ioctl.h> #include <curses.h> @@ -42,6 +43,9 @@ static char sccsid[] = "@(#)setterm.c 8.3 (Berkeley) 1/2/94"; #include <string.h> #include <unistd.h> +#undef ospeed +extern short ospeed; + static void zap __P((void)); static char *sflags[] = { @@ -149,6 +153,29 @@ setterm(type) CA = 1; PC = _PC ? _PC[0] : 0; + + switch(cfgetospeed(&__baset)) { + case B0: ospeed = 0; break; + case B50: ospeed = 1; break; + case B75: ospeed = 2; break; + case B110: ospeed = 3; break; + case B134: ospeed = 4; break; + case B150: ospeed = 5; break; + case B200: ospeed = 6; break; + case B300: ospeed = 7; break; + case B600: ospeed = 8; break; + case B1200: ospeed = 9; break; + case B1800: ospeed = 10; break; + case B2400: ospeed = 11; break; + case B4800: ospeed = 12; break; + case B9600: ospeed = 13; break; + case EXTA: ospeed = 14; break; + case EXTB: ospeed = 15; break; + case B57600: ospeed = 16; break; + default: + case B115200: ospeed = 17; break; + } + aoftspace = tspace; ttytype = longname(genbuf, __ttytype); diff --git a/lib/libcurses/tstp.c b/lib/libcurses/tstp.c index daac9174d745..164f10bdd8b0 100644 --- a/lib/libcurses/tstp.c +++ b/lib/libcurses/tstp.c @@ -54,8 +54,8 @@ __stop_signal_handler(signo) sigset_t oset, set; /* Get the current terminal state (which the user may have changed). */ - if (tcgetattr(STDIN_FILENO, &save)) - return; + if (tcgetattr(__tty_fileno, &save)) + return; /* * Block window change and timer signals. The latter is because @@ -87,10 +87,10 @@ __stop_signal_handler(signo) __set_stophandler(); /* save the new "default" terminal state */ - (void)tcgetattr(STDIN_FILENO, &__orig_termios); + (void)tcgetattr(__tty_fileno, &__orig_termios); /* Reset the terminal state to the mode just before we stopped. */ - (void)tcsetattr(STDIN_FILENO, __tcaction ? + (void)tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, &save); /* Restart the screen. */ diff --git a/lib/libcurses/tty.c b/lib/libcurses/tty.c index d0345bfba993..3f9eabdb3a98 100644 --- a/lib/libcurses/tty.c +++ b/lib/libcurses/tty.c @@ -36,10 +36,12 @@ static char sccsid[] = "@(#)tty.c 8.2 (Berkeley) 1/2/94"; #endif /* not lint */ #include <sys/ioctl.h> +#include <sys/file.h> #include <curses.h> #include <termios.h> #include <unistd.h> +#include <paths.h> /* * In general, curses should leave tty hardware settings alone (speed, parity, @@ -54,6 +56,7 @@ int __tcaction = 1; /* Ignore hardware settings. */ int __tcaction = 0; #endif +int __tty_fileno; struct termios __orig_termios, __baset; static struct termios cbreakt, rawt, *curt; static int useraw; @@ -75,8 +78,12 @@ gettmode() { useraw = 0; - if (tcgetattr(STDIN_FILENO, &__orig_termios)) - return (ERR); + if (tcgetattr(__tty_fileno = STDIN_FILENO, &__orig_termios)) { + if ((__tty_fileno = open(_PATH_TTY, O_RDONLY, 0)) < 0) + return (ERR); + else if (tcgetattr(__tty_fileno, &__orig_termios)) + return (ERR); + } __baset = __orig_termios; __baset.c_oflag &= ~OXTABS; @@ -116,7 +123,7 @@ gettmode() } curt = &__baset; - return (tcsetattr(STDIN_FILENO, __tcaction ? + return (tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, curt) ? ERR : OK); } @@ -125,7 +132,7 @@ raw() { useraw = __pfast = __rawmode = 1; curt = &rawt; - return (tcsetattr(STDIN_FILENO, __tcaction ? + return (tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, curt)); } @@ -134,7 +141,7 @@ noraw() { useraw = __pfast = __rawmode = 0; curt = &__baset; - return (tcsetattr(STDIN_FILENO, __tcaction ? + return (tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, curt)); } @@ -144,7 +151,7 @@ cbreak() __rawmode = 1; curt = useraw ? &rawt : &cbreakt; - return (tcsetattr(STDIN_FILENO, __tcaction ? + return (tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, curt)); } @@ -154,7 +161,7 @@ nocbreak() __rawmode = 0; curt = useraw ? &rawt : &__baset; - return (tcsetattr(STDIN_FILENO, __tcaction ? + return (tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, curt)); } @@ -166,7 +173,7 @@ echo() __baset.c_lflag |= ECHO; __echoit = 1; - return (tcsetattr(STDIN_FILENO, __tcaction ? + return (tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, curt)); } @@ -178,7 +185,7 @@ noecho() __baset.c_lflag &= ~ECHO; __echoit = 0; - return (tcsetattr(STDIN_FILENO, __tcaction ? + return (tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, curt)); } @@ -193,7 +200,7 @@ nl() __baset.c_oflag |= ONLCR; __pfast = __rawmode; - return (tcsetattr(STDIN_FILENO, __tcaction ? + return (tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, curt)); } @@ -208,7 +215,7 @@ nonl() __baset.c_oflag &= ~ONLCR; __pfast = 1; - return (tcsetattr(STDIN_FILENO, __tcaction ? + return (tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, curt)); } @@ -216,9 +223,9 @@ void __set_scroll_region(top, bot) int top, bot; { - tputs(SC, 0, __cputchar); - tputs(tgoto(CS, bot, top), 0, __cputchar); - tputs(RC, 0, __cputchar); + tputs(SC, 1, __cputchar); + tputs(tgoto(CS, bot, top), 1, __cputchar); + tputs(RC, 1, __cputchar); } void @@ -253,7 +260,7 @@ endwin() (void)fflush(stdout); (void)setvbuf(stdout, NULL, _IOLBF, 0); - return (tcsetattr(STDIN_FILENO, __tcaction ? + return (tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, &__orig_termios)); } @@ -266,12 +273,12 @@ static struct termios savedtty; int savetty() { - return (tcgetattr(STDIN_FILENO, &savedtty)); + return (tcgetattr(__tty_fileno, &savedtty)); } int resetty() { - return (tcsetattr(STDIN_FILENO, __tcaction ? + return (tcsetattr(__tty_fileno, __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, &savedtty)); } |