(TXT) View source
       
       # 2025-06-21 - ITA-2 Telegraph Code
       
 (IMG) 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 on the Internet Archive, one of which is dated 1936.
       
 (HTM) How To Make "Typeys" (1936)
       
 (HTM) Art Typing
       
       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.  :-)
       
 (IMG) ITA-2 alphabet on 5-hole tape
       
       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.
       
 (TXT) 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.
       
 (TXT) 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   --------
       
 (DIR) Pohl Code
       
       For a sanity check, i found an photo of 5-hole tape for CSIRAC, the
       first digital computer in Australia.
       
 (IMG) 5-hole tape photo
       
 (TXT) 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:
       
 (HTM) Computerphile Paper Tape Video
       
 (HTM) DIY Paper Tape Puncher
       
       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.
       
 (IMG) Western Union telegraph code table
       
       The above table came from the following book.
       
 (HTM) Codes of the World
       
       See also:
       
 (TXT) 92 Code
       
 (TXT) Brevity Code
       
 (TXT) Morse Code Abbreviations
       
       tags: history,retrocomputing,technical
       
       # Tags
       
 (DIR) history
 (DIR) retrocomputing
 (DIR) technical