Flexowriter and Electrologica X1

Click here 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,....,end) 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:

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; 
     string s; 
     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 
         begin NLCR; 
          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
     end matrix;