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 ² for Flexowriter squared<br />
Native HTML ½ for Flexowriter half<br />
Native HTML α for Flexowriter alpha<br />
Native HTML β for Flexowriter beta<br />
Native HTML π for Flexowriter pi<br />
Native HTML √ for Flexowriter square root<br />
Native HTML ⏨ 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 ≠ for code 11164: 2-character compound, 87 28<br />
Overstruck "/" and "=" (<span class="nslstrike">=</span>) represents HTML ≠ for code 3599: 2-character compound, 28 15<br />
Overstruck "_" and "<" (<span class="ulstrike"><</span>) represents HTML ≤ for less than or equals, code 11034: 2-character compound, 86 26<br />
Overstruck "_" and ">" (<span class="ulstrike">></span>) represents HTML ≥ for greater than or equals, code 11035: 2-character compound, 86 27<br />
Overstruck "|" and "*" (<span class="vstrike">*</span>) represents HTML ↑ for exponentiation (^ in Imp), code 11150: 2-character compound, 87 14<br />
Super<sup>scripts</sup> are represented using HTML's <sup>.<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:
×<br />
÷<br />
∧<br />
∨<br />
¬<br />
=<br />
≡ for equiv<br />
≠ for noteq<br />
≤ for leq<br />
≥ for geq<br />
⊃<br />
Σ for Sigma, printed in documentation as ">" overlaid on "[".<br />
² for squared<br />
½ for half<br />
α for alpha<br />
β for beta<br />
π for pi<br />
θ for theta<br />
± for plus/minus<br />
ø 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, "<char %d>", 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 α 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 α
// 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] = "π";
f[12] = "?";
f[13] = "&";
f[14] = "*";
f[15] = "/";
// 16:25 numeric
f[26] = "<";
f[27] = ">";
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] = "α";
f[91] = "β";
f[92] = "½";
// 93-96 ?
// 97:122 alpha
// 123-127 ?
// Characters I'm sure exist but don't know where to place them:
// "²" "(" ")" <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 £
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;
}