X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Flib_tputs.c;fp=ncurses%2Flib_tputs.c;h=d3fd46276e6ef7a443b240eefa71f82e6ec01f71;hp=e5b4a6bcaa14e4389df1d93e8de18866e7a49fd4;hb=refs%2Ftags%2Fv5.0;hpb=661078ddbde3ce0f3b06e95642fbb9b5fef7dca1 diff --git a/ncurses/lib_tputs.c b/ncurses/tinfo/lib_tputs.c similarity index 84% rename from ncurses/lib_tputs.c rename to ncurses/tinfo/lib_tputs.c index e5b4a6bc..d3fd4627 100644 --- a/ncurses/lib_tputs.c +++ b/ncurses/tinfo/lib_tputs.c @@ -43,11 +43,13 @@ #include #include #include /* padding_baud_rate, xon_xoff */ +#include /* ospeed */ #include -MODULE_ID("$Id: lib_tputs.c,v 1.30 1998/02/11 12:14:00 tom Exp $") +MODULE_ID("$Id: lib_tputs.c,v 1.41 1999/10/22 23:31:24 tom Exp $") -#define OUTPUT ((SP != 0) ? SP->_ofp : stdout) +char PC; /* used by termcap library */ +speed_t ospeed; /* used by termcap library */ int _nc_nulls_sent; /* used by 'tack' program */ @@ -57,28 +59,16 @@ int delay_output(int ms) { T((T_CALLED("delay_output(%d)"), ms)); - if (cur_term == 0 || cur_term->_baudrate <= 0) { - (void) fflush(OUTPUT); - _nc_timed_wait(0, ms, (int *)0); - } -#ifdef no_pad_char - else if (no_pad_char) + if (no_pad_char) napms(ms); -#endif /* no_pad_char */ else { register int nullcount; - char null = '\0'; - -#ifdef pad_char - if (pad_char) - null = pad_char[0]; -#endif /* pad_char */ - nullcount = ms * cur_term->_baudrate / 10000; + nullcount = (ms * _nc_baudrate(ospeed)) / 10000; for (_nc_nulls_sent += nullcount; nullcount > 0; nullcount--) - my_outch(null); + my_outch(PC); if (my_outch == _nc_outch) - (void) fflush(OUTPUT); + _nc_flush(); } returnCode(OK); @@ -90,7 +80,17 @@ int _nc_outch(int ch) _nc_outchars++; #endif /* TRACE */ - putc(ch, OUTPUT); + if (SP != 0 + && SP->_cleanup) { + char tmp = ch; + /* + * POSIX says write() is safe in a signal handler, but the + * buffered I/O is not. + */ + write(fileno(NC_OUTPUT), &tmp, 1); + } else { + putc(ch, NC_OUTPUT); + } return OK; } @@ -109,7 +109,7 @@ int trailpad; #endif /* BSD_TPUTS */ #ifdef TRACE -char addrbuf[17]; +char addrbuf[32]; if (_nc_tracing & TRACE_TPUTS) { @@ -117,15 +117,17 @@ char addrbuf[17]; (void) strcpy(addrbuf, "_nc_outch"); else (void) sprintf(addrbuf, "%p", outc); - if (_nc_tputs_trace) + if (_nc_tputs_trace) { TR(TRACE_MAXIMUM, ("tputs(%s = %s, %d, %s) called", _nc_tputs_trace, _nc_visbuf(string), affcnt, addrbuf)); - else + } + else { TR(TRACE_MAXIMUM, ("tputs(%s, %d, %s) called", _nc_visbuf(string), affcnt, addrbuf)); + } _nc_tputs_trace = (char *)NULL; } #endif /* TRACE */ - if (string == ABSENT_STRING || string == CANCELLED_STRING) + if (!VALID_STRING(string)) return ERR; if (cur_term == 0) { @@ -135,11 +137,11 @@ char addrbuf[17]; always_delay = (string == bell) || (string == flash_screen); normal_delay = !xon_xoff -#ifdef padding_baud_rate && padding_baud_rate - && (!cur_term || cur_term->_baudrate >= padding_baud_rate) +#ifdef NCURSES_NO_PADDING + && (SP == 0 || !(SP->_no_padding)) #endif - ; + && (_nc_baudrate(ospeed) >= padding_baud_rate); } #ifdef BSD_TPUTS @@ -148,24 +150,26 @@ char addrbuf[17]; * (like nethack) actually do the likes of tputs("50") to get delays. */ trailpad = 0; - while (isdigit(*string)) { - trailpad = trailpad * 10 + (*string - '0'); - string++; - } - trailpad *= 10; - if (*string == '.') { - string++; - if (isdigit(*string)) { - trailpad += (*string - '0'); + if (isdigit(*string)) { + while (isdigit(*string)) { + trailpad = trailpad * 10 + (*string - '0'); string++; } - while (isdigit(*string)) + trailpad *= 10; + if (*string == '.') { string++; - } + if (isdigit(*string)) { + trailpad += (*string - '0'); + string++; + } + while (isdigit(*string)) + string++; + } - if (*string == '*') { - trailpad *= affcnt; - string++; + if (*string == '*') { + trailpad *= affcnt; + string++; + } } #endif /* BSD_TPUTS */