2025-06-21 - ITA-2 Telegraph Code

Western Union Bicycle Messengers (1911) (Smithsonian)

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 [1] on the Internet Archive, one of which is dated 1936 [2].

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 [3]. A perfect rabbithole to go down on this rainy day. :-)

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.

Why octal? Just for the fun of it.

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

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 [5] is ppt5.awk, which simulates 5-hole tape.

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 [6]:

        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   --------

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

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.

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

p.p.s.

The predecessor to ITA-2 was Western Union telegraph code [11] [12].

Footnotes

[1] Art Typing (JS)
[2] How To Make "Typeys" (1936)
[3] ITA-2 alphabet on 5-hole tape [4] ita2.awk
[5] ppt5.awk
[6] Pohl Code
[7] 5-hole tape photo [8] CSIRAC (wikipedia)
[9] Computerphile Paper Tape Video
[10] DIY Paper Tape Puncher
[11] Western Union telegraph code table [12] Codes of the World
[13] 92 Code (wikipedia)
[14] Brevity Code (wikipedia)
[15] Morse Code Abbreviations (wikipedia)

Tags

history
nostalgia
retrocomputing
technical