183 lines
7.3 KiB
Plaintext
183 lines
7.3 KiB
Plaintext
From: jones@pyrite.cs.uiowa.edu (Douglas W. Jones)
|
|
Newsgroups: alt.folklore.computers
|
|
Subject: Re: ASCII control codes
|
|
Date: 31 Aug 1995 19:37:58 GMT
|
|
|
|
From article <4239uk$ko1@metro.ucc.su.OZ.AU>,
|
|
by adrianw@cassius (Adrian Whichello):
|
|
|
|
> Some are obviously still used for their original purpose (CR, LF, the
|
|
> tabbing codes etc.) but what did ENQ, EM, SUB, FS, etc. do? Thanks,
|
|
|
|
- - - here's a reply I posted a year ago in June - - -
|
|
|
|
Subject: Re: original uses of ASCII control codes
|
|
Newsgroups: alt.folklore.computers
|
|
References: <1994Jun02.064649.131411@ua1ix.ua.edu>
|
|
|
|
To understand the original intent of the ASCII control codes, you have
|
|
to think of teletypes, using paper tape, configured in a multidrop
|
|
system with relay logic used to turn on or off individual teletypes in
|
|
the bunch, and you have to remember that the designers were pretty
|
|
smart and they anticipated future developments, but they also managed
|
|
to include provisions for things that never happened. Here are the
|
|
ASCII control characters, and a few others, with comments on how they
|
|
were supposed to be used and how this relates to current popular uses:
|
|
|
|
NAME HEX/CTL USE
|
|
|
|
NULL 00 ^@ always ignored -- leader and trailer on paper tape
|
|
systems was typically made of sequences of NULLs.
|
|
|
|
SOH 01 ^A start of heading -- imagine a heading containing, for
|
|
example, the address of the recipient. You could have
|
|
relay logic that scans for SOH, then enables the print
|
|
mechanism if the following character matches this
|
|
station's address. In early documentation, this was
|
|
called start of message.
|
|
|
|
STX 02 ^B start of text -- if the heading matched, start printing
|
|
with the following character. In early documentation,
|
|
this was called end of address.
|
|
|
|
ETX 03 ^C end of text -- now is a good time to stop printing.
|
|
Your message might continue after this with a checksum
|
|
or other administrative stuff. In early documentation,
|
|
this was called end of message. The common use of
|
|
control C as a kill character stems from this -- it
|
|
indicates the end of your text addressed to some
|
|
application.
|
|
|
|
EOT 04 ^D end of transmission -- relay logic could decode this
|
|
and, if there is a tape in the tape reader, it could
|
|
begin transmitting its own message.
|
|
|
|
ENQ 05 ^E enquire -- on receiving this, local relay logic would
|
|
generate a response. In early documentation, this was
|
|
called WRU or who are you. Teletypes had programmable
|
|
response sequences that were encoded on a music box
|
|
mechanism, and it was up to the customer to break
|
|
plastic fingers off the drum to code how it responded
|
|
to an ENQ.
|
|
|
|
ACK 06 ^F acknowledge -- one possible response to ENQ. In early
|
|
documentation, this was called RU or are you.
|
|
|
|
BEL 07 ^G bell -- ring the bell in the terminal. Teletypes had
|
|
real bells where most modern terminals have beepers of
|
|
some kind. A sequence of BEL characters sent to a
|
|
teletype sounded very much like a telephone ringing.
|
|
|
|
BS 08 ^H backspace.
|
|
|
|
HT 09 ^I horizontal tab.
|
|
|
|
LF 0A ^J linefeed.
|
|
|
|
VT 0B ^K vertical tab.
|
|
|
|
FF 0C ^L formfeed -- page eject.
|
|
|
|
CR 0D ^M carrage return -- on many mechanical devices, CR was
|
|
slow. The sequence CR LF was always sent in that order
|
|
so that the linefeed could be handled while the carriage
|
|
was returning; a well adjusted Teletype could just finish
|
|
the CR in this time (0.2 seconds), and a common sign that
|
|
it was time to call the service man was that the first
|
|
letter printed after a CR LF was printed "on the fly" on
|
|
the way back to the margin.
|
|
|
|
SO 0E ^N shift out -- if you've got a two-color ribbon, shift to
|
|
the alternate color, usually red. There are obvious
|
|
extensions of this to alternate character sets.
|
|
|
|
SI 0F ^O shift in -- undo whatever SO does. For mysterious reasons
|
|
that have no apparent connection to old or modern ASCII
|
|
standards, DEC liked to use control O as a break character
|
|
to suppress teletype output.
|
|
|
|
DLE 10 ^P data link escape -- an escape character is generally a
|
|
prefix for something else. DLE was expected to be used
|
|
as a prefix on characters in the user data stream that
|
|
might otherwise be interpreted as data link control
|
|
characters, for example, flow control characters. In
|
|
some early documentation, this was called DC0 or device
|
|
control zero.
|
|
|
|
DC1 11 ^Q device control 1 -- turn on the paper tape reader.
|
|
In early documentation, this was called XON.
|
|
|
|
DC2 12 ^R device control 2 -- turn on the paper tape punch.
|
|
|
|
DC3 13 ^S device control 3 -- turn off the paper tape reader.
|
|
In early documentation, this was called XOFF, The use
|
|
of XON/XOFF (DC1/DC3) for flow control stems from their
|
|
use to control the flow of data from the paper tape
|
|
reader attached to a Teletype.
|
|
|
|
DC4 14 ^T device control 4 -- turn off the paper tape punch.
|
|
|
|
NAK 15 ^U negative acknowledge -- another possible response to ENQ.
|
|
One flow control mechanism is to use ENQ to ask if the
|
|
receiver has buffer space, and require the receiver to
|
|
respond with either ACK (yes) or NAK (no). ENQ could
|
|
also be used to enquire about whether a retransmission
|
|
is required after sending a checksum. The popular use of
|
|
control U to delete the current input line is only vaguely
|
|
grounded in this definition.
|
|
|
|
SYN 16 ^V synchronous idle -- if you're using a synchronous
|
|
transmission protocol, and you have no data to send, you
|
|
send SYN characters to keep the clocks synchronized.
|
|
The receiver should ignore these, and the transmitter may
|
|
have to insert them into the data stream once in a while.
|
|
|
|
ETB 17 ^W end of transmission block -- used when a transmission must
|
|
be broken into many blocks for some reason, for example,
|
|
to place a checksum after each block. Early documentation
|
|
called this logical end of media.
|
|
|
|
CAN 18 ^X cancel -- take that back, what I just sent you is a
|
|
mistake, ignore it.
|
|
|
|
EM 19 ^Y end of medium -- there's nothing left on this reel of
|
|
(paper) tape.
|
|
|
|
SUB 1A ^Z substitute -- the next character is from an alternate
|
|
character set. SUB X might be equivalent to SO X SI,
|
|
or it might be an alternate mechanism for extending the
|
|
character set. The common use of control Z as an end
|
|
of file character has no obvious relation to the standard.
|
|
|
|
ESC 1B ^[ escape -- the next character is to be interpreted as
|
|
something other than text, for example, it might be an
|
|
extended control character of some kind.
|
|
|
|
FS 1C ^\ file separator -- useful if you have multiple logical
|
|
files in one transmission.
|
|
|
|
GS 1D ^] group separator -- useful if files are made of groups
|
|
of records.
|
|
|
|
RS 1E ^^ record separator -- COBOL anyone?
|
|
|
|
US 1F ^_ unit separator -- are records made of units?
|
|
|
|
ALT 7D } Some early teletypes had an ALT MODE key that generated
|
|
this code instead of ESC. This was interpreted as an
|
|
escape code, which was no problem when nobody had lower
|
|
case printers, but with the advent of full 96 character
|
|
ASCII, there were obvious compatability problems.
|
|
|
|
PRE 7E ~ A few terminals had a PREFIX key that generated this code
|
|
instead of ALT MODE, with all the same problems.
|
|
|
|
DEL 7F delete -- remember, paper tape uses a hole to record each
|
|
one and no hole to record each zero. DEL is all holes,
|
|
so it can be punched over any other character to rub it
|
|
out (on old teletypes, it was the RUB or RUB OUT key).
|
|
If you mispunch a character, just back up the tape and
|
|
overpunch it with a DEL. Software is expected to ignore
|
|
DEL the same way it ignores NULL.
|
|
|