On my home linux, I started to create an html version of the pdf at http://gtoal.com/history.dcs.ed.ac.uk/archive/staging-area/Bob_Eager/Miscellaneous/Atlas_Autocode_Mini_Manual.pdf to match the rekeyed versions of the main Atlas Autocode manual. While starting this, I realised that the earlier conversions of the Atlas documentation by Brian Foley such as https://history.dcs.ed.ac.uk/archive/docs/atlasautocode.html were becoming a little out of date due to changes in browser rendering and the relatively recent introduction of UTF encoding. So... I started a programming project to convert/standardize any text that would have been produced on a Flexowriter... the files are on my home linux in directory ~/src/compilers101/new-parser/OLD/prev-version/atlas-autocode:
gtoal@linux:~/src/compilers101/new-parser/OLD/prev-version/atlas-autocode$ ls -lat
total 22044
-rwxrwxr-x 1 gtoal gtoal    18604 Mar 17 13:45  update_imp9
drwxrwxr-x 3 gtoal gtoal     4096 Mar 17 13:45  .
-rwxrwxr-x 1 gtoal gtoal    14676 Mar 17 13:45  update_aa
-rw-rw-r-- 1 gtoal gtoal      315 Mar 17 13:45  Makefile
-rw-rw-r-- 1 gtoal gtoal      308 Mar 17 13:45  Makefile~
drwxrwxr-x 5 gtoal gtoal     4096 Mar 17 13:42  GTOALCOM
-rw-rw-r-- 1 gtoal gtoal    10810 Mar 17 11:47  flexowriter.c
-rw-rw-r-- 1 gtoal gtoal     9648 Mar 17 01:33  flexowriter.c~
-rw-rw-r-- 1 gtoal gtoal       11 Mar 13 14:19  remove-html.ecc
-rw-rw-r-- 1 gtoal gtoal     4864 Mar 12 21:17  flexowriter-charset.html
-rw-rw-r-- 1 gtoal gtoal      956 Mar 12 19:34  minimanual.html
-rwxrwxr-x 1 gtoal gtoal     7416 Mar 12 18:59  flexowriter
-rw-rw-r-- 1 gtoal gtoal    10200 Mar 12 18:44 'The KDF9 Character Codes.pdf'
-rw-rw-r-- 1 gtoal gtoal     4096 Mar 12 17:43  CWItest.flexo
-rw-rw-r-- 1 gtoal gtoal     5536 Mar 12 17:42  readflex_marst.p
-rw-rw-r-- 1 gtoal gtoal     5706 Mar 12 17:41  readflex_uni.p
-rwxrwxr-x 1 gtoal gtoal      297 Mar 12 16:25  genset.sh

