Flexowriter and Electrologica X1
for a table taken from E.W. Dijkstra's 1962 course in Algol-60
programming. This table provides the coding conventions used in producing X1
7-channel input papertapes with the Flexowriter at the Mathematical
Centre, Amsterdam. Many of the tapes produced almost 40 years ago
are still in the MC (today CWI) archives.
Algol-60 programs were typed (and punched) in a specific
instance of an Algol representation style and used symbols which
are partly incompatible with the now standard ASCII character set.
Also the numerical equivalents of the characters were quite
different from ASCII.
Reserved Algol words (begin
) were underscored. As is illustrated by Pascal (which uses an comparable set of reserved words), underscoring could be omitted by simply preventing these words to be redefined by the user. (In many Algol and Pascal texts underscoring or boldface typing is used exclusively for educational purposes). But underscoring simplifies the task of the compiler's parser; in view of the sparse resources of the time this has probably been the reason for the underscoring requirement.
Underscoring was established using the property of the particular
Flexowriter model SFD that some keystrokes (underscore, vertical
stroke, case toggle) didn't result in carriage movement. Parity checking,
effectively reducing the number of useful bits per frame to 6,
could be realized without sacrificing the availability of both
uppercase and lowercase letters, due to the Flexowriter having a
special character for toggling between both cases.
These peculiarities make translation of Flexowriter code into
ASCII code less than straightforward. First a different
representation style has to be agreed upon. Notice that this representation is only meant for human consumption! In our
translation program we implemented the following choices:
- underscoring omitted altogether;
- logical equivalence, implication, conjunction, disjunction,
negation represented by #, ->, &, |, !, respectively;
- exponentiation, power-of-10, multiplication, integer division:
^, e, *, %;
- less or equal, greater or equal, not equal: <=, >=,
- string opening and closing quotes: ".
Here is a piece of X1 Algol-60 code printed in this style:
procedure matrix(A, lambda, n, p, s); integer n, p; array A, lambda;
begin integer i, j, a, b;
NLCR; PRINTTEXT(s); a:= 1; b:= (if n > 6 then 6 else n); NLCR;
AA: NLCR; NLCR; NLCR; NLCR; if p = 1 then
begin for j:= a step 1 until b do print(lambda[j]); NLCR end;
for i:= 1 step 1 until n do
for j:= a step 1 until b do print(A[i,j])
if b <> n then
begin a:= b + 1; b:= (if (b + 6) > n then n else b + 6); goto AA