2025-06-21 - ITA-2 Telegraph Code
=================================

Western Union Bicycle Messengers (1911) (Smithsonian)
<gopher://tilde.pink/I/~bencollver/log/
2025-06-21-ita-2-telegraph-code/bikes.jpg>

A friend sent me a link to a video of someone creating art on an
old-school mechanical typewriter.  Following up, i found typewriter
art books on the Internet Archive, one of which is dated 1936.

How To Make "Typeys" (1936)
<gopher://tilde.pink/1/~bencollver/ia/details/HowToMakeTypeys>

Art Typing
<gopher://tilde.pink/1/~bencollver/ia/search/%09subject:(artyping)>

I sent these links to another friend.  I called it an example of
ASCII art from 1936.  This friend informed me that ASCII didn't
exist in 1936.

Doing a little research, i found that what existed in 1932 was
ITA-2 telegraph code, which is encoded as 5-bit values that can be
punched on 5-hole paper tape.  A perfect rabbithole to go down on
this rainy day.  :-)

ITA-2 alphabet on 5-hole tape
<gopher://tilde.pink/I/~bencollver/log/
2025-06-21-ita-2-telegraph-code/ita-2.jpg>

I wrote a small AWK script to convert between ASCII and ITA-2.

The first limitation i noticed was that ITA-2 cannot represent every
ASCII character.  Like my keyboard, ITA-2 lacks lowercase letters.
I wrote a small extension to work around this: any ASCII character
that doesn't exist in ITA-2 would get encoded as a five character
escape sequence.

* FIGURES
* ALLSPACE_NOTINUSE
* Octal digit1
* Octal digit2
* Octal digit3

Why octal?  Just for the fun of it.

Below is ita2.awk which converts between ASCII and ITA-2.

ita2.awk
<gopher://tilde.pink/0/~bencollver/log/
2025-06-21-ita-2-telegraph-code/ita2.awk>

Next i wrote an even smaller script to convert between ITA-2 and
simulated paper tape.  Slackware's bsd-games package includes a `ppt`
command that simulates 8-hole tape.  Below is ppt5.awk, which
simulates 5-hole tape.

ppt5.awk
<gopher://tilde.pink/0/~bencollver/log/
2025-06-21-ita-2-telegraph-code/ppt5.awk>

To get a "tape" version of the natural musical tones:

   $ printf ABCDEFG | mawk -f ita2.awk | mawk -f ppt5.awk >tones.txt
   $ pr -n -t tones.txt
       1   ________
       2   |   .oo|
       3   |oo . o|
       4   | oo.o |
       5   | o . o|
       6   |   . o|
       7   | oo. o|
       8   |oo .o |
       9   --------

For the round trip:

   $ mawk -f ppt5.awk decode tones.txt | mawk -f ita2.awk decode
   ABCDEFG

In xterm i can see a cat emoji using the following command.

   $ printf "\360\237\220\261" >cat.txt
   $ cat cat.txt
   🐱

To get a "tape" encoding of that cat:

   $ mawk -f ita2.awk cat.txt | mawk -f ppt5.awk >tape.txt
   $ pr -2n -t tape.txt
       1   ________                       12   |oo .oo|
       2   |oo .oo|                       13   |   .  |
       3   |   .  |                       14   |o  .oo|
       4   |   . o|                       15   |o  .oo|
       5   |o o. o|                       16   |o o.o |
       6   |o o.o |                       17   |oo .oo|
       7   |oo .oo|                       18   |   .  |
       8   |   .  |                       19   |o  .oo|
       9   |o  .oo|                       20   |o o. o|
      10   |   . o|                       21   |o o.oo|
      11   |  o.oo|                       22   --------

To send that cat on a round trip:

   $ mawk -f ppt5.awk decode tape.txt | mawk -f ita2.awk decode
   🐱

To be silly, here's the paper tape with corresponding pohl code:

       1   ________                       12   |oo .oo|   oddy-pod
       2   |oo .oo|   oddy-pod            13   |   .  |       pohl
       3   |   .  |       pohl            14   |o  .oo|  ahtah-pod
       4   |   . o|       poot            15   |o  .oo|  ahtah-pod
       5   |o o. o|  ahtah-tot            16   |o o.o |  ahtah-dye
       6   |o o.o |  ahtah-dye            17   |oo .oo|   oddy-pod
       7   |oo .oo|   oddy-pod            18   |   .  |       pohl
       8   |   .  |       pohl            19   |o  .oo|  ahtah-pod
       9   |o  .oo|  ahtah-pod            20   |o o. o|  ahtah-tot
      10   |   . o|       poot            21   |o o.oo|  ahtah-tee
      11   |  o.oo|        tee            22   --------

Pohl Code
<gopher://tilde.pink/1/~bencollver/log/
2025-04-01-on-binary-digits-and-human-habits-by-frederik-pohl/>

For a sanity check, i found an photo of 5-hole tape for CSIRAC, the
first digital computer in Australia.

5-hole tape photo
<gopher://tilde.pink/I/~bencollver/log/
2025-06-21-ita-2-telegraph-code/5hole.jpg>

CSIRAC
<gopher://gopherpedia.com/0/CSIRAC>

I manually keyed in the first 10 characters visible in the photo.

   $ pr -n -t 5hole.txt
       1   ________
       2   |ooo. o|
       3   |ooo.o |
       4   |   .oo|
       5   |o o.oo|
       6   | o .  |
       7   |  o.  |
       8   | o .oo|
       9   |   .oo|
      10   |ooo.  |
      11   | o .  |
      12   --------

Now to decode the virtual paper tape.

   $ mawk -f ppt5.awk decode 5hole.txt |\
       mawk -f ita2.awk decode         |\
       hexdump -C
   00000000  58 56 41 51 0d 20 4a 41  4d 0d    |XVAQ. JAM.|
   0000000a

I guess this means it's working?  Apparently the lines of text end
with CR only and no LF.

See also:

Computerphile Paper Tape Video
<gopher://tilde.pink/1/~bencollver/ia/details/youtube-JafQYA7vV6s>

DIY Paper Tape Puncher
<https://unimplementedtrap.com/paper-tape-punch>

p.s.

To run these examples with mawk on DOS, you may need to set an
environment variable MAWKBINMODE=1

To run these examples with gawk, you may need to set an
environment variable LC_ALL=C

tags: history,retrocomputing,technical

Tags
====

history
<gopher://tilde.pink/1/~bencollver/log/tag/history/>
retrocomputing
<gopher://tilde.pink/1/~bencollver/log/tag/retrocomputing/>
technical
<gopher://tilde.pink/1/~bencollver/log/tag/technical/>