[As an aside, there's a much older project at https://gtoal.com/html2tex/ where I was trying to convert the same HTML versions of Flexowriter characters into TeX format. It was a fairly crude conversion and not 100% complete. I think I abandoned that approach.]

Note the file 'flexowriter-charset.html' which contains notes about how to represent those Flexowriter characters and overstrikes in html.

flexowriter.c was the start of a C program to convert between modern representations and the original raw binary data used on the Atlas etc. However it soon became clear that there were *many* representations of Flexowriter data in different contexts and that some thought was going to be needed as to the goals and implementation details of this sub-project. This program was also intended to support a command-line option which would allow typists a shorthand way of entering flexowriter characters using a standard ASCII keyboard. This has not been written yet.

The original goal of simply rekeying the Atlas Autocode Mini-Manual is still underway but progressing slowly. (I did try contacting Brian Foley again to see if he was still interested in this kind of work but either my mail didn't get through (most likely explanation) or he wasn't interested and didn't reply (much less likely explanation) but in either case I didn't hear back from him so will be attempting the re-keying myself, slowly, over time.

I have marked up some notes on my Mini-Manual printout at home.

Graham

PS Since the three interesting files are on my home machine I'll insert the most recent copies here:

------------------------------------------------------- flexowriter-charset.html

    Native HTML ² for Flexowriter squared
Native HTML ½ for Flexowriter half
Native HTML α for Flexowriter alpha
Native HTML β for Flexowriter beta
Native HTML π for Flexowriter pi
Native HTML √ for Flexowriter square root
Native HTML ⏨ for number10 (Used in Algol60 for the exponentiation symbol in decimal constants.)
Overstruck ":" and "," (:) represents ; (semicolon) for code 10122: 2-character compound, 79 10
Overstruck "|" amd "=" (=) represents HTML ≠ for code 11164: 2-character compound, 87 28
Overstruck "/" and "=" (=) represents HTML ≠ for code 3599: 2-character compound, 28 15
Overstruck "_" and "<" (<) represents HTML ≤ for less than or equals, code 11034: 2-character compound, 86 26
Overstruck "_" and ">" (>) represents HTML ≥ for greater than or equals, code 11035: 2-character compound, 86 27
Overstruck "|" and "*" (*) represents HTML ↑ for exponentiation (^ in Imp), code 11150: 2-character compound, 87 14
Superscripts are represented using HTML's <sup>.
strikeouts
Using "/" as the strikeout character:
Overstruck "s" and "/" ("s"): 14735: 2-character compound, 115 15
Overstruck "n" and "/" ("n"): 14095: 2-character compound, 110 15
Overstruck ":" and "," and "/" (";"): 1296266: 3-character compound, 79 15 10
(and underlined)
Overstruck "s" and "/" and "_" ("s"): 1895183: 3-character compound, 115 86 15
Overstruck "n" and "/" and "_" ("n"):
Overstruck ":" and "," and "/" and "_" (";"):
Using "|" as the strikeout character:
Overstruck "s" and "|" ("s"): 14807: 2-character compound, 115 87
Overstruck "n" and "|" ("n"): 14167: 2-character compound, 110 87
Overstruck ":" and "," (";"): 1435530: 3-character compound, 87 79 10
(and underlined)
Overstruck "s" and "|" and "_" ("s"): 1895382: 3-character compound, 115 87 86
Overstruck "n" and "|" and "_" ("n"):
Overstruck ":" and "," and "|" and "_" (";")

Other chars that may come in useful: ÷ ∧ = ≡ ∨ ¬ ⊃ ×
------------------------------------------------------- flexowriter.c
// Flexowriter: convert ascii text using a simple convention into an HTML representation that looks like
// it had been printed on a flexowriter.  Option available to use better characters for display rather
// than an accurate emulation using overstrikes.

#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>

/*
<html>
  <head><style type="text/css">
      a:link, a:visited { text-decoration: none }
      div.page {
      border-bottom: 1px solid #888888;
      padding-left: 1ex;
      width: 80ex;
      line-height: 125%;
      }
      .vstrike{
      position: relative;
      }
      .vstrike::after{
      content: "|";
      line-height: 110%;
      position: absolute;
      width: 100%;
      height: 100%;
      left: 0;
      top:0%;
      text-align: center;
      }
      .nvstrike{
      position: relative;
      }
      .nvstrike::after{
      content: "|";
      line-height: 100%;
      position: absolute;
      width: 100%;
      height: 100%;
      left: 0;
      top:0%;
      text-align: center;
      }
      .slstrike{
      position: relative;
      }
      .slstrike::after{
      content: "/";
      line-height: 133%;
      position: absolute;
      width: 100%;
      height: 100%;
      left: 0;
      top:0%;
      text-align: center;
      }
      .nslstrike{
      position: relative;
      }
      .nslstrike::after{
      content: "/";
      line-height: 110%;
      position: absolute;
      width: 100%;
      height: 100%;
      left: 0;
      top:0%;
      text-align: center;
      }
      .ulstrike{
      position: relative;
      }
      .ulstrike::after{
      content: "_";
      line-height: 100%;
      position: absolute;
      width: 100%;
      height: 100%;
      left: 0;
      top:0%;
      text-align: center;
      }
      .commastrike{
      position: relative;
      }
      .commastrike::after{
      content: ",";
      line-height: 100%;
      position: absolute;
      width: 100%;
      height: 100%;
      left: 0;
      top:0%;
      text-align: center;
      }
  </style></head>
  <body>
    Native HTML &sup2; for Flexowriter squared<br />
    Native HTML &frac12; for Flexowriter half<br />
    Native HTML &alpha; for Flexowriter alpha<br />
    Native HTML &beta; for Flexowriter beta<br />
    Native HTML &pi; for Flexowriter pi<br />
    Native HTML &radic; for Flexowriter square root<br />
    Native HTML &#9192; for number<sub><small>10</small></sub> (Used in Algol60 for the exponentiation symbol in decimal constants.)<br />
    Overstruck ":" and "," (<span class="commastrike">:</span>) represents ; (semicolon) for code 10122: 2-character compound, 79 10<br />
    Overstruck "|" amd "=" (<span class="nvstrike">=</span>) represents HTML &ne; for code 11164: 2-character compound, 87 28<br />
    Overstruck "/" and "=" (<span class="nslstrike">=</span>) represents HTML &ne; for code 3599: 2-character compound, 28 15<br />
    Overstruck "_" and "&lt;" (<span class="ulstrike">&lt;</span>) represents HTML &le; for less than or equals, code 11034: 2-character compound, 86 26<br />
    Overstruck "_" and "&gt;" (<span class="ulstrike">&gt;</span>) represents HTML &ge; for greater than or equals, code 11035: 2-character compound, 86 27<br />
    Overstruck "|" and "*" (<span class="vstrike">*</span>) represents HTML &uarr; for exponentiation (^ in Imp), code 11150: 2-character compound, 87 14<br />
    Super<sup>scripts</sup> are represented using HTML's &lt;sup&gt;.<br />
    <s>strikeouts</s><br />
    Using "/" as the strikeout character:<br />
    Overstruck "s" and "/" ("<span class="slstrike">s</span>"):   14735: 2-character compound, 115 15<br />
    Overstruck "n" and "/" ("<span class="slstrike">n</span>"):   14095: 2-character compound, 110 15<br />
    Overstruck ":" and "," and "/" ("<span class="slstrike">;</span>"): 1296266: 3-character compound, 79 15 10<br />
    (and underlined)<br />
    Overstruck "s" and "/" and "_" ("<span class="slstrike"><span class="ulstrike">s</span></span>"): 1895183: 3-character compound, 115 86 15<br />
    Overstruck "n" and "/" and "_" ("<span class="slstrike"><span class="ulstrike">n</span></span>"):<br />
    Overstruck ":" and "," and "/" and "_" ("<span class="slstrike"><span class="ulstrike">;</span></span>"):<br />
    Using "|" as the strikeout character:<br />
    Overstruck "s" and "|" ("<span class="vstrike">s</span>"):   14807: 2-character compound, 115 87<br />
    Overstruck "n" and "|" ("<span class="vstrike">n</span>"):   14167: 2-character compound, 110 87<br />
    Overstruck ":" and "," ("<span class="vstrike">;</span>"): 1435530: 3-character compound, 87 79 10<br />
    (and underlined)<br />
    Overstruck "s" and "|" and "_" ("<span class="vstrike"><span class="ulstrike">s</span></span>"): 1895382: 3-character compound, 115 87 86<br />
    Overstruck "n" and "|" and "_" ("<span class="vstrike"><span class="ulstrike">n</span></span>"):<br />
    Overstruck ":" and "," and "|" and "_" ("<span class="vstrike"><span class="ulstrike">;</span></span>")<br />
    <br />
    Other chars that may come in useful:
&times;<br />
&divide;<br />
&and;<br />
&or;<br />
&not;<br />
&equals;<br />
&equiv; for equiv<br />
&ne; for noteq<br />
&le; for leq<br />
&ge; for geq<br />
&sup;<br />
&Sigma; for Sigma, printed in documentation as ">" overlaid on "[".<br />
&sup2; for squared<br />
&frac12; for half<br />
&alpha; for alpha<br />
&beta; for beta<br />
&pi; for pi<br />
&theta; for theta<br />
&plusmn; for plus/minus<br />
&oslash; for slashed o<br />
<br />
see also https://www.chilton-computing.org.uk/acl/pdfs/ccPaper.pdf for some other overstruck symbols used in the compiler-compiler.<br />
FOUND IT!!!! https://www.chilton-computing.org.uk/acl/literature/atlasmanuals/autocode/a005.htm
    <br />

  </body>
</html>


There's some suggestion that the 'goto' operator ("->") was not represented
by "-" and ">" but by something like "_>"

≥, ≤, ≠ all had special representations. Some more than one -
Imp used both "!=" and "¬=" with the ¬ character usually displaying as "\"
but I'm not sure if Atlas Autocode did as well.

    I have a strong recollection that during my student days at Edinburgh I would
    see "Not" represented in print as '¬', but that was probably from Diablo listings
    rather than Flexowriter ones.
    
Encoding on paper tape would be different from internal encoding in a compiler -
5-hole tapes had 4 shift codes, 6-hole tapes had 1. Presumably internal codes
were 7 bit and the compound characters above were stored as a single code (or
converted to a sequence such as 1/2 became ".5")

Pressing underline on the flexowriter did not move the carriage.

Conveniently, in all the KDF9 character codes, 6 zero bits represent a blank (space) character; and 6 one bits represent a
filler character, which legible output devices such as the line printer and Flexowriter completely suppress. 

Note that the canonical representation of multi-byte sequences had the bytes sorted numerically, high to low.

See flexowriter-charset.html for a lot of other useful codes.
(and http://www.gtoal.com/languages/algol60/a60tohtml/algolps9.e although not directly relevant)

I haven't yet looked at UTF encoding for any of these.

 */

char *f[128];

void init(void) {
  int c;
  for (c = 0; c <= 127; c++) {
    static char tmp[32];
    sprintf(tmp, "&lt;char %d&gt;", c);
    f[c] = strdup(tmp);
  }

  // Note that in some of the KDF9 Atlas Autocode sources "`" and "@" appear to be synonymous -
  // I believe these *both* represent &alpha; in the Atlas/Flexowriter character set, and I note
  // that @ is 65 and ` is 92 - they're 32 apart and both immediately precede 'A' and 'a'.  It's
  // possible the two encodings may have arisen from confusion over upper case and lower case &alpha;
  
  // FROM: https://www.chilton-computing.org.uk/acl/literature/atlasmanuals/autocode/a005.htm
  for (c = 33; c <= 58; c++) { f[c] = strdup("A"); f[c][0] = (c-33)+'A'; } 
  for (c = 97; c <= 122; c++) { f[c] = strdup("A"); f[c][0] = (c-97)+'a'; } 
  for (c = 16; c <= 25; c++) { f[c] = strdup("A"); f[c][0] = (c-16)+'0'; }
  // 0:9 ???
  f[4] = "\n";
  f[8] = "(";
  f[9] = ")";
  f[10] = ",";
  f[11] = "&pi;";
  f[12] = "?";
  f[13] = "&amp;";
  f[14] = "*";
  f[15] = "/";
  // 16:25 numeric
  f[26] = "&lt;";
  f[27] = "&gt;";
  f[28] = "=";
  f[29] = "+";
  f[30] = "-";
  f[31] = ".";
  f[32] = "'";
  // 33:58 ALPHA
  // 59-64 ?
  f[65] = " ";
  // 66-75 ?
  f[76] = "<stop>"; // no idea what this means
  // 77-78 ?
  f[79] = ":";
  // 80?
  f[81] = "[";
  f[82] = "]";
  // 83-85 ?
  f[86] = "_";
  f[87] = "|";
  // 88-89
  f[90] = "&alpha;";
  f[91] = "&beta;";
  f[92] = "&frac12;";
  // 93-96 ?
  // 97:122 alpha
  // 123-127 ?

  // Characters I'm sure exist but don't know where to place them:
  // "&sup2;" "(" ")"  <BS> <DEL> "<sub>10</sub>" <CR> <LF>

  // Characters that *might* exist (very unsure)
  // 1/3 1/4 3/4 % sigma
  
#ifdef NEVER
  // from kdf9emul.c. May not be helpful out of context.
  char nptchar[] = " |\n|\t||||||||||/0123456789_~;+-.|ABCDEFGHIJKLMNOPQRSTUVWXYZ||@||   ";   // case normal - ~ is subten
  char sptchar[] = " |\n|\t||||||||||:^[]<>=!%()_$;#*,|abcdefghijklmnopqrstuvwxyz||@||   ";   // case shift

      lpchar[i] = i - '0' + 020;    // decimal digits
      nptchar[i] = i - '0' + 0140;    // decimal digits as repeat counts
      lpchar[i] = i + 041 - 'A';        // uppercase letters
      lpchar['%'] = 06;
      lpchar['\''] = 07;                // 07 '
      lpchar[':'] = 010;
      lpchar['='] = 011;
      lpchar['('] = 012;
      lpchar[')'] = 013;
      nptchar['['] = '[';            // for switching between sets
      lpchar[']'] = ']';
      lpchar['*'] = 015;
      lpchar[','] = 016;
      lpchar['/'] = 017;
      lpchar['#'] = 033;      // subscript 10 - what is this in Hans's code
      lpchar['+'] = 035;
      lpchar['-'] = 036;
      lpchar['.'] = 037;
      lpchar['$'] = 014;        // 14 dd &pound;
      lpchar['#'] = 000;        // space
      lpchar[' '] = 65;         // space is ignored in the printer constant      
#endif
}

// Eventually would like to implement:
//   ASCII to Flexowriter
//   UTF8 to Flexowriter
//   Flexowriter to HTML
//   Flexowriter to ASCII
//   Flexowriter to UTF8

int main(int argc, char **argv) {
  if (argc == 1) {
    // convert input in flexowriter format into identical-looking HTML.
    exit(EXIT_SUCCESS);
  }
  if (argc != 2) exit(EXIT_FAILURE);
  int i = (int)atol(argv[1]);
  int c1 = (i >> 14)&127;
  int c2 = (i >> 7)&127;
  int c3 = i&127;
  init();
  if (c1) {
    fprintf(stdout, "%d: 3-character compound, %d %d %d - \"%s<bs>%s<bs>%s\"\n", i, c1, c2, c3, f[c1], f[c2], f[c3]);
  } else if (c2) {
    fprintf(stdout, "%d: 2-character compound, %d %d - \"%s<bs>%s\"\n", i, c2, c3, f[c2], f[c3]);
  } else {
    fprintf(stdout, "%d: simple character, %d - \"%s\"\n", i, c3, f[c3]);
  }
  exit(EXIT_SUCCESS);
  return EXIT_FAILURE;
}