[comp.terminals] What's wrong with flow control?

gore@nucsrl.UUCP (Jacob Gore) (11/25/86)

In one of the installation documentation files for GNU Emacs, Richard Stallman
expresses his displeasure (to put it mildly) with the way DEC's terminals use
control-S and control-Q (XON/XOFF) for flow control.  He says its a
"brain-damaged" design.

Could somebody tell me why that is the case?  If that is the case?  What would
be a better synchronization method?  The only decent method I can think of
would use hardware handshaking...

Jacob Gore
Northwestern University, Computer Science Research Lab
{ihnp4,chinet}!nucsrl!gore

P.S.  Sorry for posting this to two groups (comp.terminals and comp.emacs),
but Notes can't cross-post yet.

henry@utzoo.UUCP (Henry Spencer) (11/30/86)

> In one of the installation documentation files for GNU Emacs, Richard Stallman
> expresses his displeasure (to put it mildly) with the way DEC's terminals use
> control-S and control-Q (XON/XOFF) for flow control.  He says its a
> "brain-damaged" design.
> 
> Could somebody tell me why that is the case?  If that is the case?

One can debate whether the brain damage is in the terminals, or in Emacs and
its authors.  ASCII defines characters below ' ', plus DEL, as *control*
characters, with various well-defined purposes.  Many of those purposes
are incompatible with treatment as if they were ordinary data characters,
to be transmitted unchanged by communications hardware.  Unfortunately, back
in the days when communications hardware was dumb and control characters
seldom got special treatment, the custom grew up of using such characters
as commands to software.  There are a lot of programs, e.g. screen editors
like Emacs, where it is *very* handy to have characters which are not valid
text and are interpreted as commands.  This depends on such characters being
transmitted unaltered.  Alas, as hardware got smarter, some of the control
characters started being used for their original purpose, to the great
displeasure of people (like Stallman) who had (mis)appropriated them for
other uses and found it difficult to give them up.

Use of XON/XOFF is nearly universal in the industry now, by the way.  DEC
catalyzed this development but was not fundamentally responsible for it;
the original protocol was established by the venerable ASR33.

There is no truly fundamental incompatibility here, since there is no law
saying that holding down CTRL while hitting S must send an XOFF character;
it could just as easily send a multi-character escape sequence that would
avoid characters with special meaning to the hardware while still getting
the message through to the software.  Unfortunately, terminals generally
don't provide this as an option.

> What would
> be a better synchronization method?  The only decent method I can think of
> would use hardware handshaking...

Hardware handshaking is a bad idea because it doesn't transmit well over
networks or modems.  The real solution is a better terminal protocol,
perhaps packet-oriented.  XON/XOFF not only irritates Emacs users, it also
is not really a very good handshaking system -- it loses big when there are
long delays in the communications links.  What's needed is a "give me N more
characters" protocol rather than a "stop right away, I'm full" protocol.
To really work well, it would have to be standardized so that all terminals
spoke the same protocol.  Don't hold your breath waiting.
-- 
				Henry Spencer @ U of Toronto Zoology
				{allegra,ihnp4,decvax,pyramid}!utzoo!henry

csg@pyramid.UUCP (Carl S. Gutekunst) (12/03/86)

In article <7362@utzoo.UUCP> henry@utzoo.UUCP (Henry Spencer) writes:
>  What's needed is a "give me N more
>characters" protocol rather than a "stop right away, I'm full" protocol.
>To really work well, it would have to be standardized so that all terminals
>spoke the same protocol.  Don't hold your breath waiting.

There was an alternative that never really caught on: ENQ/ACK handshake, where
it was the responsibility of the host to send an ENQ every 'n' characters, and
wait for the terminal to send an ACK. The oldest terminal I can remember using
this was the HP 2640 series (which ain't that old). A number of other vendor's
terminals and printers in the late 1970s also supported this handshake, but
lately I've only seen a few printers that do.

None of the standard UNIX tty drivers support ENQ/ACK; for that matter, I'm
not aware of any OS/computer vendors besides HP and Burroughs that do, and
Burroughs only does so to support HP2641 terminals on its online frontends.

Of course, I'll bet that Gnumacs is already doing something special with ENQ
<CTRL-E> and ACK <CTRL-F>....

<csg>

ron@brl-sem.ARPA (Ron Natalie <ron>) (12/05/86)

In article <1132@pyramid.UUCP>, csg@pyramid.UUCP (Carl S. Gutekunst) writes:
> There was an alternative that never really caught on: ENQ/ACK handshake, where
> it was the responsibility of the host to send an ENQ every 'n' characters, and
> wait for the terminal to send an ACK. 
> 
> Of course, I'll bet that Gnumacs is already doing something special with ENQ
> <CTRL-E> and ACK <CTRL-F>....
> 
Some terminals, TELETYPES probably starting this have ENQ labled as
"WRU" (who are you) because when sent this sequence they send their
"here is" or answerback sequence.  VT100's support this as well, the
message is set by doing "A" in the setup menu rather than snapping
nubs off a drum and you can press ctrl-break instead of here-is.

I always thought that setting the answer back to "HERE IS" was cute.

-Ron