]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/lib_tputs.c
ncurses 5.0
[ncurses.git] / ncurses / tinfo / lib_tputs.c
similarity index 84%
rename from ncurses/lib_tputs.c
rename to ncurses/tinfo/lib_tputs.c
index e5b4a6bcaa14e4389df1d93e8de18866e7a49fd4..d3fd46276e6ef7a443b240eefa71f82e6ec01f71 100644 (file)
 #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 */
 
@@ -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 */