#include <curses.priv.h>
#include <ctype.h>
#include <term.h> /* padding_baud_rate, xon_xoff */
+#include <termcap.h> /* ospeed */
#include <tic.h>
-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 */
{
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);
_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;
}
#endif /* BSD_TPUTS */
#ifdef TRACE
-char addrbuf[17];
+char addrbuf[32];
if (_nc_tracing & TRACE_TPUTS)
{
(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) {
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
* (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 */