diff options
Diffstat (limited to 'sys/tty/ttywrite.x')
-rw-r--r-- | sys/tty/ttywrite.x | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/sys/tty/ttywrite.x b/sys/tty/ttywrite.x new file mode 100644 index 00000000..3a581523 --- /dev/null +++ b/sys/tty/ttywrite.x @@ -0,0 +1,60 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include <ctype.h> +include <chars.h> +include "tty.h" + +# TTYWRITE -- Put a counted control string to the output file. The control +# string consists of an optional prefix specifying the delay required, followed +# by the chars to be sent to the terminal. If the delay is given as a simple +# integer number (i.e., ":cl=50\E"), it specifies the delay in milliseconds. +# If the delay number is followed by an asterisk (i.e., ":cd=3.5*\E^C:") it +# specifies the delay in milliseconds per line affected by the operation. +# In the latter case, the AFFLNCNT argument is used to compute the total +# delay. Delays are generated by writing a sequence of pad characters +# (usually NUL); the number of pad chars sent to achieve a particular delay +# depends on the baud rate. + +procedure ttywrite (fd, tty, ctrlstr, nchars, afflncnt) + +int fd # output file +pointer tty # terminal descriptor +char ctrlstr[ARB] # control sequence to be output +int nchars # nchars in control string +int afflncnt # number of lines affected + +double dval +int ip, delay, junk, ch +int ctod(), and() +errchk putci + +begin + # Determine number of milliseconds of delay req'd, and position ip + # to start of control string. Do not use CTOD to test whether or not + # the string begins with a number, because it is not permissable to + # skip whitespace (blank and tab are legal output chars). + + ip = 1 + if (IS_DIGIT (ctrlstr[ip])) { + junk = ctod (ctrlstr, ip, dval) + if (ctrlstr[ip] == '*') { + delay = dval * afflncnt + 0.5 + ip = ip + 1 + } else + delay = dval + } else + delay = 0 + + # Output the control sequence, passing only the first seven bits of + # each character. This is where the \200 escapes get turned into NULs. + # Do not use MOD to do the masking because 200B is a negative integer + # if CHAR is implemented as 8 bits. + + for (; ip <= nchars; ip=ip+1) { + ch = ctrlstr[ip] + call putci (fd, and (ch, 177B)) + } + + # Add padding if needed to generate delay. + call ttydelay (fd, tty, delay) +end |