diff options
author | ache <ache@FreeBSD.org> | 1994-10-06 21:02:21 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1994-10-06 21:02:21 +0000 |
commit | 209ca98331dda5d6dc429fc32c57c01b54fb11d9 (patch) | |
tree | e4fac6d52919196c88c70f472517fae71c4ee3e8 /lib | |
parent | f26366acd425e87f137847a6764b1296dca76bf7 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | lib/libtermcap/tputs.c | 32 |
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); } |