summaryrefslogtreecommitdiffstats
path: root/lib/libtermcap
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1994-10-06 21:02:21 +0000
committerache <ache@FreeBSD.org>1994-10-06 21:02:21 +0000
commit209ca98331dda5d6dc429fc32c57c01b54fb11d9 (patch)
treee4fac6d52919196c88c70f472517fae71c4ee3e8 /lib/libtermcap
parentf26366acd425e87f137847a6764b1296dca76bf7 (diff)
downloadFreeBSD-src-209ca98331dda5d6dc429fc32c57c01b54fb11d9.zip
FreeBSD-src-209ca98331dda5d6dc429fc32c57c01b54fb11d9.tar.gz
Oops, back out ospeed fix, I forget that flushing can occurse _after_
usleep, too quick commit :-(
Diffstat (limited to 'lib/libtermcap')
-rw-r--r--lib/libtermcap/tputs.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/lib/libtermcap/tputs.c b/lib/libtermcap/tputs.c
index 3d6027f..857147d 100644
--- a/lib/libtermcap/tputs.c
+++ b/lib/libtermcap/tputs.c
@@ -37,10 +37,19 @@ static char sccsid[] = "@(#)tputs.c 8.1 (Berkeley) 6/4/93";
#include <sgtty.h>
#include <ctype.h>
-#include <unistd.h>
-short ospeed; /* not needed, only for compatibility */
-char PC; /* not needed, only for compatibility */
+/*
+ * The following array gives the number of tens of milliseconds per
+ * character for each speed as returned by gtty. Thus since 300
+ * baud returns a 7, there are 33.3 milliseconds per char at 300 baud.
+ */
+static
+short tmspc10[] = {
+ 0, 2000, 1333, 909, 743, 666, 500, 333, 166, 83, 55, 41, 20, 10, 5
+};
+
+short ospeed;
+char PC;
/*
* Put the character string cp out, with padding.
@@ -92,10 +101,23 @@ tputs(cp, affcnt, outc)
(*outc)(*cp++);
/*
- * If no delay needed, then don't try to delay.
+ * If no delay needed, or output speed is
+ * not comprehensible, then don't try to delay.
*/
if (i == 0)
return;
+ if (ospeed <= 0 || ospeed >= (sizeof tmspc10 / sizeof tmspc10[0]))
+ return;
- usleep((u_int) i * 100); /* already * 10 */
+ /*
+ * Round up by a half a character frame,
+ * and then do the delay.
+ * Too bad there are no user program accessible programmed delays.
+ * Transmitting pad characters slows many
+ * terminals down and also loads the system.
+ */
+ mspc10 = tmspc10[ospeed];
+ i += mspc10 / 2;
+ for (i /= mspc10; i > 0; i--)
+ (*outc)(PC);
}
OpenPOWER on IntegriCloud