| > (At this time, I don't know
> if link io AST's are held during SMG$READ_STRING or if it's just that
> screen io is delayed. I don't know how to tell, either.)
The screen I/O is being delayed. I can't give you a good reason
why, other than `that's just the way things be!' I suspect it has
to do with the way the TTDRIVER is coded; once the first input
character interrupt is received, all activity is blocked until the
read completes (i.e., TTDRIVER receives something it thinks is a
terminator, or the buffer is filled, or the timeout expires). I
think your best bet is to use SMG$READ_KEYSTROKE and assemble the
characters yourself. Sorry.
#ken :-)}
P.S.: As far as read-with-timeout goes, does the timeout get
restarted after each character read? So, if you're
reading 2 characters with a 10-second timeout, and you
wait 5 seconds before typing the first, do you now have
10 seconds in which to type the second? Or will it
wait forever? I suspect the former, but I'm too lazy
to investigate right now.. ;-)
|
| > I
> think your best bet is to use SMG$READ_KEYSTROKE and assemble the
> characters yourself. Sorry.
Wasn't your fault. Besides, I'll forgive you, because I suspected
as much, and the routine is already written. Works _slightly_ slower
than normal, but that's life. It was fun getting CTRL-E, CTRL-H,
etc. to work. Insightful, even.
Thanks much.
Kevin
|
| This is indeed a basic property of the terminal driver; it is fully discussed
in the I/O User's Guide section on the driver. Terminal I/O is not quite full
duplex: Writes will normally wait for any reads that have already "started"
to complete. The "breakthrough write" modifier exists exactly to allow you to
get around this behavior; unlike a normal write, a breakthrough write WILL break
through any currently-active READ. (Don't confuse breakthrough writes with
the $BRKTHRU call. This implements broadcasts by doing breakthrough writes
to multiple terminals; but you can do any I/O you like with the breakthrough
modifier. Just be sure you read the stuff in the I/O User's Guide carefully!)
(In particular, note that a breakthrough write that gets queued behind a non-
breakthrough write will wait for the first write to complete.)
-- Jerry
|